[6795] 2020-06-27_Struts2漏洞系列之【S2-032】特殊参数名前缀`method`导致的OGNL表达式执行

文档创建者:s7ckTeam
浏览次数:6
最后更新:2025-01-17
2020-06-27_Struts2漏洞系列之【S2-032】特殊参数名前缀`method`导致的OGNL表达式执行 S t r u t s 2 S 2 - 0 3 2   ` m e t h o d : `   O G N L E   2 0 2 0 - 0 6 - 2 7   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 0 7         O G N L O G N L S t r u t s   2 . 3 . 2 0     2 . 3 . 2 8 2 . 3 . 2 0 . 3 2 . 3 . 2 4 . 3   . m e t h o d : A c t i o n
        t r u e 2 . 3 . 1 5 . 1 t r u e 2 . 3 . 1 5 . 2 f a l s e                     S 2 - 0 1 6   O G N L                               s t r u t s . x m l D y n a m i c M e t h o d I n v o c a t i o n < c o n s t a n t   n a m e = " s t r u t s . e n a b l e . D y n a m i c M e t h o d I n v o c a t i o n "   v a l u e = " t r u e "   / > D y n a m i c   M e t h o d   I n v o c a t i o n a c t i o n A c t i o n l o g i n ! t e s t . a c t i o n e x e c u t e ( ) D e f a u l t A c t i o n M a p p e r r e d i r e c t : r e d i r e c t A c t i o n a c t i o n : m e t h o d : D e f a u l t A c t i o n M a p p e r m e t h o d :
  i f                           D y n a m i c M e t h o d I n v o c a t i o n m e t h o d : A c t i o n M a p p i n g m e t h o d A c t i o n M a p p i n g A c t i o n f i n d A c t i o n M a p p i n g S t r u t s P r e p a r e A n d E x e c u t e F i l t e
                  使       t h i s . e x e c u t e . e x e c u t e A c t i o n ( r e q u e s t ,   r e s p o n s e ,   m a p p i n g ) ; A c t i o n M a p p i n g A c t i o n p u b l i c   v o i d   e x e c u t e A c t i o n ( 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 ,   A c t i o n M a p p i n g   m a p p i n g )         t h i s . d i s p a t c h e r . s e r v i c e A c t i o n ( r e q u e s t ,   r e s p o n s e ,   m a p p i n g ) ; } D i s p a t c h e r s e r v i c e A c t i o n r e q u e s t r e s p o n s e m a p p i n g
      p u t       a c t i o n     a c t i o n     A c t i o n     C o n t e x t M a p O g n l V a l u e S t a c k m a p p i n g n a m e s p a c e n a m e m e t h o d A c t i o n P r o x y p u b l i c   v o i d   s e r v i c e A c t i o n ( 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 ,   A c t i o n M a p p i n g   m a p p i n g )         M a p < S t r i n g ,   O b j e c t >   e x t r a C o n t e x t   =   t h i s . c r e a t e C o n t e x t M a p ( r e q u e s t ,   r e s p o n s e ,   m a p p i n g ) ;         V a l u e S t a c k   s t a c k   =   ( V a l u e S t a c k ) r e q u e s t . g e t A t t r i b u t e ( " s t r u t s . v a l u e S t a c k " ) ;         b o o l e a n   n u l l S t a c k   =   s t a c k   = =   n u l l ;         i f   ( n u l l S t a c k )   {                 A c t i o n C o n t e x t   c t x   =   A c t i o n C o n t e x t . g e t C o n t e x t ( ) ;                 i f   ( c t x   ! =   n u l l )   {                         s t a c k   =   c t x . g e t V a l u e S t a c k ( ) ;                 }         }         i f   ( s t a c k   ! =   n u l l )   {                 e x t r a C o n t e x t . p u t ( " c o m . o p e n s y m p h o n y . x w o r k 2 . u t i l . V a l u e S t a c k . V a l u e S t a c k " ,   t h i s . v a l u e S t a c k F a c t o r y . c r e a t e V a l u e S t a c k         }         S t r i n g   t i m e r K e y   =   " H a n d l i n g   r e q u e s t   f r o m   D i s p a t c h e r " ;         t r y   {                 U t i l T i m e r S t a c k . p u s h ( t i m e r K e y ) ;                 S t r i n g   n a m e s p a c e   =   m a p p i n g . g e t N a m e s p a c e ( ) ;                 S t r i n g   n a m e   =   m a p p i n g . g e t N a m e ( ) ;                 S t r i n g   m e t h o d   =   m a p p i n g . g e t M e t h o d ( ) ;                 A c t i o n P r o x y   p r o x y   =   ( ( A c t i o n P r o x y F a c t o r y ) t h i s . g e t C o n t a i n e r ( ) . g e t I n s t a n c e ( A c t i o n P r o x y F a c t o r y . c l a s s ) ) .                 r e q u e s t . s e t A t t r i b u t e ( " s t r u t s . v a l u e S t a c k " ,   p r o x y . g e t I n v o c a t i o n ( ) . g e t S t a c k ( ) ) ;                 i f   ( m a p p i n g . g e t R e s u l t ( )   ! =   n u l l )   {                         R e s u l t   r e s u l t   =   m a p p i n g . g e t R e s u l t ( ) ;                         r e s u l t . e x e c u t e ( p r o x y . g e t I n v o c a t i o n ( ) ) ;                 }   e l s e   {                         p r o x y . e x e c u t e ( ) ;                 }             . . . . . . }
              A c t i o n                     D e f a u l t A c t i o n P r o x y F a c t o r y c r e a t e A c t i o n P r o x y D e f a u l t A c t i o n I n v o c a t i o n i n v o k e t h i s . c r e a t e A c t i o n P r o x y S t r u t s A c t i o n P r o x y p u b l i c   A c t i o n P r o x y   c r e a t e A c t i o n P r o x y ( A c t i o n I n v o c a t i o n   i n v ,   S t r i n g   n a m e s p a c e ,   S t r i n g   a c t i o n N a m e ,   S t r i n g   m e t h o d N a m e         S t r u t s A c t i o n P r o x y   p r o x y   =   n e w   S t r u t s A c t i o n P r o x y ( i n v ,   n a m e s p a c e ,   a c t i o n N a m e ,   m e t h o d N a m e ,   e x e c u t e R e s u l t ,         t h i s . c o n t a i n e r . i n j e c t ( p r o x y ) ;         p r o x y . p r e p a r e ( ) ;         r e t u r n   p r o x y ; } D e f a u l t A c t i o n P r o x y p u b l i c   S t r u t s A c t i o n P r o x y ( A c t i o n I n v o c a t i o n   i n v ,   S t r i n g   n a m e s p a c e ,   S t r i n g   a c t i o n N a m e ,   S t r i n g   m e t h o d N a m e ,   b o o l e a n         s u p e r ( i n v ,   n a m e s p a c e ,   a c t i o n N a m e ,   m e t h o d N a m e ,   e x e c u t e R e s u l t ,   c l e a n u p C o n t e x t ) ; } D e f a u l t A c t i o n P r o x y m e t h o d N a m e S t r i n g E s c a p e U t i l s . e s c a p e H t m l 4
      / j s / h t m l p a y l o a d     使                         S t r i n g E s c a p e U t i l s . e s c a p e E c m a S c r i p t e s c a p e E c m a S c r i p t ( S t r i n g   i n p u t )   /   u n e s c a p e E c m a S c r i p t ( S t r i n g   i n p u t ) e s c a p e H t m l 4 ( S t r i n g   i n p u t )   /   u n e s c a p e H t m l 4 ( S t r i n g   i n p u t ) <   >   "   '   & # p a r a m e t e r s . [ 0 ] O g n l V a l u e S t a c k S t r u t s A c t i o n P r o x y e x e c u t e ( ) t h i s . i n v o c a t i o n . i n v o k e ( ) ; t h i s . i n v o c a t i o n D e f a u l t A c t i o n I n v o c a t i o n
      A c t i o n A c t i o n   p u b l i c   S t r i n g   e x e c u t e ( )   t h r o w s   E x c e p t i o n   {         A c t i o n C o n t e x t   p r e v i o u s   =   A c t i o n C o n t e x t . g e t C o n t e x t ( ) ;         A c t i o n C o n t e x t . s e t C o n t e x t ( t h i s . i n v o c a t i o n . g e t I n v o c a t i o n C o n t e x t ( ) ) ;         S t r i n g   v a r 2 ;         t r y   {             v a r 2   =   t h i s . i n v o c a t i o n . i n v o k e ( ) ;         }   f i n a l l y   {             i f   ( t h i s . c l e a n u p C o n t e x t )   {                 A c t i o n C o n t e x t . s e t C o n t e x t ( p r e v i o u s ) ;             }         }         r e t u r n   v a r 2 ; } i n v o k e p u b l i c   S t r i n g   i n v o k e A c t i o n O n l y ( )   t h r o w s   E x c e p t i o n   {         r e t u r n   t h i s . i n v o k e A c t i o n ( t h i s . g e t A c t i o n ( ) ,   t h i s . p r o x y . g e t C o n f i g ( ) ) ; }
      p a y l o a d   p a y l o a d     p a y l o a d   m e t h o d N a m e g e t V a l u e ( ) 1 ? # x x : # r e q u e s t . t o S t r i n g
      O G N L   S t r u t s   2 . 3 . 2 0       c o m . o p e n s y m p h o n y . x w o r k 2 . D e f a u l t A c t i o n I n v o c a t i o n . i n v o k e A c t i o n ( ) m e t h o d N a m e s t r u t s . e x c l u d e d C l a s s e s e x c l u d e d P a c k a g e N a m e P a t t e r n s
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则