当前位置:首页 > 探索

超级sql注入工具怎么用

sqlmap打开之后第一件事不是超级急着敲命令,而是入工先搞清楚目标。很多人上来就 `sqlmap -u "http://xxx.com?具用id=1"`,跑半天没结果,超级回头一看参数根本不对。入工我见过最离谱的具用案例,一个哥们对着登录接口的超级POST请求用GET方式扫了三个小时,最后骂工具垃圾。入工工具没问题,具用是超级人的问题。

先确认注入点。入工手工测一下,具用单引号丢进去看报不报错,超级`and 1=1` 和 `and 1=2` 页面有没有差异。入工这一步花不了五分钟,具用但能省掉后面大量无效扫描。确认存在注入之后,把完整的请求包保存下来。Chrome按F12,网络面板里右键那个请求,copy as curl,粘贴到文本文件里,这就是你的“弹药”。

sqlmap最核心的用法就一条命令:

sqlmap -r request.txt --batch --level=3 --risk=2

-r 读取请求文件,--batch 让所有交互自动选默认值,--level 和 --risk 控制探测深度。level默认1,只测GET和POST参数;调到3会测Cookie、User-Agent、Referer这些头;调到5连Host头都不放过。risk默认1,调到2会加入基于时间的盲注和部分重查询,调到3可能造成数据损坏——生产环境别碰3。

跑出结果后,sqlmap会告诉你注入类型。布尔盲注、时间盲注、报错注入、联合查询,每种后续利用方式不一样。报错注入和联合查询最省事,直接能回显数据。盲注就慢,得靠sqlmap慢慢猜。我一般看到时间盲注就先去泡杯茶,急也没用。

拿到注入点之后,下一步是摸数据库。常用命令:

--dbs 列出所有数据库 --current-db 当前数据库 --tables -D dbname 列出指定库的表 --columns -T tablename -D dbname 列出字段 --dump -C "user,pass" -T users -D webapp 导出指定字段数据

这几个命令组合起来,从库到表到字段到数据,一条线拉通。实际渗透中,--dump 之前先加 --count 看看数据量,别一上来就导几十万条,浪费时间还容易被发现。

遇到WAF拦截怎么办?sqlmap自带 tamper 脚本,在 /usr/share/sqlmap/tamper/ 目录下。常用组合:

--tamper=space2comment,randomcase,charencode

space2comment把空格替换成注释,randomcase随机大小写,charencode做URL编码。这三个叠一起能绕过不少规则宽松的WAF。但遇到云WAF比如某里云、某讯云,光靠tamper基本没戏,得配合代理池或者换IP。我自己的经验是,tamper脚本别贪多,叠三四个就够了,叠太多请求体畸形反而触发拦截。

还有个实用技巧:--os-shell 和 --sql-shell。前者尝试拿系统命令执行权限,后者直接进SQL交互界面。前提是数据库权限够高,MySQL的root且secure_file_priv没限制才行。大部分情况下没这么理想,但值得一试。我有次遇到一个站,数据库用户是sa,直接 --os-shell 弹了个cmd,那感觉比中彩票还爽。

速度控制别忽略。--delay=1 每个请求间隔一秒,--threads=4 开四个线程。默认线程是1,速度慢但隐蔽。赶时间就开线程,怕被发现就加延迟。两者别同时用,逻辑上矛盾——你一边想快一边想慢,工具也懵。

最后说个坑:sqlmap的 --batch 模式在遇到需要输入的地方会自动选默认值,但有些默认值不是你要的。比如问你是否继续测试其他参数,默认是no,可能就漏了。所以关键目标别偷懒,手动确认每一步。工具再智能也是死的,人才是活的。

分享到: