大量的小知识:
GBK 占用两字节
ASCII占用一字节
PHP中编码为GBK,函数执行添加的是ASCII编码,MYSQL默认字符集是GBK等宽字节字符集。
%df’ :会被PHP当中的addslashes函数转义为“%df\’” ,“\”既URL里的“%5C”,那么也就是说,“%df’”会被转成“%df%5c%27”倘若网站的字符集是GBK,MYSQL使用的编码也是GBK的话,就会认为“%df%5c%27”是一个宽字符。也就是“縗’”
注意:%df%5c表示縗,上面这个汉字后面还有一个单引号。
注意:addslashes() 函数返回在预定义的字符前添加反斜杠的字符串。即上文中的%df’转义为%df\’
预定义字符是:
1)、单引号(’)
2)、双引号(”)
3)、反斜杠(\)
4)、NULL
提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备合适的字符串。
注释:默认情况下,PHP 指令 magic_quotes_gpc 为 on,对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。
EQ:
<!DOCTYPE html>
<html>
<body>
<?php
$str = “Who’s Peter Griffin?”;
echo $str . ” This is not safe in a database query.<br>”;
echo addslashes($str) . ” This is safe in a database query.”;
?>
</body>
</html>
好的,尝试构造PAYLOAD!!!
kobe%df’ or 1=1#
感觉我构造的没有问题啊?
BURP抓包试一下!!!!
成功!!!我怀疑是前端有转义或者过滤!!!!
接下来,咱们查看一下源代码!!!!
确实有过滤,而且mysql_query还不打印错误描述!!
所以,咱么接着注入!正常输入时回显是两个!!
注意的点:kobe%df’ 真实对应的值是 kobe縗‘,所以输出的是你的username不存在,请重新输入。
来源:freebuf.com 2021-07-26 08:21:07 by: 知非知非知非
请登录后发表评论
注册