|
上周帮朋友做一次授权渗透测试,注入目标是教程一个刚上线的测试环境。拿到URL后,注入我第一件事就是教程打开Kali,敲下 sqlmap -u "http://test.example.com/product.php?注入id=1" --batch。三秒后,教程终端弹出一行绿字:Parameter 'id' is 注入vulnerable. Type: boolean-based blind。这玩意儿又中了。教程说实话,注入sqlmap用顺手之后,教程你很难再回去手写union注入的注入payload,效率差距摆在那。教程 但很多人卡在第一步——连sqlmap怎么跑起来都不清楚。注入Kali里其实已经预装了,教程终端直接输 sqlmap -h 就能看到参数列表。注入如果你用的是别的发行版,apt install sqlmap 或去GitHub拉源码都行。我习惯用pip装最新版,因为Kali源里的版本有时候偏旧,对新出的WAF绕过规则支持不够及时。 先讲最基础的GET注入。假设你手头有个链接 http://target.com/news.php?cat=5,命令就是: sqlmap -u "http://target.com/news.php?cat=5" --dbs --dbs 的意思是枚举所有数据库。跑起来后sqlmap会先判断注入类型,再问你要不要继续测试其他参数——加个 --batch 让它自动选默认答案,省得一直按回车。等它列出数据库名,比如 information_schema、app_db,下一步就是看表: sqlmap -u "http://target.com/news.php?cat=5" -D app_db --tables 这里 -D 指定数据库。表名出来之后,拿用户表举例: sqlmap -u "http://target.com/news.php?cat=5" -D app_db -T users --columns 列名有了,直接dump数据: sqlmap -u "http://target.com/news.php?cat=5" -D app_db -T users -C username,password --dump 如果密码是哈希,sqlmap会问你要不要跑字典破解。我一般选否,拿回去用hashcat慢慢跑,sqlmap自带的字典效果一般。 POST注入稍微绕一点。你得先用Burp Suite抓包,把整个请求保存成文本文件,比如 post.txt,然后: sqlmap -r post.txt --dbs -r 直接读文件,sqlmap会自动解析里面的参数、Cookie、User-Agent。这招对付带CSRF token的登录框特别好使,因为token在请求体里已经固定了。 有个细节很多人忽略:--level 和 --risk。默认level是1,只测GET和POST参数。调到3会测Cookie和User-Agent,调到5连Referer都测。risk默认1,调到3会加入一些可能造成数据损坏的payload,比如基于时间的盲注。我一般在授权测试里直接上 --level=3 --risk=2,平衡覆盖面和安全性。 遇到WAF怎么办?--tamper 参数是救星。比如目标有ModSecurity,试试 --tamper=space2comment,把空格替换成 /**/。我常用的是 --tamper=between,randomcase,space2comment,组合拳效果比单个好。但别指望tamper能绕过所有WAF,有些商业WAF得靠 --delay 降速,或者干脆换代理IP池。 速度控制也很关键。默认sqlmap跑得飞快,容易触发目标站的频率限制。加 --delay=1 让每个请求间隔一秒,或者 --threads=3 限制并发。我有次没加延迟,直接把测试环境跑出502,运维打电话过来问是不是在压测。 最后说个实际案例。上个月一个PHP站点,参数是Base64编码的 id=MQ==。直接跑sqlmap没反应,因为payload被编码了。解决办法是加 --tamper=base64encode,让sqlmap注入前先编码payload。跑通之后发现是MySQL 5.7,--technique=U 强制用union注入,三分钟拿到管理员密码哈希。 sqlmap不是万能钥匙。它适合快速验证和利用,但真正复杂的注入点——比如二次注入、堆叠注入带存储过程——还是得手工调。工具替你省掉80%的重复劳动,剩下20%的硬骨头,该啃还得啃。 |