PortSwigger SQL注入LAB10
LAB10祝贺做了那么久LAB终于破个位数了而来到LAB10我们就要开始我们SQL盲注的学习了那么我们现在开始吧:【本篇目标】1. 理解并掌握SQL盲注的技能2. 通过SQL盲注来获取所需administrator的密码并完成登录一、理解cookie在此处的作用我们先来看LAB10的题目他说应用使用了cookie进行了跟踪分析跟之前不同的是SQL的查询结果不会返回也不会显示错误信息了这倒是更加贴近实际了但是如果返回了任何行的话页面会显示Welcome back的消息。最终的目标还是老样子从users表中获取administrator用户的密码并成功登录那我们先来看看这个cookie在这里是怎么起作用的吧让我们注意Request中的这段语句:Cookie: TrackingIdjGWk2ssV921g19Md; sessionrAqozxAugWrDopcMDvMvwQitXjCUcd38这就是题目中所说的TrackingId那如果我们现在更改他会发生什么呢:我们可以发现右上角原先 Home 和 My account 之间的 Welcome back 消失了这就是题目中所说的我们可以通过是否回显 Welcome back 来判断是否有查询结果回显。二、布尔盲注2.1 理解语法既然知道服务器会通过对TrackingId进行查询来决定是否返回Welcome back那么TrackingId就是我们要进行盲注的目标了思考一下既然服务器会通过判断TrackingId是否合法来决定是否回显值这何尝不是一种布尔判断呢既然如此我们可以对其进行布尔盲注我们先通过一段简单的语句来了解他: AND ( a FROM users username administrator) a --这段语句是什么意思呢首先第一个 AND 把服务器验证 TrackingId 和后面我们自己编写的语句进行了布尔连接也就是说只有在 TrackingId 合法且我们编写的语句成立的情况下服务器才会返回 Welcome back。接下来我们看括号内的内容括号内的意思是去users表中寻找username为administrator的数据如果找到了就返回a这个字符再往下面就不需要过多的解释了目的就是为了判断括号内中的语句是否成立如果成立的话整段语句成立服务器便会返回Welcome back反之如果括号内的语句不成立便不会返回Welcome back我们可以看到服务器返回了Welcome back字符证明了我们的想法2.2 构建密码长度获取语句既然我们知道了盲注的基础语法那么接下来我们尝试获取密码的长度: AND (SELECT a FROM users WHERE username administrator AND LENGTH(password) 1) a --这里我们用AND再次并列了一个条件这个条件通过调用LENGTH()函数来判断administrator密码的长度是否大于1这里我们可以看到服务器成功回显了 Welcome back 提示说明 administrator 密码的长度大于 1那么我们可以不断递增1的值来获得密码确切的位数。注意在某些数据库或字符集下LENGTH()按字节计数。三、使用Intruder3.1 爆破获取密码长度但是如果我们全部手动来完成这些工作的话单单获取密码位数就会消耗我们大量的时间和精力所以这时候我们就需要用到Burp suite的Intruder我们通过右键--Send to Intruder来将当前会话发送至Intruder然后把我们原先的1设置为Payload:接下来我们需要设置Payload的变化情况我们打开Payload子页由于我们此处的Payload全程都是一个数字那么我们在Payload Type中把它设置为Numbers然后在下面的Payload settings将他的范围设置为1-30:点击Start attack开始攻击 我们获得了如下结果:通过判断Length值的突变我们轻松找到了本次攻击的临界点————在Payload值为20的时候服务器不再返回Welcome back字段说明administrator密码的长度为20。3.2 构建密码获取语句既然我们已经知道如何获取密码的长度那么只需调整语句即可逐位爆破出密码。 AND (SELECT SUBSTRING(password, 1, 1) FROM users WHERE username administrator) a --这段语句通过调用SUBSTRING()函数取出 administrator 密码的第一个字符与后面的 a 比较若相等服务器会回显 Welcome back 提示。将他编辑好之后 我们先设置a为Payload进行尝试在 Payload 中将类型设置为Brute forcer暴力破解并在 Payload settings 的 Character set 添加小写字母 a-z 与数字 0-9。由于我们逐字符爆破把 Min length 和 Max length 都设置为 1。为了我们更快速的找到结果我们可以在settings中找到Grep-Match来添加字段Welcome back这样在攻击结果页面中我们可以直接通过是否返回Welcome back字段来快速筛选按下开始攻击并等待攻击完成:我们可以看到当 Payload 为 1 的时候服务器回显了 Welcome back 提示证明 administrator 密码的第一位为 1。3.3 爆破获取密码既然已经学会如何获取第一位密码字符的方法了那么我们稍微更改一下之前语句中的Payload就可以获得每一位密码字符了然后再把他们拼接起来就可以获得完整的密码但是在sniper模式下我们只能自动更改一个 Payload 的值所以