diff --git a/Readme.md b/Readme.md index a468e92..87f36c9 100644 --- a/Readme.md +++ b/Readme.md @@ -57,6 +57,8 @@ Vedere il readme di [buildroot](buildroot). ## Keygen +Per un esempio di backdoor reale di questo tipo [vedere qui](https://git.lsd.cat/g/nokia-keygen). + Vedere il readme del [keygen](keygen). ## Pannello web diff --git a/build.sh b/build.sh index 76b0d26..9a27727 100755 --- a/build.sh +++ b/build.sh @@ -32,6 +32,11 @@ mkdir -p target/overlay/root/.ssh cp target/keys/sshkey target/overlay/root/.ssh/authorized_keys chmod -R 600 target/overlay/root/.ssh/ +echo "[+] Generating the root password" +password=`hexdump -n 32 -e '4/4 "%08X"' /dev/urandom` +hash=`mkpasswd $password` +echo $password > target/keys/rootpassword + echo "[+] Building the image" N=`grep -c '^processor' /proc/cpuinfo` cd target/buildroot diff --git a/webpanel/Readme.md b/webpanel/Readme.md new file mode 100644 index 0000000..789556a --- /dev/null +++ b/webpanel/Readme.md @@ -0,0 +1,27 @@ +## 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. \ No newline at end of file