Certified Secure Challenges - Over challenges en dergelijke

SQL injection id=1' AND 1='1

16-09-2021, 18:03 door rnbplt, 4 reacties
Ik ben bezig met een bepaalde SQL injection challenge en begrijp niet goed waarom iets wel en niet werkt. Hopelijk is hier iemand die wat licht in het duister kan brengen over wat er nu precies in de SQL query gebeurd en waarom het wel of niet werkt.

De standaard site is https://site/index.php?id=1

Wat ook werkt is https://site/index.php?id=1' AND 1='1 en geeft de site een pagina terug.
De url https://site/index.php?id=1' AND 1='2 werkt ook, maar dan in de dat de site correct geen pagina terug geeft.

Wat NIET werkt is https://site/index.php?id=1 AND 1=2 en ?id=1' AND 1=2' en ?id='1 AND 1=2'. De site geeft dan een pagina terug en het AND deel wordt dus genegeerd. De ' moet dus specfiek op die eerder genoemde plek.

Wat gebeurd er nu in de SQL query dat de ' precies 1' AND 1='1 moet staan een niet anders. Ik duidelijk niet begrijp niet.
Reacties (4)
16-09-2021, 18:24 door [Account Verwijderd] - Bijgewerkt: 16-09-2021, 18:26
Vermoedelijk ligt het aan die spaties; (o.a.) spaties in URL's mogen niet. Gebruik %20 op de plek van een spatie in een URL (ook voor bepaalde andere karakters; zie: https://www.rfc-wiki.org/wiki/RFC3986#Characters)
16-09-2021, 18:59 door Anoniem
Tussen de ' betekend dat het een waarde is, daar buiten is het syntax. Zonder de eerste ' (zoals in je eerste niet-werkende voorbeeld) zal je hele input als waarde gezien worden. De AND wordt dan dus niet als query/syntax gezien. In je tweede niet-werkende voorbeeld lijkt het mij dat je ook een syntax fout maakt doordat er twee ' achter elkaar staan. In je twee werkende voorbeelden sluit je eerst de waarde 1 af (1'), voeg je query parameters toe ( AND 1='2) en sluit de oorspronkelijke query jou input weer af ('). Dan klopt de syntax waardoor de aanval werkt.
16-09-2021, 19:49 door Anoniem
Maybe wordt het wat duidelijker als je een beeld hebt van hoe het in de webapplicatie werkt. Lastige hierbij is natuurlijk dat als je een (blackbox) pentest doet dat je niet altijd de broncode hebt. Wat ik zelf ik doe in dit geval is gewoon een "wilde gok" maken van wat de webapplicatie doet, en dan mijn assumptie testen.

Op basis van je posting, laten we eens aannemen dat de applicatie dit doet:

SELECT page FROM pages WHERE id = '$id'

(Waarbij $id is wat je opgeeft in de adresbalk, ?id=bla).

Eerste belangrijke inzicht is dat je snapt dat alles wat tussen quotes (') staat gezien wordt als 'literal'.

(het wordt gezien als 'text' en wordt niet uitgevoerd als SQL statement)

Als we nu je 1e invoer pakken:

id=1' AND 1='1

En dat "invullen" (in de mental model) in wat we *denken* wat de webapplicatie doet:

SELECT page FROM pages WHERE id = '1' AND 1='1'

Dan gaat de webapplicatie de page met id '1' ophalen en hij checked dat 1 gelijk is aan '1'

Als resultaat verwachten dan dus de page met id 1 (en dit is ook wat je omschrijft) - Check dus!

Dan pakken we je 2e invoer:

1' AND 1='2

SELECT page FROM pages WHERE id = '1' AND 1='2'

Dan gaat de webapplicatie de page met id '1' ophalen en checked hij dat 1 gelijk is aan '2'

Als resultaat verwachten dus *niets* (want 1 is niet gelijk aan 2) - Ook gelijk aan je observatie!

Als we nu je 3e invoer pakken:

1 AND 1=

SELECT page FROM pages WHERE id = '1 AND 1=1'

Dan gaan de applicatie de pagina met id '1 AND 1=1' ophalen. Omdat je hele invoer
nog tussen de quotes staat gaat hij dus zoeken in de database naar en record met
de *letterlijke* 'waarde 1 AND 1=1' voor het id veld, en die bestaat niet!

Voorbeeld 4 en 5 kan je opdezelfde manier "uitwerken"

Happy hacking!
17-09-2021, 09:11 door rnbplt
Door Anoniem: Maybe wordt het wat duidelijker als je [....]
Happy hacking!

Yes! We hebben een brandend lampje! Dankjewel!
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.