【导语】“丑xin”通过精心收集,向本站投稿了2篇利用GBK双字节编码突破PHP单引号转义限制进行SQL注入脚本安全,下面是小编给大家带来的利用GBK双字节编码突破PHP单引号转义限制进行SQL注入脚本安全,以供大家参考,我们一起来看看吧!
篇1:利用GBK双字节编码突破PHP单引号转义限制进行SQL注入脚本安全
当php.ini中magic_quotes_gpc被设置为on时,提交的参数会被转义,例如,单引号会被转义成了',一下子截断了字符型注入的路。
GBK双字节编码:一个汉字用两个字节表示,首字节对应0x81-0xFE,尾字节对应0x40-0xFE(除0x7F),刚好涵盖了对应的编码0x5C。
0xD5 0x5C 对应了汉字“\”,于是 %d5%5c 经URL解码后为“\”。
当我们提交参数 %d5' ,经浏览器URL编码后为%d5%27,再经PHP URL解码后为 0xd50x27,再经PHP转义后为0xd50x5c0x27,即就是在0x27(')之前插入了转义符0x5c(\\)。当MySQL采用GBK编码连接时,0xd50x5c0x27 这一字节序列就被MySQL作为GBK编码理解:\\'。
这样就吃掉了PHP的转义符,从而突破了单引号转义的限制。
本地测试如下:
1.
2.$conn=0;
3.$conn = mysql_connect(“localhost”,“root”,“see2006”);
4.if(!$conn)
5.{
6.die(“不能打开数据库连接,错误: ”. mysql_error);
7.}
8.
9.//选择数据库
10.mysql_select_db(“test”, $conn);
11.
12.//设置mysql数据库输出数据的字符集
13.mysql_query(“set names 'gbk'”);
14.
15.$sql=“select * from news where content like '%”.$_REQUEST['k'].“%'”;
16.echo“当前sql语句:”.$sql.“
”;
17.
18.$result=mysql_query($sql,$conn);
19.
20.if(!$result)
21.echo mysql_error();
22.
23.while($result && $row=mysql_fetch_array($result))
24.{
25.echo“$row[title]
”;
26.}
27.?>
搜索关键字为空,显示所有条目
单引号被PHP自动转义
利用双字节编码绕过PHP转义,SQL语句出错
利用#注释之后的SQL语句,语法正确
union猜字段数目和可显示字段的位置
union查看当前用户
union查看当前数据库名
union查看test数据库表名
union查看user表的name字段值
union查看user表的pass字段值
以上信息转载 hi.baidu.com/cdcxdzj/blog/item/43a514f7017711c3f3d38515.html
修补方法: 过滤提交过来的值
或者将magic_quotes_gpc设为off
篇2:利用双字节编码突破PHP单引号转义限制进行SQL注入脚本安全
今天看了黑防2009精华本下册《双字节编码:PHP的隐形杀手》一文,深受启发,
当php.ini中magic_quotes_gpc被设置为on时,提交的参数会被转义,例如,单引号会被转义成了\\'。一下子截断了字符型注入的路。
GBK双字节编码:一个汉字用两个字节表示,首字节对应0x81-0xFE,尾字节对应0x40-0xFE(除0x7F),刚好涵盖了\\对应的编码0x5C。
0xD5 0x5C 对应了汉字“\”,于是 %d5%5c 经URL解码后为“\”。
于是提交参数 %d5' ,经PHP自动转义后为 %d5%5c%27 ('被转义为了\\',对应%5c%27),再经URL解码后,就变成了 \\' 。
这样就突破了单引号转义的限制。
本地测试如下:
测试脚本index.php如下:
$conn=0;
$conn = mysql_connect(“localhost”,“root”,“see2006”);
if (!$conn)
{
die(“不能打开数据库连接,错误: ” . mysql_error());
}
// 选择数据库
mysql_select_db(“test”, $conn);
// 设置mysql数据库输出数据的字符集
mysql_query(“set names 'gbk'”);
$sql=“select * from news where content like '%”.$_REQUEST['k'].“%'”;
echo “当前sql语句:”.$sql.“
”;
$result=mysql_query($sql,$conn);
if(!$result)
echo mysql_error();
while($result && $row=mysql_fetch_array($result))
{
echo “$row[title]
”;
}
?>
搜索关键字为空,显示所有条目
单引号被PHP自动转义
利用双字节编码绕过PHP转义,SQL语句出错
利用#注释之后的SQL语句,语法正确
union猜字段数目和可显示字段的位置
union查看当前用户
union查看当前数据库名
union查看test数据库表名
union查看user表的name字段值
union查看user表的pass字段值
★ 利用双字节编码突破PHP单引号转义限制进行SQL注入脚本安全
★ 手工注入脚本安全
★ Andys PHP Knowledgebase 0.95.4 SQL注入漏洞及修复
利用GBK双字节编码突破PHP单引号转义限制进行SQL注入脚本安全(精选2篇)




