[18216] 2020-11-28_一道CTF来审计学习PHP对象注入

文档创建者:s7ckTeam
浏览次数:1
最后更新:2025-01-18
2020-11-28_一道CTF来审计学习PHP对象注入 C T F P H P Q f t m e r   H A C K   2 0 2 0 - 1 1 - 2 8 C T F P H P P H P 访 < ? p h p i n c l u d e ( ' s e c r e t . p h p ' ) ; $ s a n d b o x _ d i r   =   ' s a n d b o x / ' . s h a 1 ( $ _ S E R V E R [ ' R E M O T E _ A D D R ' ] ) ; g l o b a l   $ s a n d b o x _ d i r ; f u n c t i o n   m y s e r i a l i z e ( $ a ,   $ s e c r e t )   {         $ b   =   s t r _ r e p l a c e ( " . . / " , " . / " ,   s e r i a l i z e ( $ a ) ) ;         r e t u r n   $ b . h a s h _ h m a c ( ' s h a 2 5 6 ' ,   $ b ,   $ s e c r e t ) ; } r o b o t s . t x t U s e r - a g e n t :   * D i s a l l o w :   / i n d e x . t x t i n d e x . t x t
f u n c t i o n   m y u n s e r i a l i z e ( $ a ,   $ s e c r e t )   {         i f ( s u b s t r ( $ a ,   - 6 4 )   = = =   h a s h _ h m a c ( ' s h a 2 5 6 ' ,   s u b s t r ( $ a ,   0 ,   - 6 4 ) ,   $ s e c r e t ) ) {                 r e t u r n   u n s e r i a l i z e ( s u b s t r ( $ a ,   0 ,   - 6 4 ) ) ;         } } c l a s s   U p l o a d F i l e   {         f u n c t i o n   u p l o a d ( $ f a k e n a m e ,   $ c o n t e n t )   {                 g l o b a l   $ s a n d b o x _ d i r ;                 $ i n f o   =   p a t h i n f o ( $ f a k e n a m e ) ;                 $ e x t   =   i s s e t ( $ i n f o [ ' e x t e n s i o n ' ] )   ?   " . " . $ i n f o [ ' e x t e n s i o n ' ]   :   ' . t x t ' ;                 f i l e _ p u t _ c o n t e n t s ( $ s a n d b o x _ d i r . ' / ' . s h a 1 ( $ c o n t e n t ) . $ e x t ,   $ c o n t e n t ) ;                 $ t h i s - > f a k e n a m e   =   $ f a k e n a m e ;                 $ t h i s - > r e a l n a m e   =   s h a 1 ( $ c o n t e n t ) . $ e x t ;         }         f u n c t i o n   o p e n ( $ f a k e n a m e ,   $ r e a l n a m e )   {                 g l o b a l   $ s a n d b o x _ d i r ;                 $ a n a l y s i s   =   " $ f a k e n a m e   i s   i n   f o l d e r   $ s a n d b o x _ d i r / $ r e a l n a m e . " ;                 r e t u r n   $ a n a l y s i s ;         } } i f ( ! i s _ d i r ( $ s a n d b o x _ d i r ) )   {         m k d i r ( $ s a n d b o x _ d i r , 0 7 7 7 , t r u e ) ; } i f ( ! i s _ f i l e ( $ s a n d b o x _ d i r . ' / . h t a c c e s s ' ) )   {         f i l e _ p u t _ c o n t e n t s ( $ s a n d b o x _ d i r . ' / . h t a c c e s s ' ,   " p h p _ f l a g   e n g i n e   o f f " ) ; } i f ( ! i s s e t ( $ _ G E T [ ' a c t i o n ' ] ) )   {         $ _ G E T [ ' a c t i o n ' ]   =   ' h o m e ' ; }
i f ( ! i s s e t ( $ _ C O O K I E [ ' f i l e s ' ] ) )   {         s e t c o o k i e ( ' f i l e s ' ,   m y s e r i a l i z e ( [ ] ,   $ s e c r e t ) ) ;         $ _ C O O K I E [ ' f i l e s ' ]   =   m y s e r i a l i z e ( [ ] ,   $ s e c r e t ) ; } s w i t c h ( $ _ G E T [ ' a c t i o n ' ] ) {         c a s e   ' h o m e ' :         d e f a u l t :                 $ c o n t e n t   =   " < f o r m   m e t h o d = ' p o s t '   a c t i o n = ' i n d e x . p h p ? a c t i o n = u p l o a d '   e n c t y p e = ' m u l t i p a r t / f o r m - d a t a ' > < i n p u t   t y p e = ' f i l e '   n a m e = ' f i l e ' > < i n p u t   t y p e = ' s u b m i t ' / > < / f o r m > " ;                 $ f i l e s   =   m y u n s e r i a l i z e ( $ _ C O O K I E [ ' f i l e s ' ] ,   $ s e c r e t ) ;                 i f ( $ f i l e s )   {                         $ c o n t e n t   . =   " < u l > " ;                         $ i   =   0 ;                         f o r e a c h ( $ f i l e s   a s   $ f i l e )   {                                 $ c o n t e n t   . =   " < l i > < f o r m   m e t h o d = ' P O S T '   a c t i o n = ' i n d e x . p h p ? a c t i o n = c h a n g e n a m e & i = " . $ i . " ' > < i n p u t   t y p e = ' t e x t '   n a m e = ' n e w n a m e '   v a l u e = ' " . h t m l s p e c i a l c h a r s ( $ f i l e - > f a k e n a m e ) . " ' > < i n p u t   t y p e = ' s u b m i t '   v a l u e = ' C l i c k   t o   e d i t   n a m e ' > < / f o r m > < a   h r e f = ' i n d e x . p h p ? a c t i o n = o p e n & i = " . $ i . " '   t a r g e t = ' _ b l a n k ' > C l i c k   t o   s h o w   l o c a t i o n s < / a > < / l i > " ;                                 $ i + + ;                         }                         $ c o n t e n t   . =   " < / u l > " ;                 }                 e c h o   $ c o n t e n t ;                 b r e a k ;         c a s e   ' u p l o a d ' :                 i f ( $ _ S E R V E R [ ' R E Q U E S T _ M E T H O D ' ]   = = =   " P O S T " )   {                         i f ( i s s e t ( $ _ F I L E S [ ' f i l e ' ] ) )   {                                 $ u p l o a d f i l e   =   n e w   U p l o a d F i l e ;                                 $ u p l o a d f i l e - > u p l o a d ( $ _ F I L E S [ ' f i l e ' ] [ ' n a m e ' ] ,   f i l e _ g e t _ c o n t e n t s ( $ _ F I L E S [ ' f i l e ' ] [ ' t m p _ n a m e ' ] ) ) ;                                 $ f i l e s   =   m y u n s e r i a l i z e ( $ _ C O O K I E [ ' f i l e s ' ] ,   $ s e c r e t ) ;                                 $ f i l e s [ ]   =   $ u p l o a d f i l e ;
                                $ f i l e s [ ]   =   $ u p l o a d f i l e ;                                 s e t c o o k i e ( ' f i l e s ' ,   m y s e r i a l i z e ( $ f i l e s ,   $ s e c r e t ) ) ;                                 h e a d e r ( " L o c a t i o n :   i n d e x . p h p ? a c t i o n = h o m e " ) ;                                 e x i t ;                         }                 }                 b r e a k ;         c a s e   ' c h a n g e n a m e ' :                 i f ( $ _ S E R V E R [ ' R E Q U E S T _ M E T H O D ' ]   = = =   " P O S T " )   {                         $ f i l e s   =   m y u n s e r i a l i z e ( $ _ C O O K I E [ ' f i l e s ' ] ,   $ s e c r e t ) ;                         i f ( i s s e t ( $ f i l e s [ $ _ G E T [ ' i ' ] ] )   & &   i s s e t ( $ _ P O S T [ ' n e w n a m e ' ] ) ) {                                 $ f i l e s [ $ _ G E T [ ' i ' ] ] - > f a k e n a m e   =   $ _ P O S T [ ' n e w n a m e ' ] ;                         }                         s e t c o o k i e ( ' f i l e s ' ,   m y s e r i a l i z e ( $ f i l e s ,   $ s e c r e t ) ) ;                 }                 h e a d e r ( " L o c a t i o n :   i n d e x . p h p ? a c t i o n = h o m e " ) ;                 e x i t ;         c a s e   ' o p e n ' :                 $ f i l e s   =   m y u n s e r i a l i z e ( $ _ C O O K I E [ ' f i l e s ' ] ,   $ s e c r e t ) ;                 i f ( i s s e t ( $ f i l e s [ $ _ G E T [ ' i ' ] ] ) ) {                         e c h o   $ f i l e s [ $ _ G E T [ ' i ' ] ] - > o p e n ( $ f i l e s [ $ _ G E T [ ' i ' ] ] - > f a k e n a m e ,   $ f i l e s [ $ _ G E T [ ' i ' ] ] - > r e a l n a m e ) ;                 }                 e x i t ;         c a s e   ' r e s e t ' :                 s e t c o o k i e ( ' f i l e s ' ,   m y s e r i a l i z e ( [ ] ,   $ s e c r e t ) ) ;                 $ _ C O O K I E [ ' f i l e s ' ]   =   m y s e r i a l i z e ( [ ] ,   $ s e c r e t ) ;                 a r r a y _ m a p ( ' u n l i n k ' ,   g l o b ( " $ s a n d b o x _ d i r / * " ) ) ;                 h e a d e r ( " L o c a t i o n :   i n d e x . p h p ? a c t i o n = h o m e " ) ;                 e x i t ; } I n s o m n i h a c k   T e a s e r   2 0 1 8
c o o k i e $ _ C O O K I E [ ' f i l e s ' ] U p l o a d F i l e f a k e n a m e r e a l n a m e h a s h / h o m e :   c o o k i e c a s e   ' h o m e ' :         d e f a u l t :                 $ c o n t e n t   =   " < f o r m   m e t h o d = ' p o s t '   a c t i o n = ' i n d e x . p h p ? a c t i o n = u p l o a d '   e n c t y p e = ' m u l t i p a r t / f o r m - d a t a ' > < i n p u t   t y p e = ' f i l e '   n a m e = ' f i l e ' > < i n p u t   t y p e = ' s u b m i t ' / > < / f o r m > " ;                 $ f i l e s   =   m y u n s e r i a l i z e ( $ _ C O O K I E [ ' f i l e s ' ] ,   $ s e c r e t ) ;                 i f ( $ f i l e s )   {                         $ c o n t e n t   . =   " < u l > " ;                         $ i   =   0 ;                         f o r e a c h ( $ f i l e s   a s   $ f i l e )   {                                 $ c o n t e n t   . =   " < l i > < f o r m   m e t h o d = ' P O S T '   a c t i o n = ' i n d e x . p h p ? a c t i o n = c h a n g e n a m e & i = " . $ i . " ' > < i n p u t   t y p e = ' t e x t '   n a m e = ' n e w n a m e '   v a l u e = ' " . h t m l s p e c i a l c h a r s ( $ f i l e - > f a k e n a m e ) . " ' > < i n p u t   t y p e = ' s u b m i t '   v a l u e = ' C l i c k   t o   e d i t   n a m e ' > < / f o r m > < a   h r e f = ' i n d e x . p h p ? a c t i o n = o p e n & i = " . $ i . " '   t a r g e t = ' _ b l a n k ' > C l i c k   t o   s h o w   l o c a t i o n s < / a > < / l i > " ;                                 $ i + + ;                         }                         $ c o n t e n t   . =   " < / u l > " ;                 }                 e c h o   $ c o n t e n t ;                 b r e a k ; C o o k i e / u p l o a d :   f i l e s U p l o a d F i l e U p l o a d F i l e
c a s e   ' u p l o a d ' :                 i f ( $ _ S E R V E R [ ' R E Q U E S T _ M E T H O D ' ]   = = =   " P O S T " )   {                         i f ( i s s e t ( $ _ F I L E S [ ' f i l e ' ] ) )   {                                 $ u p l o a d f i l e   =   n e w   U p l o a d F i l e ;                                 $ u p l o a d f i l e - > u p l o a d ( $ _ F I L E S [ ' f i l e ' ] [ ' n a m e ' ] ,   f i l e _ g e t _ c o n t e n t s ( $ _ F I L E S [ ' f i l e ' ] [ ' t m p _ n a m e ' ] ) ) ;                                 $ f i l e s   =   m y u n s e r i a l i z e ( $ _ C O O K I E [ ' f i l e s ' ] ,   $ s e c r e t ) ;                                 $ f i l e s [ ]   =   $ u p l o a d f i l e ;                                 s e t c o o k i e ( ' f i l e s ' ,   m y s e r i a l i z e ( $ f i l e s ,   $ s e c r e t ) ) ;                                 h e a d e r ( " L o c a t i o n :   i n d e x . p h p ? a c t i o n = h o m e " ) ;                                 e x i t ;                         }                 }                 b r e a k ; c o o k i e f i l e s c o o k i e f i l e s U p l o a d F i l e U p l o a d F i l e u p l o a d u p l o a d f i l e
c l a s s   U p l o a d F i l e   {         f u n c t i o n   u p l o a d ( $ f a k e n a m e ,   $ c o n t e n t )   {                 g l o b a l   $ s a n d b o x _ d i r ;                 $ i n f o   =   p a t h i n f o ( $ f a k e n a m e ) ;                 $ e x t   =   i s s e t ( $ i n f o [ ' e x t e n s i o n ' ] )   ?   " . " . $ i n f o [ ' e x t e n s i o n ' ]   :   ' . t x t ' ;                 f i l e _ p u t _ c o n t e n t s ( $ s a n d b o x _ d i r . ' / ' . s h a 1 ( $ c o n t e n t ) . $ e x t ,   $ c o n t e n t ) ;                 $ t h i s - > f a k e n a m e   =   $ f a k e n a m e ;                 $ t h i s - > r e a l n a m e   =   s h a 1 ( $ c o n t e n t ) . $ e x t ;         }         f u n c t i o n   o p e n ( $ f a k e n a m e ,   $ r e a l n a m e )   {                 g l o b a l   $ s a n d b o x _ d i r ;                 $ a n a l y s i s   =   " $ f a k e n a m e   i s   i n   f o l d e r   $ s a n d b o x _ d i r / $ r e a l n a m e . " ;                 r e t u r n   $ a n a l y s i s ;         } } / c h a n g e n a m e : f a k e n a m e c a s e   ' c h a n g e n a m e ' :                 i f ( $ _ S E R V E R [ ' R E Q U E S T _ M E T H O D ' ]   = = =   " P O S T " )   {                         $ f i l e s   =   m y u n s e r i a l i z e ( $ _ C O O K I E [ ' f i l e s ' ] ,   $ s e c r e t ) ;                         i f ( i s s e t ( $ f i l e s [ $ _ G E T [ ' i ' ] ] )   & &   i s s e t ( $ _ P O S T [ ' n e w n a m e ' ] ) ) {                                 $ f i l e s [ $ _ G E T [ ' i ' ] ] - > f a k e n a m e   =   $ _ P O S T [ ' n e w n a m e ' ] ;                         }                         s e t c o o k i e ( ' f i l e s ' ,   m y s e r i a l i z e ( $ f i l e s ,   $ s e c r e t ) ) ;                 }                 h e a d e r ( " L o c a t i o n :   i n d e x . p h p ? a c t i o n = h o m e " ) ;                 e x i t ; c o o k i e f i l e s i U p l o a d F i l e f a k e n a m e
/ o p e n :   f a k e n a m e r e a l n a m e c a s e   ' o p e n ' :                 $ f i l e s   =   m y u n s e r i a l i z e ( $ _ C O O K I E [ ' f i l e s ' ] ,   $ s e c r e t ) ;                 i f ( i s s e t ( $ f i l e s [ $ _ G E T [ ' i ' ] ] ) ) {                         e c h o   $ f i l e s [ $ _ G E T [ ' i ' ] ] - > o p e n ( $ f i l e s [ $ _ G E T [ ' i ' ] ] - > f a k e n a m e ,   $ f i l e s [ $ _ G E T [ ' i ' ] ] - > r e a l n a m e ) ;                 }                 e x i t ; / r e s e t :   s a n d b o x c a s e   ' r e s e t ' :                 s e t c o o k i e ( ' f i l e s ' ,   m y s e r i a l i z e ( [ ] ,   $ s e c r e t ) ) ;                 $ _ C O O K I E [ ' f i l e s ' ]   =   m y s e r i a l i z e ( [ ] ,   $ s e c r e t ) ;                 a r r a y _ m a p ( ' u n l i n k ' ,   g l o b ( " $ s a n d b o x _ d i r / * " ) ) ;                 h e a d e r ( " L o c a t i o n :   i n d e x . p h p ? a c t i o n = h o m e " ) ;                 e x i t ; c o o k i e $ s a n d b o x _ d i r   =   ' s a n d b o x / ' . s h a 1 ( $ _ S E R V E R [ ' R E M O T E _ A D D R ' ] ) ; P H P . h t a c c e s s p h p _ f l a g   e n g i n e   o f f i U p l o a d F i l e o p e n f a k e n a m e r e a l n a m e $ s a n d b o x _ d i r /
i f ( ! i s _ d i r ( $ s a n d b o x _ d i r ) )   {         m k d i r ( $ s a n d b o x _ d i r , 0 7 7 7 , t r u e ) ; } i f ( ! i s _ f i l e ( $ s a n d b o x _ d i r . ' / . h t a c c e s s ' ) )   {         f i l e _ p u t _ c o n t e n t s ( $ s a n d b o x _ d i r . ' / . h t a c c e s s ' ,   " p h p _ f l a g   e n g i n e   o f f " ) ; } 使 U p l o a d F i l e f a k e n a m e r e a l n a m e O p e n f a k e n a m e r e a l n a m e U p l o a d F i l e m y s e r i a l i z e ( ) C o o k i e W e b C o o k i e m y u n s e r i a l i z e d ( ) U p l o a d F i l e U p l o a d F i l e f u n c t i o n   m y s e r i a l i z e ( $ a ,   $ s e c r e t )   {         $ b   =   s t r _ r e p l a c e ( " . . / " , " . / " ,   s e r i a l i z e ( $ a ) ) ;         r e t u r n   $ b . h a s h _ h m a c ( ' s h a 2 5 6 ' ,   $ b ,   $ s e c r e t ) ; } f u n c t i o n   m y u n s e r i a l i z e ( $ a ,   $ s e c r e t )   {         i f ( s u b s t r ( $ a ,   - 6 4 )   = = =   h a s h _ h m a c ( ' s h a 2 5 6 ' ,   s u b s t r ( $ a ,   0 ,   - 6 4 ) ,   $ s e c r e t ) ) {                 r e t u r n   u n s e r i a l i z e ( s u b s t r ( $ a ,   0 ,   - 6 4 ) ) ; U p l o a d F i l e a : 2 : { i : 0 ; O : 1 0 : " U p l o a d F i l e " : 2 : { s : 8 : " f a k e n a m e " ; s : 9 : " p i c t u . j p g " ; s : 8 : " r e a l n a m e " ; s : 4 4 : " 3 c 4 5 7 8 8 3 4 e e d 3 f 0 5 b d 8 b 0 9 9 e 7 f c 2 c 6 3 3 a f 6 c 5 f d c . j p g " ; } i : 1 ; O : 1 0 : " U p l o a d F i l e " : 2 : { s : 8 : " f a k e n a m e " ; s : 7 : " q w e . j p g " ; s : 8 : " r e a l n a m e " ; s : 4 4 : " 7 5 a 9 c 6 a 2 f c b 5 d 7 c 6 8 0 9 e c 7 c 1 a 5 8 5 9 a 7 f 8 3 6 3 7 1 5 9 . j p g " ; } } f 9 6 f 3 7 c c a 8 0 e c a e 3 c 5 f 2 f 3 0 b e 4 9 7 c 2 7 0 2 4 a 2 3 a 2 4 0 9 3 e 9 e 7 a 2 6 c 9 7 2 1 b e 0 2 5 f b 7 b
        } } c l a s s   U p l o a d F i l e   {         f u n c t i o n   u p l o a d ( $ f a k e n a m e ,   $ c o n t e n t )   {                 g l o b a l   $ s a n d b o x _ d i r ;                 $ i n f o   =   p a t h i n f o ( $ f a k e n a m e ) ;                 $ e x t   =   i s s e t ( $ i n f o [ ' e x t e n s i o n ' ] )   ?   " . " . $ i n f o [ ' e x t e n s i o n ' ]   :   ' . t x t ' ;                 f i l e _ p u t _ c o n t e n t s ( $ s a n d b o x _ d i r . ' / ' . s h a 1 ( $ c o n t e n t ) . $ e x t ,   $ c o n t e n t ) ;                 $ t h i s - > f a k e n a m e   =   $ f a k e n a m e ;                 $ t h i s - > r e a l n a m e   =   s h a 1 ( $ c o n t e n t ) . $ e x t ;         }         f u n c t i o n   o p e n ( $ f a k e n a m e ,   $ r e a l n a m e )   {                 g l o b a l   $ s a n d b o x _ d i r ;                 $ a n a l y s i s   =   " $ f a k e n a m e   i s   i n   f o l d e r   $ s a n d b o x _ d i r / $ r e a l n a m e . " ;                 r e t u r n   $ a n a l y s i s ;         } } s w i t c h ( $ _ G E T [ ' a c t i o n ' ] ) {         c a s e   ' o p e n ' :                 $ f i l e s   =   m y u n s e r i a l i z e ( $ _ C O O K I E [ ' f i l e s ' ] ,   $ s e c r e t ) ;                 i f ( i s s e t ( $ f i l e s [ $ _ G E T [ ' i ' ] ] ) ) {                         e c h o   $ f i l e s [ $ _ G E T [ ' i ' ] ] - > o p e n ( $ f i l e s [ $ _ G E T [ ' i ' ] ] - > f a k e n a m e ,   $ f i l e s [ $ _ G E T [ ' i ' ] ] - > r e a l n a m e ) ;                 }                 e x i t ; } s a n d b o x p h p s h e l l c o o k i e w a k e u p ( ) d e s t r u c t ( ) m a g i c 使 . h t a c c e s s
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则