Po drátě 5: Řešení úlohy č. 7
Hráče coby uživatele systému Po Drate Testing Intranet Solution
(Corporate Enterprise Edition) přivítala informace o tom, že nejsou
vítáni. Stačilo ale v adrese změnit hodnotu allowed
na 1
a objevil se mnohem pohostinnější, ač poloprázdný, seznam úloh k
testování. Přímo přístupných jich bohužel bylo jen málo. Na ty ostatní
sice bylo možné se dostat úpravou parametru "id", ale i pak hráče
odmítly s tím, že "Not public."
Úloha je téměř učebnicovou ukázkou SQL injection - zmíněný parametr
id
nebyl nijak ošetřený proti neplatným vstupům, takže
bylo celkem snadné modifikovat SQL dotaz, do kterého se parametr
vkládal. Tomu napomáhal ladící výpis v HTML komentáři, kde se celý
dotaz (včetně jména tabulky) zobrazoval spolu s případným výstupem
funkce mysql_error()
. Popisky políček tabulce detailů
úlohy navíc přesně odpovídaly jménům i pořadí sloupců v databázové
tabulce.
Postupů, jak s těmito informacemi získat přístup k záznamu o úloze
7, je několik. Ten autorský nastavuje parametr id
na
řetězec "123456 UNION SELECT id, 1 as public, password as name,
password, good, fail, notes FROM testing WHERE id=7
". Tím pádem
výsledek původního "SELECT *" zůstane prázdný, protože úloha 123456
neexistuje, a výsledek toho druhého SELECTu nám zase zajistí, že
nalezená úloha bude zobrazena (public), a pro jistotu nechá heslo
zobrazit v poli "name", protože pole "password" bez ohledu na heslo
zobrazuje vždy text "(hidden)".
Pak sice zjistíme, že heslo je prázdné, ale to nám nevadí -
poznámka k úloze (tedy pole notes
) heslo ráda
prozradí.
Zajímavosti
Jeden z neotřelejších způsobů řešení úlohy je následující: když
neznáme SQL UNION, metodou postupného zkoušení zjistíme délku textu v
poli notes
přidáváním podtržítek do id=7 AND notes
LIKE '____'
. Dokud je délka špatně, vrací se nám chyba "Not
exist", jakmile se trefíme, změní se na "Not public". Pokračujeme
doplňováním písmenek abecedy za jednotlivá podtržítka, dokud neznáme
celý text.
Chhoti Sadri je šestnáctitisícové městečko na severozápadě Indie,
známé hlavně chrámem bohyně Bhavar Mátá z 5. století n.l.
Pokuta 100 000 rupií odpovídá zhruba 42 tisícům korun.
Autorem úlohy je matejcik.