文章总结: 本文记录sqli-labs第17关实战。作者发现用户名被过滤后,转变思路在密码重置的新密码字段利用单引号引发报错,确认存在UPDATE注入。通过手工构造updatexml语句及指定参数使用sqlmap成功获取数据。文章总结需打破思维定势,全面测试各参数,并灵活结合手工与自动化工具进行渗透测试。 综合评分: 80 文章分类: WEB安全,渗透测试,漏洞分析
SQL注入实战与反思——sqli-labs class -7
原创
武文学网安
武文学网安
2026年1月9日 01:25 西藏
大家好,我是武文。
在sqli-labs第17关,我遇到了前所未有的挑战。这一关看似简单的密码重置功能,却隐藏着UPDATE注入的巧妙设计。今天分享我的踩坑与突破过程。
一、初探失败:思维定式的代价
1.1 惯性思维的陷阱
面对新的登录框,我本能地在用户名(Username)字段尝试各种注入:
admin' # admin" # admin') #
结果令人沮丧——页面一直显示:BUG OFF YOU SILLY DUMB HACKER
1.2 错误的自动化依赖
在手工测试无果后,我转向了sqlmap,于是用burp suite抓包,sqlmap自动注入测试。
python sqlmap.py -r "C:\Users\demon\Desktop\security\req.txt" --batch --level=5 --risk=3
结果发现sqlmap尝试了他所有办法,也没能注入成功。
但sqlmap也未能识别出注入点。这时我意识到:不是工具不行,是我用错了方向。
二、思维转换:重新审视攻击面
2.1 关键发现
首先来观察页面信息:
这是一个关于密码重置修改的网页,PASSWORD RESET。经过多次的测试,发现页面主要存在两种状态,根据前面几个关卡所掌握的用户信息进行测试。表明如果用户正确存在,则可显示修改成功。(这里我用了admin用户名,Newpassword可以随便输)
若不存在则会有红字提醒。
这里简单总结,在User Name测试闭合方式行不通(因为代码审计发现,后端对uname输入参数进行了处理,包括转义和限制字符串长度等)。于是突破口则来到了New Password。
经过测试发现,在新密码里结尾输入单引号会引起报错,突破口就在这里。
2.2 UPDATE注入的特殊性
与之前遇到的SELECT注入不同,第17关是UPDATE语句注入:
-- 猜想中的SQL结构UPDATE users SET password='[输入]' WHERE username='[输入]'
关键区别:
- UPDATE修改数据,不返回查询结果
- 只能通过错误信息获取数据
- WHERE条件在前,SET赋值在后
三、系统化手工测试
3.1 第一步:确认闭合方式
前面已经测试出利用单引号成功显错。进一步验证判断方式,在new password中输入
suer Name: adminNew Password: admin' #
未报错,说明单引号闭合成功。
3.2 验证报错注入
' and updatexml(1,concat(0x7e,database(),0x7e),1) #
能够通过XPATH显示出database的信息,说明存在显错注入,当前数据库为security。
3.3 理解错误根源
后来了解到,代码对两个参数的处理不同。对uname参数进行了校验,确保uname是不可注入的。
可以在这里查看这关的详细代码信息:https://github.com/Audi-1/sqli-labs/blob/master/Less-17/index.php
四、sqlmap再次验证
进一步用sqlmap验证,因为之前通过命令笼统方式并没有验证成功,所以这次我们用-p指定参数passwd试试。
python sqlmap.py -r "C:\Users\demon\Desktop\security\req.txt" --batch -p passwd --level=5 --risk=3
这一次指明需要测试的参数后就能够正常抛出sql注入点了。一个是基于错误,一个是时间盲注。
后面获取数据的完整命令,需要的道友可以自行尝试一些
# 提取数据库信息python sqlmap.py -r "req.txt" -p passwd --dbs
# 提取表数据 python sqlmap.py -r "req.txt" -p passwd -D security --dump
五、学习收获
5.1 思维上要打破思维定式
- 不要假设所有输入框都可注入
- 不同参数可能有不同处理
- UPDATE注入≠SELECT注入
5.2 技术上:
- 全面测试:每个参数单独测试
- 对比分析:观察不同参数的响应差异
- 错误分析:从错误信息推断后端逻辑
- 工具辅助:手工验证后用工具确认
5.3 实践上:
- sqlmap需要正确配置才能发挥作用
- 手工验证是自动化测试的基础
- 每个漏洞都有其特定的利用方式
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:武文学网安 武文学网安《SQL注入实战与反思——sqli-labs class -7》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论