Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Panoptic — Panoptic은 경로 탐색(path traversal) 취약점을 통해 일반적인 로그 및 구성 파일의 콘텐츠를 검색하고 추출하는 과정을 자동화하는 오픈 소스 침투 테스트 도구입니다. | Kitploit
도구/GitHubGitHub/lightos/panoptic
ReconnaissanceVulnerability ScannersWeb Application ExploitationInformation GatheringPenetration Testing
GitHublightos/panoptic

Panoptic

Panoptic은 경로 탐색(path traversal) 취약점을 통해 일반적인 로그 및 구성 파일의 콘텐츠를 검색하고 추출하는 과정을 자동화하는 오픈 소스 침투 테스트 도구입니다.

저장소 보기
3257422일 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Panoptic

Panoptic Logo

License: MIT Python Versions Ruff mypy GitHub last commit CodeRabbit Pull Request Reviews

Panoptic은 경로 탐색(path traversal) 취약점을 통해 일반적인 로그 및 설정 파일의 검색과 조회를 자동화하는 오픈 소스 침투 테스트 도구입니다.

Panoptic Demo

기능

  • 구성 가능한 작업자 풀을 사용한 비동기 동시 스캔 (--concurrency)
  • 매개변수 기반, 경로 기반, POST, 쿠키, 헤더 및 JSON 본문 주입을 통한 일반적인 로그 및 설정 파일 자동 검색
  • 임의 주입 지점을 위한 FUZZ 마커 — --header 또는 --data 값에 FUZZ 배치
  • 파일 경로를 디코딩하는 엔드포인트를 위한 Base64 인코딩 (--base64)
  • 추가 스캔을 제한할 수 있는 옵션이 포함된 자동 OS 감지
  • 오탐을 줄이기 위한 상태 코드 필터링이 포함된 휴리스틱 응답 비교
  • 동적 케이스 주입 — 홈 디렉터리 파일은 /etc/passwd, binlog 파일은 mysql-bin.index 파싱
  • 여러 출력 형식: 텍스트(rich), JSON, CSV (--output-format)
  • 장기 실행 스캔을 위한 재개/체크포인트 지원 (--resume-file)
  • 영구 설정을 위한 TOML 설정 파일 (--config)
  • 다양한 경로 탐색 우회 기법: 접두사, 접미사, 배수, 슬래시 대체, 이중 인코딩
  • 검증 기능이 포함된 HTTP/HTTPS 및 SOCKS5 프록시 지원
  • 무작위 또는 사용자 지정 User-Agent, 쿠키 및 헤더 지원
  • 배너, 로그 및 기계 판독 가능 출력에서 자격 증명 편집 (숫자 및 부울 JSON 본문 값 포함)
  • POSIX에서 소유자 전용 0600 권한으로 강화된 민감한 아티팩트 및 OS가 지원하는 경우 최종 구성 요소 심볼릭 링크 보호

요구 사항

  • Python 3.10+
  • Git
  • 종속성: Python 3.10의 httpx[socks], rich, rich-argparse, tomli

설치

root@kitploit:~
git clone https://github.com/lightos/Panoptic.git
cd Panoptic
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e .
panoptic --version

Windows 명령 프롬프트에서는 .venv\Scripts\activate.bat로 활성화하고, PowerShell에서는 .venv\Scripts\Activate.ps1을 사용합니다. 편집 가능(editable) 설치는 Panoptic이 --update를 위해 이 체크아웃에 연결된 상태로 유지되므로 디렉터리를 제자리에 두어야 합니다. pip install panoptic을 실행하지 마십시오. 해당 PyPI 이름은 관련 없는 프로젝트의 것입니다.

개발용:

root@kitploit:~
python -m pip install -e ".[dev]"

사용법

root@kitploit:~
panoptic --url "http://target/include.php?file=test.txt"

예제

기본 매개변수 기반 LFI

root@kitploit:~
panoptic --url "http://target/include.php?file=test.txt"
panoptic --url "http://target/include.php?file=test.txt&id=1" \
  --param file

POST 데이터 주입

root@kitploit:~
panoptic --url "http://target/include.php" \
  --data "file=test.txt&id=1" --param file

경로 기반 LFI

root@kitploit:~
panoptic --url "http://target/view.php/test.txt" --path-based

Base64 인코딩 매개변수

root@kitploit:~
panoptic --url "http://target/load.php?file=dGVzdC50eHQ=" \
  --base64 --auto

쿠키 주입 (FUZZ 마커)

root@kitploit:~
panoptic --url "http://target/page.php" \
  --header "Cookie: lang=FUZZ" --auto

JSON 본문 주입 (FUZZ 마커)

root@kitploit:~
panoptic --url "http://target/api/load" \
  --data '{"file":"FUZZ"}' --auto

사용자 지정 헤더 주입 (FUZZ 마커)

root@kitploit:~
panoptic --url "http://target/page.php" \
  --header "X-Template: FUZZ" --auto

확장자 매개변수

root@kitploit:~
panoptic --url "http://target/view.php?file=test&type=txt" \
  --param file --ext-param type

접두사를 사용한 필터 우회

root@kitploit:~
panoptic --url "http://target/filtered.php?file=test.txt" \
  --prefix "....//....//....//....//"

필터링된 스캔

root@kitploit:~
panoptic --url "http://target/include.php?file=test.txt" \
  --os "*NIX" --type conf
panoptic --url "http://target/include.php?file=test.txt" \
  --software PostgreSQL

재개 지원 JSON 출력

root@kitploit:~
panoptic --url "http://target/include.php?file=test.txt" \
  --output-format json --output-file results.json \
  --resume-file scan.checkpoint

SSL 오류를 무시한 프록시

root@kitploit:~
panoptic --url "https://target/include.php?file=test.txt" \
  --proxy "socks5://127.0.0.1:9050" --invalid-ssl

사용 가능한 필터 목록

root@kitploit:~
panoptic --list software
panoptic --list category
panoptic --list os

종합 스캔

root@kitploit:~
panoptic --url "http://target/include.php?file=test.txt" \
  --auto --all-versions --concurrency 8

FUZZ 마커

주입 지점을 표시하려면 --header 또는 --data 값의 아무 곳에나 FUZZ를 배치하십시오. Panoptic은 스캔 중에 FUZZ를 각 파일 경로로 대체합니다. 이를 통해 --param으로는 도달할 수 없는 주입 지점을 테스트할 수 있습니다:

주입 유형예
쿠키 값--header "Cookie: theme=FUZZ"
사용자 지정 헤더--header "X-Include: FUZZ"
JSON 본문

FUZZ가 있으면 --param은 필요하지 않습니다.

설정

Panoptic은 영구 설정을 위한 TOML 설정 파일을 지원합니다:

root@kitploit:~
panoptic --url "http://target/include.php?file=test.txt" \
  --config ~/.config/panoptic/config.toml

기본 설정 위치: ~/.config/panoptic/config.toml (--config 없이도 존재하면 자동으로 로드됩니다).

root@kitploit:~
[defaults]
# Any long option name (with dashes as underscores) is accepted here,
# including the target and output destinations.
url = "http://target/include.php?file=test.txt"
concurrency = 8
verbose = true
automatic = true
all_versions = true
output_format = "json"
output_file = "results.json"
log_file = "scan.log"
resume_file = "scan.checkpoint"

[proxy]
url = "socks5://127.0.0.1:9050"

[headers]
user_agent = "Mozilla/5.0"
cookie = "sid=foobar; auth=1"
values = ["X-Forwarded-For: 127.0.0.1"]

우선순위: CLI 인자 > 설정 파일 > 기본 내장값.

설정으로 지원되는 대상 및 출력 옵션

[defaults] 테이블은 성능 조정뿐만 아니라 모든 스캔 옵션을 허용합니다. 특히 다음을 영구 저장할 수 있습니다:

  • url — 기본 대상 (--url로 실행 시마다 재정의 가능)
  • output_format, output_file — 기계 판독 가능 결과가 저장되는 위치
  • log_file — 콘솔 출력을 파일에 미러링
  • resume_file — 재개 가능한 스캔을 위한 체크포인트 위치

Panoptic이 작성하는 민감한 아티팩트 — 로그 파일, 결과/목록 출력 파일, --write-files로 저장된 모든 파일 — 는 POSIX에서 소유자 전용 0600 권한으로 강제 설정됩니다. O_NOFOLLOW를 제공하는 플랫폼은 또한 최종 경로 구성 요소에 이미 존재하는 심볼릭 링크를 원자적으로 거부합니다. O_NOFOLLOW가 없는 플랫폼에서 Panoptic은 최선 노력(best-effort) 방식으로 열기 전 심볼릭 링크/정션 검사를 수행하지만, 이 검사로 경합(race) 조건을 완전히 제거할 수는 없습니다. Windows 모드 비트는 NTFS ACL을 구성하지 않으므로, 아티팩트에 민감한 데이터가 포함될 수 있는 경우 적절히 제한된 디렉터리를 사용하십시오.

명령줄에서 설정 부울 값 재정의

모든 부울 플래그에는 --no- 대응 형태가 있으므로, 설정 파일에서 true로 설정된 값을 파일을 편집하지 않고 단일 실행에서 끌 수 있습니다:

root@kitploit:~
# config.toml sets verbose = true and automatic = true
panoptic --url "http://target/x.php?file=test.txt" --no-verbose --no-auto

생략된 부울 플래그는 (false로 기본 설정되는 대신) 설정되지 않은 상태로 남으므로, 플래그 또는 해당 --no- 형태를 명시적으로 전달하지 않는 한 설정 값이 사용됩니다.

프록시

HTTP(S) 또는 SOCKS 프록시를 통해 트래픽을 라우팅합니다:

root@kitploit:~
panoptic --url "https://target/x.php?file=test.txt" \
  --proxy "socks5://127.0.0.1:9050"
  • 지원되는 스킴: http://, https://, socks5://, socks5h:// (socks5h는 프록시를 통해 DNS를 해석합니다 — Tor에 유용하며 로컬 DNS 누출을 방지합니다). SOCKS4는 기본 HTTP 클라이언트에서 지원되지 않습니다. 스캔 시작 전에 스킴과 호스트가 검증됩니다.
  • SOCKS 지원은 기본 설치되는 httpx[socks] 확장에서 제공됩니다.
  • 기본적으로 Panoptic은 표준 HTTP_PROXY / HTTPS_PROXY / NO_PROXY 환경 변수를 존중합니다. 이를 우회하고 직접 연결하려면 --ignore-proxy를 전달하십시오 (환경 변수로 구성된 프록시도 비활성화됩니다).
  • 자체 CA를 사용하는 프록시를 통해 HTTPS를 가로챌 때는 --invalid-ssl과 함께 사용하십시오. 이는 인증서 검증을 비활성화하며 신뢰할 수 없는 네트워크에서는 안전하지 않습니다.

버전 확장 (--all-versions)

번들에 포함된 일부 경로는 버전 템플릿입니다 (예: [JBOSS]로 표기된 JBoss 릴리스 디렉터리). 리터럴 [JBOSS] 경로는 실제 파일과 일치할 수 없으므로 기본적으로 이러한 템플릿 행은 건너뜁니다. --all-versions를 전달하면 각 템플릿이 번들 버전 목록에 대해 확장되어 알려진 각 버전마다 하나의 구체적인 경로를 추가합니다 — 훨씬 더 크지만 훨씬 더 철저한 스캔이 됩니다:

root@kitploit:~
panoptic --url "http://target/x.php?file=test.txt" --auto --all-versions

응답 비교

Panoptic은 대상이 제어하는 Content-Length 헤더만으로는 경로를 분류하지 않습니다. 완전히 정규화된 본문을 잘못된 경로 기준선과 비교합니다. 저비용 유사도 상한은 본문이 다르다는 것을 이미 증명할 수 있는 경우에만 전체 비교를 피합니다. 모호한 응답은 정확한 비율을 사용하여 본문 순서 변경으로 인한 오탐(false negative)을 방지합니다.

재개 / 체크포인트

--resume-file PATH는 완료된 케이스를 기록하여 중단된 스캔이 중단된 지점에서 계속될 수 있게 합니다:

root@kitploit:~
panoptic --url "http://target/x.php?file=test.txt" \
  --resume-file scan.checkpoint
# ... interrupt with Ctrl-C, then re-run the same command to resume

체크포인트는 완료된 케이스 ID와 스캔 정의의 SHA-256 핑거프린트 (URL, 주입 매개변수, 탐지 옵션, 헤더, 쿠키, User-Agent 및 정확한 케이스 세트)만 저장합니다. 자격 증명, 헤더 또는 URL을 평문으로 저장하지 않습니다.

재개 시 핑거프린트가 다시 계산되어 비교됩니다. 스캔의 의미를 바꿀 수 있는 요소(다른 대상, 매개변수, 헤더, 쿠키, 필터 세트 또는 --all-versions 토글)가 다르면 체크포인트는 경고와 함께 거부되고 스캔은 새로 시작되므로, 오래된 체크포인트가 다른 스캔의 케이스를 조용히 건너뛸 수 없습니다. 레거시 단순 목록 체크포인트는 경고와 함께 허용되며 현재 스캔에 존재하는 케이스 ID로 제한됩니다. 이전 형식에는 핑거프린트가 없으므로 사용자는 새로 작성된 형식으로 교체해야 합니다. 실패한(네트워크 오류) 요청은 의도적으로 체크포인트에 기록되지 않으므로 재개 시 재시도됩니다.

버전 및 업데이트

root@kitploit:~
panoptic --version   # print the installed version and exit
panoptic --update    # fast-forward update from the official GitHub repo

--update는 origin 원격 저장소가 HTTPS 또는 SSH를 사용하고 공식 업스트림과 일치하는 git 체크아웃에서만 작동합니다 (안전하지 않거나 변조된 원격 구성을 방지하기 위해 풀 전에 검증됩니다). 명시적 업스트림 main ref에서 체크아웃된 main 브랜치를 fast-forward합니다. 체크아웃이 아닌 설치의 경우 공식 GitHub 아카이브에서 안전하게 새로고침할 수 있습니다:

root@kitploit:~
python -m pip install --upgrade https://github.com/lightos/Panoptic/archive/refs/heads/main.zip

체크아웃에서 실행하면 배너에 현재 짧은 git 리비전도 표시됩니다.

종료 코드

Panoptic은 스크립팅이 가능하도록 일반적인 프로세스 종료 코드를 사용합니다:

  • 0 — 성공: 스캔(또는 --list / --update)이 완료되었습니다. 재시도를 모두 소진한 개별 요청은 경고가 표시되고 재개된 스캔에서 재시도 대상으로 유지되지만, 그 외에는 성공적인 실행을 실패로 만들지 않습니다.
  • 1 — 잘못된 사용법: 인자가 누락되었거나 잘못되었거나, 주입 가능한 매개변수를 찾을 수 없습니다.
  • 2 — 운영 실패: 연결할 수 없거나, 일치하는 테스트 케이스가 없거나, 대기 중인 모든 요청이 실패했거나, 작업자, 체크포인트, 출력 쓰기 또는 구성이 실패했습니다.
  • 130 — 사용자에 의해 중단됨 (Ctrl-C / SIGINT).

기여

기여를 환영합니다! GitHub에서 이슈 또는 풀 리퀘스트를 열어 주세요.

테스트베드

안전하고 재현 가능한 엔드투엔드 테스트를 위해 Panoptic LFI 테스트베드를 참조하세요. Panoptic이 지원하는 주입 방법과 경로 탐색 변환을 포괄하는 의도적으로 취약한 엔드포인트를 제공합니다.

라이선스

이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.

도구 다운로드
  • 원격 URL 검증을 통한 자체 업데이트 (--update)
  • --data '{"template":"FUZZ"}'
    중첩 값--header "Cookie: sid=abc; lang=FUZZ"