sqli-labs练习-less18-22

前言

接下来的几关我们需要用到抓包工具来帮助我们进行解题,我们用到了burp suite工具(需要JAVA环境),并且通过下面几个靶场具体分析学习这个工具的使用。
ps.整理了关于sqli-labs靶场的博客,将分散的几篇整合了起来。

less-18

首先进入网页,我们发现显示了当前的ip地址,但这似乎对我们并没有什么用。依然尝试随便输入,发现提示登录失败,简单注入也没有报错回显。我们去查看下源码,发现账户密码都被check_input函数保护起来了,因此我们显然不能在这个页面中进行注入了。

既然页面不能注入,我们就进行抓包操作,先随意输入一组账号密码,得到抓包结果:

想要进行注入操作,我们就要先了解这些请求头的含义,这里举几个常用的请求头为例:

  • HOST:指定被请求资源的Internet主机与端口号
  • User-Agent:允许客户端将操作系统、浏览器等信息报告给服务器
  • Referer:当前访问的URL的上一个URL
  • X-Forwarded-For:请求端IP
  • Cookie:一段文本,一般用来储存用户资料,相当重要

不过在这里我们似乎找不到注入点,那我们试着输入一段正确的账户密码。我们这里有两种操作:

  1. 我们在Proxy下直接更改账户密码并将其forward,我们可以回到浏览器查看结果
  2. 我们使用ctrl+r将其发送到Repeater中,在并request中修改账户密码,将其go到response中,并在response中的render下查看结果

这里我们选方法2:

ps:这里密码为123456是因为在做24关的时候改密了,正常密码应该也为admin

我们可以发现这时返回了User-Agent,我们可以通过源码分析这段的注入原理:
$insert="INSERT INTO 'security'.'uagents' ('uagent', 'ip_address', 'username') VALUES ('$uagent', '$IP', $uname)";

这段代码便是我们注入的关键,这一次不是select语句,而是insert语句。这段代码会在登陆成功后回显uagent,并将uagent、IP、uname插入到security数据库的uagents表的uagent、ip_address、username三个字段中。并且结合其他代码我们可以知道,只有输入正确的账号密码才能进入到这个insert语句,因此我们可以判断注入点就在User-Agent中。

找到注入点后,我们就可以通过之前使用过的很多语句进行爆库了:

还可以使用时间盲注或者其他类型的报错等等,这里不再赘述。

less-19

十九关与十八关的差别不大,输入admin发现这次回显的是Referer内容,那我们就猜测注入点在referer中,通过查询源码发现也确实如此,那么我们就可以进行爆库了。

less-20

通过标题提示我们知道这道题的关键在于cookie上。我们先去查看一波源码,发现这次的select语句对$cookie进行了查询,那么我们大可判断这次的注入点在cookie中。

我们来先分析burp suite是如何进行这关的抓包的:
首先先验证账户密码是否正确,如果正确的话就进行set cookie

接下来forward之后我们就可以发现cookie已经被记录了下来:

同时我们得知cookie只记录下了uname,这时我们修改cookie为1,用浏览器开发者工具读取cookie,发现admin依然保存在value值中。我们就可以判断当页面request时,若cookie中存在uname则直接读取,因此这题注入点就在cookie中。

找到了注入点,我们就可以开始平平无奇的爆库了,直接简单的查询语句加注释就行。

less21-22

到这里我们就进入了靶场的第二页了,恭喜自己能更进一步了。我们进入21关,基于base64的cookie注入。这里关于base64的知识可以参考下面这个文章:
base64介绍

我们首先用burp suite进行抓包,发现这次的cookie中出现了这段代码:
Cookie: uname=YWRtaW4%3D
这里的%3D就是“=”,这是一段很经典的base64,不过我们自然不用一个个自己解码,burp suite中的Decoder模块中的decode as就可以进行base64的编码与解码,那么我们就先进行解码,结果为admin。

不过这题同第20关的区别也就在这里了,其他的操作与20关并无相异,注意注入是否有括号,接着我们只要将原来输入的代码先进性base64编码再注入就行了。

而第22关是基于双引号的报错,只要使用双引号就行了