[12937] 2018-07-12_浅析AMR智能合约批量转账溢出漏洞

文档创建者:s7ckTeam
浏览次数:8
最后更新:2025-01-18
2018-07-12_浅析AMR智能合约批量转账溢出漏洞 A M R B U G X   F r e e B u f   2 0 1 8 - 0 7 - 1 2 A M R B U G X . I O t o t a l T o k e n s T o T r a n s f e r + = t o k e n s [ i ] ; t o t a l T o k e n s T o T r a n s f e r a s s e r t ( b a l a n c e s [ m s g . s e n d e r ] > t o t a l T o k e n s T o T r a n s f e r ) ; t o k e n t o k e n h t t p s : / / e t h e r s c a n . i o / t x / 0 x d 4 e e 4 2 c 4 5 4 9 4 1 f c c b 5 d 0 3 f 6 1 5 5 e 2 8 8 f 2 8 c c 0 0 4 7 3 b a 9 2 7 e e 4 b 1 9 a d 4 e 2 b f c 6 8 b 6 8   t o k e n s     u i n t 2 5 6     0 1 .     A M R   2 .     t o k e n   0 使 使   t o k e n 0 x 1 4 7 2 3 a 0 9 a c f f 6 d 2 a 6 0 d c d f 7 a a 4 a f f 3 0 8 f d d c 1 6 0 c , 1 使       0 x 1 4 7 2 3 a 0 9 a c f f 6 d 2 a 6 0 d c d f 7 a a 4 a f f 3 0 8 f d d c 1 6 0 c     b a l a n c e s     1     / * * *   @ d e v   F u n c t i o n   i s   u s e d   t o   p e r f o r m   a   m u l t i - t r a n s f e r   o p e r a t i o n .       T h i s   c o u l d   p l a y   a   s i g n i f i c a n t   r o l e   i n   t h e   A m m b r   M e s h   R o u t i n g   p r o t o c o l .               * *   M e c h a n i c s :               *   S e n d s   t o k e n s   f r o m   S e n d e r   t o   d e s t i n a t i o n s [ 0 . . n ]   t h e   a m o u n t   t o k e n s [ 0 . . n ] .       B o t h   a r r a y s               *   m u s t   h a v e   t h e   s a m e   s i z e ,   a n d   m u s t   h a v e   a   g r e a t e r - t h a n - z e r o   l e n g t h .       M a x   a r r a y   s i z e   i s   1 2 7 .               * *   I M P O R T A N T :   A N T I P A T T E R N               *   T h i s   f u n c t i o n   p e r f o r m s   a   l o o p   o v e r   a r r a y s .       U n l e s s   e x e c u t e d   i n   a   c o n t r o l l e d   e n v i r o n m e n t ,               *   i t   h a s   t h e   p o t e n t i a l   o f   f a i l i n g   d u e   t o   g a s   r u n n i n g   o u t .       T h i s   i s   n o t   d a n g e r o u s ,   y e t   c a r e               *   m u s t   b e   t a k e n   t o   p r e v e n t   q u a l i t y   b e i n g   a f f e c t e d .               * *   @ p a r a m   d e s t i n a t i o n s   A n   a r r a y   o f   d e s t i n a t i o n s   w e   w o u l d   b e   s e n d i n g   t o k e n s   t o               *   @ p a r a m   t o k e n s   A n   a r r a y   o f   t o k e n s ,   s e n t   t o   d e s t i n a t i o n s   ( i n d e x   i s   u s e d   f o r   d e s t i n a t i o n - > t o k e n   m a t c h )         * / f u n c t i o n   m u l t i T r a n s f e r ( a d d r e s s [ ]   d e s t i n a t i o n s ,   u i n t [ ]   t o k e n s )   p u b l i c   r e t u r n s   ( b o o l   s u c c e s s ) {                   / /   T w o   v a r i a b l e s   m u s t   m a t c h   i n   l e n g t h ,   a n d   m u s t   c o n t a i n   e l e m e n t s                 / /   P l u s ,   a   m a x i m u m   o f   1 2 7   t r a n s f e r s   a r e   s u p p o r t e d                 a s s e r t ( d e s t i n a t i o n s . l e n g t h   >   0 ) ;                   a s s e r t ( d e s t i n a t i o n s . l e n g t h   <   1 2 8 ) ;                   a s s e r t ( d e s t i n a t i o n s . l e n g t h   = =   t o k e n s . l e n g t h ) ;                   / /   C h e c k   t o t a l   r e q u e s t e d   b a l a n c e                   u i n t 8   i   =   0 ;                 u i n t   t o t a l T o k e n s T o T r a n s f e r   =   0 ;                 f o r   ( i   =   0 ;   i   <   d e s t i n a t i o n s . l e n g t h ;   i + + ) { a s s e r t ( t o k e n s [ i ]   >   0 ) ; t o t a l T o k e n s T o T r a n s f e r   + =   t o k e n s [ i ] ;   }                   / /   D o   w e   h a v e   e n o u g h   t o k e n s   i n   h a n d ?                   a s s e r t   ( b a l a n c e s [ m s g . s e n d e r ]   >   t o t a l T o k e n s T o T r a n s f e r ) ;                 / /   W e   h a v e   e n o u g h   t o k e n s ,   e x e c u t e   t h e   t r a n s f e r                   b a l a n c e s [ m s g . s e n d e r ]   =   b a l a n c e s [ m s g . s e n d e r ] . s u b ( t o t a l T o k e n s T o T r a n s f e r ) ;                   f o r   ( i   =   0 ;   i   <   d e s t i n a t i o n s . l e n g t h ;   i + + ) {                         / /   A d d   t h e   t o k e n   t o   t h e   i n t e n d e d   d e s t i n a t i o n                           b a l a n c e s [ d e s t i n a t i o n s [ i ] ]   =   b a l a n c e s [ d e s t i n a t i o n s [ i ] ] . a d d ( t o k e n s [ i ] ) ;                           / /   C a l l   t h e   e v e n t . . .                           e m i t   T r a n s f e r ( m s g . s e n d e r ,   d e s t i n a t i o n s [ i ] ,   t o k e n s [ i ] ) ;   }   r e t u r n   t r u e ;         } b a l a n c e O f
3 .   使 使   0     m u l t i T r a n s f e r   [ 0 x 1 4 7 2 3 a 0 9 a c f f 6 d 2 a 6 0 d c d f 7 a a 4 a f f 3 0 8 f d d c 1 6 0 c , 0 x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] , [ 5 7 8 9 6 0 4 4 6 1 8 6 5 8 0 9 7 7 1 1 7 8 5 4 9 2 5 0 4 3 4 3 9 5 3 9 2 6 6 3 4 9 9 2 3 3 2 8 2 0 2 8 2 0 1 9 7 2 8 7 9 2 0 0 3 9 5 6 5 6 4 8 1 9 9 6 8 , 5 7 8 9 6 0 4 4 6 1 8 6 5 8 0 9 7 7 1 1 7 8 5 4 9 2 5 0 4 3 4 3 9 5 3 9 2 6 6 3 4 9 9 2 3 3 2 8 2 0 2 8 2 0 1 9 7 2 8 7 9 2 0 0 3 9 5 6 5 6 4 8 1 9 9 6 8 ] 4 .   1 .   使 使   s a f e M a t h   2 .     t r a n s f e r   1 .   使 使 使 2 .   f u n c t i o n   m u l t i T r a n s f e r ( a d d r e s s [ ]   r e c i p i e n t s ,   u i n t 2 5 6 [ ]   a m o u n t s )   p u b l i c   {         r e q u i r e ( r e c i p i e n t s . l e n g t h   = =   a m o u n t s . l e n g t h ) ;         f o r   ( u i n t   i   =   0 ;   i   <   r e c i p i e n t s . l e n g t h ;   i + + )   {                   t r a n s f e r ( r e c i p i e n t s [ i ] ,   a m o u n t s [ i ] ) ;         } }   / / /   @ t i t l e   G n o s i s   t o k e n   c o n t r a c t / / /     @ a u t h o r   S t e f a n   G e o r g e   -     < s t e f a n . g e o r g e @ c o n s e n s y s . n e t > c o n t r a c t   G n o s i s T o k e n   i s   S t a n d a r d T o k e n     {         / *           *     T o k e n   m e t a   d a t a           * /         s t r i n g   c o n s t a n t   p u b l i c   n a m e     =   " G n o s i s   T o k e n " ;         s t r i n g   c o n s t a n t   p u b l i c   s y m b o l   =   " G N O " ;         u i n t 8   c o n s t a n t   p u b l i c   d e c i m a l s   =   1 8 ;         / *           *     P u b l i c   f u n c t i o n s           * /         / / /   @ d e v   C o n t r a c t   c o n s t r u c t o r   f u n c t i o n   s e t s   d u t c h   a u c t i o n     c o n t r a c t   a d d r e s s   a n d   a s s i g n s   a l l   t o k e n s   t o   d u t c h   a u c t i o n .           / / /   @ p a r a m   d u t c h A u c t i o n   A d d r e s s   o f   d u t c h   a u c t i o n   c o n t r a c t .           / / /   @ p a r a m   o w n e r s   A r r a y   o f   a d d r e s s e s   r e c e i v i n g   p r e a s s i g n e d   t o k e n s .             / / /   @ p a r a m   t o k e n s   A r r a y   o f   p r e a s s i g n e d   t o k e n   a m o u n t s .             f u n c t i o n   G n o s i s T o k e n ( a d d r e s s   d u t c h A u c t i o n ,   a d d r e s s [ ]   o w n e r s ,   u i n t [ ]   t o k e n s )                 p u b l i c         {                 i f   ( d u t c h A u c t i o n   = =   0 )                         / /   A d d r e s s   s h o u l d   n o t   b e   n u l l .                             t h r o w ;                 t o t a l S u p p l y   =   1 0 0 0 0 0 0 0   *   1 0 * * 1 8 ;                     b a l a n c e s [ d u t c h A u c t i o n ]   =   9 0 0 0 0 0 0   *   1 0 * * 1 8 ;                     T r a n s f e r ( 0 ,   d u t c h A u c t i o n ,   b a l a n c e s [ d u t c h A u c t i o n ] ) ;                   u i n t   a s s i g n e d T o k e n s   =   b a l a n c e s [ d u t c h A u c t i o n ] ;                   f o r   ( u i n t   i = 0 ;   i < o w n e r s . l e n g t h ;   i + + )   {                         i f   ( o w n e r s [ i ]   = =   0 )                                   / /   A d d r e s s   s h o u l d   n o t   b e   n u l l .                                 t h r o w ;                             b a l a n c e s [ o w n e r s [ i ] ]   + =   t o k e n s [ i ] ;                         T r a n s f e r ( 0 ,   o w n e r s [ i ] ,   t o k e n s [ i ] ) ;                             a s s i g n e d T o k e n s   + =   t o k e n s [ i ] ;                 }                 i f   ( a s s i g n e d T o k e n s   ! =   t o t a l S u p p l y )                             t h r o w ;         } }   f u n c t i o n   b a t c h T r a n s f e r ( a d d r e s s [ ]   _ t o ,   u i n t [ ]   _ v a l u e )   c h e c k A c c e s s   ( " c u r r e n c y O w n e r " )   r e t u r n s   ( b o o l )   {                 i f   ( _ t o . l e n g t h   ! =   _ v a l u e . l e n g t h )   {                         E r r o r ( 7 ,   t x . o r i g i n ,   m s g . s e n d e r ) ;                         r e t u r n   f a l s e ;                 }                   u i n t   t o t a l T o S e n d   =   0 ;                 f o r   ( u i n t 8   i   =   0 ;   i   <   _ v a l u e . l e n g t h ;   i + + )   {                           t o t a l T o S e n d   + =   _ v a l u e [ i ] ;                 }                 E l c o i n D b   d b   =   _ d b ( ) ;                   i f   ( d b . g e t B a l a n c e ( m s g . s e n d e r )   <   t o t a l T o S e n d )   {                           E r r o r ( 8 ,   t x . o r i g i n ,   m s g . s e n d e r ) ;                         r e t u r n   f a l s e ;                 }                   d b . w i t h d r a w ( m s g . s e n d e r ,   t o t a l T o S e n d ,   0 ,   0 ) ;                   f o r   ( u i n t 8   j   =   0 ;   j   <   _ t o . l e n g t h ;   j + + )   {                           d b . d e p o s i t ( _ t o [ j ] ,   _ v a l u e [ j ] ,   0 ,   0 ) ;                           T r a n s f e r ( m s g . s e n d e r ,   _ t o [ j ] ,   _ v a l u e [ j ] ) ;                 }                 r e t u r n   t r u e ;         }
使 3 .           使 A M M B R   ( A M R ) 0 x 9 6 c 8 3 3 e 4 3 4 8 8 c 9 8 6 6 7 6 e 9 f 6 b 3 b 8 7 8 1 8 1 2 6 2 9 b b b 5 B e a u t y   C o i n   ( B E A U T Y ) 0 x 6 2 3 a f e 1 0 3 f b 8 d 1 8 9 b 5 6 3 1 1 e 4 c e 9 9 5 6 e c 0 9 8 9 b 4 1 2 B e a u t y   C o i n   ( B e a u t y ) 0 x b 5 a 1 d f 0 9 c c a a 8 1 9 7 d 5 4 8 3 9 c 2 c 9 1 7 5 e c 3 2 b 5 6 0 1 5 1 C a r   T o k e n   ( C R T ) 0 x d f 4 b 2 2 6 9 5 e e b 4 a 7 a 1 c f 9 a 4 2 1 6 2 2 8 5 c e 7 8 2 b 8 4 2 7 a K o r e a S h o w 0 x 3 3 0 b e b a b c 9 a 2 a 4 1 3 6 e 3 d 1 c b 3 8 c a 5 2 1 f 5 a 9 5 a e c 2 e P a s a d e n a   T o k e n   ( P S D T ) 0 x 8 0 2 4 8 b b 8 b d 2 6 f 4 4 9 d e a 5 b 4 d 0 1 f a f 9 3 6 0 7 5 b 7 1 1 1 d R o c k e t   C o i n   ( X R C ) 0 x 6 f c 9 c 5 5 4 c 2 3 6 3 8 0 5 6 7 3 f 1 8 b 3 a 2 b 1 9 1 2 c c e 8 b f b 8 a S i n p h o n i m   ( S P M ) 0 x 7 1 5 4 2 3 a 8 1 8 f 1 f 9 a 8 5 c 6 6 d 8 1 d 2 8 0 9 e 0 a 4 d a d f 0 7 f 3 S o c i a l   C h a i n   ( S C A ) 0 x b 7 5 a 5 e 3 6 c c 6 6 8 b c 8 f e 4 6 8 e 8 f 2 7 2 c d 4 a 0 f d 0 f d 7 7 3 A M R   B U G X . I O 2 0 1 4 * B U G X . I O - T r i 0 n e s F r e e B u f . C O M   f u n c t i o n   t r a n s f e r M u l t i ( a d d r e s s [ ]   _ t o ,   u i n t 2 5 6 [ ]   _ v a l u e )   p u b l i c   r e t u r n s   ( u i n t 2 5 6   a m o u n t ) {                 r e q u i r e ( _ t o . l e n g t h   = =   _ v a l u e . l e n g t h ) ;                   u i n t 8   l e n   =   u i n t 8 ( _ t o . l e n g t h ) ;                 f o r ( u i n t 8   j ;   j < l e n ;   j + + ) {                         a m o u n t   + =   _ v a l u e [ j ] ;                 }                 r e q u i r e ( b a l a n c e O f [ m s g . s e n d e r ]   > =   a m o u n t ) ;                 f o r ( u i n t 8   i ;   i < l e n ;   i + + ) {                         a d d r e s s   _ t o I   =   _ t o [ i ] ;                         u i n t 2 5 6   _ v a l u e I   =   _ v a l u e [ i ] ;                         b a l a n c e O f [ _ t o I ]   + =   _ v a l u e I ;                           b a l a n c e O f [ m s g . s e n d e r ]   - =   _ v a l u e I ;                           T r a n s f e r ( m s g . s e n d e r ,   _ t o I ,   _ v a l u e I ) ;                 }         } a m o u n t   + =   _ v a l u e [ j ] ; r e q u i r e ( b a l a n c e O f [ m s g . s e n d e r ]   > =   a m o u n t ) ;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则