
Netwave IP 카메라의 메모리 덤프 취약점(CVE-2018-17240)을 이용하여 로그인 자격 증명을 검색하는 도구입니다.
메모리 덤프 취약점(CVE-2018-17240)을 이용해 Netwave IP 카메라에서 로그인 자격 증명을 추출하는 도구입니다. 이 프로젝트는 expcamera에서 영감을 받았으며 성능과 효율성 면에서 개선점을 제공합니다. 이 도구는 expcamera처럼 셸 명령을 통해 Linux CLI 도구를 사용하지 않기 때문에 모든 플랫폼에서 작동합니다.
Linux 시스템에서 /proc/kcore는 시스템 메모리를 ELF 코어 이미지로 노출하는 가상 파일입니다. 이 카메라들은 MMU가 없는 ARM7 코어에서 uClinux를 실행하므로 단일 플랫 주소 공간이 존재합니다. 즉, 덤프에는 커널의 메모리와 함께 카메라 애플리케이션의 메모리가 포함되며, 여기에는 전역 변수에 보관된 구성 블롭도 포함됩니다.
이 파일에 접근할 수 있는 이유는 웹 서버에 인증이 필요 없는 임의 파일 읽기 기능이 있기 때문입니다. 요청 핸들러는 선행 슬래시를 정확히 하나만 제거하고 경로 탐색 필터링 없이 fopen()을 호출하며, 결과를 root 권한으로 제공합니다. 따라서 //proc/kcore는 /proc/kcore로 해석되며, 이것이 요청 경로에 선행 이중 슬래시가 붙는 이유입니다.
구성 블롭은 고정된 레이아웃을 가지므로 자격 증명을 그대로 읽어낼 수 있습니다:
| 오프셋 | 필드 |
|---|---|
0x00 | uint32 매직, 항상 0x440C9ABD |
0x04 | uint32 체크섬 |
0x08 | uint32 길이 |
0x0C | char device_id[13] 12자의 대문자 16진수 문자와 NUL |
0x36 | struct { char name[13]; char pwd[13]; uint8 pri; } users[8] |
이 도구는 /proc/kcore를 스트리밍하며 각 청크에서 매직 값을 검색합니다. 매직 값을 찾으면 사용자 테이블에서 최고 권한 계정을 반환합니다.
이 도구는 취약점을 확인할 호스트를 지정하는 두 가지 방법을 지원합니다. 호스트는 ip:port 형식이어야 합니다.
| 인수 | 설명 |
|---|---|
--host | 확인할 호스트, 여러 번 지정할 수 있음 |
--file | 확인할 호스트 목록이 포함된 파일 |
이 도구는 취약점을 확인하기 위해 Censys, Shodan, ZoomEye에서 호스트를 검색하는 것을 지원합니다.
| IoT 검색 엔진 | 인수 | 필수 환경 변수 |
|---|---|---|
| Censys | --censys | CENSYS_PERSONAL_ACCESS_TOKEN |
| Shodan | --shodan | SHODAN_API_KEY |
| ZoomEye | --zoomeye | ZOOMEYE_API_KEY |
Censys는 Platform API를 사용합니다. platform.censys.io에서 개인 액세스 토큰을 생성하세요. 무료 지갑 대신 조직에 검색 비용을 청구하려면 CENSYS_ORGANIZATION_ID도 설정하세요. Platform 검색 엔드포인트는 유료 플랜이 필요하며, 무료 계정은 조회 엔드포인트로 제한됩니다.
$ pip install -r requirements.txt
Usage: main.py [-h] (--host HOST | -f FILE | --censys | --shodan | --zoomeye) [-n NUMBER] [-c CONCURRENT] [-t TIMEOUT] [-o OUTPUT]
A tool for retrieving login credentials from Netwave IP cameras using a memory dump vulnerability (CVE-2018-17240)
Options:
-h, --help show this help message and exit
--host HOST A host to check, can be specified multiple times
-f, --file FILE A file containing the hosts to check
--censys Retrieve hosts from the Censys Platform API using the personal access token specified with the CENSYS_PERSONAL_ACCESS_TOKEN environment variable
--shodan Retrieve hosts from the Shodan API using the API key specified with the SHODAN_API_KEY environment variable
--zoomeye Retrieve hosts from the ZoomEye API using the API key specified with the ZOOMEYE_API_KEY environment variable
-n, --number NUMBER The number of hosts to retrieve from the IoT search engine, by default 100
-c, --concurrent CONCURRENT
The number of hosts to check concurrently, by default 25
-t, --timeout TIMEOUT
The timeout in seconds for retrieving the credentials from the memory dump of each host, by default 300
-o, --output OUTPUT The file to write the credentials to, by default credentials.txt
이 도구는 교육 목적으로만 제공됩니다. 이 프로젝트의 기여자들은 이 도구의 사용으로 인해 발생할 수 있는 어떠한 손해나 법적 문제에 대해서도 책임을 지지 않습니다. 사용에 따른 위험은 본인이 감수하십시오.