2.0 KiB
Webpanel
Il pannello non e' autenticato, e cioe' una volta che un utente sara' connesso alla rete wifi potra' utilizzarlo visitando l'ip del dispostivo alla porta 80
.
Il pannello simula molto limitatamente le funzioni base dei classici modem/router casalinghi, una pagina informatica, una pagina per testare la connessione (ping/traceroute) e una pagina per caricare eventuali aggiornamenti.
Vulnerabilita'
In utils.php
nelle funzioni di ping e traceroute sono presenti delle command injection causate dal mancato utilizzo di escapeshellarg()
. Normalmente, quando non vengono utilizzate le funzioni precise per effettuare l'escape degli argomenti dei comandi vengono invece utilizzate delle blacklist di caratteri, quasi sempre incomplete. La blacklist di caratteri e' specificata nel file includes/config.php
e puo' essere piu' o meno completa a seconda delle difficolta' che si vuole stabilire per la challenge.
Attualmente risulta configurata cosi':
$blacklist = array(';', '#', '(', ')', '|', '&', ' ', "\t", '<', '>');
Come si puo' evincere i normali caratteri che permettono di terminare un comando e iniziarne un altro, cosi' come i carateri din whitespace sono bloccati.
Tuttavia e' possibile utilizzare ${IFS}
come whitespace e il newline come command separator. Un esempio di exploit e' il seguente:
curl http://192.168.77.1/utils.php --data $'action=ping&host=127.0.0.1\nuname${IFS}-a'
Update
La pagina di update suggerisce di guardare lo script di update la cui vulnerabilita' permette di acquisire la terza flag. Tuttavia per sfruttare tale vulnerabilita' e' richiesta una reverse shell e non e' quindi possibile solo tramite il pannello web.
Flag
Nella home page del pannello web viene rivelata la prima flag, che e' impostabile in includes/config.php
. E' chiaro che un attaccante puo' accedere a questa flag solo dopo esserci connessa via wifi. La flag della command injection e' invece inserita nel filesystem in fase di build.