Kategorier
Verktyg

Nytt intressant tillägg till Burp Suite: Upload Scanner

Tobias ’floyd’ Ospelt på företaget modzero AG har släppt en ny intressant extension till Burp Suite. Denna extension går igenom ett stort antal olika sårbarheter som är kopplade till vanliga fel när det hantering av uppladdade filer.

Stöd Penetrationstest.se och Kryptera.se via Patreon > 

För en utförlig lista över samtliga kontroller så kolla in Github-repot.

För bästa resultat så bör du konfigurera så att Upload Scanner gör en ReDownload. Dvs försöker ladda hem filen som Upload Scanner precis laddat upp. Jag gjorde ett enkelt test för att se vad Upload Scanner går för.

Testet jag gjorde utför en enkel kontroll i PHP på filen som laddades upp om den är en bild eller ej genom att använda PHP-GD funktionen getimagesize().

$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
 echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
 echo "File is not an image.";
 $uploadOk = 0;
}

Givetvis ska man inte använda getimagesize() för att kontrollera om en fil är en bild eller ej, vilket även PHP.net:s manualsida framhåller:

Do not use getimagesize() to check that a given file is a valid image. Use a purpose-built solution such as theFileinfo extension instead.

Kom igång med Upload Scanner

Först installerar du tillägget via BApp Store. Då får du några nya menyval samt en ny flik, jag rekommenderar även Logger++ som gör att du kan se bättre exakt vad som händer under huven.

Via webbläsaren laddar du upp en fil till tjänsten och går sedan in i Burp Suites Proxy och högerklickar samt väljer Send to Upload Scanner. Skärmdump för att visa:

Efter det så går vi över till den tabb/flik som heter Upload Scanner. Där konfigurerar vi så att ReDownloader fungerar och i just detta fall är det enkelt eftersom URL:en är statisk

Och knappen ändras då till ”Start scan with ReDownloader”:

Sedan så startar vi scanningen och resultatet kan ses via Scanner-tabben. I mitt fall så skickade den 1777 st http-förfrågningar och när jag tittar direkt på webbservern så laddade den upp 1659 olika filer.

Resultat från Upload Scanner

Givetvis hittade Upload Scanner flertalet brister i min bristfälliga kontroll. De allvarligaste gäller exekvering av kod direkt på servern men även andra intressanta såsom .htaccess uploads och stored XSS.

Här är några stycken som jag klippt ut:

PHP-kod i metadata

Remote command execution through PHP payload in Metadata of type comment. The server replaced the code <?php echo ”gTaxf-InJ” . ”eCt.”.”TeSt”;?> inside the uploaded file with gTaxf-InJeCt.TeSt only, meaning that PHP code execution is possible.

PNG IDAT chunks

Remote command execution through PHP payload in IDAT chunks, payload from https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/ . The server probably tried to execute the code <?=$_GET[0]($_POST[1]);?> inside the uploaded image but failed, meaning that PHP code execution seems possible. Usually the server will respond with only the start of the file which has length 66 and cut off the rest. Also, it usually responds with an HTTP 500 error.