POST 数据漏洞文件执行任意后缀文件保存' A' B, u3 K# C
漏洞文件/chart/php-ofc-library/ofc_upload_image.php
- T! E; R( p' ~- ]$ e1 J# |% {5 O3 ]! Y! M. N L
利用:3 L% { {: R2 g9 J Q9 w
/chart/php-ofc-library/ofc_upload_image.php?name=hfy.php hfy.php 文件名9 I9 y3 j1 N% p3 C
- s4 e J6 Z# f, @* K+ JPost任意数据 Y, P% v% u! G7 o2 \ O$ D
保存位置http://localhost/chart/tmp-upload-images/hfy.php/ g! x2 i: U: F9 [/ S
8 v6 T$ s+ y# s' T ^" g8 j3 N& W
" ]+ ]8 f8 M! u8 t* p1 w
最新版wss漏洞文件,即使是收费版本也有的,在新浪商店部署的demo~
+ c9 {6 A$ x7 k9 n7 [7 N1 t+ Q c0 X: F. Y* w) h
<?php7 p# H9 u( [* X+ ?: d# o* @
2 B1 i0 ?2 g+ o) \' Y
//6 ]+ p/ i; D9 n1 `$ Y
// In Open Flash Chart -> save_image debug mode, you! i" D& d4 r8 b6 w
// will see the 'echo' text in a new window." c& `" g/ _: `% o, L
//" e1 i7 a6 Z. T/ B- d& u: D F8 I
) Y3 E9 e8 L" Z2 |2 I$ r7 t+ H/*
`2 y3 b( _* ~: v4 x' j- H8 ^. ?5 C$ J5 {# ]$ [, r
print_r( $_GET );
1 {3 G | v. Q( z$ g% ~print_r( $_POST );
6 X) m& r4 {8 c+ E& @5 ~print_r( $_FILES );- x2 |! x8 K6 u \
3 r! u* ?; C+ n6 w% k/ \
print_r( $GLOBALS );9 K* |6 G( F+ o2 G. n2 }
print_r( $GLOBALS["HTTP_RAW_POST_DATA"] );) Z3 i6 D0 B Q Q2 k
$ p$ C) _ i% p1 S
*/
$ V( n0 F/ ]! k2 z2 ^# X4 ^0 A// default path for the image to be stored //# ?; K5 c# Z+ e5 q
$default_path = '../tmp-upload-images/';2 e7 t" Z8 ^8 d' u
6 h. [' x) v y/ gif (!file_exists($default_path)) mkdir($default_path, 0777, true);4 Y/ H6 i* ^+ c: d
( d% S' S9 }& j% f8 c3 i1 H& K// full path to the saved image including filename // o5 K. M6 r- F' u5 C
$destination = $default_path . basename( $_GET[ 'name' ] );
' ^' L/ {* t! ?9 k
5 b; }& @' c4 ]+ O W, S a& secho 'Saving your image to: '. $destination;8 H/ }' ?; V, E
// print_r( $_POST );
1 M6 @+ r/ e2 X2 l4 T3 p& z0 J& `. g// print_r( $_SERVER );
% T7 |7 a1 Q" b8 W, B" ?7 B// echo $HTTP_RAW_POST_DATA;
6 N/ Y; [9 K. h8 M( R5 H/ `; F! C# L: U3 ]1 K0 g
//
( W! v0 ]& ]9 u// POST data is usually string data, but we are passing a RAW .png
; K9 x. [. z. \// so PHP is a bit confused and $_POST is empty. But it has saved+ B9 X K# h" t
// the raw bits into $HTTP_RAW_POST_DATA6 M* g% B8 a+ ~
//
0 `! ]0 w( Q y6 {. |7 d8 j
1 J& Q3 m# e- M! p$jfh = fopen($destination, 'w') or die("can't open file");
; E/ S8 u# _# N3 j# rfwrite($jfh, $HTTP_RAW_POST_DATA);
* z' z0 U" C- @4 Lfclose($jfh);
; L, C( f+ Y1 t, Q6 S/ R' J, J: X9 N8 P* h. z
//4 @+ d; a. o- R0 F
// LOOK:7 J/ O( j: }9 W Q! q# S
//
. S7 k' R: v2 ?8 W% iexit();
) ]2 |4 M, P% E$ I//" w+ S( g" z% M2 b$ Y0 s
// PHP5:6 g, z- g% ^( D
//) V$ |# b! o& c1 H
9 m) d( T: F2 Q' D5 W# I
+ D) e% b# k: A) T+ C// default path for the image to be stored //
% F1 ~' H/ \. J" T$default_path = 'tmp-upload-images/';# C/ z/ e, c$ T) I; Q* _
1 B/ u; ?1 l, b) V
if (!file_exists($default_path)) mkdir($default_path, 0777, true);0 d1 i& \$ D3 Q" t. S; e: {9 z4 x
/ F; q3 I2 S: A. f/ ?1 u7 z// full path to the saved image including filename //
& g( L' O1 ]5 x' Y$destination = $default_path . basename( $_FILES[ 'Filedata' ][ 'name' ] ); 0 h( b0 g( O, r' r. x
( u$ h! L& b9 b9 s
// move the image into the specified directory //
1 f& ~* P, }& l: `; u0 s! m7 Kif (move_uploaded_file($_FILES[ 'Filedata' ][ 'tmp_name' ], $destination)) {+ M8 \$ [: ?; R- E& D
echo "The file " . basename( $_FILES[ 'Filedata' ][ 'name' ] ) . " has been uploaded;";# B* s/ F1 q7 ]5 h' {
} else {. X+ d6 o7 Q, C N s
echo "FILE UPLOAD FAILED";
/ ]/ U; C, z* M2 Z0 t/ @}2 q) Y) o) b" s% o4 S Z* Q
- e% o) z( L6 x
* w! w2 R0 b" i" z! z
?>" V0 u/ N) M# h! _
% D# z6 g3 A- ~7 ^3 X9 ?) L; v/ t# s/ g9 o
0 Y! [2 U! p2 n& M, I7 J
% O; c7 G) K+ O5 o, ]3 i
6 k6 c5 X+ Q4 N
# O/ b. g$ R* u6 q: [# B; l9 h; J
修复方案:
! a1 {2 f( p5 r这个漏洞文件就是个杯具,怎么破,加权限验证,后缀等验证~,自己搞 + c7 M$ D: y8 t7 w p2 ^
6 U- o' ^8 a0 g ~5 e; O
0 [6 K. X$ q8 R/ n' L0 e6 E
7 C L5 B- Z& Y) s( W- \. Y* e# z
% U$ I- l7 r- c/ A2 ^ |