CVE-2015-2348浅析

 Stardustsky   2015-04-04 09:43   1990 人阅读  0 条评论
今天网上传的沸沸扬扬的CVE-2015-2348,在各大网站都看到了报道,于是我也好奇的玩了一下,结果发现没啥意思,之前类似的利用其实已经很广泛了,不知道为什么会成一个CVE,还写一下分析过程吧。

这个CVE的主要问题在于php中的move_uploaded_file(string $filename , string $destination)函数,这个函数有两个参数,第一个参数是上传的文件名,第二个则是上传文件的放置位置。通常程序员在开发的过程中会对文件进行检查,检查 . 后面的后缀名是否为 jpg png gif等合法文件,如果上传文件名可控的话,攻击者就可以将文件名修改为 evil.php\x00.jpg这样的方式,这样就绕过了代码的检测从而将恶意文件evil.php上传到了目标服务器。

举个简单的例子:
if(isset($_POST[file])){
    $filename=$_FILES['file'][name];
    $path="./uploaded/".$filename;
    $ext=substr($uploaded_name, strrpos($uploaded_name, '.') + 1);
    if($ext=="jpg"||$ext=="png"||$ext=="gif"||$ext=="jpeg"){
        if(!move_uploaded_file($filename,$path)){
            echo "upload successful!";
        }
        else{
            echo "upload failed!"
        }
    }
    else{
        echo "wrong file type!"
    }
我们在post传递文件名的时候,将文件名改为evil.php\x00.jpg,即可绕过检测将文件上传到对方服务器。不过这个漏洞挺鸡肋的,在以前的环境中早已经被广泛使用。有经验的程序猿一般都会重命名文件,以 随机数.jpg 或者类似的命名方式来防止攻击。

此外,这个漏洞所适用的版本和条件也极为有限,一位腾讯的同学已经分析的很详细了,可以看看。


本文地址:http://www.stardustsky.net/index.php/post/20.html
版权声明:本文为原创文章,版权归 Stardustsky 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?