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!