[15940] 2020-10-08_APACHEOFBIZXMLRPC远程代码执行漏洞分析

文档创建者:s7ckTeam
浏览次数:0
最后更新:2025-01-18
2020-10-08_APACHEOFBIZXMLRPC远程代码执行漏洞分析 A P A C H E   O F B I Z   X M L R P C A l p h a _ h 4 c k   F r e e B u f   2 0 2 0 - 1 0 - 0 8 A p a c h e   O F B i z J a v a / w e b t o o l s / c o n t r o l / x m l r p c 便 A p a c h e   O F B i z E R P 使 A p a c h e   O F B i z W M S / M E S / M O M C M S H R e P O S s c r u m A p a c h e   O F B i z 使 J a v a J a v a E E X M L S O A P /   R F C   7 2 3 0 - 7 2 3 7 H T T P H e a d e r C R L F C R L F S P R e q u e s t -   U R I m e s s a g e - b o d y M e t h o d C o n t e n t - T y p e H T T P p a r a m 1 使 P O S T J a v a J a v a 使 s e r v l e t a p p l e t 使 R e q u e s t   =   R e q u e s t - L i n e   h e a d e r s   C R L F   [ m e s s a g e - b o d y ] R e q u e s t - L i n e   =   M e t h o d   S P   R e q u e s t - U R I   S P   H T T P - V e r s i o n   C R L F H e a d e r s   =   * [ H e a d e r ] H e a d e r   =   F i e l d - N a m e   :   F i e l d - V a l u e   C R L F P O S T   / m y _ w e b a p p / m y p a g e . h t m   H T T P / 1 . 1 H o s t :   w w w . m y h o s t . c o m C o n t e n t - T y p e :   a p p l i c a t i o n / x - w w w - f o r m - u r l e n c o d e d C o n t e n t - L e n g t h :   7 p a r a m = 1 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 {       / / T h i s   i s   t h e   o b j e c t   w e ' r e   g o i n g   t o   s e r i a l i z e .       M y O b j e c t 1   m y O b j   =   n e w   M y O b j e c t 1 ( ) ;       M y O b j e c t 2   m y O b j 2   =   n e w   M y O b j e c t 2 ( ) ;       m y O b j 2 . n a m e   =   " c a l c " ;       m y O b j . t e s t   =   m y O b j 2 ;       / / W e ' l l   w r i t e   t h e   s e r i a l i z e d   d a t a   t o   a   f i l e   " o b j e c t . s e r "       F i l e O u t p u t S t r e a m   f o s   =   n e w   F i l e O u t p u t S t r e a m ( " o b j e c t . s e r " ) ;       O b j e c t O u t p u t S t r e a m   o s   =   n e w   O b j e c t O u t p u t S t r e a m ( f o s ) ;       o s . w r i t e O b j e c t ( m y O b j ) ;       o s . c l o s e ( ) ;       / / R e a d   t h e   s e r i a l i z e d   d a t a   b a c k   i n   f r o m   t h e   f i l e   " o b j e c t . s e r "       F i l e I n p u t S t r e a m   f i s   =   n e w   F i l e I n p u t S t r e a m ( " o b j e c t . s e r " ) ;       O b j e c t I n p u t S t r e a m   o i s   =   n e w   O b j e c t I n p u t S t r e a m ( f i s ) ;       / / R e a d   t h e   o b j e c t   f r o m   t h e   d a t a   s t r e a m ,   a n d   c o n v e r t   i t   b a c k   t o   a   S t r i n g       M y O b j e c t 1   o b j e c t F r o m D i s k   =   ( M y O b j e c t 1 ) o i s . r e a d O b j e c t ( ) ;       o i s . c l o s e ( ) ;
J a v a S e r i a l i z a b l e E x t e r n a l i z a b l e w r i t e O b j e c t ( ) / w r i t e E x t e r n a l ( ) r e a d O b j e c t ( ) / r e a d E x t e r n a l ( ) X M L - R P C X M L - R P C R P C 使 X M L 使 H T T P X M L - R P C X M L - R P C H T T P H T T P R P C X M L - R P C X M L s o m e t h i n g p a r a m   X M L X M L X M L A p a c h e   O F B i z o r g . a p a c h e . x m l r p c . p a r s e r . S e r i a l i z a b l e P a r s e r J a v a A p a c h e   O F B i z O F B i z / w e b t o o l s / c o n t r o l / x m l r p c U R L 使 X M L - R P C H T T P X M L o r g . a p a c h e . o f b i z . w e b a p p . c o n t r o l . R e q u e s t H a n d l e r J a v a U R L o r g . a p a c h e . o f b i z . w e b a p p . e v e n t . X m l R p c E v e n t H a n d l e r e x e c u t e ( ) X M L X M L R e a d e r p a r s e ( ) o r g . a p a c h e . o f b i z . w e b a p p . e v e n t . X m l R p c E v e n t H a n d l e r g e t R e q u e s t ( ) X M L - R P C o r g . a p a c h e . x m l r p c . p a r s e r . S e r i a l i z a b l e P a r s e r g e t R e s u l t ( ) X M L   P a y l o a d H T T P O F B i z 使 A p a c h e   C o m m o n s   B e a n U t i l s A p a c h e   R O M E 使 y s o s e r i a l X M L P a y l o a d A p a c h e   O F B i z   v 1 7 . 1 2 . 0 3 o r g . a p a c h e . o f b i z . w e b a p p . c o n t r o l . R e q u e s t H a n d l e r } < a r r a y >     < d a t a >         < v a l u e > < i 4 > 1 4 0 4 < / i 4 > < / v a l u e >         < v a l u e > < s t r i n g > S o m e t h i n g   h e r e < / s t r i n g > < / v a l u e >         < v a l u e > < i 4 > 1 < / i 4 > < / v a l u e >     < / d a t a > < / a r r a y > < b o o l e a n > 1 < / b o o l e a n > < d o u b l e > - 1 2 . 5 3 < / d o u b l e > < i n t > 4 2 < / i n t > < s t r i n g > H e l l o   w o r l d ! < / s t r i n g > < s t r u c t >     < m e m b e r >         < n a m e > f o o < / n a m e >         < v a l u e > < i 4 > 1 < / i 4 > < / v a l u e >     < / m e m b e r >     < m e m b e r >         < n a m e > b a r < / n a m e >         < v a l u e > < i 4 > 2 < / i 4 > < / v a l u e >     < / m e m b e r > < / s t r u c t > o r g . a p a c h e . x m l r p c . p a r s e r . X m l R p c R e q u e s t P a r s e r o r g . a p a c h e . x m l r p c . p a r s e r . R e c u r s i v e T y p e P a r s e r I m p l o r g . a p a c h e . x m l r p c . p a r s e r . M a p P a r s e r
p u b l i c   v o i d   d o R e q u e s t ( H t t p S e r v l e t R e q u e s t   r e q u e s t ,   H t t p S e r v l e t R e s p o n s e   r e s p o n s e ,   S t r i n g   c h a i n , G e n e r i c V a l u e   u s e r L o g i n ,   D e l e g a t o r   d e l e g a t o r )   t h r o w s   R e q u e s t H a n d l e r E x c e p t i o n , R e q u e s t H a n d l e r E x c e p t i o n A l l o w E x t e r n a l R e q u e s t s   {         C o n f i g X M L R e a d e r . R e q u e s t R e s p o n s e   e v e n t R e t u r n B a s e d R e q u e s t R e s p o n s e ;         i f   ( ! t h i s . h o s t H e a d e r s A l l o w e d . c o n t a i n s ( r e q u e s t . g e t S e r v e r N a m e ( ) ) )   {             D e b u g . l o g E r r o r ( " D o m a i n   "   +   r e q u e s t . g e t S e r v e r N a m e ( )   +   "   n o t   a c c e p t e d   t o   p r e v e n t   h o s t   h e a d e r   i n j e c t i o n   " ,   m o d u l e ) ;             t h r o w   n e w   R e q u e s t H a n d l e r E x c e p t i o n ( " D o m a i n   "   +   r e q u e s t . g e t S e r v e r N a m e ( )   +   "   n o t   a c c e p t e d   t o   p r e v e n t   h o s t   h e a d e r   i n j e c t i o n   " ) ;         }         b o o l e a n   t h r o w R e q u e s t H a n d l e r E x c e p t i o n O n M i s s i n g L o c a l R e q u e s t   =   E n t i t y U t i l P r o p e r t i e s . p r o p e r t y V a l u e E q u a l s I g n o r e C a s e ( " r e q u e s t H a n d l e r " ,   " t h r o w R e q u e s t H a n d l e r E x c e p t i o n O n M i s s i n g L o c a l R e q u e s t "         l o n g   s t a r t T i m e   =   S y s t e m . c u r r e n t T i m e M i l l i s ( ) ;         H t t p S e s s i o n   s e s s i o n   =   r e q u e s t . g e t S e s s i o n ( ) ;         C o n f i g X M L R e a d e r . C o n t r o l l e r C o n f i g   c o n t r o l l e r C o n f i g   =   g e t C o n t r o l l e r C o n f i g ( ) ;         M a p < S t r i n g ,   C o n f i g X M L R e a d e r . R e q u e s t M a p >   r e q u e s t M a p M a p   =   n u l l ;         S t r i n g   s t a t u s C o d e S t r i n g   =   n u l l ;         t r y   {             r e q u e s t M a p M a p   =   c o n t r o l l e r C o n f i g . g e t R e q u e s t M a p M a p ( ) ;             s t a t u s C o d e S t r i n g   =   c o n t r o l l e r C o n f i g . g e t S t a t u s C o d e ( ) ;         }   c a t c h   ( W e b A p p C o n f i g u r a t i o n E x c e p t i o n   e )   {             D e b u g . l o g E r r o r ( ( T h r o w a b l e ) e ,   " E x c e p t i o n   t h r o w n   w h i l e   p a r s i n g   c o n t r o l l e r . x m l   f i l e :   " ,   m o d u l e ) ;             t h r o w   n e w   R e q u e s t H a n d l e r E x c e p t i o n ( e ) ;         }         i f   ( U t i l V a l i d a t e . i s E m p t y ( s t a t u s C o d e S t r i n g ) )             s t a t u s C o d e S t r i n g   =   t h i s . d e f a u l t S t a t u s C o d e S t r i n g ;         S t r i n g   c n a m e   =   U t i l H t t p . g e t A p p l i c a t i o n N a m e ( r e q u e s t ) ;         S t r i n g   d e f a u l t R e q u e s t U r i   =   g e t R e q u e s t U r i ( r e q u e s t . g e t P a t h I n f o ( ) ) ;         i f   ( r e q u e s t . g e t A t t r i b u t e ( " t a r g e t R e q u e s t U r i " )   = =   n u l l )             i f   ( r e q u e s t . g e t S e s s i o n ( ) . g e t A t t r i b u t e ( " _ P R E V I O U S _ R E Q U E S T _ " )   ! =   n u l l )   {                 r e q u e s t . s e t A t t r i b u t e ( " t a r g e t R e q u e s t U r i " ,   r e q u e s t . g e t S e s s i o n ( ) . g e t A t t r i b u t e ( " _ P R E V I O U S _ R E Q U E S T _ " ) ) ;             }   e l s e   {                 r e q u e s t . s e t A t t r i b u t e ( " t a r g e t R e q u e s t U r i " ,   " / "   +   d e f a u l t R e q u e s t U r i ) ;             }         S t r i n g   o v e r r i d e V i e w U r i   =   g e t O v e r r i d e V i e w U r i ( r e q u e s t . g e t P a t h I n f o ( ) ) ;         S t r i n g   r e q u e s t M i s s i n g E r r o r M e s s a g e   =   " U n k n o w n   r e q u e s t   [ "   +   d e f a u l t R e q u e s t U r i   +   " ] ;   t h i s   r e q u e s t   d o e s   n o t   e x i s t   o r   c a n n o t   b e   c a l l e d   d i r e c t l y . " ;         C o n f i g X M L R e a d e r . R e q u e s t M a p   r e q u e s t M a p   =   n u l l ;         i f   ( d e f a u l t R e q u e s t U r i   ! =   n u l l )                 / / g e t   t h e   m a p p i n g   f o r   t h e   U R I                 r e q u e s t M a p   =   r e q u e s t M a p M a p . g e t ( d e f a u l t R e q u e s t U r i ) ;                 i f   ( r e q u e s t M a p   = =   n u l l )   {                         S t r i n g   d e f a u l t R e q u e s t ;                         / / [ . . . t r u n c a t e d   f o r   r e a d a b i l i t y . . . . . ]
o r g . a p a c h e . o f b i z . w e b a p p . e v e n t . X m l R p c E v e n t H a n d l e r         C o n f i g X M L R e a d e r . R e q u e s t R e s p o n s e   n e x t R e q u e s t R e s p o n s e   =   n u l l ;         i f   ( e v e n t R e t u r n   = =   n u l l   & &   r e q u e s t M a p . e v e n t   ! =   n u l l                 & &   r e q u e s t M a p . e v e n t . t y p e   ! =   n u l l                 & &   r e q u e s t M a p . e v e n t . p a t h   ! =   n u l l                 & &   r e q u e s t M a p . e v e n t . i n v o k e   ! =   n u l l )             t r y   {                 l o n g   e v e n t S t a r t T i m e   =   S y s t e m . c u r r e n t T i m e M i l l i s ( ) ;                 / / c a l l   X m l R p c E v e n t H a n d l e r                 e v e n t R e t u r n   =   r u n E v e n t ( r e q u e s t ,   r e s p o n s e ,   r e q u e s t M a p . e v e n t ,   r e q u e s t M a p ,   " r e q u e s t " ) ; p u b l i c   v o i d   e x e c u t e ( X m l R p c S t r e a m R e q u e s t C o n f i g   p C o n f i g ,   S e r v e r S t r e a m C o n n e c t i o n   p C o n n e c t i o n )   t h r o w s   X m l R p c E x c e p t i o n   {         t r y   {                 B y t e A r r a y O u t p u t S t r e a m   b a o s ;                 O u t p u t S t r e a m   i n i t i a l S t r e a m ;                 O b j e c t   r e s u l t   =   n u l l ;                 b o o l e a n   f o u n d E r r o r   =   f a l s e ;                 t r y   ( I n p u t S t r e a m   i s t r e a m   =   g e t I n p u t S t r e a m ( p C o n f i g ,   p C o n n e c t i o n ) )   {                         X m l R p c R e q u e s t   r e q u e s t   =   g e t R e q u e s t ( p C o n f i g ,   i s t r e a m ) ;                         r e s u l t   =   e x e c u t e ( r e q u e s t ) ;                 }   c a t c h   ( E x c e p t i o n   e )   {                         D e b u g . l o g E r r o r ( e ,   m o d u l e ) ;                         f o u n d E r r o r   =   t r u e ;                 }                 i f   ( i s C o n t e n t L e n g t h R e q u i r e d ( p C o n f i g ) )   {                         b a o s   =   n e w   B y t e A r r a y O u t p u t S t r e a m ( ) ;                         i n i t i a l S t r e a m   =   b a o s ;                 }   e l s e   {                         b a o s   =   n u l l ;                         i n i t i a l S t r e a m   =   p C o n n e c t i o n . n e w O u t p u t S t r e a m ( ) ;                 }                 t r y   ( O u t p u t S t r e a m   o s t r e a m   =   g e t O u t p u t S t r e a m ( p C o n n e c t i o n ,   p C o n f i g ,   i n i t i a l S t r e a m ) )   {                         i f   ( ! f o u n d E r r o r )   {                                 w r i t e R e s p o n s e ( p C o n f i g ,   o s t r e a m ,   r e s u l t ) ;                         }   e l s e   {                                 w r i t e E r r o r ( p C o n f i g ,   o s t r e a m ,   n e w   E x c e p t i o n ( " F a i l e d   t o   r e a d   X M L - R P C   r e q u e s t .   P l e a s e   c h e c k   l o g s   f o r   m o r e   i n f o r m a t i o n " ) ) ;                         }                 }                 i f   ( b a o s   ! =   n u l l )                 t r y   ( O u t p u t S t r e a m   d e s t   =   g e t O u t p u t S t r e a m ( p C o n f i g ,   p C o n n e c t i o n ,   b a o s . s i z e ( ) ) )   {                         b a o s . w r i t e T o ( d e s t ) ;
o r g . a p a c h e . x m l r p c . p a r s e r . X m l R p c R e q u e s t P a r s e r                 }                 p C o n n e c t i o n . c l o s e ( ) ;                 p C o n n e c t i o n   =   n u l l ;         }   c a t c h   ( I O E x c e p t i o n   e )   {                 t h r o w   n e w   X m l R p c E x c e p t i o n ( " I / O   e r r o r   w h i l e   p r o c e s s i n g   r e q u e s t :   "   +   e . g e t M e s s a g e ( ) ,   e ) ;         }   f i n a l l y   {                 i f   ( p C o n n e c t i o n   ! =   n u l l )                 t r y   {                         p C o n n e c t i o n . c l o s e ( ) ;                 }   c a t c h   ( I O E x c e p t i o n   e )   {                         D e b u g . l o g E r r o r ( e ,   " U n a b l e   t o   c l o s e   s t r e a m   c o n n e c t i o n " ) ;                 }         } } p r o t e c t e d   X m l R p c R e q u e s t   g e t R e q u e s t ( f i n a l   X m l R p c S t r e a m R e q u e s t C o n f i g   p C o n f i g ,   I n p u t S t r e a m   p S t r e a m )   t h r o w s   X m l R p c E x c e p t i o n   {         f i n a l   X m l R p c R e q u e s t P a r s e r   p a r s e r   =         n e w   X m l R p c R e q u e s t P a r s e r ( ( X m l R p c S t r e a m C o n f i g ) p C o n f i g ,   g e t T y p e F a c t o r y ( ) ) ;         X M L R e a d e r   x r   =   S A X P a r s e r s . n e w X M L R e a d e r ( ) ;         x r . s e t C o n t e n t H a n d l e r ( ( C o n t e n t H a n d l e r ) p a r s e r ) ;         t r y   {                 x r . s e t F e a t u r e ( " h t t p : / / a p a c h e . o r g / x m l / f e a t u r e s / d i s a l l o w - d o c t y p e - d e c l " ,   t r u e ) ;                 x r . s e t F e a t u r e ( " h t t p : / / a p a c h e . o r g / x m l / f e a t u r e s / n o n v a l i d a t i n g / l o a d - e x t e r n a l - d t d " ,   f a l s e ) ;                 x r . s e t F e a t u r e ( " h t t p : / / x m l . o r g / s a x / f e a t u r e s / e x t e r n a l - g e n e r a l - e n t i t i e s " ,   f a l s e ) ;                 x r . s e t F e a t u r e ( " h t t p : / / x m l . o r g / s a x / f e a t u r e s / e x t e r n a l - p a r a m e t e r - e n t i t i e s " ,   f a l s e ) ;                 / / t h e   p a r s i n g   o f   X M L   i n   t h e   H T T P   b o d y   s t a r t s   i n   t h i s   f u n c t i o n                 x r . p a r s e ( n e w   I n p u t S o u r c e ( p S t r e a m ) ) ;                 / / t r u n c a t e d         } } p u b l i c   v o i d   e n d E l e m e n t ( S t r i n g   p U R I ,   S t r i n g   p L o c a l N a m e ,   S t r i n g   p Q N a m e )   t h r o w s   S A X E x c e p t i o n   {         / / X M L - R P C   p a r s i n g   h a p p e n s   h e r e         s w i t c h ( - - l e v e l )   {                 c a s e   0 :                         b r e a k ;                 c a s e   1 :                         i f   ( i n M e t h o d N a m e )   {                                 i f   ( " " . e q u a l s ( p U R I )   & &   " m e t h o d N a m e " . e q u a l s ( p L o c a l N a m e ) )   {                                         i f   ( m e t h o d N a m e   = =   n u l l )   {                                                 m e t h o d N a m e   =   " " ;
o r g . a p a c h e . x m l r p c . p a r s e r . S e r i a l i z a b l e P a r s e r                                                 }                                         }   e l s e   {                                                 t h r o w   n e w   S A X P a r s e E x c e p t i o n ( " E x p e c t e d   / m e t h o d N a m e ,   g o t   "   +   n e w   Q N a m e ( p U R I ,   p L o c a l N a m e ) ,   g e t D o c u m e n t L o c a t o r ( ) ) ;                                                 }                                         i n M e t h o d N a m e   =   f a l s e ;                                 }   e l s e   i f   ( ! " " . e q u a l s ( p U R I )   | |   ! " p a r a m s " . e q u a l s ( p L o c a l N a m e ) )   {                                         t h r o w   n e w   S A X P a r s e E x c e p t i o n ( " E x p e c t e d   / p a r a m s ,   g o t   "   +   n e w   Q N a m e ( p U R I ,   p L o c a l N a m e ) ,   g e t D o c u m e n t L o c a t o r ( ) ) ;                                 }                                 b r e a k ;                         c a s e   2 :                                 i f   ( ! " " . e q u a l s ( p U R I )   | |   ! " p a r a m " . e q u a l s ( p L o c a l N a m e ) )   {                                         t h r o w   n e w   S A X P a r s e E x c e p t i o n ( " E x p e c t e d   / p a r a m ,   g o t   "   +   n e w   Q N a m e ( p U R I ,   p L o c a l N a m e ) ,   g e t D o c u m e n t L o c a t o r ( ) ) ;                                 }                                 b r e a k ;                         c a s e   3 :                                 i f   ( ! " " . e q u a l s ( p U R I )   | |   ! " v a l u e " . e q u a l s ( p L o c a l N a m e ) )   {                                         t h r o w   n e w   S A X P a r s e E x c e p t i o n ( " E x p e c t e d   / v a l u e ,   g o t   "   +   n e w   Q N a m e ( p U R I ,   p L o c a l N a m e ) ,   g e t D o c u m e n t L o c a t o r ( ) ) ;                                 }                                 e n d V a l u e T a g ( ) ;                                 b r e a k ;                         d e f a u l t :                                 s u p e r . e n d E l e m e n t ( p U R I ,   p L o c a l N a m e ,   p Q N a m e ) ;                                 b r e a k ;                   } } p u b l i c   c l a s s   S e r i a l i z a b l e P a r s e r   e x t e n d s   B y t e A r r a y P a r s e r   {         p u b l i c   O b j e c t   g e t R e s u l t ( )   t h r o w s   X m l R p c E x c e p t i o n   {                 t r y   {                         b y t e [ ]   r e s   =   ( b y t e [ ] )   s u p e r . g e t R e s u l t ( ) ;                         B y t e A r r a y I n p u t S t r e a m   b a i s   =   n e w   B y t e A r r a y I n p u t S t r e a m ( r e s ) ;                         O b j e c t I n p u t S t r e a m   o i s   =   n e w   O b j e c t I n p u t S t r e a m ( b a i s ) ;                         / / i n s e c u r e   d e s e r i a l i z a t i o n   h a p p e n s   h e r e                         r e t u r n   o i s . r e a d O b j e c t ( ) ;                 }   c a t c h   ( I O E x c e p t i o n   e )   {                         t h r o w   n e w   X m l R p c E x c e p t i o n ( " F a i l e d   t o   r e a d   r e s u l t   o b j e c t :   "   +   e . g e t M e s s a g e ( ) ,   e ) ;                 }   c a t c h   ( C l a s s N o t F o u n d E x c e p t i o n   e )   {                         t h r o w   n e w   X m l R p c E x c e p t i o n ( " F a i l e d   t o   l o a d   c l a s s   f o r   r e s u l t   o b j e c t :   "   +   e . g e t M e s s a g e ( ) ,   e ) ;                 }         }
X M L H T T P X M L 便 }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则