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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
drupalgeddon2-cli — Drupalgeddon2 (CVE-2018-7600) PoC의 CLI 재작성 — 승인된 테스트/교육용 | Kitploit
도구/GitHubGitHub/nayem-m/drupalgeddon2-cli
Payload GenerationExploitationWeb Application ExploitationPenetration TestingLearning & EducationLabs & Practice
GitHubnayem-m/drupalgeddon2-cli

drupalgeddon2-cli

Drupalgeddon2 (CVE-2018-7600) PoC의 CLI 재작성 — 승인된 테스트/교육용

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

drupalgeddon2-cli

Drupalgeddon2(CVE-2018-7600) 개념 증명(PoC)을 명령줄 도구로 다시 작성한 것입니다. Hack The Box Academy의 Attacking Common Applications 모듈을 공부하면서 학습 목적으로 만들었습니다.

[!WARNING] 공인된 보안 테스트 및 교육 전용입니다. 소유하지 않았거나 명시적인 서면 허가를 받지 않은 시스템에 대해 실행하는 것은 대부분의 국가에서 불법입니다. 법적 고지 및 책임 있는 사용을 참조하세요.

[!NOTE] 이 구현물은 AI 지원으로 작성되었습니다. 저자에 관한 참고를 참조하세요.


배경 — 이 도구를 만든 이유

Drupal은 HTB Academy의 Attacking Common Applications 모듈에서 다루는 "일반적인 애플리케이션" 중 하나이며, CVE-2018-7600("Drupalgeddon2")은 그 대표적인 비인증 원격 코드 실행(RCE) 사례입니다. 일회성 스크립트를 복사해서 붙여넣고 넘어가는 대신, 이 버그가 동작하게 만드는 Form API 인젝션을 실제로 이해하고 싶었습니다. 그래서 공개 PoC를 학습 목적으로 처음부터 다시 작성했습니다.

널리 참조되는 원본인 Vitalii Rudnykh의 a2u/CVE-2018-7600은 버그를 시연하기에는 훌륭하지만, 실행할 때마다 페이로드를 직접 편집해야 합니다. 랩/CTF 워크플로우(여러 대상을 반복 공격하고, 재사용 가능한 발판을 원하는 상황)에서는 그 방식이 번거롭습니다. 이 버전은 이를 제대로 된 CLI 도구로 바꿔놓았습니다:

  • 대상과 명령을 인자로 전달하므로 실행할 때마다 소스를 수정할 필요가 없습니다.
  • 취약한 서버가 스스로 파일을 쓰는 방식으로, 작은 PHP 웹 셸을 자동으로 심어 안정적이고 재사용 가능한 발판을 확보합니다.
  • 단일 명령 실행, 대화형 유사 셸(pseudo-shell) 진입, 또는 셸만 배포하고 종료할 수 있습니다.
  • 셸 파일명과 명령 매개변수는 실행할 때마다 무작위로 생성되므로, 반복 실행 시 충돌하지 않고 예측 가능한 cmd= 문을 남기지 않습니다.

이 도구는 의도적으로 알려지고 오래전에 패치된(2018년에 공개된) 취약점만 대상으로 합니다. 목표는 기술을 이해하고 깔끔하고 문서화된 참조 구현을 만드는 것이지, 새로운 공격 기술을 개발하는 것이 아닙니다.

저자에 관한 참고

이 저장소의 코드는 HTB 모듈을 공부하는 동안 AI 지원(Anthropic의 Claude) 을 받아 작성되었습니다. CLI 사용성, 웹 셸 자동 배포, 대화형 모드, 무작위 셸 이름과 매개변수 등 설계 목표와 요구 사항을 제가 정했고, 결과물을 검토하고 테스트했습니다. 이것을 공개하는 이유는 정직함을 위해서이며, 이 저장소의 가치는 모든 줄을 직접 작성했다는 데 있는 것이 아니라 기술을 이해하고 설계 결정을 내린 데 있기 때문입니다.

기능

  1. CVE-2018-7600 Form API 인젝션을 사용해 대상에 작은 PHP 웹 셸을 배포합니다. 취약한 서버가 파일을 직접 디코딩해서 쓰기 때문에, 인젝션 명령에 따옴표/이스케이프 문제가 발생하지 않습니다.
  2. --cmd로 해당 셸을 통해 명령을 실행하거나, --shell로 대화형 유사 셸에 진입할 수 있습니다.
  3. 성공을 보고하기 전에 셸이 실제로 배포되어 실행되는지(임의 토큰을 에코하고 확인) 검증합니다.

영향받는 버전

CVE-2018-7600은 다음에 영향을 줍니다:

  • Drupal 7.x — 7.58 미만
  • Drupal 8.x — 8.5.1 미만(또한 8.3.x < 8.3.9, 8.4.x < 8.4.6)

이 구현은 Drupal 8 Form API 벡터(user/register AJAX 엔드포인트)를 대상으로 합니다. Drupal 7은 다른 엔드포인트/페이로드를 통해 공격 가능하지만 여기서는 다루지 않습니다.

패치된 릴리스(7.58 / 8.5.1 이상)는 영향을 받지 않습니다.

요구 사항

  • Python 3.7+
  • requests
root@kitploit:~
pip install requests

사용법

root@kitploit:~
# 일회성 명령
python3 drupalgeddon2.py -u http://target/ -c id

# 대화형 유사 셸
python3 drupalgeddon2.py -u http://target/ --shell

# 셸만 심고 아무것도 실행하지 않음
python3 drupalgeddon2.py -u http://target/ --deploy-only

# Burp를 경유하고 프록시의 자체 서명 인증서 무시
python3 drupalgeddon2.py -u http://target/ -c id --proxy http://127.0.0.1:8080 -k

작동 원리

CVE-2018-7600은 Drupal Form API의 입력 검증 실패에서 발생하는 취약점입니다. Drupal은 폼을 중첩된 *렌더 배열(renderable array)*로 표현하며, #로 시작하는 배열 키는 사용자 데이터가 아닌 특수 렌더 속성으로 처리됩니다. 패치(SA-CORE-2018-002)는 사용자 입력에서 #로 시작하는 키를 제거하는 검증을 추가했습니다.

패치 전에는 인증되지 않은 공격자가 Drupal의 AJAX 핸들러가 처리하는 폼 요소에 렌더 속성을 주입할 수 있었습니다. 다음과 같은 속성을 제출하면:

  • #post_render — 렌더링 후 Drupal이 호출하는 콜백 목록, 그리고
  • #markup — 해당 콜백에 전달되는 인자

사용자 등록 폼의 mail 요소에 대해 렌더 단계에서 Drupal이 공격자가 제어하는 입력으로 임의의 PHP 함수(여기서는 exec)를 호출하게 됩니다. 즉, 인증 없이 원격 코드 실행이 발생합니다.

이 PoC는 그 프리미티브를 사용하여 한 줄 PHP 셸을 로컬에서 base64로 인코딩하고, 서버가 이를 디코딩해 웹 루트에 파일로 기록하게 한 뒤, 일반 GET 요청으로 해당 파일과 상호작용합니다.

탐지 및 대응

방어 측면에서 이 취약점을 다루는 경우:

조치

  • Drupal 7.58 / 8.5.1 이상으로 업그레이드하세요(SA-CORE-2018-002 적용). 이것이 유일한 실질적인 해결책입니다.
  • 즉시 패치가 불가능하다면, Drupal 보안 팀이 공개 시점에 완화 패치를 배포했습니다. 단, 업그레이드가 강력히 권장됩니다.

탐지 아이디어

  • 폼/AJAX 엔드포인트로 전송되는 POST 본문에서 렌더 배열 키(#post_render, #markup, #type, #lazy_builder 등)를 검사하세요. 정상적인 폼 제출에는 이런 키가 포함되지 않습니다.
  • …/user/register?element_parents=…&_wrapper_format=drupal_ajax로 전송되는 의심스러운 매개변수가 있는 요청을 플래그 처리하세요.
  • AJAX 폼 엔드포인트로의 POST와 웹 루트에 새로 생성된 .php 파일로의 후속 GET을 연관 지어 분석하세요.
  • Drupal 웹 루트에서 예상치 못한 파일 생성과 짧은 단일 매개변수 PHP 파일(system($_GET[...]) 셸)을 감시하세요.
  • 이러한 동작은 Suricata/Snort 시그니처나 웹 서버 로그 기반 Sigma 규칙으로 쉽게 인코딩할 수 있습니다.

크레딧

  • 원본 PoC 및 핵심 기술: Vitalii Rudnykh — a2u/CVE-2018-7600
  • 취약점 공개: Drupal 보안 팀 — SA-CORE-2018-002
  • 이 재작성에 참고한 기술 심층 분석: Drupalgeddon2에 관한 Check Point 및 Ambionics 연구 자료
  • 이 CLI 재작성: AI 지원을 받은 저(AI 지원에 관한 내용은 저자에 관한 참고 참조)

법적 고지 및 책임 있는 사용

이 도구는 교육 및 공인된 보안 테스트를 위해 게시되었습니다. 직접 운영하는 랩 환경, HTB/CTF 대상, 또는 명시적인 서면 허가를 받은 시스템만 대상으로 해야 합니다. 컴퓨터 시스템에 대한 무단 접근은 영국 Computer Misuse Act 1990, 미국 Computer Fraud and Abuse Act, 그 외 국가의 유사 법률에 따라 범죄입니다. 사용 방법에 대한 책임은 전적으로 사용자에게 있습니다. 저자는 오용 또는 발생한 손해에 대해 책임을 지지 않습니다.

라이선스

MIT

도구 다운로드
플래그설명
-u, --url(필수) 대상 기본 URL(예: http://target/)
-c, --cmd대상에서 실행할 단일 명령
--shell대화형 유사 셸 진입
--deploy-only웹 셸만 심고 아무것도 실행하지 않음
--shell-name배포할 셸 파일 이름(기본값: 무작위 .php)
--param셸의 GET 매개변수 이름(기본값: 무작위 md5)
--proxy프록시 URL(예: http://127.0.0.1:8080)
-k, --insecureTLS 검증 비활성화(자체 서명 프록시 인증서용)
--timeout요청당 시간 초과(초 단위, 기본값: 15)