中国网络渗透测试联盟
标题:
ThinkSNS 2.8任意文件上传漏洞及修复
[打印本页]
作者:
admin
时间:
2012-12-4 11:12
标题:
ThinkSNS 2.8任意文件上传漏洞及修复
微博上传图片时只在前端进行验证, 服务器端没有进行安全过滤。
) y. s0 e: w5 M6 @0 m+ w6 N
: A5 r& ]+ m1 L0 ~* j, J1 U9 o4 e
, t! V+ t7 m8 F" b, l9 |
\api\StatusesApi.class.php
8 j- `0 c" Y0 l" p
2 l" S) C! O/ G T# f# |
function uploadpic(){
- A4 D: a$ \( B3 }1 S
if( $_FILES['pic'] ){
8 T+ D R& T# G, I& R
//执行上传操作
# q5 m$ W' O* U; H! ]$ m# F3 L
$savePath = $this->_getSaveTempPath();
6 |+ A; i' ?( Y9 K/ @
$filename = md5( time().'teste' ).'.'.substr($_FILES['pic']['name'],strpos($_FILES['pic']['name'],'.')+1);
9 b3 x U9 h' A% {
if(@copy($_FILES['pic']['tmp_name'], $savePath.'/'.$filename) || @move_uploaded_file($_FILES['pic']['tmp_name'], $savePath.'/'.$filename))
7 w" M+ a2 d1 z8 ^! L8 {# l
{
" P0 h+ Z* r: Q; Z1 c# U1 S% a [& ^
$result['boolen'] = 1;
1 l; g) F! f% _1 g5 F5 \
$result['type_data'] = 'temp/'.$filename;
% k+ F; q& n. s6 A6 V1 s# U# ~
$result['picurl'] = SITE_PATH.'/uploads/temp/'.$filename;
6 v' m5 a! s) L
} else {
% O6 |; u6 R" V5 A
$result['boolen'] = 0;
7 @2 J7 r! t) G' E6 Z/ L) E) r
$result['message'] = '上传失败';
6 @$ l8 H4 r' c- p
}
3 U0 p* n: J1 U
}else{
, D! v+ I! O2 p' r+ n |* Y
$result['boolen'] = 0;
% u7 c$ g: `8 ]$ r' f
$result['message'] = '上传失败';
. S2 e' Q- f, P6 Z* L" N
}
y1 T$ e) l/ p! i- j: ]& C
return $result;
8 Y" `; z6 f" `/ F
}
7 r9 r; f7 T5 A! E
unloadpic()方法没有对文件类型进行验证
: r: b1 e( P- Y) ]5 O
4 a' L6 Q& B9 C
可以构建表单, 选择任意文件, 提交到
+ ^. h- N/ B3 E( {$ e$ @. P
/index.php?app=w3g&mod=Index&act=doPost
) h; n, |# ]0 y; i1 K; b
' D. F$ c! S$ \! @2 F' K
在新提交的微博上可以找到上传的文件地址(去掉small_、middle_ 前缀)
2 ?) C! m, l- y, k! ]6 C# u# Q" A
; n* H$ a! S7 j" W+ `
, {3 `3 ] Y0 q- h! L) _
在登录thinksns官方微博后,
' B+ O3 C2 ]0 D( w% m& [3 g" h
构建以下表单:
# c, D8 N3 s; }. a$ B* x
# P4 v1 ?, b0 d W1 d4 r2 f4 H/ P3 ^
<form action="http://t.thinksns.com/index.php?app=w3g&mod=Index&act=doPost" method="post" enctype="multipart/form-data" />
8 V1 b; i* {1 z5 K% c' b
<textarea name="content">test</textarea>
7 V$ C4 L- Q0 \: g }
file: <input id="file" type="file" name="pic" />
' {7 [* j: N) `2 Q3 d6 D6 i+ V5 s
<input type="submit" value="Post" />
" R% L5 n$ x$ ?
</form>
$ j% t1 g, q0 M3 s) q7 |
去掉缩略图的前缀(small_ )
" V3 W& M1 H8 P5 K3 `7 N
修复方案:
) l- @8 f1 I! u, K
" r3 w3 X: D& n* h4 t' R, G
" \ V u8 c) S* W& I
\api\StatusesApi.class.php
, Q) t' |( F4 c1 q
2 O! f2 v5 q. p2 O) G# q8 Y' t9 G
function uploadpic(){
+ p! Y( E! g8 F9 p% Z
/**
3 h5 K( n. \( s7 t/ [ [) r
* 20121018 @yelo
" k6 K7 Y7 H# i# x( X: ~% C
* 增加上传类型验证
6 H1 B! l8 a! V( R7 R! ]
*/
2 x8 B( j8 d4 w/ d) e q
$pathinfo = pathinfo($_FILES['pic']['name']);
9 ] N0 l8 w: x2 w6 u2 {; k
$ext = $pathinfo['extension'];
* O$ ?$ A: Y" l. x1 |6 f$ l1 X
$allowExts = array('jpg', 'png', 'gif', 'jpeg');
/ |! _ b- W2 e# x$ W9 P3 v
$ H/ g$ Z; @' F& C
$uploadCondition = $_FILES['pic'] && in_array(strtolower($ext),$allowExts,true);
' \$ p6 |8 _- G
+ Y; V9 L* ]. Z4 `9 x
if( $uploadCondition ){
6 a, l. T' d" I2 E) i ~5 M
//执行上传操作
6 o6 _' r$ u9 z2 r+ D0 `2 S* S& l
$savePath = $this->_getSaveTempPath();
2 K* ^; C) D* O- }% E7 t! Z
$filename = md5( time().'teste' ).'.'.substr($_FILES['pic']['name'],strpos($_FILES['pic']['name'],'.')+1);
8 y0 O* }4 H4 m+ V
if(@copy($_FILES['pic']['tmp_name'], $savePath.'/'.$filename) || @move_uploaded_file($_FILES['pic']['tmp_name'], $savePath.'/'.$filename))
4 K, U5 @+ z$ {% B1 H, ~
{
# y& u7 k I6 Z [; L$ M3 J" Z, Y1 I( V1 n
$result['boolen'] = 1;
' r' Y: m2 }0 }; ?, d
$result['type_data'] = 'temp/'.$filename;
% ]! N& N3 v N7 _
$result['picurl'] = SITE_PATH.'/uploads/temp/'.$filename;
. a M+ R$ L- Z$ {
} else {
. q1 @2 @: x5 ^9 g& W. |' ?
$result['boolen'] = 0;
% f% m: }' c" T- |: E9 R3 {8 Y
$result['message'] = '上传失败';
# g: T5 Q" z" U) N
}
5 l. C4 o. r- C9 @+ Y
}else{
: n, K/ z2 f% m% Y5 _+ m5 P
$result['boolen'] = 0;
- C9 i8 T8 ~0 n x' R
$result['message'] = '上传失败';
1 M) P f) g3 T) b/ w! }, B
}
6 x1 L% I9 j5 ?9 ?6 C5 D( G" i
return $result;
; B6 g, A/ p7 r! K- @0 n
}
& R# m/ L0 x, ?4 {' k. }
7 t) P2 N9 M* J+ b7 @' r8 B5 C
7 _5 H5 ~) t! S5 W
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2