Poc Bypasse Auth Nasa Shiney

download Poc Bypasse Auth Nasa Shiney

of 12

Transcript of Poc Bypasse Auth Nasa Shiney

Bypasser une authenticationShiney June 2, 2011

1

Prface eCet article ne prne absolument pas le piratage mais la connaissance. Par o consquent, vous devez savoir quen cas de piratage, vous tes seul et unique e e responsable des consquences de vos actes. Je vous dconseil fortement de e e mettre en pratique la dmonstration qui va suivre sur un site qui ne vous e appartient pas. Ce document sadresse a des professionnels et a des passionns de scurit ` ` e e e 1 informatique . Des connaissances du protocole HTTP, en SQL, en PHP et en scurit des applications web sont ncessaires a sa bonne comprhension. e e e ` e

1

Un lamer nest pas un passionn de scurit informatique. e e e

2

Contents1 Analyse 1.1 Page dauthentication . . . . 1.2 Formulaire . . . . . . . . . . . 1.3 Hackbar . . . . . . . . . . . . 1.3.1 Rapide prsentation . e 1.3.2 Utilisation . . . . . . . 1.4 Recherche dune faille . . . . . 1.5 Prise de contrle de la requte o e . . . . . . . . . . . . . . . . . . SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 6 6 6 7 7 9

2 Exploitation 10 2.1 Recherche du nombre de colonne . . . . . . . . . . . . . . . . 10 2.2 Syntaxe de lUNION . . . . . . . . . . . . . . . . . . . . . . . 10 2.3 Final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3

IntroductionAujourdhui, nous allons tudier une mthode pour bypasser une authentie e cation faillible a une injection SQL. Pour cela, je prendrai comme exemple ` un site acadmique de la NASA. Notre tude sera en grande partie base sur e e e 2 des injections SQL et nous utiliserons lextension hackbar avec Firefox.

2

Live Header ou Tamper Data peuvent tre une alternative. e

4

1

Analyse

Dans cette premi`re partie, nous allons chercher une faille sur un script e dauthentication. Pour se faire, une bonne analyse des informations envoyes vers ce dernier est primordiale. Plusieurs mthodes permettent de cone e naitre ces informations. Dans notre cas, nous nous contenterons danalyser le code source du formulaire.

1.1

Page dauthentication

Voici notre page dauthentication classique, constitu dun nom dutilisateur e et dun mot de passe: http://www.nasa-academy.org/db/login.php

5

1.2

Formulaire

Pour commencer, analysons le code source du formulaire qui se situe ` gauche: a1. 2. 3. 4. not logged in
(public view) 5. 6. 7. 8. login with username: 9. 10. 11.
12. and passwd:
13. 14. 15.
16. 17. 18. 19. 20. 21. Search
(public) 22. 23. 24. 25. 26. FAQ 27. 28. 29.

On constate que 3 param`tres sont envoys au script login.php via une e e methode POST:username : le nom du compte password : le mot de passe du compte pagefrom : un param`tre cach initialis ` alumni.php e e ea

1.31.3.1

HackbarRapide prsentation e

Pour diter les donnes que nous enverrons, nous allons utiliser hackbar. Cette e e extension refox se divise en 3 zones:

6

1. un menu avec des fonctions tr`s utiles sur des chaines de caract`res e e 2. un espace permettant dditer le champ url, dditer les donnes dune e e e requte POST et dditer lentte referer e e e 3. charger les informations de la derni`re requte dans la zone 2, mettre en e e forme la zone de texte courante et excuter la requte e e

1.3.2

Utilisation

Une authentication se fait de la mani`re suivante: e

1.4

Recherche dune faille

La plupart du temps les mots de passes sont encrypts en MD5, par consquent e e nous nattaquerons pas le param`tre password. Nous allons nous focaliser sur e le param`tre username et tenter une fausse authentication dite tmoin et deux e e injections: Tmoin. username = Shiney & password=Shiney e 1. username = : pour provoquer une erreur 2. username = Shiney OR 1=1 : pour essayer de bypasser une authentication de mani`re classique e

7

Figure 1: Authentication tmoin e

Figure 2: Injection 1

Figure 3: Injection 2 8

Notre authentication tmoin nous montre que le script nous renvoie exactee ment la mme page lorsque lidentiant nest pas bon. e On remarque que linjection 1 na pas t concluante, aucun message derreur ee ou de rponse notable de la part du script. e En revanche, linjection numro 2 est beaucoup plus interessante. En eet, la e page nous indique que le password est incorrect ce qui montre que pour le script, notre username est valide. Notre injection a permis de retourner nimporte quel username de la base de donne, cest donc pour cela que le script ` accept notre e a e username mais pas notre password.

1.5

Prise de contrle de la requte SQL o e

Lobjectif apr`s avoir localis une faille SQL, cest de comprendre cette requte e e e puis den prendre le contrle. Grce ` notre injection 2, nous avons pu en cerner o a a une partie:SQL : [...] username = Shiney OR 1=1 [...]

Cependant, nous navons aucune ide de ce qui se situe avant ou apr`s (signal e e e par [...] dans lencadr ci-dessus). Nous allons donc dire au script que la suite e de notre injection reprsente du commentaire ` laide du caract`re di`se : e a e eusername = Shiney OR 1=1 #

La page nous indique encore que notre password est incorrecte, notre injection a donc de nouveau fonctionne. Nous avons donc pris le contrle de la n de la e o requte SQL. e

9

2

Exploitation

Nous arrivons ` expliquer au script que notre username est valide mais pas notre a password. Nous allons donc faire une UNION an de donner au script les informations ncessaires pour quil accepte notre authentication. e

2.1

Recherche du nombre de colonne

Il est ncessaire de connaitre le nombre de colonne de la premi`re requte an de e e e pouvoir faire une UNION. Pour cela, nous allons utiliser lexpression ORDER BY n o` n correspond au numro dune des colonnes de la requte. Cette expression u e e permet de trier les resultats en fonction de la n-`me colonne. Par consquent, si e e 3 , alors la on augmente petit ` petit la valeur de n jusqu` obtenir une erreur a a valeur prcdente de n, nous donne le nombre de colonne: e eusername = Shiney OR 1=1 ORDER BY 5 # username = Shiney OR 1=1 ORDER BY 6 #

2.2

Syntaxe de lUNION

Nous savons que la requte ncessite 5 colonnes, mais nous ne savons laquelle e e correspond ` lusername ou au password. Nous allons donc tester une UNION a an dobserver la raction du script. Les colonnes seront initalises ` 0 et nous e e a remplacerons OR 1=1 par and 1=2 an que le dbut de la requte SQL ne e e perturbe pas la suite de notre UNION.

Dans notre cas, nous considrerons quune erreur correspond ` labsence du message e a Incorrect password, tant donn que rien ne peut tre tri si il narrive pas ` retourner e e e e a un username .

3

10

Notre injection aura donc une syntaxe du type:username = and 1=2 UNION SELECT 0,0,0,0,0 #

Nous nous sommes connects en tant que : and 1=2 UNION SELECT e 0,0,0,0,0 #. Il semblerait que le script accepte notre authentication, si la requte e SQL renvoie un password qui a pour valeur 0.

2.3

Final

Pour le plaisir des yeux, nous allons mettre en commentaire HTML, la partie moche de notre pseudo:username = Shiney

11

ConclusionCette dmonstration exploite tr`s clairement une injection SQL, nous aurions pu e e rcuprer les identiants dun des comptes directement depuis la base de donne. e e e Cela aurait pris beaucoup plus de temps et nous nous serions exposs ` de nome a breuses contraintes notamment avec les password conservs en MD5. Jai volone tairement pargn certaines explications tel que la signication de linjection 1 e e ou de linjection 2 an dinviter le lecteur ` poursuivre ses recherches dans les a injections SQL classique et ` laveugle. a

12