Avete mai studiato Docker? Se siete appassionati di web hacking, studiatelo! In questo post vi convincerò che usare Docker per studiare le vulnerabilità del web è una buona cosa! Se volete saperne di più su questo post, seguite la Documentazione di Docker ker Documentation
Come si trovano le vulnerabilità?
Esistono diverse tecniche:
- Fuzzing
- Studio del codice sorgente
- Esecuzione e debug del codice sorgente
Indipendentemente dalle competenze tecniche che si intende utilizzare, è necessario riprodurre un ambiente vulnerabile. Per capire meglio la vulnerabilità, è necessario esaminare i log dei server (mysql, apache, ecc.). In tutti questi casi, docker vi viene incontro.
Dockerhub + github: definisci il tuo ambiente vulnerabile
Docker è ottimo per gli sviluppatori per diversi motivi. Si può trovare di tutto… dockerhub è un repository pubblico che contiene migliaia e più di immagini docker. Possiamo cercare immagini docker vulnerabili, naturalmente. E si può anche usare github per cercare ambienti vulnerabili. Si può cercare per CVE, nome della vulnerabilità o nome del servizio. Un progetto interessante che memorizza gli ambienti docker vulnerabili è https://github.com/vulhub/vulhub.
VSCode e Docker
A seconda di ciò che si sta studiando, è necessario impostare punti di interruzione o stampare istruzioni di debug per vedere il risultato della propria indagine. Docker può essere completamente integrato in VSCode, utilizzando questa estensione:

Una volta installato, si avrà una semplice icona docker contenente tutti i contenitori in esecuzione:

Come si può vedere nella figura, sto studiando una vulnerabilità in WordPress con php5.6. Ho inserito una “funzione error_log” che stampa “PIPPOZZO” e sto osservando i log nel pannello sottostante. Posso studiare la mia vulnerabilità con un IDE completamente integrato con supporto Docker. Naturalmente, si può anche fare qualcosa come Portainer.
Quando termina il supporto di docker per lo studio delle vulnerabilità?
Il supporto di Docker termina quando si studiano tipi specifici di vulnerabilità, ad esempio:
- vulnerabilità di Windows
- vulnerabilità del kernel
Se avete bisogno di superare questi limiti, potete usare tecniche di virtualizzazione a livello di hypervisor-2, come Virtualbox e VmWare. Di solito uso Vagrant per creare ambienti di vulnerabilità. .
Esempio pratico: PHP unserialize() Object Injection in Yet Another Stars Rating
Volevo studiare la vulnerabilità di deserializzazione non sicura nel plugin Yet Another Stars Rating wordpress https://wpscan.com/vulnerability/9207.
Un’ottima spiegazione di questa vulnerabilità è presente in https://dannewitz.ninja/posts/php-unserialize-object-injection-yet-another-stars-rating-wordpress
It just misses two bits of information:
- Il gadget di serializzazione di phpgcc non funziona più. Credo che qualcosa sia cambiato nell’implementazione di Requests_Utility_FilteredIterator.Wordpress core should be < 5.5.2 to exploit Requests_Utility_FilteredIterator: per un aggiornamento di sicurezza, WP rimuove la deserializzazione per questa classe. (https://www.wordfence.com/blog/2020/11/unpacking-the-wordpress-5-5-2-5-5-3-security-release/)
Develop the core environment
Stavo cercando un ambiente docker per wordpress. Naturalmente, è possibile utilizzare le immagini ufficiali di dockerhub:

In ogni caso, mi piacerebbe avere un supporto per php5.6 per studiare la vulnerabilità della serializzazione in questo contesto.
Una ricerca della seguente stringa in google:
“wordpress php5.6 docker-compose”
Mi dà un quadro interessante:
https://github.com/khaledsaikat/wordpress-php56-docker
Utilizza docker-compose. Docker-compose è un modo meraviglioso per eseguire più servizi Docker configurandoli in un unico file, attraverso un approccio Infrastructure as Code.
Lo scarico e provo a eseguirlo:
docker-compose up --build

Ora posso vedere l’ambiente presente a sinistra nel pannello VSCode di docker.
Configura l’ambiente
Come ho detto, il nostro ambiente vulnerabile dovrebbe contenere una versione di wordpress < 5.5.2. Il github di wordpress scaricato usa l’ultima versione, quindi devo applicare alcune modifiche per riprodurre l’ambiente vulnerabile:

Ora riavvio WordPress
docker-compose down && docker-compose up -d --build
Poiché ripeto questo comando un milione di volte, lo inserisco in un alias di Linux:
alias dcr="docker-compose down && docker-compose up -d --build"
Basta digitare dcr per aggiornare l’ambiente docker.
E’ tempo di installare il plugin vulnerabile
https://downloads.wordpress.org/plugin/yet-another-stars-rating.1.8.6.zip
Installa ed attiva l’ambiente vulnerabile

Logs and view source code in VS Code
Posso visualizzare i log o collegare una shell all’interno del contenitore WordPress in esecuzione. In ogni caso, la prima cosa che devo fare è trovare un modo per navigare nei file attraverso VSCode: Ho intenzione di studiare la vulnerabilità, stampando informazioni, studiando informazioni prese dal post di dannez. Per questo motivo, voglio collegare il volume docker al mio host:

Copio l’ambiente in esecuzione nel mio host, quindi mappo il volume locale nel docker-compose:

Ora posso modificare il codice sorgente di WordPress e sono in grado di vedere le modifiche in wordpress:

Ho scritto error_log(“PIPPOZZO”) nel file wordpress-php56-docker/website/wp-content/plugins/et-another-stars-rating/lib/yasr-shortcode-functions.php, all’interno di shortcode_visitore_votes_callback.
È un callback per lo shortcode [yasr_visitor_votes] di wp. Per raggiungere l’istruzione error_log, inserire uno shortcode in una pagina e navigarla con una semplice richiesta GET.
Collegare al container wordpress in esecuzione e vedere le istruzioni:
[Mon Dec 14 07:26:06.113505 2020] [:error] [pid 27] [client 192.168.74.1:27879] PIPPOZZO192.168.74.1 - - [14/Dec/2020:07:26:05 +0000] "GET /?p=13 HTTP/1.1" 200 9074 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36"[Mon Dec 14 07:26:24.284191 2020] [:error] [pid 25] [client 192.168.74.1:27886] PIPPOZZO192.168.74.1 - - [14/Dec/2020:07:26:23 +0000] "GET /?p=13 HTTP/1.1" 200 9205 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36"[Mon Dec 14 07:26:43.209619 2020] [:error] [pid 18] [client 192.168.74.1:27887] PIPPOZZO
Ed ora? Docker Security Playground
Vi ho convinto dei vantaggi dell’utilizzo di Docker per riprodurre ambienti vulnerabili? Se sì, potete dare un’occhiata al nostro progetto Docker Security Playground . Ho intenzione di riprodurre questo scenario in un laboratorio DSP e creerò un nuovo post su questa vulnerabilità e sulla sua riproduzione utilizzando Docker Security Playground.
Security è SecSI!