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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2017-5638-Attack-and-Defense — Apache Struts2 S2-045(CVE-2017-5638) 악용 및 방어를 시연하는 Docker 기반 보안 랩으로, 실습 교육을 위해 WAF 보호 기능이 있는 취약한 애플리케이션과 패치된 애플리케이션을 제공합니다. | Kitploit
도구/GitHubGitHub/acharaf06/cve-2017-5638-attack-and-defense
Defensive ToolsVulnerability AnalysisWeb Application ExploitationWAF BypassPenetration TestingLearning & EducationLabs & Practice
GitHubacharaf06/cve-2017-5638-attack-and-defense

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2017-5638-Attack-and-Defense

Apache Struts2 S2-045(CVE-2017-5638) 악용 및 방어를 시연하는 Docker 기반 보안 랩으로, 실습 교육을 위해 WAF 보호 기능이 있는 취약한 애플리케이션과 패치된 애플리케이션을 제공합니다.

저장소 보기
158개월 전아직 검토되지 않음

Apache Struts2 S2-045 방어 및 공격 실습 랩

Apache Struts2 S2-045 취약점(CVE-2017-5638)에 대한 공격과 방어를 모두 시연하는 Docker 기반 보안 실습 랩입니다. 이 랩에는 다음이 포함됩니다:

  1. 취약한 애플리케이션: Struts 2.3.31 (S2-045에 취약) - 공격 시연용
  2. 방어 랩: WAF 보호 기능이 있는 Struts 6.3.x (패치됨) - 방어 훈련용

⚠️ 보안 경고: 이 랩에는 실제 작동하는 익스플로잇과 취약한 코드가 포함되어 있습니다. 격리된 환경에서만 사용하세요. 공용 네트워크에 노출하지 마십시오.

아키텍처 개요

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                     호스트 (127.0.0.1만)                       │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────┐    ┌─────────────────┐              │
│  │   시뮬레이터      │───▶│  Nginx 프록시    │              │
│  │  (curl 기반)     │    │  + WAF 규칙     │              │
│  └─────────────────┘    └────────┬────────┘              │
│                                  │                        │
│                          ┌───────┴────────┐              │
│                          │                │                │
│                  ┌───────▼──────┐ ┌───────▼──────┐        │
│                  │  방어 앱      │ │  취약 앱      │        │
│                  │ (Struts 6.3) │ │ (2.3.31)    │        │
│                  │ 포트: 8080   │ │ 포트: 8081  │        │
│                  └──────────────┘ └──────────────┘        │
│                                                             │
│  ┌─────────────────┐                                      │
│  │  익스플로잇      │───▶ 취약 앱 (8081)                  │
│  │  컨테이너        │                                      │
│  └─────────────────┘                                      │
│                                                             │
│  로그는 다음에 마운트됨: ./logs/nginx/, ./logs/app/,       │
│                   ./logs/app-vulnerable/                  │
└─────────────────────────────────────────────────────────────┘

구성 요소

시작하기

사전 준비사항

  • Docker (버전 20.10 이상)
  • Docker Compose (버전 2.0 이상)
  • Python 3 (선택 사항, 익스플로잇 스크립트 직접 실행용)
  • curl (선택 사항, 수동 테스트용)

설치

1. 저장소 복제

root@kitploit:~
# 저장소 복제
git clone https://github.com/ACharaf06/cybersec.git
cd cybersec

2. 빌드 및 실행

root@kitploit:~
# 모든 컨테이너 빌드 (첫 실행 시 몇 분 소요될 수 있음)
docker compose build

# 방어 랩 시작 (nginx + 패치된 앱)
docker compose up -d nginx app

# 취약 앱 시작 (공격 시연용)
docker compose up -d app-vulnerable

# 서비스가 실행 중인지 확인
docker compose ps

# 서비스가 정상 상태가 될 때까지 대기 (약 60초)
sleep 60

# 헬스 엔드포인트 확인
curl http://127.0.0.1:8080/struts-lab/health  # 방어 랩
curl http://127.0.0.1:8081/struts-lab/health   # 취약 앱

예상 출력:

  • 방어 랩: JSON 응답에 "status":"healthy" 및 "strutsVersion":"6.3.0.2 (patched - not vulnerable to S2-045)" 포함
  • 취약 앱: JSON 응답에 "status":"healthy" 및 "strutsVersion":"2.3.31 (VULNERABLE to S2-045)" 포함

2. 방어 랩 테스트

root@kitploit:~
# 시뮬레이터 컨테이너 실행 (방어 메커니즘 테스트)
docker-compose run --rm simulator

# 또는 개별 테스트를 수동으로 실행:
# 합법적인 업로드
curl -X POST -F "[email protected]" http://127.0.0.1:8080/struts-lab/upload

# 의심스러운 Content-Type (WAF에 의해 차단됨)
curl -v -X POST \
  -H "Content-Type: multipart/form-data; boundary=----SUSPICIOUS" \
  http://127.0.0.1:8080/struts-lab/upload

3. 공격 시연

root@kitploit:~
# 익스플로잇 컨테이너 실행 (S2-045 공격 시연)
docker-compose --profile exploit run --rm exploit

# 또는 Python 익스플로잇 스크립트 직접 사용
python3 exploit/exploit.py http://127.0.0.1:8081/struts-lab 'whoami'

# 또는 bash 스크립트 사용
./exploit/demo_exploit.sh

⚠️ 경고: 취약한 애플리케이션은 의도적으로 공격 가능하도록 설계되었습니다. 격리된 환경에서만 실행하세요.

4. 로그 확인

root@kitploit:~
# 방어 랩 로그
tail -f logs/nginx/access.log      # Nginx 접근 로그
tail -f logs/nginx/error.log       # WAF 차단 로그
tail -f logs/app/struts-lab.log    # 방어 앱 로그

# 취약 앱 로그
tail -f logs/app-vulnerable/struts-lab.log  # 취약 앱 로그

# 모든 로그 결합
docker-compose logs -f

관찰할 사항

방어 랩 (포트 8080)

정상 요청:

  • Nginx 접근 로그: 200 응답
  • 앱 로그: INFO 수준 업로드 처리 메시지
  • 요청이 성공적으로 완료됨

의심스러운/비정상 요청:

  • Nginx 접근 로그: 403 Forbidden 또는 400 Bad Request
  • Nginx 오류 로그: WAF 규칙 트리거 메시지
  • 앱 로그: 요청이 앱에 도달하면 구문 분석 오류 표시 가능
  • 요청이 차단되거나 정화됨

취약 앱 (포트 8081)

성공적인 공격:

  • HTTP 200 또는 500 응답
  • 명령 출력이 응답 본문에 표시됨
  • OGNL 표현식 평가됨
  • 시스템 명령 실행됨

로그 예시:

Nginx가 의심스러운 Content-Type 차단 (방어 랩):

root@kitploit:~
[WAF] Blocked suspicious Content-Type pattern - Request ID: abc123

앱이 요청 메타데이터 기록 (방어 랩):

root@kitploit:~
[REQUEST] ID=abc123 Content-Type=multipart/form-data Method=POST URI=/upload
[UPLOAD] Processing file upload for request abc123

성공적인 공격 (취약 앱):

root@kitploit:~
HTTP/1.1 200 OK
...
root
(명령 출력이 응답 본문에 표시됨)

비교: 취약 앱 vs 방어 랩

보안 참고 사항

격리

  • 모든 서비스는 127.0.0.1에만 바인딩 (외부 접근 불가)
  • 내부 Docker 네트워크를 통한 컨테이너 통신
  • 0.0.0.0으로 포트 노출 없음
  • 취약 앱은 절대 공용 네트워크에 노출되어서는 안 됨

방어 계층 (방어 랩)

  1. Nginx WAF 규칙: 요청이 앱에 도달하기 전에 의심스러운 Content-Type 패턴 차단
  2. 속도 제한: IP당 초당 10개의 요청
  3. 요청 크기 제한: 최대 본문 10MB, 최대 헤더 8KB
  4. 패치된 Struts: S2-045에 취약하지 않은 Struts 6.3.x 사용
  5. 포괄적 로깅: 모든 의심스러운 활동 기록

S2-045의 개요

S2-045 (CVE-2017-5638)는 Apache Struts2 버전 2.3.5 - 2.3.31 및 2.5 - 2.5.10에서 발생한 치명적인 취약점으로, 다음과 같은 특징이 있습니다:

  • 악의적인 Content-Type 헤더가 OGNL 표현식을 주입할 수 있음
  • Jakarta Multipart 파서가 이러한 표현식을 평가함
  • 이로 인해 원격 코드 실행(RCE)이 발생함

취약 앱 (포트 8081)은 이 취약점을 시연합니다. 방어 랩 (포트 8080)은 이에 대한 보호 방법을 보여줍니다.

파일 구조

root@kitploit:~
.
├── docker-compose.yml          # 컨테이너 오케스트레이션
├── README.md                   # 이 파일
├── EXPLOITATION_GUIDE.md      # 상세 공격 가이드
├── TECHNICAL_DETAILS.md        # 기술 구현 세부 사항
├── GLOSSARY.md                 # 보안 용어집
├── nginx/
│   ├── nginx.conf              # Nginx 메인 설정
│   └── waf-rules.conf          # S2-045 패턴에 대한 WAF 규칙
├── app/                        # 방어 랩 (패치됨)
│   ├── Dockerfile              # Tomcat + Maven 빌드
│   └── struts-app/
│       ├── pom.xml             # Maven 프로젝트 (Struts 6.3.x)
│       └── src/main/
│           ├── java/           # 액션 클래스
│           ├── resources/      # Struts + Log4j 설정
│           └── webapp/         # JSP 뷰 + web.xml
├── app-vulnerable/             # 취약 앱 (공격용)
│   ├── Dockerfile              # Tomcat + Maven 빌드
│   └── struts-app/
│       ├── pom.xml             # Maven 프로젝트 (Struts 2.3.31)
│       └── src/main/
│           ├── java/           # 액션 클래스
│           ├── resources/      # Struts + Log4j 설정
│           └── webapp/         # JSP 뷰 + web.xml
├── exploit/                    # 공격 도구
│   ├── Dockerfile              # 익스플로잇 컨테이너
│   ├── demo_exploit.sh         # Bash 익스플로잇 스크립트
│   └── exploit.py              # Python 익스플로잇 스크립트
├── simulator/
│   ├── Dockerfile              # Alpine + curl
│   └── simulate.sh             # 테스트 스크립트
└── logs/                       # 마운트된 로그 디렉토리
    ├── nginx/
    ├── app/                    # 방어 랩 로그
    └── app-vulnerable/         # 취약 앱 로그

정리

root@kitploit:~
# 모든 컨테이너 중지
docker compose down

# 볼륨 및 로그 제거
docker compose down -v
rm -rf logs/

# 전체 정리 (이미지 포함)
docker compose down --rmi all -v

개발 설정

프로젝트 구조

프로젝트는 다음과 같이 구성됩니다:

  • app/ - 방어 랩 애플리케이션 (Struts 6.3.x, 패치됨)
  • app-vulnerable/ - 취약 애플리케이션 (Struts 2.3.31)
  • exploit/ - 공격 도구 및 스크립트
  • nginx/ - WAF 규칙이 있는 Nginx 리버스 프록시 설정
  • simulator/ - 공격 패턴 시뮬레이터
  • logs/ - 애플리케이션 로그 (gitignore 처리됨)

개별 구성 요소 빌드

root@kitploit:~
# 취약 앱만 다시 빌드
docker compose build app-vulnerable
docker compose up -d app-vulnerable

# 방어 앱만 다시 빌드
docker compose build app
docker compose up -d app

# 익스플로잇 컨테이너 다시 빌드
docker compose build exploit

문서

  • EXPLOITATION_GUIDE.md: S2-045 취약점 메커니즘 및 공격 절차에 대한 상세 가이드
  • TECHNICAL_DETAILS.md: 랩의 기술 구현 세부 사항
  • GLOSSARY.md: 이 랩에서 사용된 보안 용어집

교육 자료

  • Apache Struts Security Bulletins
  • CVE-2017-5638 Details
  • OWASP Injection Prevention
  • Metasploit S2-045 Module

⚠️ 중요 경고

  1. 취약 애플리케이션: 포트 8081의 앱은 의도적으로 취약하게 설계되었습니다. 공용 네트워크에 노출하지 마십시오.
  2. 실제 작동하는 익스플로잇: 이 랩에는 실제 작동하는 익스플로잇 코드가 포함되어 있습니다. 격리된 환경에서만 사용하세요.
  3. 교육 목적: 이 랩은 보안 교육, 연구 및 승인된 침투 테스트 전용입니다.
  4. 법적 준수: 소유한 시스템이나 테스트를 위해 명시적인 서면 승인을 받은 시스템에서만 사용하십시오.

면책 조항: 이 랩은 교육 목적으로만 제공됩니다. 책임감 있게 사용하고 통제된 환경에서만 사용하십시오.

도구 다운로드
컨테이너목적포트
nginxWAF 규칙, 속도 제한이 있는 리버스 프록시127.0.0.1:8080
appTomcat 9 + Struts 6.3.x (패치됨, 방어 실습)내부 전용
app-vulnerableTomcat 9 + Struts 2.3.31 (취약, 공격용)127.0.0.1:8081
exploit공격 시연용 컨테이너해당 없음
simulator테스트 요청 전송 (정상 + 의심스러운 패턴)해당 없음
기능취약 앱 (포트 8081)방어 랩 (포트 8080)
Struts 버전2.3.31 (취약)6.3.0.2 (패치됨)
WAF 보호❌ 없음✅ Nginx WAF 규칙
속도 제한❌ 없음✅ 10 req/s
요청 크기 제한❌ 없음✅ 본문 10MB, 헤더 8KB
보안 로깅⚠️ 최소✅ 포괄적
OGNL 주입✅ 공격 가능❌ 차단/패치됨
RCE 가능✅ 예❌ 아니오
사용 사례공격 시연방어 훈련