less21
这题是cookie注入,如果不登录进去是看不到cookie信息的,所以我们要先登录进去
用户admin,密码admin

抓包后发现cookie字段有base64编码信息,选中后burp自动检测翻译

既然是cookie注入并且字段是被加密了的,说明我们注入的数据也需要base64加密后再注入
输入admin'测试回显编码后YWRtaW4n
观察报错信息,去掉外侧单引号发现闭合符为')

因为存在报错信息,所以可以使用报错注入,依旧编码

获取数据库名称

查询表中字段


到这里了估计也没啥过滤了,下面还是一样的操作,就不演示了
less22
登录进去后还是跟21题一样的回显了cookie字段,并且也做了base64编码

唯一不一样的就是,闭合符给换掉了,试一下双引号

判断成功,闭合符就是双引号,加下来估计都一样,就不演示了

less23
GET型注入,判断闭合符

单引号测试成功,接下来测试回显位

但是这里出现了一个问题,测试的时候发现还是处于报错信息界面,而且原本闭合符里的数据带着右侧单引号不见了

我一开始还以为or之类的被过滤了呢,但是就算被过滤也会有报错信息的啊
if(isset($_GET['id']))
{
$id=$_GET['id'];
//filter the comments out so as to comments should not work
$reg = "/#/";
$reg1 = "/--/";
$replace = "";
$id = preg_replace($reg, $replace, $id);
$id = preg_replace($reg1, $replace, $id);
查看源码后发现,这里运用了preg_replace函数
preg_replace函数
preg_replace 函数执行一个正则表达式的搜索和替换。
语法
preg_replace ($pattern , $replacement , $subject [,$limit = -1 [, &$count ]] )
搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。
参数说明:
$pattern: 要搜索的模式,可以是字符串或一个字符串数组。
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。
$limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。
$count: 可选,为替换执行的次数。
所以这里将搜索id变量中是否存在#或--注释符,如果存在就替换为空
?id=1' order by 2
二次构造payload
?id='1' order by 2'
本以为多构造一个引号就行了,结果报错信息的单引号变成两个了,看来单引号里的数据还不能为空

三次构造payload
?id=1' order by 2 and '1'='1 '
登录成功,说明构造正确

吓我一跳我说怎么不管输入什么都一直为真呢,回显位都探不出来,一定要注意payload为
?id=-1' union select 1,database(),3 and '1'='1
-1一定不能忘记,我就是忘记了-1结果回显一直不改

那基本上之后的步骤都差不多,就不演示了