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 #
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
了,过滤无效,就用最普通的联合查询即可
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
迷失的老鼠
本文地址: sqli-labs Less-32 to Less-35
本文地址: sqli-labs Less-32 to Less-35