本篇为小屋第一篇靶场日记,面向小白,步骤较为详细,Dalao们自行食用,也欢迎纠错
靶场简介
1
由题可得,这是一道经典的盲注题,大体思路也在Lab的Solution中有所提及,不过咱还是抱着打靶子的乐趣再写一遍试试
方法
试探
所谓漏洞,就是要进行尝试才能知道它是否真的存在。进入到如下页面后,随便点进一个“Pets”的标签页,就能看到我们今天的一号受害男主,也就是右上角的“Welcome Back!”
我们先对该页面进行一次拦截,并使用' and 1=1 --+
语句来构造一次**一定成立的合法请求**,试看看他的Cookies能不能被我们利用
在原标签页面,我们可以清楚的看到我们的一号男主并没有消失,于是我们对其便继续进行试探,将请求变为不合法请求,再次进行尝试
很显然,我们的猜测是正确的,这里存在着一个可供我们进行注入的SQL漏洞,我们便可以开始对其进行’造娃’式的语句构造,来达到获取服务器密码数据的目的
猜测
既然已经知道存在SQL漏洞,也就是服务器可以执行我们所构造语句的漏洞,那我们就可以利用select
命令对其进行查询,具体查询语句如下
' AND (SELECT 'a' FROM users LIMIT 1)='a'--+
这里我先对上述语句进行一下解释。Select
是用来对后面From
所指向的内容,也就是users进行查询。查询什么呢?就是查询我们在users表中是否存在这样一个字符a,如果成立,那么就会相当于users这个表在数据库中是存在,将会返回一个字符a那么就会和外面所构造的等式成立,所以就构成了一条合法的请求。而这里的关键也就在于where
后的值是否成立。其中,Limit
起到了限定字段的作用,也就是限制在第一个字段进行查询。
这里我并没有利用服务器自带的后面那个分号,而是将其使用--+
注释掉并手动在a后添加了一个,这样比较美观,当然也是个人习惯,可以根据你的习惯来决定使用哪种方法
对上条构造完的请求进行释放后,可以在页面看到我们的一号男主角并没有消失。那么根据我们在试探阶段的经验就可以很容易推断出一条对接下来密码爆破十分重要的信息,在构造出的语句合法的情况下,一号男主角不会消失,反之就会
接下来,我们继续构造,对数据库中的其他信息进行更详细的查询。我们使用以下命令对users表中的内容进行判断
' AND (SELECT 'a' FROM users WHERE username='administrator')='a'--+
这句的作用可以类比到上面那句,作用就是更加地确定这个users表中存在一个叫做administrator的用户名
接着我们继续对这个表中的另一个字段password进行试探,当然,在题目中已经告诉我们这个字段的名字就是password,而在实战中则不一定是这个名字,所以这就需要我们对大众对数据库命名的习惯进行收集和分析,当然这都是后话。我们可以构造以下语句对密码的长度进行勘探
' AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a'--+
在讲这句话进行释放后,我们可以在页面中看到我们的一号男主角并没有消失,利用length()
函数对字段长度进行猜测的方法,可以一步步缩小我们的猜测范围,可以测试出我们的密码长度为20,猜测工作也基本到此为止,接下来便是对密码的直接爆破了。
爆破
我们可以使用substring()
这个函数来挨个判断密码的每一位分别是什么,具体用法如下
' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a'--+
显然我们可以通过这种方式手动挨个地将密码的每一位给试出来。但显然如果没有比章鱼哥的手还多的键盘,估计试一早上都试不出来。不过好在Burpsuite内置了帮助我们进行爆破的自动化模块Intruder,我们只需要将数据包发送到这个模块就能对特定参数就行爆破
具体的配置界面如下,记得要将攻击模式改成Cluster bomb,才能对下面请求中的多个参数进行爆破
接下来进到上方的payload界面,对参数添加变量。这里我们可以将第一个参数的攻击类型改为Numbers,因为第一个变量的值范围是在1-20,所以我们可以将范围改为1到20,每次尝试的步长step设置为1
.png “13”)
第二个参数的攻击类型设置为simple list,点击下方**Add from list…**可以添加相应字符。因为题目中告诉我们密码由字母和数字组成,所以我们可以只添加a-z
和0-9
这两项
由于我们对密码的判断取决于是否存在Welcome Back!
这个字符串的回显,所以我们还需要在Options下的Grep-Match中添加一个Welcome Back,感叹号可加可不加。在添加之前记得点击一下clear对无用字符进行清除。
最后我们就可以点开始攻击进行爆破了。在爆破页面,我们需要将我们添加的Welcome Back这个标签状态进行回显,如果没有添加的可以从下方位置开启
爆破完成后,点击一下Welcome Back标签,可以对这个标签下的值进行排序。结果发现,正好有20个值的回显状态为1,也就是存在的意思。到这里,我们的爆破基本上就已经完成了,只需要根据前面Payload 1标签的顺序对照着输入就行
不过,像这样一般的对照方法容易让我们出错,所以这里我准备了自己二般的方法。点击上方Save,在Result table这个工具中我们可以将所有payload信息进行导出,以方便我们的排序,具体需要选择的标签和选项如下
需要注意的是,在保存界面中,尽管已经选择了Excel打包选项,但我的burp并不会帮我添加文件后缀名,因此需要在下方文件名更改位置手动添加上.xls
的后缀。最后打开这个Excle就可以啦
考虑到部分同学对Excel不熟悉的情况,这里最后再附上Excel排序方法,全选前两列回显为1的标签后按着顺序点就行。
最后,咱就可以登录administrator这个账号,拿下靶场啦
题外话
Sql注入作为典型漏洞利用方法,操作起来并不麻烦,利用Sql漏洞的工具也千奇百怪,像我最常用的kali上的sqlmap,早期windows上的穿山甲(Pangolin)等,能够熟练掌握其中一种,就足够掌控这一无处不在的漏洞。
本题 由 Red 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
严禁抄袭,侵权必究。代码仅当参考使用。
[1]: http://redshome.top/wp-content/uploads/%E6%8A%80%E6%9C%AF/%E9%BB%91%E5%AE%A2%E6%8A%80%E6%9C%AF/portswigger/SQL/%E7%9B%B2%E6%B3%A8/portswigger%E6%89%93%E9%9D%B6%E6%97%A5%E8%AE%B0%E4%B9%8B%E7%9B%B2%E6%B3%A8%E5%93%8D%E5%BA%94%20(1).png