WebPanel documentation

This commit is contained in:
Giulio 2020-07-19 14:11:03 +02:00
parent 38aa15ffad
commit 467c26e41c
3 changed files with 34 additions and 0 deletions

View File

@ -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

View File

@ -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

27
webpanel/Readme.md Normal file
View File

@ -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.