文章总结: 文档演示利用sqlmap通关sqli-labs第14至16关,涵盖双引号显错注入及单双引号盲注。作者结合Burp抓包,深入讲解sqlmap的level与risk参数应用。文章对比了布尔盲注与时间盲注的差异,为渗透测试提供了实用的工具配置与操作建议。 综合评分: 90 文章分类: 渗透测试,WEB安全,安全工具,实战经验,漏洞分析
sqlmap实战:sqli-labs三连斩14~16关
原创
武文学网安
武文学网安
2026年1月8日 03:33 西藏
大家好,我是武文。
今天让我们一起来完成 第 14 至 16 关的挑战。因为这三关与前面的GET注入关卡类似,而我在前面已经学习了sqlmap自动化注入,所以在后面我加快了测试速度。本文仍将延续之前的先手动判断是否存在注入点和闭合方式,再利用sqlmap来进行自动化注入的方法来学习和实操。这样既能验证自己的判断方式,又能加快学习进度和进一步熟练掌握sqlmap的使用。废话不多说,咱们往下走。
一、第一斩:第 14 关 — 显错注入,双引号闭合
为了快速测试出闭合方式,我这里直接在前端页面输入框内先做闭合测试,到后面需要进行抓包时,再利用BP抓包。在做前端登录测试的时候,有一个测试数据比较广泛,但前面的文章中忘记提到,那就是admin:admin。不少的类似开发会遗留这样的测试账号密码,所以我们在后续的测试过程中,也可以尝试用这对组合。
1.1 手动判断注入点
尝试不同的闭合符号,因为在前面的文章中已经测试过哪些注释符有效,所以这里在选择注释符时省略了注释符探测这一步。
'"" or 1=1 #
在测试到双引号时,出现报错信息。
可以明显判断出”可以引起错误,为了进一步验证,所以测试了 双引号+一个或为真的条件。成功登录,说明判断结果为真。得出结论,闭合方式为双引号闭合。
1.2 判断注入方式
1.2.1 判断查询位数
" order by 1 #" order by 2 #" order by 3 #
因为第一步测试的时候,我们就发现能够出现报错信息,这里我们可以猜测大概率会存在显错注入。通过用order by测试,可以看出会出现错误信息。测试到order by 3时报错,说明查询列数只有2列。
1.2.2 判断是否有回显位
利用前一步查询到的信息,进一步判断是否有回显位。
" union select 1,2#
通过测试,页面仅可以看出成功登录,没有明显的回显位,看来只能想其他办法了。
1.2.3 判断是否有错误显示
" and updatexml(1,concat(0x7e,database(),0x7e),1)#
通过测试,可以看出有明显的错误显示,并且成功利用这个错误显示,成功查询到了当前数据库为security。可以得出结论有基于错误的注入方式。
因是否成功登录页面有明显的两种状态,所以可以判断至少有盲注。
1.3 sqlmap自动化注入
利用burp suite抓取数据,将POST请求存为req.txt文件。
这里简述步骤:打开proxy代理插件选择burp代理→burp suite打开监听,即intercept on状态→在HTTP history栏中选择对应的POST url 鼠标右键,点击send to repeater。在Reapter中选择将Request的所有数据复制另存为txt文件格式即可。
利用sqlmap自动化注入。
python sqlmap.py -r "C:\Users\demon\Desktop\security\req.txt" --batch --level=5 --risk=3
这里需要讲解一下sqlmap这几个参数使用:
1. --level 参数
--level 参数控制 sqlmap 执行时的扫描深度。它的值范围是从 1 到 5,数字越大,测试的深度越深,sqlmap 会尝试更多的 注入方式 和 漏洞检测,但相应的执行时间也会增加。
--level=1:这是默认值,表示 sqlmap 会进行最基础的测试,只会测试最常见、最基本的注入方式。例如,它会尝试一些简单的注入点(比如使用单引号',双引号")。--level=2:稍微增加了一些测试,会检查一些常见的注入方式和一些较为隐蔽的漏洞。--level=3:更进一步,sqlmap 会进行更多的测试,尝试通过一些更复杂的注入技巧来检测潜在漏洞。--level=4:增加了更多高级的测试选项,会尝试使用更多的载荷,并检查更复杂的漏洞。--level=5:这是最高级别,sqlmap 会非常深入地测试,包括使用所有可能的 payloads 和技术,尽可能地去暴露每一个潜在的漏洞。
影响:
level=1会更快,但检测的漏洞较少。level=5会消耗更多时间,但可以找到更多复杂的漏洞。
在实际使用中,通常在对目标进行初步扫描时使用 level=3 或 level=5,以便更全面地检查潜在的 SQL 注入漏洞。
2. --risk 参数
--risk 参数控制 sqlmap 执行的 攻击风险,它决定了 sqlmap 会执行的攻击类型的风险等级。这个参数的值也是从 1 到 3,数字越大,sqlmap 会尝试更高风险的攻击方法。
--risk=1:这是最低风险级别,sqlmap 只会使用最基本的攻击方法进行扫描。这意味着它会尽量避免触发危险或明显的系统行为,适合对安全性要求较高的目标。--risk=2:中等风险级别,会尝试一些稍微危险的技术,比如使用时间盲注、基于错误信息的注入等。大多数情况下,使用此级别不会对目标系统造成较大的影响。--risk=3:这是最高风险级别,sqlmap 会尝试一些高风险的注入方法,比如使用更加激进的 盲注、错误注入、导出数据库数据 等。这个级别可能会导致更多的系统负载,甚至可能触发系统的防御措施或安全警告。
影响:
risk=1适合不希望给目标系统造成任何影响的测试。risk=3会使用更具攻击性的方式来测试系统的弱点。
通常,如果你在进行 渗透测试 或 漏洞验证,会将 risk 设置为 3 来确保发现潜在的所有漏洞,尤其是对于目标较为复杂或有较强防护的网站。
综合使用:
当你在使用命令时,--level 和 --risk 两个参数是互补的,决定了 sqlmap 的扫描深度和使用的攻击技术。
--batch
:表示自动接受默认选项,避免在测试过程中出现需要手动确认的提示。
根据sqlmap输出的文件路径,找到对应保存的文件,可以看到已经成功抓取数据信息。
至此,第14关完成。
二、第二斩:第 15 关 — 盲注,单引号闭合
2.1 还是手动判断注入点
'"')")' or 1=1 #" or 1=1 #
经过测试发现,只有在’ or 1=1#时会有页面变化,说明存在注入漏洞,且无错误显示。说明当前页面只存在前面所学习到的注入方式中的盲注。
2.2 sqlmap自动化注入。
利用burp suite抓取数据,将POST请求存为req.txt文件。
这里我尝试了用可以登录的admin用户名和密码来试试,看看有啥不一样。
python sqlmap.py -r "C:\Users\demon\Desktop\security\req.txt" --batch --level=5 --risk=3
通过sqlmap测试,可以得出和我们手动测试时一样的结论,即存在盲注(它这里是时间盲注)。
至此,第15关成功KO。利用自动化工具,这效率兼职翻了不知多少倍。
三、第三斩:第 16 关 — 盲注,双引号+括号闭合
3.1 手动判断注入点
还是先手动判断注入点,这一关仅闭合方式与15关不同,其他皆一样。
'"')")' or 1=1 #" or 1=1 #') or 1=1 #") or 1=1 #
经过测试,可以确定闭合方式为双引号+括号,且页面方式存在登录成功失败两种状态,可以判断存在盲注。
3.2 sqlmap自动化注入。
利用burp suite抓取数据,将POST请求存为req.txt文件。
然后打开CMD命令行,执行命令。
python sqlmap.py -r "C:\Users\demon\Desktop\security\req.txt" --batch --level=5 --risk=3
可以从运行结果看到注入方式和保存的结果。
至此,14~16关三连斩完成。
结语
其实在判断盲注的时候,因为界面存在两种明显不同状态可以区分是否登录成功,这一点其实可以肯定能够判断是存在布尔盲注的方式。但sqlmap只能识别出来时间盲注。在我的理解中,只有在页面都无法区分,只能通过sleep方法来看页面是否延迟,才能确定是否成功利用时间盲注。这一点是有点奇怪的,可能是sqlmap在判断返回页面的时候觉得页面变化非常小,从而有限选择了时间盲注。
如有什么疑问,意见或建议,欢迎评论区留言互动。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:武文学网安 武文学网安《sqlmap实战:sqli-labs三连斩14~16关》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论