当前位置: 首页 > news >正文

PortSwigger SQL注入LAB11

PortSwigger SQL注入LAB11

欢迎来到PortSwigger SQL注入的LAB11,这道LAB在某些地方跟LAB10是非常相似的,那么我们现在开始吧:

【本篇目标】
1. 理解并掌握带条件错误的SQL盲注的技能
2. 通过SQL盲注来获取所需administrator的密码,并完成登录

一、理解cookie在此处的作用

LAB11描述

我们先来看 LAB11 的题目,他说应用使用了 cookie 进行了跟踪分析,不同于 LAB10,SQL 的查询结果不仅不会返回,也不会显示错误信息,而且页面也不会显示 "Welcome back" 的消息了。

也就是说相较于 LAB10,我们现在是“全盲”状态。还有一点在题目中的提示中写出了,本次 LAB 中的数据库类型为 Oracle。

最终的目标还是老样子,从users表中获取administrator用户的密码并成功登录

既然如此,那我们就要尝试主动引起报错。现在来试一下:如果把 cookie 查询的语句破坏掉会发生什么,我们在 TrackingId 值的后面加一个 ' 来将其破坏。

Burp Suite 抓取结果1

我们可以看到返回了服务器内部错误,这说明服务器的内部错误提示没有被屏蔽,那么我们就可以通过故意构造语法错误来进行盲注。

二、获取密码长度

2.1 理解并构造条件错误

既然知道服务器并没有屏蔽语法错误导致的服务器内部错误,那么我们就开始构建条件语句吧:

' AND (SELECT CASE WHEN 1 = 2 THEN TO_CHAR(1/0) ELSE 'a' END FROM DUAL) = 'a' -- 

这段语句是什么意思呢?首先第一个 AND 把服务器验证 TrackingId 和后面我们自己编写的语句进行了布尔连接。

接下来我们看括号内的内容,括号内的意思是去 DUAL 表中判断 1 是否等于 2,如果等于的话,则执行 TO_CHAR(1/0) 语句;如果 1 不等于 2,则会输出一个 a。END 结束 CASE 之后与 a 进行对比,若 a 等于 a,则会产生一个 true 的布尔值。

至于 TO_CHAR(1/0),就是调用了 TO_CHAR 函数来把 1 除以 0 的结果转化为 CHAR 数据类型。由于 1 除以 0 是非法计算,所以此处是一个故意制造的错误。

2.2 构建密码长度获取语句

既然我们了解了如何构造条件错误,那么接下来我们尝试获取密码的长度:

' AND (SELECT CASE WHEN LENGTH(password) > 1 THEN TO_CHAR(1/0) ELSE 'a' END FROM users WHERE username = 'administrator') = 'a' -- 

这样,如果密码长度大于 1,CASE 就会跳入我们故意写的错误分支中,服务器则会返回内部错误;若密码长度不大于 1,CASE 会跳入后面的输出 a 中,与后面的 a 进行比较之后,服务器就会返回正常响应。

Burp Suite 抓取结果2

注意:
在某些数据库或字符集下,LENGTH() 按字节计数。如果目标数据可能包含多字节字符,建议结合题目环境确认是否需要使用 CHAR_LENGTH() 或同类函数。

这里我们可以看到服务器成功回显了 "Internal Server Error",说明 administrator 密码的长度大于 1,那么我们可以不断递增 1 的值来获得密码确切的位数。

2.3 使用Intruder进行爆破

接下来我们按照LAB10的方法设置数字1为Payload,经将其的范围设置在1-30区间中,然后Start Attack开始攻击

Burp Suite 抓取结果3

结束之后,我们通过判断Length的突变,可以找到本次攻击的临界点,在Payload值为20的时候,服务器不再出现内部错误,说明administrator的密码长度20。

三、获取密码

3.1 构建密码获取语句

还是像 LAB10 一样,我们把刚刚的语句稍微改一下就可以利用它对密码进行爆破了:

' AND (SELECT CASE WHEN SUBSTR(password, 1, 1) = 'a' THEN TO_CHAR(1/0) ELSE 'a' END FROM users WHERE username = 'administrator') = 'a' -- 

Burp Suite 抓取结果4

这里我们还是像 LAB10 一样,使用了 Oracle 的 SUBSTR 函数来获取 password 中的第一个字符并与 'a' 进行对比;若相等,则会跳入我们故意写的错误分支中,服务器则会返回内部错误;若不相等,CASE 会跳入后面的输出 a 中,与后面的 a 进行比较之后,服务器就会返回正常响应。

注意:

正如我开头所说的,这次 LAB 的数据库为 Oracle,所以获取第一个字符的函数为 SUBSTR(*,*,*),而不是 SUBSTRING(*,*,*)

3.2 使用Intruder进行爆破

我们将刚刚构建好的语句发送至 Intruder,然后把 Attack Type 切换为 Cluster bomb(集束炸弹),并将代表第一个字符的 "1" 设置为第一个 Payload,把用于比较的 "a" 设置为第二个 Payload。

接下来把第一个 Payload 的类型设置为 Numbers,并把范围设为 1-20;再把第二个 Payload 的类型设置为 Simple list,并从 Add from list 中添加小写 a-z、大写 A-Z 以及数字 0-9 到列表中(Burp Suite 社区版不支持 Add from list 功能)。

点击 Start attack 开始攻击并分析结果:

Burp Suite抓取结果5

3.3 拼接密码

现在我们就已经得知密码每一位的值了,这里我使用记事本把它们拼接起来:

拼接密码

至此,我们得出了最终的密码 46lx0pii9dxqeo26ralx

四、登陆验证结果

那么现在我们就去网页中使用我们获得的密码来进行登录:

LAB解决

登录成功,LAB11 解决。

五、总结与防御建议


总结:

  • 本题的核心是基于 Oracle 的条件错误盲注:通过构造会触发报错的分支,把“是否出现内部错误”作为布尔信号来判断条件是否成立。
  • 相比 LAB10,这一题不再依赖页面回显 “Welcome back”,而是通过服务器错误响应来逐位推导 administrator 的密码长度与内容。

防御建议:

  • 使用参数化查询或预编译语句,禁止把 cookie、表单或 URL 参数直接拼接进 SQL。
  • 对输入做白名单校验和长度限制,尽量缩小可注入的字符范围。
  • 数据库账号遵循最小权限原则,应用只保留必要的查询权限。
  • 不要把详细数据库错误直接返回给前端,改为通用错误提示,并在服务端保留审计日志。
  • 对密码使用强哈希并加盐存储,避免明文或可逆加密。
  • 对异常请求、重复探测和爆破行为设置限速、告警和封禁策略。
  • Cookie 和会话应使用安全属性,并避免将未校验的 cookie 值直接用于后端查询。
  • 配合 WAF、日志监控和安全告警,及时发现异常注入探测行为。

博客园技术分享 · 请勿用于非法测试

http://www.rkmt.cn/news/1462343.html

相关文章:

  • DC-DC转换器在线测量电池交流内阻:下采样与FIR滤波算法实践
  • 终极B站视频下载指南:BilibiliDown让你轻松保存任何B站视频
  • 腾讯云原厂采购 VS 官方代理合作,企业选型参考指南
  • 杭州婚恋服务机构盘点:合规服务与匹配能力对比 - 互联网科技品牌测评
  • 自适应双频段能量采集电路设计:提升水下物联网设备续航能力
  • 3大核心技术突破:如何在NVIDIA显卡上实现AMD FSR 3帧生成技术
  • LD3320语音识别模块开发包:含DXP原理图、STC51例程、串口调试工具与实操录像
  • 10分钟搞定UltraStar Deluxe:跨平台卡拉OK游戏快速上手指南
  • 江苏切削液厂家实力盘点:五家头部供应商客观对比 - 奔跑123
  • 探索开源放射治疗计划系统matRad:从算法研究到临床教学的全新视角
  • 爱玛电动车实拍图集:853张高清原图+Pascal VOC格式XML标注,专为YOLOv5训练优化
  • 不计得失的人生智慧与心性修养
  • 从钉钉到飞书,AI请假集成全链路拆解,HRBP私藏的7步上线 checklist
  • NAS能跑大模型吗?GLM-5与Phi-3的现实边界
  • 绩效数据孤岛正在杀死AI投资回报率!——打通OKR、LMS、CRM与AI分析平台的4层API治理架构
  • 收藏!211本科985硕面试淘天AI开发二面经验分享,助你多拿3个offer!
  • Pixelorama:3步成为像素艺术大师的免费开源工具指南
  • AI工具接入融资流程的“死亡交叉点”:第37天必现的数据孤岛危机与5步熔断机制(附银行级审计日志模板)
  • LLVM IR指令实战避坑指南:那些容易混淆的`nuw/nsw`、`exact`标志与`poison value`详解
  • Material Combiner Add-on深度解析:Blender材质纹理优化架构揭秘
  • 别再猜了!图解以太网电口 vs 光口的自协商到底有啥不同(以千兆光口/C码/I码为例)
  • 【HarmonyOS实战】 资源文件那些事:颜色、字符串、图片怎么管理?
  • 基于二阶滑模算法的航天器相对位姿耦合控制策略【附仿真】
  • 工业视觉检测系统的边缘算力基石:IBOX-601应用解析
  • SourceGit:让Git版本控制变得直观简单的跨平台图形客户端
  • 018、正负样本分配总览:从 MaxIoU 到 SimOTA 到 TAL 的演进之路
  • 极域电子教室限制解除指南:用JiYuTrainer重新掌控学习主动权
  • 如何用AI图像分层工具3分钟实现专业插画图层分离
  • The 4th Universal Cup. Extra Stage 6: Shaanxi
  • 终极指南:快速免费批量导出语雀文档到本地Markdown