利用GBK双字节编码突破PHP单引号转义限制进行SQL注入脚本安全 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    当php.ini中magic_quotes_gpc被设置为on时,提交的参数会被转义,例如,单引号会被转义成了',

利用GBK双字节编码突破PHP单引号转义限制进行SQL注入脚本安全

。一下子截断了字符型注入的路。

    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字段值

   

    以上信息转载 http://hi.baidu.com/cdcxdzj/blog/item/43a514f7017711c3f3d38515.html

    修补方法: 过滤提交过来的值

    或者将magic_quotes_gpc设为off

最新文章