How to: Null byte injection voor beginners

Voorwoord: De onderstaande handleiding komt uit een serie van 24 handleidingen. Deze zijn bedoeld om mensen te informeren hoe makkelijk het is om een aanval te doen. Daarnaast ben ik van mening dat de beste manier om iets over computerbeveiliging te leren is om te laten zien hoe makkelijk het is. Gebruik de techniek dan ook voorzichtig. En vergeet niet:Een hacker informeert, een cracker sloopt en is strafbaar. 

Het gebruiken van Null Bytes is een van de oudste exploit technieken. De techniek werkt door een Null in een url toe te voegen. Hiermee pas je de string aan waarmee je andere output kan krijgen. Dit gaat dan om output dit jij graag wilt en de eigenaar van de site niet wilt geven.

In theorie zijn alle talen die gebruikt worden voor websites aan te vallen met deze techniek. Omdat een null byte de string manipuleert terwijl het op een normaal verzoek lijkt kan het dus voorkomen dat je je antwoord krijgt. Het is wel zo dat dit niet werkt voor een goed beveiligde webserver.

Maar wat is een Null Byte? Een null byte is de volgende code: %00 wat staat voor een spatie (lege ruimte). Voor ASCII gaat het om ””.

Hoe werkt het? 

Een developer kan bijvoorbeeld de onderstaande code gebruiken om een afbeelding te laden. Deze code werkt perfect en doet normaal gesproken precies wat de developer verwacht.

    $file = $_GET['file'];

    require_once("/var/www/images/$file.jpg");

Normaal gesproken zou dit script de volgende URL tonen:

http://www.website.com/file.php?file=file.jpg

Zoals gezegd, dit is een normale techniek om een afbeelding te tonen. De gebruiker die dit opvraagt ziet een pagina met de afbeelding erbij. Als we nu een null byte exploit gebruiken dan word de url zo:

http://www.website.com/file.php?file=[de code naar je bestand hier]%00

Voorbeeld:

http://www.website.com/file.php?file=../../../../../etc/passwd%00

Maar waarom werkt dit? Nou de bovenstaande code is kwetsbaar omdat het geen gebruikt maakt van een database. Het laadt gewoon een bestand van de webserver en toont deze dan. Hiermee worden een aantal veiligheidstappen niet gebruikt die je wel zou hebben bij gebruik van een database.

Je kan deze aanval ook voorkomen de in de PHP code al het einde van een string aan te geven, alles wat na het einde komt word dan genegeerd. Ook is dit type aanval niet meer mogelijk in PHP6 maar deze is nog niet in productie. Maar het is niet alleen een PHP zwakte, ook Perl heeft er last van. Als onderstaande code gebruikt word als voorbeeld: 

 $buffer = $ENV{'QUERY_STRING'};

    $buffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

    $fn = '/home/userx/data/' .$buffer. '.jpg';

    open (FILE,"<$fn");

Dan word de exploit:

http://www.website.com/read.pl?page=../../../etc/passwd%oojpg

read.pl?page=../../../../etc/passwd%00jpg

Zoals je kan zien blijft de techniek zo goed als gelijk. Als je weet hoe deze exploit werkt word het makkelijker om je eigen webserver te beveiligen

Reageer

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: