游客发表

sqlmap扫描网站

发帖时间:2026-10-17 04:48:52

sqlmap跑完第一轮扫描,扫描屏幕上跳出“back-end DBMS: MySQL >= 5.0”那行字的网站时候,我就知道这站有戏。扫描那是网站三年前一个地方门户网站,后台登录页的扫描参数过滤做得稀烂,id=1后面加个单引号直接报数据库错误。网站sqlmap -u "http://xxx.com/news.php?扫描id=1" --dbs,不到两分钟,网站库名全列出来了。扫描

很多人把sqlmap当黑盒工具,网站点一下按钮等结果。扫描这玩意儿真正的网站价值在参数组合。默认配置跑一遍,扫描WAF稍微像样点就拦了。网站你得学会跟它对话——--random-agent换UA,扫描--delay调请求间隔,--tamper=space2comment把空格替换成注释符绕规则。有次碰到个ModSecurity,默认规则集,我加了--tamper=between,randomcase,space2hash三个脚本串起来才过去。这不是工具的问题,是你得知道它在干什么。

注入点识别只是第一步。--current-db拿到当前库,--tables列出表,--columns看字段,--dump拖数据。这套流程走下来,一个配置不当的MySQL站点,从发现到拖出管理员密码,十分钟足够。我见过最离谱的是一个教育类网站,admin表里密码明文存储,sqlmap --dump直接导出,连--passwords解码都省了。

但别以为sqlmap万能。盲注场景下它跑得极慢,--threads开太高反而触发限流。布尔盲注我一般控制在5个线程以内,时间盲注更保守,3个。--time-sec默认5秒,遇到网络抖动大的目标,得调到8甚至10,否则误判率飙升。有回扫一个香港服务器,延迟常年200ms往上,sqlmap默认配置跑了半小时没结果,我把--time-sec调到12,--threads降到2,又跑了四十分钟才确认注入点存在。

POST注入和Cookie注入是另一个坑。很多人只会-u加URL,碰到表单提交就懵了。--data="username=admin&password=123"指定POST体,--cookie="PHPSESSID=xxx"带上会话。记得加--level=3以上,否则Cookie里的注入点它不测。--risk也是,默认1只测最安全的payload,调到3才会尝试OR 1=1这种可能改数据的语句。生产环境别乱调risk,我吃过亏——一个UPDATE语句被触发,整张表的status字段全变成1了。

文件读写和命令执行是sqlmap的杀手锏,前提是数据库权限够。--file-read="/etc/passwd"读文件,--file-write加--file-dest写webshell。MySQL的secure_file_priv不为空的时候写不进去,这时候得换--os-shell走UDF提权。UDF那套东西现在越来越难用,MySQL 8.0之后默认插件目录权限收紧,sys_eval这个函数基本废了。但老站点还是能打,去年一个PHP 5.6的站,--os-shell直接弹回来一个www-data的shell。

跑sqlmap别裸奔。--proxy="http://127.0.0.1:8080"挂Burp,--tor走洋葱路由,--check-tor验证出口IP。目标有CDN的话,--random-agent配合--delay能降低被封的概率。但说到底,sqlmap是个自动化工具,它替代不了手工测试。有些注入点需要构造特殊payload,sqlmap的tamper脚本库覆盖不全,这时候就得自己写脚本或者手工注入。工具是死的,思路是活的。

最后说一句:别拿sqlmap扫你没授权的站。刑法285条在那摆着,非法侵入计算机信息系统罪不是闹着玩的。自己搭靶场练,DVWA、sqli-labs、Pikachu,够你玩到吐。技术这东西,用在正道上叫本事,用在歪路上叫证据。

    热门排行

    友情链接