SQL注入实战与反思——sqli-labsclass-7

admin 2026-01-09 23:42:06 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文记录sqli-labs第17关实战。作者发现用户名被过滤后,转变思路在密码重置的新密码字段利用单引号引发报错,确认存在UPDATE注入。通过手工构造updatexml语句及指定参数使用sqlmap成功获取数据。文章总结需打破思维定势,全面测试各参数,并灵活结合手工与自动化工具进行渗透测试。 综合评分: 80 文章分类: WEB安全,渗透测试,漏洞分析


cover_image

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='[输入]'

关键区别:

  1. UPDATE修改数据,不返回查询结果
  2. 只能通过错误信息获取数据
  3. 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》

评论:0   参与:  0