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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-29927 — CVE-2025-29927 스캐너입니다. | Kitploit
도구/GitHubGitHub/houmanpashaei/cve-2025-29927
ReconnaissanceVulnerability ScannersWeb Application ExploitationWeb SecurityPenetration TestingCrawler
GitHubhoumanpashaei/cve-2025-29927

CVE-2025-29927

CVE-2025-29927 스캐너입니다.

저장소 보기
5151년 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Advanced CVE-2025-29927 Vulnerability Scanner

This is a professional-grade scanner designed to detect the CVE-2025-29927 middleware bypass vulnerability in Next.js applications.

🧠 기능

  • 실제 헤드리스 브라우저(Playwright)를 사용하여 대상 웹사이트를 깊이 크롤링합니다 (JS 렌더링 콘텐츠 포함)
  • 조작된 X-Middleware-Subrequest 헤더를 사용하여 내부 경로를 테스트하여 Next.js 미들웨어를 우회합니다
  • HTTP 상태와 응답 길이를 비교하여 우회를 식별합니다
  • 고성능을 위한 완전 멀티스레드

🚀 빠른 시작

설치 (로컬)```bash

pip install -r requirements.txt playwright install

### 스캐너 실행```bash
python main.py --domain https://example.com --threads 10 --timeout 10 --save

모든 CLI 옵션```bash

python main.py --help

| Option         | Description                                |
|----------------|--------------------------------------------|
| `--domain`     | 대상 사이트 기본 URL (필수)                |
| `--user-agent` | 사용자 지정 User-Agent (기본값: Chrome 문자열) |
| `--timeout`    | 요청 타임아웃 (기본값: 10초)               |
| `--proxy`      | 프록시 주소 (선택 사항)                    |
| `--save`       | 결과를 `results.txt`에 저장                |
| `--threads`    | 스레드 수 (기본값: 10)                     |
| `--wordlist`   | 공통 경로를 포함한 단어 목록               |

---

## 🐳 Docker 사용법

### Docker 이미지 빌드```bash
docker build -t cve-scanner .

스캐너 실행```bash

docker run -it --rm cve-scanner --domain https://example.com --save

---

## ⚙️ GitHub Actions

이 프로젝트는 푸시 시 설정을 테스트하기 위한 GitHub Actions 워크플로우를 포함합니다. 다음을 수행합니다:
- 의존성 설치
- Playwright 브라우저 설치
- `--help` 확인 실행

`.github/workflows/python.yml` 파일을 참조하세요.

---

## 🧱 구조```
.
├── main.py              # Entry point
├── config.py            # CLI parser
├── crawler.py           # Playwright crawler
├── scanner.py           # Multi-threaded vulnerability testing
├── requirements.txt
├── Dockerfile
└── .github/workflows

🧠 자세한 내용

🧠 고급 CVE-2025-29927 취약점 스캐너 설계

CVE-2025-29927 취약점 개요

CVE-2025-29927은 공격자가 미들웨어 기반 인증 및 권한 부여를 우회할 수 있게 하는 치명적인 Next.js 보안 결함입니다. HTTP 요청에 특수 내부 헤더(X-Middleware-Subrequest)를 포함시킴으로써, 공격자는 Next.js 서버를 속여 미들웨어 실행을 건너뛰게 하여 보호된 라우트에 접근할 수 있습니다​. 실제로 인증 미들웨어에 의해 일반적으로 차단되는 요청(예: 401/403 반환 또는 로그인 페이지로 리디렉션)은 이 헤더가 존재하면 정상적으로 처리되어 보안 검사를 효과적으로 우회합니다. 이 취약점은 Next.js 버전 11.1.4부터 15.2.2까지 영향을 미치며, 관리자는 애플리케이션을 보호하기 위해 패치를 적용하거나 완화 조치(예: 프록시에서 이 헤더 제거)를 구현할 것을 권장합니다​.

특수 X-Middleware-Subrequest 헤더를 포함시켜 Next.js 미들웨어를 우회하여 보호된 자산에 직접 접근하는 모습 (CVE-2025-29927 익스플로잇)

웹 애플리케이션에서 이 취약점을 탐지하려면 내부 엔드포인트를 발견하고 악의적인 헤더로 테스트하여 무단 접근이 가능한지 확인해야 합니다. 아래는 대상 웹사이트를 크롤링하고(전체 JavaScript 지원) CVE-2025-29927을 스캔하는 고급 Python 스크립트의 설계 계획으로, 모든 명시된 요구사항을 충족합니다.

🚀 동적 크롤링 및 스캐닝을 위한 도구 및 라이브러리

JavaScript로 렌더링된 콘텐츠를 포함한 심층 크롤링 요구사항을 충족하기 위해 Playwright를 사용합니다(속도와 현대적인 API로 인해 Selenium보다 선호됨). Playwright는 동적 웹 애플리케이션과 최신 JS 프레임워크를 처리할 수 있는 강력한 헤드리스 브라우저 자동화 라이브러리입니다. Selenium과 비교하여 Playwright는 더 현대적인 API(Chrome DevTools Protocol 기반)를 제공하며 동기 및 비동기 작동을 모두 지원하여 사용 사례에 더 나은 성능을 제공할 수 있습니다​. 주요 라이브러리 및 설치 지침은 다음과 같습니다:

  • playwright – 헤드리스 브라우저 자동화용(SPA 또는 JS가 필요한 페이지 로드). (설치: pip install playwright 및 playwright install 실행하여 브라우저 바이너리 획득).

  • requests 또는 httpx – 스캐닝 단계에서 HTTP 요청 전송용. 단순성을 위해 requests를 사용하거나 비동기 지원을 위해 httpx/aiohttp를 사용할 수 있습니다. (설치: pip install requests 또는 pip install httpx).

  • bs4 (BeautifulSoup) – 필요 시 HTML 파싱 및 링크 추출용. Playwright는 DOM을 직접 쿼리할 수 있지만, 페이지의 HTML 콘텐츠에 BeautifulSoup을 사용하는 것이 앵커 태그를 찾는 간단한 방법입니다. (설치: pip install beautifulsoup4).

  • concurrent.futures (내장) 또는 asyncio – 동시성 구현용. 멀티스레딩을 위해 Python의 concurrent.futures.ThreadPoolExecutor를 사용합니다(추가 설치 불필요). 비동기 방식을 사용하는 경우 httpx와 함께 Python의 asyncio를 사용하여 병렬 요청을 수행할 수 있습니다.

  • (선택 사항) argparse – 대화형 메뉴 대신 CLI 인터페이스를 원할 경우 명령줄 인수 파싱용. (내장 모듈)

  • (선택 사항) rich 또는 colorama – 가독성을 높이기 위한 색상 또는 형식화된 콘솔 출력용. (설치: pip install rich 또는 pip install colorama).

선정 이유: Playwright는 복잡한 설정 없이 동적 콘텐츠를 스크래핑할 수 있는 능력 때문에 선택되었습니다. "Playwright를 사용하면 헤드리스 브라우저를 자동화하여... 사람처럼 웹을 탐색할 수 있으므로 동적 JavaScript 기반 웹사이트를 스크래핑하는 데 탁월합니다"​. 이를 통해 크롤러가 스크립트에 의해 생성된 링크나 UI 요소(단순한 requests 기반 크롤러는 놓칠 수 있는)를 볼 수 있습니다.

🚀 JavaScript 지원 크롤링 (동적 경로 발견)

크롤러 모듈은 Playwright를 헤드리스 모드로 사용하여 대상 사이트의 심층 크롤링을 수행합니다. 목표는 JS 실행 후에만 드러나는 경로를 포함하여 테스트할 내부 경로(엔드포인트)를 발견하는 것입니다. 크롤러의 주요 설계 사항:

헤드리스 브라우저 탐색: Playwright를 통해 헤드리스 모드로 브라우저 인스턴스(예: Chromium)를 시작합니다. 사용자가 지정한 경우 사용자 정의 User-Agent로 브라우저 컨텍스트를 사용합니다(자세한 내용은 다음 섹션에서). 예를 들어, browser.new_context(user_agent=<user_agent_string>)로 컨텍스트를 생성하여 선택한 User-Agent를 에뮬레이트할 수 있습니다. 프록시가 구성된 경우 시작 시 적용합니다(Playwright는 브라우저 또는 컨텍스트 시작 시 프록시 서버 설정을 허용합니다​).

재귀적 크롤링 전략: 주어진 기본 URL(시드)에서 시작합니다. page.goto(base_url, timeout=<T>)를 사용하여 페이지를 로드합니다(timeout 설정 가능). 네트워크가 유휴 상태가 될 때까지 기다리거나 필요 시 동적 콘텐츠 로드를 위해 짧은 지연을 추가합니다. 그런 다음 링크를 추출합니다. 링크 추출 방법은 두 가지입니다:

  • 페이지 컨텍스트에서 JavaScript를 실행하여 모든 앵커를 수집합니다(예: links = page.evaluate("Array.from(document.querySelectorAll('a[href]'), a => a.href)")), 또는
  • 페이지의 HTML(content = page.content())을 가져와 BeautifulSoup을 사용하여 파싱하고 모든 <a href> 속성을 찾습니다.

링크 필터링: 대상 도메인 내에 있지 않은 링크를 필터링하여 내부 링크만 유지합니다. 또한 이미지, CSS, JS 등과 같은 정적 파일 URL을 무시합니다. 예를 들어, .css, .js, .jpg, .png, .gif, .svg, .woff 등의 파일 확장자를 가진 URL을 건너뜁니다. 실용적인 접근 방식(ProjectDiscovery 템플릿에서 영감을 얻음)은 초기 슬래시 이후에 '점(dot)'을 포함하는 경로를 무시하는 것입니다. 그들은 정규식 패턴 href=['"](https://github.com/houmanpashaei/cve-2025-29927/blob/main/%5C/%5B%5E.%5C%22%27%5D%2B)['"]로 엔드포인트를 추출했습니다. 이는 마침표를 포함하지 않는 내부 경로를 캡처하므로 정적 자원을 건너뜁니다​. 코드에서 유사한 로직을 구현하여 정적 리소스나 외부 링크를 큐에 넣지 않도록 합니다.

추적 및 깊이 제어: 무한 루프나 반복을 방지하기 위해 방문한 URL 집합을 유지합니다. 사이트 링크 그래프의 BFS 탐색을 위해 큐(FIFO)를 사용합니다. 선택적으로 사용자가 크롤링 깊이 제한 또는 방문할 최대 페이지 수를 지정하여 대규모 사이트에서 무한 실행을 방지할 수 있습니다.

JavaScript 렌더링 콘텐츠: 실제 브라우저를 사용하기 때문에 스크립트에 의해 DOM에 추가된 링크(예: 데이터를 가져온 후 메뉴를 렌더링하는 React 앱)도 크롤러에 표시됩니다. 필요한 경우 클릭이나 상호작용을 고려할 수 있습니다(예: 특정 페이지가 사용자 작업 후에만 로드되는 경우). 그러나 단순성과 속도를 유지하기 위해 초기 설계는 각 로드된 페이지에서 hrefs를 수집하는 데 중점을 둡니다. 대상 애플리케이션이 요구하는 경우 나중에 무한 스크롤이나 클릭 뒤의 콘텐츠를 처리하도록 개선할 수 있습니다.

효율성: Playwright는 비동기 API를 사용하여 여러 페이지/탭을 병렬로 실행하는 것을 지원합니다. asyncio.gather로 여러 페이지를 인스턴스화하여 여러 링크를 동시에 가져올 수 있습니다. 초기 구현에서는 순차적으로 크롤링하는 더 간단한 접근 방식(구현이 더 쉬움)을 사용하고 성능을 위해 멀티스레드 스캐닝에 의존합니다. 필요한 경우 고급 최적화는 비동기 크롤링(async with async_playwright() 사용 및 여러 page.goto 호출 대기)을 포함할 수 있습니다. 그러나 브라우저 자동화는 리소스를 많이 사용하므로 시스템에 과부하를 주지 않도록 한 번에 하나 또는 몇 개의 브라우저 페이지만 유지하는 신중한 접근이 좋습니다.

🚀 사용자 설정 메뉴 및 옵션

스크립트는 시작 시 사용자 친화적인 설정 메뉴를 제공하여 사용자가 스캐닝 매개변수를 사용자 정의하거나 기본값을 수락할 수 있도록 합니다. 이는 대화형 콘솔 메뉴(input() 프롬프트 사용) 또는 명령줄 인수(보다 전문적인 CLI 느낌을 위해 argparse 사용)를 통해 수행할 수 있습니다. 옵션은 다음과 같습니다:

  • 사용자 정의 User-Agent: 사용자는 크롤러와 스캐너가 사용할 사용자 정의 User-Agent 문자열을 지정할 수 있습니다. 이는 Playwright 브라우저 컨텍스트와 모든 직접 HTTP 요청에 적용됩니다. 기본값이 아닌 User-Agent를 사용하면 간단한 봇 탐지를 피하는 데 도움이 될 수 있습니다. (기본적으로 Playwright는 식별 가능한 것을 사용할 수 있습니다; 위에서 보여준 것처럼 쉽게 재정의할 수 있습니다.) 예를 들어, 사용자는 Windows의 Chrome으로 식별되는 문자열을 입력할 수 있으며, 이를 Playwright의 컨텍스트 생성에 전달합니다​.

  • 요청 시간 제한: 사용자는 페이지 로드 및 HTTP 요청에 대한 시간 제한(초)을 설정할 수 있습니다. 이는 스캐너가 응답하지 않는 엔드포인트에서 너무 오래 대기하는 것을 방지합니다. 크롤링의 경우 page.goto(timeout=...)에, 스캐닝의 경우 요청(예: requests.get(timeout=...))에 이 설정을 적용합니다.

  • 프록시 설정: 사용자가 트래픽을 프록시를 통해 라우팅하려는 경우(익명성 또는 내부 호스트 접근을 위해), 프록시 URL(필요시 자격 증명)을 입력할 수 있습니다. 스크립트는 Playwright 브라우저가 시작 시 이 프록시를 사용하도록 구성합니다(예: browser.launch(proxy={"server": "http://<proxy_host>:<port>", "username": "...", "password": "..."}) (예제에 표시된 대로). 마찬가지로 요청의 경우 프록시 매개변수(또는 환경 변수)를 적절히 설정합니다.

  • 파일 출력: 메뉴는 사용자가 결과를 파일(예: results.txt)에 저장할지 묻습니다. 저장하는 경우 스크립트는 발견된 취약한 엔드포인트와 세부 정보를 화면 출력 외에도 이 파일에 기록합니다. 그렇지 않은 경우 결과는 stdout에만 출력됩니다. (필요 시 모든 스캔된 경로를 상세 로그에 기록할 수 있지만, 파일은 사용자 선호도에 따라 긍정 결과나 전체 보고서를 특별히 기록합니다.)

  • 기타 옵션: 디버그 로깅을 위한 'Verbose 모드' 또는 필요 시 '최대 크롤링 깊이/페이지'와 같은 토글을 포함할 수 있습니다. 이는 사용자가 스캔을 세밀하게 조정하는 데 도움이 됩니다. 초기 범위에서는 위의 네 가지 주요 옵션으로 충분합니다.

도구 다운로드