|
sqlmap这东西,用好了是利器,用不好就是给自己挖坑。我见过太多人把它当一键脱库工具使,结果连原理都没搞明白。今天不聊那些花里胡哨的进阶技巧,就说最实在的——sqlmap到底怎么用。 先装环境。Python 2.7或者3.x都行,从GitHub拉最新源码,或者直接pip install sqlmap。装完在终端敲sqlmap --version,能出版本号就算成了。别嫌这步啰嗦,我见过有人装错了包,折腾一整天最后发现连命令都输错。 最基础的用法,一条命令搞定:sqlmap -u "http://example.com/page?id=1"。它会自动检测URL参数里的注入点。注意那个引号,URL里有&符号的话必须加引号,不然shell会把参数截断。这坑我踩过,当时盯着报错看了十分钟才反应过来。 检测到注入后,sqlmap会问一堆问题——要不要测其他参数,要不要用字典爆破,Cookie带不带。新手别瞎选,直接默认就行。它会先跑一遍布尔盲注,再试报错注入,最后才是时间盲注。如果目标站响应慢,时间盲注能拖死你,一个请求要等五秒,测几百个参数得等半小时。这时候按Ctrl+C跳过,或者用--level 1 --risk 1降低检测深度。 拿到注入点就该掏数据了。核心命令就这几个:--banner看数据库版本,--dbs列库名,-D 库名 --tables列表,-D 库名 -T 表名 --columns列字段,最后-D 库名 -T 表名 -C 字段 --dump导出数据。一条条跑,别想着一步到位。有次我图省事直接--dump-all,结果目标库有几百张表,跑了俩小时,还触发了WAF封了IP。得不偿失。 遇到登录后才能访问的页面,得带上Cookie。用浏览器开发者工具复制Cookie值,加个--cookie="session=xxxxxx"参数。还有POST表单的,用--data="username=admin&password=123"指定提交数据。有时候参数是JSON格式,就加--data='{ "name":"test"}',再配合--headers="Content-Type: application/json"。别嫌麻烦,这些细节决定你能不能测到点子上。 再说说反爬。目标站有WAF的话,直接跑大概率会被拦。试试--random-agent换User-Agent,--delay=2加请求间隔,--proxy="http://127.0.0.1:8080"挂Burp抓包看请求是否正常。如果还是被拦,考虑--tamper=space2comment这类混淆脚本,把空格替换成注释符。但记住,这些只是绕,不是破。真正硬核的还是手工测,sqlmap只是辅助。 最后说点实在的。sqlmap跑出来的数据,别直接往数据库里灌,先看看字段格式。密码哈希是MD5还是bcrypt,账号有没有锁定策略,都得人工判断。还有,测完记得清理——删掉sqlmap在目标服务器上可能留下的临时文件,虽然它一般不留痕,但小心驶得万年船。 工具终归是工具,别被它牵着走。我见过有人拿sqlmap把自家公司站点测崩了,因为没加--safe-url跳过安全页面。也见过有人用它查到了库,却不会分析数据关联,最后白忙活。会用工具是本事,知道什么时候不用它更是本事。 |