Less-32

emmm…以前提过了,见我博客宽字节注入,就是以这个为例的

这是源码,可以知道这里是通过正则表达式实现替换的

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

Less-33

解题过程和Less-32一样,但是这里是通过$id=check_addslashes($_GET['id']);来加上注释号

从源代码中可以看到:

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

此处过滤使用函数addslashes()

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。

预定义字符是:

  • 单引号(')
  • 双引号(")
  • 反斜杠(\)

提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。

Less-34

本关是post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理。由上面的例子可以看到我们的方法就是将过滤函数添加的 \ 给吃掉。而get型的方式我们是以url形式提交的,因此数据会通过URLencode,如何将方法用在post型的注入当中,我们此处介绍一个新的方法。将utf-8转换为utf-16或 utf-32,例如将 ' 转为utf-16为 �' 。我们就可以利用这个方式进行尝试。

可以使用万能密码进行登录

1 �'  or 1=1 #

img

Less-35

这题源码看上去和Less-33差不多的,用$id=check_addslashes($_GET['id']);想要转义,但是

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

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

这里是数据型查询,传入的不是string,就无法使用addslashes了,过滤无效,就用最普通的联合查询即可

说点什么
评论之后转圈圈也不用管,要批准之后才能显示,谢谢
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...