web上存漏洞及道理解析、防备办法(文件名检测漏洞)

    添加时间:2013-6-3 点击量:

    我们经由过程前篇:web上存漏洞及道理解析、防备办法 进修,已经知道后端获取办事器变量,很多来自客户端传入的。跟通俗的get,post没有什么不合。下面我们看看,常见呈现漏洞代码。


    1、检测文件类型,并且用用户上存文件名保存



    if(isset(¥_FILES[img]))
    
    {
    ¥file = save_file(¥_FILES[img]);
    if(¥file===false) exit(上存失败!);

    echo 上存成功!,¥file;
    }

    function check_file(¥img)
    {
    ///读取文件
    if(¥img[error]>0) return false;

    ¥tmpfile = ¥img[tmp_name];
    ¥filename = ¥img[name];


    ///读取文件扩大名
    ¥len=strrpos(¥filename,.);
    if(¥len===false) return false;

    //获得扩大名
    ¥ext = strtolower(substr(¥filename,¥len+1));
    if(!in_array(¥ext,array(jpg,jpeg,png))) return false;
    return true;
    }

    function save_file(¥img)
    {
    if(!check_file(¥img)) return false;

    //格局检测ok,筹办移动数据
    ¥filename = ¥img[name];
    ¥newfile = upload/ .¥filename;
    if(!move_uploaded_file(¥img[tmp_name],¥newfile)) return false;

    return ¥newfile;

    }
    ?>


    以上代码,对输入类型也做了断定,看了没有题目。然则题目,确恰好呈如今对获取的用户名变量检测上方。直接获取传入用户名,然后存为文件。 有伴侣会说:这些文件名都是我电脑里面存在的,文件名格局都受限于操纵体系对文件名定义。 然则,须要重视是,对于¥_FILES里面获取变量,是直接来自http request恳求。它跟通俗获取其它get,post变量一样。 是以,别有居心的人,往往会本身模仿浏览器,给办事器发送一个特别文件名。然后,让存文件时辰,可以或许正常保存为本身格局。


    前些年,”\0” 在字符串中,保存为文件,会主动截断后面内容。 如:¥filename 机关为:”a.php\0.jpg” ,我们想想,将会变成怎么样?


    ¥newfile = “upload/a.php\0.jpg” 因为,对扩大名验证,最右边”.”后面字符是jpg ,是容许格局。 然则,我们一以该文件名,保存。 发明磁盘会在upload目次下面生成a.php ,\0后面所有字符,被主动截断。


    该漏洞,风靡一时。当时几乎大多半上存网站都有漏洞。一时,很多平台封闭了上存。其实,根起原根蒂根基因就在此。我们拿到文件名,本身作为最毕生成文件名保存了。  好的办法,是本身随机生成文件名+读取扩大名 。如许可以组织输入特别字符,在进行文件保存时辰,被扔掉或截断了。


    php4时代这个漏洞可以哄骗,到php5时代,生成的变量文件名值中,会主动过滤掉”\0” ,如许无论用户机关怎么样的特别”\0”用户名,都邑被截断。 然则 ,今朝这类漏洞,在asp,jsp 等站点。还经常有呈现。老版本的php站点也会经常呈现。



    好了,今天先到这里,后面还有2种其它常见办法,后面给出!迎接交换!



    作者:chengmo  QQ:8292669 
    原文网址:http://blog.chacuo.net/136.html 
    订阅对峙存眷:http://blog.chacuo.net/feed 
    本文版权归作者所有,迎接转载,请务必添加原文链接。



    文艺不是炫耀,不是花哨空洞的文字堆砌,不是一张又一张的逆光照片,不是将旅行的意义转化为名牌包和明信片的物质展示;很多时候它甚至完全不美——它嘶吼、扭曲,它会痛苦地抽搐,它常常无言地沉默。——艾小柯《文艺是一种信仰》
    分享到: