P H P W e b A p p l i c a t i o n S e c u r i t y

slicedmitesΑσφάλεια

16 Φεβ 2014 (πριν από 3 χρόνια και 5 μήνες)

61 εμφανίσεις

P H P W e b A p p l i c a t i o n S e c u r i t y
V u l n e r a b i l i t i e s
I n t e r n a t i o n a l P H P C o n f e r e n c e
M a y 8, 2 0 0 3. A m s t e r d a m, N L
D a v i d S k l a r < s k l a r @ s k l a r.c o m >
h t t p://w w w.s k l a r.c o m/t a l k s/w e b - a p p - s e c u r i t y

S l i d e 1/2 8 M a y 8, 2 0 0 3
T o p i c s
V u l n e r a b i l i t i e s
o
U n v a l i d a t e d P a r a m e t e r s


o
C r o s s - S i t e S c r i p t i n g F l a w s


o
C o m m a n d I n j e c t i o n F l a w s


o
E r r o r H a n d l i n g P r o b l e m s


o
I n s e c u r e U s e o f C r y p t o g r a p h y


- 2 -
S l i d e 2/2 8 M a y 8, 2 0 0 3
V a l i d a t i n g D a t a
o
T u r n o f f r e g i s t e r _ g l o b a l s a n d r e l y o n $ _ G E T, $ _ P O S T, $ _ C O O K I E, a n d $ _ R E Q U E S T


o
T e s t s u b m i t t e d d a t a f o r e x p e c t e d s y n t a x:


<?p h p i f ( i s _ n u m e r i c ( $ _ P O S T ['a g e'] ) ) { ... } ?>
<?p h p i f ( s t r l e n ( t r i m ( $ _ G E T ['a d d r e s s'] ) ) ) { ... } ?>
- 3 -
S l i d e 3/2 8 M a y 8, 2 0 0 3
T e s t i n g V a l u e s
C h e c k a l l o w a b l e r a n g e o f n u m e r i c v a l u e s
<?p h p
i f ( ( $ _ G E T ['a g e'] < 1 3 ) | | ( $ _ G E T ['a g e'] > 6 5 ) ) {...}
?>
R e s t r i c t < s e l e c t > c h o i c e s t o a p r e s e t a r r a y
<?p h p
$ c h o i c e s = a r r a y ( 1 = > 'T r o u t', 'H a l i b u t', 'T i l a p i a');
i f (! $ c h o i c e s [ $ _ P O S T ['f i s h'] ] ) { ... }
?>
- 4 -
S l i d e 4/2 8 M a y 8, 2 0 0 3
R e g u l a r E x p r e s s i o n s
T e s t V a l u e s w i t h R e g u l a r E x p r e s s i o n s
<?p h p
i f (! p r e g _ m a t c h ('/^\d { 5 } ( -\d { 4 } )?$/',
$ _ P O S T ['z i p c o d e'] ) ) { ... }
$ e m a i l _ r x = '/^ [ ^ @\s ] + @ ( [ - a - z 0 - 9 ] +\.) + [ a - z ] { 2,} $/i';
i f (! p r e g _ m a t c h ( $ e m a i l _ r x, $ _ P O S T ['e m a i l'] ) ) { ... }
?>
- 5 -
S l i d e 5/2 8 M a y 8, 2 0 0 3
D a t a T a m p e r i n g
S e n d i n g t h e h a s h
o
F o r c o o k i e s o r h i d d e n f o r m f i e l d s


o
H a s h: d a t a p l u s s e c r e t w o r d


o
A d d h a s h t o a c o o k i e o r f o r m


C h e c k i n g t h e h a s h
o
W h e n y o u g e t t h e d a t a b a c k, r e - h a s h


o
C o m p a r e r e c e i v e d a n d c a l c u l a t e d h a s h e s


- 6 -
S l i d e 6/2 8 M a y 8, 2 0 0 3
H a s h w i t h C o o k i e
S e n d i n g t h e c o o k i e
<?p h p
$ s e c r e t _ w o r d = 's a l t - b a k e d s q u i d';
$ i d = 3 1 4 1 5 9 2 6;
$ h a s h = m d 5 ( $ s e c r e t _ w o r d.$ i d );
s e t c o o k i e ('i d',$ i d.'-'.$ h a s h );
?>
- 7 -
S l i d e 7/2 8 M a y 8, 2 0 0 3
H a s h w i t h C o o k i e
R e c e i v i n g a n d v e r i f y i n g t h e c o o k i e
<?p h p
l i s t ( $ c _ i d,$ c _ h a s h ) = e x p l o d e ('-',$ _ C O O K I E ['i d'] );
i f ( m d 5 ( $ s e c r e t _ w o r d.$ c _ i d ) = = $ c _ h a s h ) {
$ i d = $ c _ i d;
} e l s e {
d i e ('I n v a l i d c o o k i e.');
}
?>
- 8 -
S l i d e 8/2 8 M a y 8, 2 0 0 3
H a s h w i t h F o r m
D i s p l a y i n g t h e F o r m
<?p h p
$ s e c r e t _ w o r d = 's a l t - b a k e d s q u i d';
$ i d = 3 1 4 1 5 9 2 6;
$ h a s h = m d 5 ( $ s e c r e t _ w o r d.$ i d );
p r i n t < < < H T M L
< f o r m m e t h o d ="P O S T" a c t i o n ="s a v e.p h p">
< i n p u t t y p e ="h i d d e n" n a m e ="i d" v a l u e ="$ i d">
< i n p u t t y p e ="h i d d e n" n a m e ="h a s h" v a l u e ="$ h a s h">
... o t h e r f o r m e l e m e n t s ...
</f o r m >
H T M L;
?>
- 9 -
S l i d e 9/2 8 M a y 8, 2 0 0 3
H a s h w i t h F o r m
P r o c e s s i n g t h e F o r m
<?p h p
i f ( m d 5 ( $ s e c r e t _ w o r d.$ _ P O S T ['i d'] ) = = $ _ P O S T ['h a s h'] ) {
$ i d = $ _ P O S T ['i d'];
} e l s e {
d i e ('I n v a l i d I D');
}
?>
- 1 0 -
S l i d e 1 0/2 8 M a y 8, 2 0 0 3
H a s h w i t h F o r m
H a s h i n g M u l t i p l e V a l u e s
<?p h p
$ s e c r e t _ w o r d = 's a l t - b a k e d s q u i d';
$ v a r _ n a m e s = a r r a y ('i d','s h o p p i n g _ c a r t','s i z e');
$ v a r s _ s t r i n g = s e r i a l i z e ( c o m p a c t ( $ v a r _ n a m e s ) );
$ h a s h = m d 5 ( $ s e c r e t _ w o r d.$ v a r s _ s t r i n g );
$ v a r s _ s a f e = h t m l s p e c i a l c h a r s ( $ v a r s _ s t r i n g );
p r i n t < < < H T M L
< f o r m m e t h o d ="P O S T" a c t i o n ="s a v e.p h p">
< i n p u t t y p e ="h i d d e n" n a m e ="v a r s" v a l u e ="$ v a r s _ s a f e">
< i n p u t t y p e ="h i d d e n" n a m e ="h a s h" v a l u e ="$ h a s h">
... o t h e r f o r m e l e m e n t s ...
</f o r m >
H T M L;
?>
- 1 1 -
S l i d e 1 1/2 8 M a y 8, 2 0 0 3
H a s h w i t h F o r m
P r o c e s s i n g t h e F o r m
<?p h p
i f ( m d 5 ( $ s e c r e t _ w o r k.$ _ P O S T ['v a r s'] ) = = $ _ P O S T ['h a s h'] ) {
$ v a r s = u n s e r i a l i z e ( $ _ P O S T ['v a r s'] );
// p u t b a c k i n t o g l o b a l n a m e s p a c e
e x t r a c t ( $ v a r s );
} e l s e {
d i e ('I n v a l i d v a r s');
}
?>
- 1 2 -
S l i d e 1 2/2 8 M a y 8, 2 0 0 3
C r o s s - S i t e S c r i p t i n g
o
I n t e r a c t i v e f e a t u r e s o f y o u r s i t e a r e u s e d a s u n w i t t i n g c a r r i e r s o f c l i e n t - s i d e a t t a c k s


o
A n y w h e r e y o u d i s p l a y e x t e r n a l i n p u t:


o
U s e r p r o f i l e


o
F o r u m s


o
E r r o r p a g e s ( t h e U R L i s e x t e r n a l i n p u t )


- 1 3 -
S l i d e 1 3/2 8 M a y 8, 2 0 0 3
D e f e a t i n g X S S
B e f o r e d i s p l a y i n g i t, m o d i f y u s e r i n p u t t o d e f a n g s c r i p t s.


Y o u c a n r e m o v e a l l H T M L a n d P H P t a g s
<?p h p
$ b a d = "<?p h p h e a d e r ( ); ?> < b l i n k > U g h!</b l i n k > <?p h p f o o t e r ( ); ?>";
$ o k = s t r i p _ t a g s ( $ b a d );
p r i n t $ o k;
?>
O u t p u t:
U g h!
- 1 4 -
S l i d e 1 4/2 8 M a y 8, 2 0 0 3
D e f e a t i n g X S S
Y o u m u s t e n c o d e s p e c i a l c h a r a c t e r s!
<?p h p
$ b a d = '< s c r i p t > a l e r t ("b o o!") </s c r i p t >';
$ o k = h t m l s p e c i a l c h a r s ( $ b a d,E N T _ Q U O T E S ); // < > & " '
p r i n t "A l e r t...";
p r i n t $ o k;
?>
O u t p u t:
A l e r t...& l t;s c r i p t & g t;a l e r t ( & q u o t;b o o!& q u o t;) & l t;/s c r i p t & g t;
- 1 5 -
S l i d e 1 5/2 8 M a y 8, 2 0 0 3
U T F - 8 E n c o d i n g
R e m o v e U T F - 8 E n c o d i n g
<?p h p $ i s o _ 8 8 5 9 _ 1 = u t f 8 _ d e c o d e ( $ b a d ); ?>
F o r c e I S O - 8 8 5 9 - 1 o n t h e B r o w s e r
<?p h p
p r i n t '< m e t a h t t p - e q u i v ="C o n t e n t - T y p e" c o n t e n t ="t e x t/h t m l; c h a r s e t = I S O - 8 8 5 9 - 1">';
?>
- 1 6 -
S l i d e 1 6/2 8 M a y 8, 2 0 0 3
C o m m a n d I n j e c t i o n
o
L i k e X S S, b u t n a s t y s t u f f i s i n t e n d e d f o r y o u r s e r v e r o r d a t a b a s e


o
D i f f e r e n t s e t o f c o d e/d a t a d e l i m i t e r s:


o
D a t a b a s e e s c a p e s a n d w i l d c a r d c h a r a c t e r s


o
S h e l l e s c a p e s, w i l d c a r d s, a n d m e t a c h a r a c t e r s


- 1 7 -
S l i d e 1 7/2 8 M a y 8, 2 0 0 3
D B E s c a p e C h a r a c t e r s
E s c a p e ' t o p r e v e n t e r r o r s
S E L E C T * F R O M s o n g s W H E R E t i t l e L I K E 'D o n\'t B e C r u e l'
E s c a p e % a n d _ t o p r e v e n t u n e x p e c t e d w i l d c a r d i n g
S E L E C T * F R O M s o l u t i o n W H E R E c o n c e n t r a t i o n L I K E '1 0 %'
- 1 8 -
S l i d e 1 8/2 8 M a y 8, 2 0 0 3
D B C o m m a n d I n j e c t i o n
E s c a p e ' % a n d _ o r u s e r s c a n w r i t e t h e i r o w n q u e r i e s
D E L E T E F R O M s o n g s W H E R E t i t l e L I K E '$ t i t l e'
// W h a t i f $ t i t l e = "%' O R 'a' = 'a"?
D E L E T E F R O M s o n g s W H E R E t i t l e L I K E '%' O R 'a' = 'a'
// A l l r o w s a r e d e l e t e d!

I N S E R T I N T O s o n g s ( t i t l e, a r t i s t ) V A L U E S ('$ t i t l e','$ a r t i s t')
// W h a t i f $ t i t l e = "a','b'),('c" a n d $ a r t i s t = "d"
I N S E R T I N T O s o n g s ( t i t l e, a r t i s t ) V A L U E S ('a','b'),('c','d')
// M u l t i p l e r e c o r d s i n s e r t e d!
- 1 9 -
S l i d e 1 9/2 8 M a y 8, 2 0 0 3
D B C o m m a n d I n j e c t i o n
U s e t h e ? p l a c e h o l d e r w i t h P E A R D B
<?p h p
$ s t h = $ d b h - > q u e r y ('I N S E R T I N T O s o n g s ( t i t l e,a r t i s t ) V A L U E S (?,?)',
a r r a y ( $ t i t l e, $ a r t i s t ) );
?>
U s e s t r t r ( ) t o e s c a p e % a n d _ a f t e r e s c a p i n g '
<?p h p
$ t i t l e = $ d b h - > q u o t e ( $ t i t l e );
$ t i t l e = s t r t r ( $ t i t l e, a r r a y ('' = > '\', '%' = > '%') );
$ s t h = $ d b h - > q u e r y ("D E L E T E F R O M s o n g s W H E R E t i t l e L I K E $ t i t l e");
?>
Y o u c a n a l s o u s e m y s q l _ r e a l _ e s c a p e _ s t r i n g ( ) o r a d d s l a s h e s ( ).


- 2 0 -
S l i d e 2 0/2 8 M a y 8, 2 0 0 3
S h e l l C o m m a n d I n j e c t i o n
o
T h e r e c a n't b e c o m m a n d i n j e c t i o n i f t h e r e's n o c o m m a n d - - d o y o u r e a l l y n e e d t o r u n a n
e x t e r n a l p r o g r a m?


o
P l e n t y o f P H P b u i l t - i n s f o r f i l e o p e r a t i o n s:


o
m k d i r ( )


o
r m d i r ( )


o
c o p y ( )


o
m o v e ( )


o
u n l i n k ( )


o
c h m o d ( )


o
c h o w n ( )


o
c h g r p ( )


o
...


- 2 1 -
S l i d e 2 1/2 8 M a y 8, 2 0 0 3
E s c a p i n g S h e l l A r g u m e n t s
o
e s c a p e s h e l l a r g ( ) p u t s s i n g l e q u o t e s a r o u n d a n a r g u m e n t a n d e s c a p e s s i n g l e q u o t e s i n s i d e
t h e a r g u m e n t


<?p h p
$ b a d _ a r g = '- a l; r m - r f /';
$ o k _ a r g = e s c a p e s h e l l a r g ( $ b a d _ a r g );
// l i s t a l l f i l e s, t h e n d e l e t e e v e r y t h i n g!
s y s t e m ("l s $ b a d _ a r g");
// i s t h e r e a f i l e c a l l e d "- a l; r m - r f /"?
s y s t e m ("l s $ o k _ a r g");
?>
- 2 2 -
S l i d e 2 2/2 8 M a y 8, 2 0 0 3
E s c a p i n g S h e l l C o m m a n d s
e s c a p e s h e l l c m d ( ) e s c a p e s b u t d o e s n't q u o t e:
# & ; ` ' " | * ? ~ < > ^ ( ) [ ] { } $ \ 0 x 0 A 0 x F F


<?p h p
$ b a d _ f o r m a t = 'h t m l < a >';
$ a l s o _ b a d _ f o r m a t = e s c a p e s h e l l a r g ( $ b a d _ f o r m a t );
$ o k _ f o r m a t = e s c a p e s h e l l c m d ( $ b a d _ f o r m a t );
// r e d i r e c t i o n e r r o r
s y s t e m ("/u s r/l o c a l/b i n/f o r m a t t e r - $ b a d _ f o r m a t");
// n o s u c h p r o g r a m
s y s t e m ("/u s r/l o c a l/b i n/f o r m a t t e r - $ a l s o _ b a d _ f o r m a t");
// r u n s /u s r/l o c a l/b i n/f o r m a t t e r - h t m l w i t h c o r r e c t a r g u m e n t
s y s t e m ("/u s r/l o c a l/b i n/f o r m a t t e r - $ o k _ f o r m a t");
?>
- 2 3 -
S l i d e 2 3/2 8 M a y 8, 2 0 0 3
E r r o r H a n d l i n g
D o n't D i s p l a y R a w E r r o r s t o U s e r s
d i s p l a y _ e r r o r s = o f f
l o g _ e r r o r s = o n
T h i s l o g s e r r o r s, b u t p u t s t h e m i n t h e s e r v e r's e r r o r l o g, n o t i n t h e b r o w s e r.


- 2 4 -
S l i d e 2 4/2 8 M a y 8, 2 0 0 3
E r r o r H a n d l e r s
U s e a C u s t o m E r r o r H a n d l e r
<?p h p
s e t _ e r r o r _ h a n d l e r ('d o _ e r r o r s');
f u n c t i o n d o _ e r r o r s ( $ e r r n o, $ e r r s t r, $ e r r f i l e, $ e r r l i n e ) {
e r r o r _ l o g ("E R R O R ( $ e r r f i l e:$ e r r l i n e ): $ e r r s t r");
h e a d e r ('L o c a t i o n: h t t p://'.$ _ S E R V E R ['H T T P _ H O S T'].'/e r r o r.p h p');
e x i t ( );
}
?>
- 2 5 -
S l i d e 2 5/2 8 M a y 8, 2 0 0 3
C r y p t o g r a p h y
o
U s e S S L t o p r e v e n t n e t w o r k s n i f f i n g


o
U s e m c r y p t


o
I f y o u s t o r e k e y s, m i n d t h e s e c u r i t y o n t h e k e y s t o r a g e


o
D o n't s t o r e p l a i n t e x t p a s s w o r d s


o
W a t c h o u t f o r m i s c o n f i g u r e d s h a r e d h o s t i n g e n v i r o n m e n t s


- 2 6 -
S l i d e 2 6/2 8 M a y 8, 2 0 0 3
S t o r i n g E n c r y p t e d D a t a
<?p h p
$ k e y = 'I s t h i s t h e p o t a t o f a r m?'
$ s = 'T h e a c c o u n t b a l a n c e i s $ 2 0 0 0';
$ a l g = M C R Y P T _ B L O W F I S H;
$ m o d e = M C R Y P T _ M O D E _ C B C;
$ i v = m c r y p t _ c r e a t e _ i v ( m c r y p t _ g e t _ i v _ s i z e ( $ a l g,$ m o d e ),
M C R Y P T _ D E V _ U R A N D O M );
$ c i p h e r t e x t = m c r y p t _ e n c r y p t ( $ a l g, $ k e y, $ s, $ m o d e, $ i v );
$ q u o t e d _ i v = m y s q l _ r e a l _ e s c a p e _ s t r i n g ( $ i v );
$ q u o t e d _ c t = m y s q l _ r e a l _ e s c a p e _ s t r i n g ( $ c i p h e r t e x t );
m y s q l _ q u e r y ("I N S E R T I N T O s e c r e t s ( i v, c i p h e r t e x t ) V A L U E S
('$ q u o t e d _ i v','$ q u o t e d _ c t')");
?>
- 2 7 -
S l i d e 2 7/2 8 M a y 8, 2 0 0 3
D e c r y p t i n g D a t a
<?p h p
$ a l g = M C R Y P T _ B L O W F I S H;
$ m o d e = M C R Y P T _ M O D E _ C B C;
$ i d = i n t v a l ( $ _ R E Q U E S T ['i d'] );
$ r = m y s q l _ q u e r y ("S E L E C T i v, c i p h e r t e x t F R O M s e c r e t s W H E R E i d = $ i d");
$ a r = m y s q l _ f e t c h _ a s s o c ( $ r );

$ p l a i n t e x t = m c r y p t _ d e c r y p t ( $ a l g, $ _ R E Q U E S T ['k e y'], $ a r ['c i p h e r t e x t'], $ m o d e,
$ a r ['i v'] );
?>
- 2 8 -
S l i d e 2 8/2 8 M a y 8, 2 0 0 3
M o r e I n f o r m a t i o n
P H P S e c u r i t y R e s o u r c e s
o
T h i s p r e s e n t a t i o n: h t t p://w w w.s k l a r.c o m/t a l k s/w e b - a p p - s e c u r i t y


o
P H P M a n u a l - C h a p t e r 5 ("S e c u r i t y"): h t t p://w w w.p h p.n e t/s e c u r i t y


o
O p e n W e b A p p l i c a t i o n S e c u r i t y P r o j e c t: h t t p://w w w.o w a s p.o r g


o
P H P a n d t h e O W A S P T o p T e n: h t t p://w w w.s k l a r.c o m/p a g e/a r t i c l e/o w a s p - t o p - t e n


o
S e c u r e P r o g r a m m i n g H O W T O: h t t p://t l d p.o r g/H O W T O/S e c u r e - P r o g r a m s - H O W T O/


- 2 9 -
I n d e x
T o p i c s .................................................................................................2
V a l i d a t i n g D a t a ....................................................................................3
T e s t i n g V a l u e s ....................................................................................4
R e g u l a r E x p r e s s i o n s ...........................................................................5
D a t a T a m p e r i n g ..................................................................................6
H a s h w i t h C o o k i e ................................................................................7
H a s h w i t h C o o k i e ................................................................................8
H a s h w i t h F o r m ...................................................................................9
H a s h w i t h F o r m ...................................................................................1 0
H a s h w i t h F o r m ...................................................................................1 1
H a s h w i t h F o r m ...................................................................................1 2
C r o s s - S i t e S c r i p t i n g ............................................................................1 3
D e f e a t i n g X S S ....................................................................................1 4
D e f e a t i n g X S S ....................................................................................1 5
U T F - 8 E n c o d i n g ..................................................................................1 6
C o m m a n d I n j e c t i o n .............................................................................1 7
D B E s c a p e C h a r a c t e r s .......................................................................1 8
D B C o m m a n d I n j e c t i o n .......................................................................1 9
D B C o m m a n d I n j e c t i o n .......................................................................2 0
S h e l l C o m m a n d I n j e c t i o n ....................................................................2 1
E s c a p i n g S h e l l A r g u m e n t s ..................................................................2 2
E s c a p i n g S h e l l C o m m a n d s .................................................................2 3
E r r o r H a n d l i n g .....................................................................................2 4
E r r o r H a n d l e r s .....................................................................................2 5
C r y p t o g r a p h y ......................................................................................2 6
S t o r i n g E n c r y p t e d D a t a .......................................................................2 7
D e c r y p t i n g D a t a ..................................................................................2 8
M o r e I n f o r m a t i o n .................................................................................2 9