Sqli-labs-18~22


18:Header Injection - Uagent field - Error based

方法一:手工注入


遇事不决先看源码!!!

对于该函数的效果我在上一章已经进行了解读,这里就不再次解读了

此时发现其对我们输入的用户名和密码都进行了严格的保护,所以我们一般无法从用户名和密码进行入手攻击;而且要进行攻击时我们需要知道用户名和密码,此刻我们使用bp进行爆破

此时我们再来看

此时的uagent和IP与uname和passwd的差别在于uagent和IP并没有被严格的保护;所以我们便萌生了对uagent或者IP进行一个注入攻击

1
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)"

接着阅读源码时发现了这个语句,还有下面的echo Your IP ADDRE…这个不就和我们刚开始登入的时候的界面回显一样,
又发现上面的insert语句中出现了未被严格过滤的uagents,所以现在我们更加可以确定此题的注入点就在uagent,而上面语句的意思则是向uagent表插入三个字段;所以我们可以开始构造该语句

1
INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES (' or updatexml(1, concat('#', database()), 0), 1, 1) #

我们的payload就是处于第一个字段中,先用一个单引号闭合原生sql的单引号,然后通过or连接一个updatexml()函数,将payload封装到updatexml中,使得后台抛出错误返回给前端。
此时我在useragent中加入一个单引号,发现报错,所以我们便可以利用报错注入

此时我们开始构造语句

1
' or updatexml(1, concat('#', database()), 0), 1, 1) #


发现咱们的数据库名已经出来咯,接下来便可以进行愉快的爆库之旅了,由于拼接的查询语句与先前一样,在这里我就不一一列出了


方法二:sqlmap测试

先用bp进行抓包,然后修改user-agent的值;在我们需要注入的地方加入* ;然后保存到本地

运行sqlmap

1
python sqlmap.py -r D:\桌面\a.txt -db



FINISH


19:Injection- Referer- Error Based- string

查看源码

依旧还是对username和password进行了严格的保护
接着往下看

此时发现referers存在注入;接下来就是和Less18一样进行拼接
效果如下:


20:Cookie Injection- Error Based- string

查看源码后发现依旧是对用户名和密码进行了严格的保护;继续翻看源码

此时发现cookee并没有被进行一个严格的保护

接下来只需要更改查询语句即可爆库


Less-21

咱们还是看看源码吧

此时发现后台对我们的cookie值进行了一个判断,看我们提交的cookie值是否为空;这应该意味着存在cookie注入

和之前一样还是对咱们提交的username和password进行了严格的保护;这意味着我们需要一个正确的用户名和密码;和之前一样使用bp进行爆破得到正确的用户名和密码。

此时我们发现了最重要的sql语句

如果用户登入成功;便会给用户设置一个cookie;
setcookie()函数给客户发送一个http cookie
此时我们对比一下Less-20

和咱们本题的

发现我们的cookie的值是经过base64加密的
继续往下看:
发现在后台查询中会先对cookie进行解码,然后再插入查询语句之中;然后进行数据库查询。

bp抓包之后发现咱们的cookie确实是经过base64加密

探测一下猜出其包裹方式

方法一:
因为页面有显示位,所以可以使用联合注入

方法二:
因为页面报错信息正确,所以也可以使用报错注入

方法三:
因为当我们猜解正确时会显示登入成功;猜解错误时会显示登入失败;所以也可以使用布尔盲注


Less-22

此关和Less-21一样,就是包裹形式不同为双引号包裹

接下来的步骤和Less-21相同,三种方法皆可注入攻击。


Basic Challenges Finish!