Instructeur: Om nu te proberen SQL-injecties te ontdekken,
moet je door je doel bladeren en proberen
elke pagina te breken.
Dus telkens als je een tekstvak of
een parameter ziet op dit formulier
bijvoorbeeld, pagina. php dan iets gelijk aan iets, probeer
hier iets in te brengen.
Dus probeer een enkel citaat te gebruiken,
probeer een en te gebruiken, of de order by statement, om de pagina
te breken en het er anders uit te laten zien.
Ik zal je een voorbeeld laten zien.
En ik ga eerst naar de login pagina, hier.
En hij vraagt me nu om in te loggen.
Maar ik heb me ingeschreven met mijn eigen naam.
Dus je kunt gewoon hier naar binnen gaan en je registreren.
Ik heb een gebruikersnaam genaamd
Zaid en een wachtwoord met één twee drie vier vijf zes.
Dus laten we eerst...
Ik log in om het je te laten zien.
Mijn gebruikersnaam
is Zaid en mijn wachtwoord is één twee drie vier vijf zes.
En nu ben ik ingelogd als Zaid
en mijn handtekening was aa.
Het is gewoon niets, gewoon als een test.
Dus ik ga uitloggen en we
zijn terug op de inlogpagina.
Hier hebben we de pagina zodat je kunt
proberen die in te spuiten.
Maar daar komen we later op terug, dus.
Op dit moment hebben
we een voorbeeld van injecteren in tekstvakken.
Dus je kunt proberen te injecteren in de naam
en in het wachtwoord.
Dus ik zet mijn naam als Zaid en ik
zet een enkel citaat.
Dus ik zet dit teken in mijn wachtwoord.
Dus laten we kijken of we het kunnen breken.
En zoals je nu kunt zien,
krijgen we een foutmelding.
En het ziet er niet uit als een normale
fout, maar als een database fout.
En meestal heb je geluk als je zo'n foutmelding
krijgt.
Meestal zal de fout niet zo informatief zijn als deze.
Soms zie je gewoon dat de pagina
zich niet gedraagt zoals je verwacht.
Soms is het gewoon een pagina die
er niet uitziet zoals het hoort.
Bijvoorbeeld, als het een nieuwspagina
is, ontbreekt misschien het artikel of als het
een blog is, ontbreekt een van de berichten of een ander
soort berichten.
Je moet dus in de gaten houden wat er verandert.
In dit voorbeeld krijgen we eigenlijk een mooie foutmelding.
Het vertelt ons welk bestand het
heeft, en het vertelt ons dat er een fout in de verklaring zit.
En de fout bij het aanhalingsteken dat we hebben toegevoegd.
En het vertelt ons ook de verklaring die wordt uitgevoerd.
Dit is echt goed om te leren.
Want nu kunnen we zien wat de verklaring is,
die het systeem probeert uit te voeren.
En de systemen proberen een select * te doen.
Dus het probeert alles te selecteren van accounts, waarvan
de gebruikersnaam gelijk is aan Zaid en
het wachtwoord gelijk is aan een enkel citaat.
En merk op dat het systeem van de webapplicatie
al aanhalingstekens toevoegt
rond de naam.
Dus toen ik Zaid zei, voegde het Zaid toe tussen twee aanhalingstekens.
En het voegde het enkele citaat
toe dat ik tussen twee andere citaten plaatste.
Daarom hebben we hier drie citaten.
Dus hieruit kunnen we
opmaken dat 70% van de website een SQL injectie
heeft.
We weten nog steeds
niet zeker of het kan uitvoeren wat we willen.
Dus kan ik daadwerkelijk code injecteren
en laten uitvoeren?
Eens kijken of dat lukt.
Dus de gebruikersnaam wordt weer Zaid.
En wat ik ga doen met het wachtwoord,
ik ga mijn wachtwoord invoeren.
Dus ik zet één twee drie vier vijf zes
en dan sluit ik het af.
Dus ik zal je vertellen
waarom ik het afsluit, want
de huidige verklaring
door het systeem is select * van, naar Zaid en, is gelijk aan.
En het opent een enkel citaat uit zichzelf.
Laten we dit S-wachtwoord noemen.
Dus we behandelen dit als een variabele.
En het neemt op wat ik hier in stop,
wat ik ook in deze doos stop.
En hij gaat het invoegen in plaats van het S-wachtwoord, dat
een variabele is.
Ik geef je gewoon een idee, dus je
moet je kunnen voorstellen dat dit gebeurt.
Dus hij neemt wat ik er ook instop, en zet het tussen
twee enkele aanhalingstekens.
En het wordt daar ingevoegd, en uitgevoerd
op het systeem.
Dus wat ik doe is,
ik zet één twee drie vier vijf zes
en voeg zelf het citaat toe.
Dus wat ik nu ga doen, de code
wordt als volgt.
Dus hij selecteert dit, en het wachtwoord
is gelijk aan dat.
En ik heb nu twee citaten, oké.
En dan wat ik ga doen
is, ik ga zeggen
en, één is gelijk aan één.
Dus één is gelijk aan één.
En ik probeer gewoon
te zien of het gaat uitvoeren wat ik wil.
Dus mijn verklaring nu is, het wordt Select
* van accounts, waar gebruikersnaam gelijk
is aan Zaid en wachtwoord gelijk
is aan een twee drie vier vijf zes.
En let op, ik ga dit zelf invoegen,
en enen gelijk aan één.
Eén probleem waar het systeem over gaat klagen,
is dat we hier een extra citaat
hebben, omdat ik dit zelf ga invoegen in het tekstvak.
Dus het gaat hierover klagen,
het gaat zeggen dat dit een open code is
en nooit gesloten is geweest.
Dus wat ik ga doen is het commentaar toevoegen.
En als je een commentaar toevoegt,
wordt in principe alles wat na het commentaar komt
niet uitgevoerd.
Ik ga de hash gebruiken als commentaar.
Dus alles wat binnenkomt na de hash
zal het systeem negeren.
Dus ik ga nu injecteren wordt dit, en één is
gelijk aan één en dit, dus zoals ik al zei, meestal
wat je hier hebt, heb je je wachtwoord,
of afhankelijk van hoe het programma
heet, voor gewoon voorstellen
dit.
En ik ga dit erin stoppen.
Dus als je dat doet, en je voegt het in, dan ziet
de code er zo uit.
Dus het ziet eruit als de juiste gebruikersnaam,
het juiste wachtwoord,
en één is gelijk aan één, wat waar is.
En dan gaat het
niet, het gaat dit citaat hier negeren.
Dus als we dit plakken,
moeten we kunnen inloggen.
Ik zou moeten kunnen inloggen.
En perfect konden we inloggen en de gebruikersnaam is Zaid.
Tot nu toe hebben we niets gedaan.
Maar dit laat ons zien dat het onze code uitvoert?
Laten we iets anders proberen.
Laten we nu proberen een valse verklaring toe te voegen.
Dus deden we één gelijk, en dat klopte
en het voerde uit wanneer we wilden.
Laten we één gelijk aan twee proberen.
En dat is niet waar.
Dus ik heb het juiste wachtwoord.
En ik heb de juiste gebruikersnaam,
en één is gelijk aan twee.
En dit moet fout zijn want het is onwaar
één is niet gelijk aan twee en
ik gebruik een en dus moet alles waar zijn.
Dus het zou een foutmelding moeten
geven, ook al heb ik de juiste gebruikersnaam en het
juiste wachtwoord.
Dus ik zet één twee drie vier vijf zes
en één is gelijk aan twee.
Dus het zal zijn als, oh, dit is verkeerd.
En zoals je ziet krijg ik een authenticatiefout, slechte
gebruikersnaam of wachtwoord,
hoewel ik het juiste wachtwoord en de juiste gebruikersnaam
heb gekregen.
Dit bevestigt dus dat deze website alles wat we willen
in het wachtwoord injecteert.
Dus we kunnen het wachtwoordveld gebruiken om SQL-code te injecteren.
En het zal altijd op dit formulier staan.
Dus we gaan een wachtwoord
invoeren en jij zet je code hier neer,
dus ik zet het hier in hoofdletters.
Omdat we een wachtwoord invoeren, het citaat sluiten,
en dan de code die we willen uitvoeren op
het systeem hier plaatsen,
en het zal worden uitgevoerd op het doelsysteem.