PortSwigger SQL注入LAB11

发布时间:2026/6/29 20:20:36
PortSwigger SQL注入LAB11 理解cookie在此处的作用我们先来看 LAB11 的题目他说应用使用了cookie进行了跟踪分析不同于 LAB10SQL 的查询结果不仅不会返回也不会显示错误信息而且页面也不会显示 Welcome back 的消息了。也就是说相较于 LAB10我们现在是“全盲”状态。还有一点在题目中的提示中写出了本次 LAB 中的数据库类型为 Oracle。最终的目标还是老样子从users表中获取administrator用户的密码并成功登录既然如此那我们就要尝试主动引起报错。现在来试一下如果把 cookie 查询的语句破坏掉会发生什么我们在 TrackingId 值的后面加一个来将其破坏。我们可以看到返回了服务器内部错误这说明服务器的内部错误提示没有被屏蔽那么我们就可以通过故意构造语法错误来进行盲注。二、获取密码长度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 --这样如果密码长度大于 1CASE 就会跳入我们故意写的错误分支中服务器则会返回内部错误若密码长度不大于 1CASE 会跳入后面的输出 a 中与后面的 a 进行比较之后服务器就会返回正常响应。注意在某些数据库或字符集下LENGTH()按字节计数。如果目标数据可能包含多字节字符建议结合题目环境确认是否需要使用CHAR_LENGTH()或同类函数。这里我们可以看到服务器成功回显了 Internal Server Error说明 administrator 密码的长度大于 1那么我们可以不断递增1的值来获得密码确切的位数。2.3 使用Intruder进行爆破接下来我们按照LAB10的方法设置数字1为Payload经将其的范围设置在1-30区间中然后Start Attack开始攻击结束之后我们通过判断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 --这里我们还是像 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 开始攻击并分析结果3.3 拼接密码现在我们就已经得知密码每一位的值了这里我使用记事本把它们拼接起来至此我们得出了最终的密码46lx0pii9dxqeo26ralx。四、登陆验证结果那么现在我们就去网页中使用我们获得的密码来进行登录登录成功LAB11 解决。五、总结与防御建议总结本题的核心是基于 Oracle 的条件错误盲注通过构造会触发报错的分支把“是否出现内部错误”作为布尔信号来判断条件是否成立。相比 LAB10这一题不再依赖页面回显 “Welcome back”而是通过服务器错误响应来逐位推导 administrator 的密