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

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

--concurrency)--header 또는
--data 값에 FUZZ 배치--base64)/etc/passwd,
binlog 파일은 mysql-bin.index 파싱--output-format)--resume-file)--config)0600 권한으로 강화된 민감한 아티팩트 및
OS가 지원하는 경우 최종 구성 요소 심볼릭 링크 보호httpx[socks], rich, rich-argparse,
tomligit 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 이름은
관련 없는 프로젝트의 것입니다.
개발용:
python -m pip install -e ".[dev]"
panoptic --url "http://target/include.php?file=test.txt"
panoptic --url "http://target/include.php?file=test.txt"
panoptic --url "http://target/include.php?file=test.txt&id=1" \
--param file
panoptic --url "http://target/include.php" \
--data "file=test.txt&id=1" --param file
panoptic --url "http://target/view.php/test.txt" --path-based
panoptic --url "http://target/load.php?file=dGVzdC50eHQ=" \
--base64 --auto
panoptic --url "http://target/page.php" \
--header "Cookie: lang=FUZZ" --auto
panoptic --url "http://target/api/load" \
--data '{"file":"FUZZ"}' --auto
panoptic --url "http://target/page.php" \
--header "X-Template: FUZZ" --auto
panoptic --url "http://target/view.php?file=test&type=txt" \
--param file --ext-param type
panoptic --url "http://target/filtered.php?file=test.txt" \
--prefix "....//....//....//....//"
panoptic --url "http://target/include.php?file=test.txt" \
--os "*NIX" --type conf
panoptic --url "http://target/include.php?file=test.txt" \
--software PostgreSQL
panoptic --url "http://target/include.php?file=test.txt" \
--output-format json --output-file results.json \
--resume-file scan.checkpoint
panoptic --url "https://target/include.php?file=test.txt" \
--proxy "socks5://127.0.0.1:9050" --invalid-ssl
panoptic --list software
panoptic --list category
panoptic --list os
panoptic --url "http://target/include.php?file=test.txt" \
--auto --all-versions --concurrency 8
주입 지점을 표시하려면 --header 또는 --data 값의 아무 곳에나 FUZZ를
배치하십시오. Panoptic은 스캔 중에 FUZZ를 각 파일 경로로 대체합니다.
이를 통해 --param으로는 도달할 수 없는 주입 지점을 테스트할 수 있습니다:
| 주입 유형 | 예 |
|---|---|
| 쿠키 값 | --header "Cookie: theme=FUZZ" |
| 사용자 지정 헤더 | --header "X-Include: FUZZ" |
| JSON 본문 |
FUZZ가 있으면 --param은 필요하지 않습니다.
Panoptic은 영구 설정을 위한 TOML 설정 파일을 지원합니다:
panoptic --url "http://target/include.php?file=test.txt" \
--config ~/.config/panoptic/config.toml
기본 설정 위치: ~/.config/panoptic/config.toml (--config 없이도
존재하면 자동으로 로드됩니다).
[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로
설정된 값을 파일을 편집하지 않고 단일 실행에서 끌 수 있습니다:
# 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 프록시를 통해 트래픽을 라우팅합니다:
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 클라이언트에서
지원되지 않습니다. 스캔 시작 전에 스킴과 호스트가 검증됩니다.httpx[socks] 확장에서 제공됩니다.HTTP_PROXY / HTTPS_PROXY /
NO_PROXY 환경 변수를 존중합니다. 이를 우회하고 직접 연결하려면
--ignore-proxy를 전달하십시오 (환경 변수로 구성된 프록시도
비활성화됩니다).--invalid-ssl과
함께 사용하십시오. 이는 인증서 검증을 비활성화하며 신뢰할 수 없는
네트워크에서는 안전하지 않습니다.--all-versions)번들에 포함된 일부 경로는 버전 템플릿입니다 (예: [JBOSS]로 표기된
JBoss 릴리스 디렉터리). 리터럴 [JBOSS] 경로는 실제 파일과 일치할 수
없으므로 기본적으로 이러한 템플릿 행은 건너뜁니다.
--all-versions를 전달하면 각 템플릿이 번들 버전 목록에 대해 확장되어
알려진 각 버전마다 하나의 구체적인 경로를 추가합니다 — 훨씬 더 크지만
훨씬 더 철저한 스캔이 됩니다:
panoptic --url "http://target/x.php?file=test.txt" --auto --all-versions
Panoptic은 대상이 제어하는 Content-Length 헤더만으로는 경로를 분류하지
않습니다. 완전히 정규화된 본문을 잘못된 경로 기준선과 비교합니다.
저비용 유사도 상한은 본문이 다르다는 것을 이미 증명할 수 있는 경우에만
전체 비교를 피합니다. 모호한 응답은 정확한 비율을 사용하여 본문 순서
변경으로 인한 오탐(false negative)을 방지합니다.
--resume-file PATH는 완료된 케이스를 기록하여 중단된 스캔이 중단된
지점에서 계속될 수 있게 합니다:
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로 제한됩니다. 이전 형식에는 핑거프린트가 없으므로 사용자는
새로 작성된 형식으로 교체해야 합니다.
실패한(네트워크 오류) 요청은 의도적으로 체크포인트에 기록되지 않으므로
재개 시 재시도됩니다.
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 아카이브에서 안전하게
새로고침할 수 있습니다:
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 파일을 참조하세요.
--update)--data '{"template":"FUZZ"}'| 중첩 값 | --header "Cookie: sid=abc; lang=FUZZ" |