Předmět Autor Datum
V prípade, že sa na stránke nezobrazuje výsledok SQL dopytu, tak jedna možnosť, ako zistiť, či sa SQ…
los 16.07.2012 14:03
los
To teda neni ono, ani omylem, sql time injection je tohle: select * from nahE_fotky where pridano>s…
AZOR 19.07.2012 01:50
AZOR
A co je teda potom tohle? http://www.defcon.org/images/defcon-16/dc16-presen tations/alonso-parada/d…
Wikan 19.07.2012 07:42
Wikan
To si si asi pomýlil s útokom, ktorý zneužíva implicitnú konverziu dátového typu (v tomto prípade dá… poslední
los 19.07.2012 09:42
los
Děkuji, něco takového jsem potřeboval :)
Swix 19.07.2012 00:02
Swix

V prípade, že sa na stránke nezobrazuje výsledok SQL dopytu, tak jedna možnosť, ako zistiť, či sa SQL kód vykonal alebo nie, je na základe času trvania SQL dopytu. Vďaka tomu vieš na ľubovoľný SQL dopyt dostať odpoveď typu áno/nie.

Takže ak vieš injectnúť SQL, tak tam môžeš dať nejakú podmienku, na základe ktorej bude vykonávanie trvať buď 10 sekúnd alebo len 1 sekundu. Podľa času nahrávania stránky budeš potom vedieť určiť, ktorá vetva sa vykonala.

Web proti tomu zabezpečíš tak ako proti každej SQL injection - budeš ošetrovať vstupy (napr. parametrizáciou SQL dopytov alebo escapovaním hodnôt).

To si si asi pomýlil s útokom, ktorý zneužíva implicitnú konverziu dátového typu (v tomto prípade dátumu) na reťazec pri vytváraní dynamických SQL dopytov priamo na SQL serveri. Kto vytvára v uložených procedúrach dynamicky SQL dopyt, musí tiež ošetrovať svoje vstupy - parametrizáciou alebo escapovaním. To nemá s time-based SQL injection nič spoločné, hoci sa zneužíva nastavenie formátu času.

Typický dopyt pre time-based SQL injection vyzerá (pre MSSQL) takto:

1 and if not(substring((select @version),25,1) < 52)‏ waitfor delay '0:0:9'--

Podľa času vykonávania vieš potom v tomto prípade určiť číslo verzie SQL servera.

Zpět do poradny Odpovědět na původní otázku Nahoru