中国网络渗透测试联盟

标题: ThinkSNS 2.8任意文件上传漏洞及修复 [打印本页]

作者: admin    时间: 2012-12-4 11:12
标题: ThinkSNS 2.8任意文件上传漏洞及修复
  微博上传图片时只在前端进行验证, 服务器端没有进行安全过滤。
. f! }# o! _5 t4 ]
. m7 Y4 ^+ j. i# `/ x0 X! c
7 |  w2 w$ ?$ i# P\api\StatusesApi.class.php; I- X, p0 |' x. H: B

( G: U- L. J/ F+ T% Gfunction uploadpic(){5 E% ~- q/ n" N$ m8 ]
      if( $_FILES['pic'] ){
: i: }" E! S) r5 V: B8 K     //执行上传操作
3 O3 Y5 y8 c: N4 h5 M& ~/ K     $savePath =  $this->_getSaveTempPath();
9 t# R; O9 n% H- N, N* Y     $filename = md5( time().'teste' ).'.'.substr($_FILES['pic']['name'],strpos($_FILES['pic']['name'],'.')+1);
, U, T7 X, ?1 j- L6 H    if(@copy($_FILES['pic']['tmp_name'], $savePath.'/'.$filename) || @move_uploaded_file($_FILES['pic']['tmp_name'], $savePath.'/'.$filename))
9 t4 ~- D0 S% q% }0 }. R/ x  A       {. H* Z- b; s4 f( [* z& [8 a
        $result['boolen']    = 1;
5 s, R- |$ Z: P/ a        $result['type_data'] = 'temp/'.$filename;0 w$ f) R) q3 d
        $result['picurl']    = SITE_PATH.'/uploads/temp/'.$filename;
5 d7 u: e% D& z/ U  f; V       } else {
" T6 G9 I; r$ S, Y        $result['boolen']    = 0;
3 D; g: R" D8 ^        $result['message']   = '上传失败';9 o$ H5 N3 o( K4 h+ J1 G9 }5 d: n2 {9 D
       }% \$ u4 d3 H4 B
     }else{
+ |( k' [1 j0 ?         $result['boolen']    = 0;- h" e5 ~8 C, M  [7 h  K
         $result['message']   = '上传失败';
! `8 C# {/ P  a/ f5 ]2 {: K     }0 y. j/ n( O7 J) D, L$ h& Q. g0 R
return $result;1 L7 E- B* a7 J
    }
# M. t+ d. m) Funloadpic()方法没有对文件类型进行验证
, d; y1 x, v  B8 M; N( r2 ^. S / `$ r& q. ?3 w: p! X* l
可以构建表单, 选择任意文件, 提交到
1 B) ?% N9 s" j% [/index.php?app=w3g&mod=Index&act=doPost
7 ^7 l" c; P+ C 4 s6 y) Z' \5 {1 G0 u9 W
在新提交的微博上可以找到上传的文件地址(去掉small_、middle_ 前缀)
. S9 l! o0 l( X" R; p7 x* h9 }
# @! d& O( G  V$ n" F  X% w8 c+ E! D2 l1 x8 D) V: N6 F- i3 z
在登录thinksns官方微博后,
, q/ i# W' Z- t) r2 w! _8 E$ ]. u构建以下表单:
# g- [: Z' J3 ^  ]: X2 H) K2 P/ D
2 j# o- M' S, J: f( A8 e<form action="http://t.thinksns.com/index.php?app=w3g&mod=Index&act=doPost" method="post" enctype="multipart/form-data" />
' Q; u; M2 x, {1 h( w5 h<textarea name="content">test</textarea>
, c  ^8 i: U5 C. _1 Sfile: <input id="file" type="file" name="pic" />
+ {; z3 C; `8 W/ Y. w<input type="submit" value="Post" />8 n: K) \) Z- M: d! u- }" p. G4 o
</form>
. x* K3 x5 x- l- Q, E去掉缩略图的前缀(small_ )
7 N9 r" f0 a4 C0 R" ]& c​修复方案:
, B- x! I! k5 }/ o* u" @$ _
4 @5 g9 W8 }1 j1 p4 @) X: k# N* }# N2 y6 g! `' G: k
\api\StatusesApi.class.php# Q) O/ O. Y0 O
8 E7 g5 A( `4 W
function uploadpic(){6 y+ G. B7 l) z0 @- f2 i) s
     /**
- \& y* W. @  |+ b6 m6 G* G7 c      * 20121018 @yelo
# S+ \; R3 t- t+ F      * 增加上传类型验证0 W0 ^% z: |# X/ x
      */
/ ?  [" S# B/ Q( I5 a     $pathinfo = pathinfo($_FILES['pic']['name']);( G" @9 X6 r* w' f) Y3 s1 a
     $ext = $pathinfo['extension'];" i4 f5 b6 i: _5 z- |
$allowExts = array('jpg', 'png', 'gif', 'jpeg');: i7 [, l! P: {8 L# K& B" p
( N" Q3 G3 O" z0 k" Y
     $uploadCondition = $_FILES['pic'] && in_array(strtolower($ext),$allowExts,true);; K9 C2 e7 X4 z# L
4 c9 l+ O0 R. R6 J
     if( $uploadCondition ){
) Y& V" a) \8 _! k; z     //执行上传操作
+ B6 t% u0 Q) j: G     $savePath =  $this->_getSaveTempPath();
9 M; m, N# Z5 `7 m$ Y5 y% `* A     $filename = md5( time().'teste' ).'.'.substr($_FILES['pic']['name'],strpos($_FILES['pic']['name'],'.')+1);
/ m+ ^( X* E. l: b! T    if(@copy($_FILES['pic']['tmp_name'], $savePath.'/'.$filename) || @move_uploaded_file($_FILES['pic']['tmp_name'], $savePath.'/'.$filename))/ i4 \+ _& ^) F( I. }2 u/ v
       {; A* ?! I$ M, d. o5 b: p. E8 g, ~
        $result['boolen']    = 1;
2 N9 T9 ?; D" S6 c+ B        $result['type_data'] = 'temp/'.$filename;
# w0 m# W6 V7 Y  a, ]0 v  O        $result['picurl']    = SITE_PATH.'/uploads/temp/'.$filename;/ Q5 {& R) f0 D# y  [
       } else {6 T- }0 K1 S9 ~: O1 ]6 j) k
        $result['boolen']    = 0;
+ H0 K5 k: }2 a. Q        $result['message']   = '上传失败';
9 t$ q+ ?. W; m) \/ J5 E6 X: V( g. s       }, a1 Q  h/ p5 Y: P
     }else{
# E2 F2 f; B7 i' g, m9 }3 G         $result['boolen']    = 0;
2 D; e/ \8 T7 ^         $result['message']   = '上传失败';, p1 w# d: t: P- O. ]3 f
     }
3 P& Y$ D, @% lreturn $result;
2 j8 ~5 y6 Q& d' N    }7 `0 Z/ _" G. J5 N9 l
' x/ ?+ p2 O+ i3 U6 u8 W

' {% Y1 a' N% w6 c7 D5 d




欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2