POST 数据漏洞文件执行任意后缀文件保存* m" n' y# A" L) C$ A
漏洞文件/chart/php-ofc-library/ofc_upload_image.php5 T) o4 X3 y; m# @2 Z1 D2 K
; Z3 N( p( m8 }; b- q; J: R0 Y
利用:, C; l' {) n: d' R) t' ?
/chart/php-ofc-library/ofc_upload_image.php?name=hfy.php hfy.php 文件名! f4 w- Z2 G8 o5 H/ i
8 f; V: f7 v2 j* @9 S+ P7 D9 B1 m
Post任意数据' a, l. J C# s; _( w
保存位置http://localhost/chart/tmp-upload-images/hfy.php# t- {( ~) W! G3 }" }, D# Z) x
# V% b1 p, e& T8 }! X8 f5 K1 u2 Z" t, K x" T
最新版wss漏洞文件,即使是收费版本也有的,在新浪商店部署的demo~
6 W/ {8 T0 z% q" T, @5 Q; a) j
' t2 B; r# s+ u2 v% z<?php' }- @$ ^+ v) r) a7 k0 h! ^8 m
5 Q( Q! L5 U' H4 B1 z* h' g5 W//
5 _' m, J; ^4 ?0 ~1 [$ V5 o0 Q// In Open Flash Chart -> save_image debug mode, you4 v+ r/ v7 P& ^% [
// will see the 'echo' text in a new window. U) T9 E' u' `
//+ x n8 C1 c4 G8 J G
3 I* b+ m1 v" [2 B/*
: ]# T4 s, c% t4 p' ~1 B* c; f
Q3 `/ |* k! F5 d0 l. Q+ Lprint_r( $_GET );
1 k" A @3 W( K' I) V8 O- l2 z7 o3 oprint_r( $_POST );# R! h7 h5 `5 | `2 ~
print_r( $_FILES );. z* k# ~( x# U
: g5 @! Z: ~! Y. J
print_r( $GLOBALS );
W6 O; O$ k7 ^% h7 L' ^/ Oprint_r( $GLOBALS["HTTP_RAW_POST_DATA"] );; i# A; B1 `, r
( P9 }! D. t$ I2 o( [*/1 ?: @! s/ T, m5 j* Y) i
// default path for the image to be stored //0 n" L# }/ v, g
$default_path = '../tmp-upload-images/';. z) S5 \# Y# p( K" Q' j
! ~5 m: g- Q; f1 k3 E; Z
if (!file_exists($default_path)) mkdir($default_path, 0777, true);
1 S; a, D5 z: }( e! i" N, p" m7 w" B3 Z. L& Q6 V
// full path to the saved image including filename //7 U; x V: `# I0 y9 M$ A
$destination = $default_path . basename( $_GET[ 'name' ] );
" d0 d3 F _5 D9 k' P
. S1 i7 W( ]* L4 J( \: Iecho 'Saving your image to: '. $destination;, g4 P- |2 S6 G
// print_r( $_POST );
; v1 R7 ]4 U- T// print_r( $_SERVER );3 D( [6 \3 @! }5 {
// echo $HTTP_RAW_POST_DATA;* ?7 P6 u! N; r# N
, S6 _$ } u. F//
. y% l! j$ O+ T! A. d2 J( ?// POST data is usually string data, but we are passing a RAW .png
3 ?5 O( Q& ^7 S8 k// so PHP is a bit confused and $_POST is empty. But it has saved/ E( B. q; C8 q* y+ r
// the raw bits into $HTTP_RAW_POST_DATA% | a! ~1 t: X" l0 H4 z, O
//
% O$ |5 {% I( Y9 [( N+ j
8 G4 H' o0 [) g1 x/ S' _" u$jfh = fopen($destination, 'w') or die("can't open file");0 y) U, j6 k7 W1 G* W
fwrite($jfh, $HTTP_RAW_POST_DATA);! f) [- T# K: ]0 n- L" J" j0 ~
fclose($jfh);
8 G- E2 X6 m" h3 V( m
% y' v) u6 P# T, S0 H: p//6 K/ K: J; y4 U0 D& x+ h7 v7 O; u. N. U
// LOOK:, ^/ Z( @9 W: v- j4 y
//% i1 h% D, g, j1 L& ]
exit();
" V& r3 e7 r% {. a//
0 k. u( r- z' D3 Z6 k// PHP5:( x$ d5 [2 o9 E2 E. A5 C0 O
//# l N+ c2 H/ S. Q2 F( g
2 B8 g5 M: Y/ G, b0 @* w7 }
! M( R+ R J; t0 x" Q( p% e" ^9 {
// default path for the image to be stored //, b1 K7 O" p P% J) a! s
$default_path = 'tmp-upload-images/';
( g1 R( ?: l+ w. @+ ^$ _, ?9 l) t4 E) F" O
if (!file_exists($default_path)) mkdir($default_path, 0777, true);+ S1 H& Q9 l; W
) c# P3 M3 R b" j% F! M
// full path to the saved image including filename //7 p0 k: h/ S+ ~' a
$destination = $default_path . basename( $_FILES[ 'Filedata' ][ 'name' ] );
4 m( A$ W8 P/ q& k6 Z
& ~, h/ I' K+ Z! C// move the image into the specified directory //
6 I- t2 {2 T; m" Jif (move_uploaded_file($_FILES[ 'Filedata' ][ 'tmp_name' ], $destination)) {
# A2 W; c- i5 V" L" j& } echo "The file " . basename( $_FILES[ 'Filedata' ][ 'name' ] ) . " has been uploaded;";
6 h( N, C- E. w8 [. y} else {7 b% r9 |$ f: o2 \% S s% k% l
echo "FILE UPLOAD FAILED";
/ I! x! N# }* ~& Z& n, N0 n$ R}
9 l. X e9 g/ z5 Q4 I
& ]- Q1 U) I' G
N9 b% G5 j$ i3 z0 J7 j! M) I8 g?>4 n& d4 T' H' v& y* O6 L* R
" c8 Y! x3 t9 }' B& \% j
; z" I8 g8 H" i
4 E' e: d# V) p) j% A
6 @; ~( w" M3 ]# l% g/ K$ s" T) O/ k5 a# u
, `; G5 l/ k6 V修复方案:
: e& ^! U' _) K- Z4 X这个漏洞文件就是个杯具,怎么破,加权限验证,后缀等验证~,自己搞 / C: N* m" `. F8 @- g6 f
: ?' g: ^$ v, k
$ B8 ^4 Y" g% B% y4 D8 S
7 j% U% \' x, o" S) h5 A4 l' v _ R) a) N+ i4 y
|