|
sqlmap是注入Kali里最暴力的注入工具,没有之一。教程别跟我提什么手工注入的注入优雅,当你面对一个带参数的教程URL,时间紧迫,注入手头还有一堆其他测试项要做的教程时候,直接上sqlmap就是注入最实在的选择。今天不废话,教程直接从你打开终端那一刻开始。注入 先确认你的教程靶机环境。假设你拿到了一个URL,注入比如http://192.168.1.10/dvwa/vulnerabilities/sqli/?教程id=1&Submit=Submit。DVWA这种靶场最合适练手,注入别一上来就对生产库瞎搞,教程那是注入给自己找麻烦。在Kali里打开终端,输入最基本的探测命令:sqlmap -u "http://192.168.1.10/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=你的会话ID; security=low"。为什么要带cookie?因为DVWA默认要登录,不带会话直接跑,sqlmap会给你返回一堆401错误,你还得回头查参数,浪费时间。 跑起来之后,你会看到一堆输出。别慌,看关键信息。sqlmap会先测试各种闭合方式,单引号、双引号、括号,它自己会试。如果输出里出现Parameter 'id' is vulnerable,恭喜,注入点确认了。这时候别急着撒欢,先加个--batch参数让它全自动回答yes/no,省得你坐在那儿当人肉确认机。但记住,--batch只适合靶场,真实环境里有些选项你得自己拿主意,比如是否要测试其他参数,是否要使用特定的注入技术。 确认注入点后,下一步就是脱库。用--dbs列出所有数据库名。这一步输出很快,但别只盯着数据库名看,注意它用的注入技术。我见过太多人跑完--dbs就直接上--dump-all,那玩意儿能把数据库拖到你怀疑人生。现实是,你只需要目标库。比如输出里有个dvwa数据库,那就sqlmap -u "..." --cookie="..." -D dvwa --tables列出表。这里你会发现sqlmap的聪明之处,它会自动识别表类型,但有时候也会误判,比如把users表当成普通表,其实里面存的是账号密码。 拿表名后,直接-T users --columns看列结构。DVWA的users表就那么几列,user、password、avatar什么的。但真实环境里,你可能会看到一堆乱七八糟的列名,这时候就得靠你的经验判断哪些值得拖。别傻乎乎地把整个表几百万行数据全dump下来,第一网络流量扛不住,第二目标服务器日志会留下巨大痕迹。我一般先--count看看行数,再决定是否--dump。如果只是要证明漏洞危害,拖个前几行就够写报告了。 拖数据的时候,sqlmap默认会问你是否要破解密码哈希。DVWA的密码是MD5,直接让它破解也行,但真实环境里遇到bcrypt或者加盐的哈希,sqlmap自带的字典基本没用。这时候你得自己用hashcat离线跑,别指望sqlmap一条龙服务。还有,--dump时如果数据量大,加个--threads 5能快不少,但线程数别拉太高,目标服务器可能直接崩掉,那就不叫渗透测试叫破坏测试了。 最后说点不常被提到的。sqlmap的--os-shell功能,理论上能直接拿系统shell,但前提是目标数据库权限够高,而且得有写文件的路径。DVWA这种低权限环境跑不出来,但如果你遇到一个DBA权限的MySQL,并且知道网站的绝对路径,那--os-shell就是你的提权神器。不过用这功能之前,先掂量掂量后果,拿到shell之后你就要负全责了。测试完记得清理痕迹,sqlmap的日志文件默认存在~/.local/share/sqlmap/,该删就删。 整个流程走下来,你会发现sqlmap就是个自动化狙击枪,但扣扳机的手是你的。参数组合千变万化,-p指定参数,--level和--risk控制探测深度,--tamper绕过WAF。多玩几次靶场,把这些参数混着用,比看十篇教程都管用。Kali里工具多的是,但sqlmap是你最该先摸透的那个。 |