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相同,三种方法皆可注入攻击。