Tutorials

SQL Injection Guide

Beschrijving hoe iemand SQL injection gebruikt, en wat je er tegen kan doen. Dit is een beknopte tutorial, verwacht er niet teveel van zal ik maar zeggen ;-)

Pagina 1

Inleiding

SQL Injection, wat is het precies?
SQL Injection is het verwijderen/wijzigen/toevoegen van data in een database, zonder dat de systeem beheerder het weet. Bijvoorbeeld: je maakt jezelf admin op een site, gewoon omdat er een input box niet goed beveiligd is.

Waarom deze tutorial?
Na aanleiding van dit topic, heb ik een pdf online (laten zetten eigenlijk) gezet. (Thanx to Klaasjan!).
Ik bedacht metoen (met behulp van Frank) dat een tutorial ook wel handig zou zijn.
Vandaar deze tutorial.

Let op! deze tutorial is dus niet bedoel om al die (wannabee) hackers aan de gang te zetten om grote systemen of zo te gaan kraken, maar als hulp voor systeem beheerders!
Pagina 2

Is SQL Injection mogelijk?

Eerst gaan we kijken of er wel SQL Injection mogelijk is in ons systeem.
We pakken (bijvoorbeeld) een login scherm.
Gebruikersnaam [input]
Wachtwoord [input]
[login button]

Als gebruikers naam voer ik nu in: bla' (let op de laatste quote mensen! die is belangrijk!).
Als 'ons' systeem gevoelig is voor SQL Injection is, krijgen we deze melding:
You have an error in your SQL syntax. Check the manual that corresponds to MySQL server version for the right syntax to use near ''bla''' at line 1


In mijn geval kreeg ik deze error, en ik had dus toegang tot het systeem...
Pagina 3

SQL Injection, Hoe krijg ik datastructuur?

Als je de Tabel naam weet kan je heel veel query's uitvoeren. Maar daar heb je ook eerst de velden voor nodig.

Kijken of een veld bestaat:
Je voert in: bla' OR veld = 'henk
Bij een MySQL error:
Unknown column 'veld' in 'where clause'

Weet je dat dat veld niet bestaat.
Krijg je geen MySQL error, Maar bijvoorbeeld: 'Het wachtwoord was fout, probeer het opnieuw' (dus een error van het PHP Systeem) dan weet je dat MySQL het goed keurde, en dat dus geen problemen waren met het herkennen van het veld. Het veld bestaat dus

Hoe kom ik de tabel naam te weten?
je voert in: bla' OR tabel.veld = 'henk
Bij een MySQL error:
Unknown table 'tabel' in 'where clause'

Weet je dat die tabel niet bestaat.
Krijg je geen MySQL error, Maar bijvoorbeeld: 'Het wachtwoord was fout, probeer het opnieuw' (dus een error van het PHP Systeem) dan weet je dat MySQL het goed keurde, en dat dus geen problemen waren met het herkennen van de tabel. De tabel bestaat dus
Pagina 4

SQL Injection, Data bewerken

Nu willen we data toevoegen.
We weten inmiddels alle gegevens van 'ons' systeem.
Dus kunnen we dingen gaan toevoegen!

Jullie zullen denken: Maar dat kan niet, want we zitten toch in een where query? Ja dat klopt. maar als we die query zouden kunnen afsluiten, dan kunnen we ook een nieuwe query starten en data toevoegen!

Toevoegen van data (INSERT)
We weten allemaal (neem ik aan) hoe een INSERT query werkt.
Als we dan dit invoeren in het systeem: x'; INSERT INTO members ('gebruikersnaam','wachtwoord') VALUES ('mijn account','magjenietweten,isgeheim!');--
Dan voegen we een account toe. (aan nemend dat de tabel members heet).
De ; sluit de query af, en de -- zijn goed voor een commentaar teken, heel handig! want je weet dat eigenlijk hier na nog een quote zou komen.
Als het goed is is er nu een nieuwe gebuiker toegevoegd.

Verwijderen van data
We weten denk ik ook allemaal hoe je gegevens kan verwijderen uit een database?
Een hele database legen: '; DROP TABLE members; -- BOEM! de tabel is weg!
Je kan ook alles weggooien, maar de tabel behouden:
'; TRUNCATAE TABLE members; -- BOEM! de tabel inhoud is weg!
je kan dus op deze manier ook het DELETE statement uitvoeren.

Bewerken van data
Het Update statement is hier voor heel makkelijk
Je plaatst eerst weer een quote en een ;
Je krijgt deze UPDATE gegevens in je gebruikersnaam veld: 'x'; UPDATE members SET wachtwoord = 'IkVerranderJeWachtwoord!' WHERE gebruikersnaam = 'administrator'; --
Pagina 5

Wat kan ik er tegen doen?

Het beveiligen van in dit geval input boxjes is heel simpel!
De functie: mysql_real_escape_string() escaped alle caracters.
Je kan ook een functie gebruiken zoals: addslashes().

Wat natuurlijk ook heel makkelijk is, is magic_quotes_gpc, staat die aan dan zijn er geen problemen, word het allemaal automatisch gedaan.

De data kan je dan weer goed krijgen door er de functie stripslashes() er op los te laten.
Pagina 6

Bronnen en extra

Voor deze tutorial heb ik een paar bronnen gebruikt:
-Mijn verslag
-SQL Injection goed verslag!

Voor de rest was het ervaring...
ervaring..
en, nog meer ervaring.

Het verslag dat ik heb gesgreven was om mijn sgool te hacken, en met special thanx gehost door Klaasjan. Ik bedank hem bij deze hier voor!


Ik hoop dat het een goede tutorial was (tenminste, goed genoeg), want dit is de eerste die ik gebruik.
Ben niet 'bang' om me kritiek te geven op deze tutorial! ik kan dat alleen gebruiken en evt. het hier aanpassen!

Zoals jullie zien is SQL Injection dus super gevaarlijk voor je systeem! Een kwaadwillende kan heel je database over hoop halen door de simpele voorbeeldjes die hier staan.

Succes met PHP iedereen!

Reacties

0
Nog geen reacties.