Citat:
Ursprungligen postat av Awwent
Har flera gånger hört talas om rubrikens namn :P
SQL injection, d.v.s.
Vad är det?
Hur gör man det?
Jag kan lite smått med databasen MySQL, om det är det :P
Tänk dig att du har en hemsida som hämtar data, och skickar vidare till en SQL-databas, exempelvis MySQL. En hemsida skulle vilja göra detta t. ex för att registrera medlemmar, autentisera medlemmar (kontrollera att ett användarnamn och lösenord är ett giltigt par), hämta data som t. ex nyheter som ligger lagrade i databasen för visning.
Låt oss säga att vi har en nyhetssida news.php som tar en parameter via adressfältet, ID, som anger vilken nyhet vi vill visa. Användaren fyller inte i detta manuellt, utan något som din hemsida tar hand om, t. ex vid listning av nyheterna.
En exempellänk kan då se ut:
http://hemsida/news.php?id=5
PHP-skriptet news.php hämtar denna parameter och inkluderar den i en SQL-förfrågan.
Dvs, den kanske bygger sin SQL förfrågan på följande sett (psuedokod):
Kod:
"SELECT title, text FROM nyheter WHERE id=" + variabelID
Tänk dig att skriptet inte kontrollerar så att variabeln id är på ett korrekt sätt, och låt oss säga att vi istället för att ange id till 5, så anger vi den att vara något som när det tolkas av SQL-databasen får SQL-databasen att utföra saker som skaparen av skriptet inte har tänkt sig. Voila, vi har SQL-injection.
id=-1 UNION SELECT VERSION(),2
Detta skulle medföra att SQL-förfrågan blev:
SELECT title,text FROM nyheter WHERE id=-1 UNION SELECT VERSION(),2
Denna SQL-förfrågan plockar title och text från tabellen nyheter där id't är -1 (vilket inte lär finnas) och kombinerar detta resultat från den förfrågan som hämtar versionsnumret på MySQL-databasen, och 2.
Det skriptet får tillbaka är alltså versionen, och två, och den kommer hantera det som att det var nyhetsdata som den skulle visa.
Du kommer således på hemsidan få utskrivet vilken version databasen kör, och siffran två.
Det hela handlar alltså om att bygga om SQL-förfrågningar och manipulera dom så gott det går. Det hela är lite olika beroende på vilken databas som körs, för visst följer de alla den grundläggande SQL-syntaxen, men de har alla sina egna egenskaper, ofta egna speciella tabeller, kommandon etc, som är bra att känna till för att utnyttja vid sin injicering.