Drupal RCE
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
이전 버전의 Drupal **(8 이전 버전)**에서는 관리자로 로그인하고 PHP filter
모듈을 활성화할 수 있었습니다. 이 모듈은 "내장된 PHP 코드/스니펫을 평가할 수 있게 합니다." 그러나 8 버전부터 이 모듈은 기본적으로 설치되어 있지 않습니다.
/modules/php로 가서 403 오류가 반환되면 PHP 필터 플러그인이 설치되어 있으며 계속 진행할 수 있습니다.
그렇지 않으면 Modules
로 가서 PHP Filter
의 체크박스를 선택한 다음 Save configuration
을 클릭합니다.
그런 다음 이를 악용하기 위해 Add content
를 클릭하고 Basic Page
또는 Article
을 선택한 후 PHP 백도어를 작성합니다. 그런 다음 텍스트 형식에서 PHP
코드를 선택하고 마지막으로 Preview
를 선택합니다.
이를 트리거하려면 새로 생성된 노드에 접근하기만 하면 됩니다:
현재 버전에서는 기본 설치 후 웹에만 접근하여 플러그인을 설치하는 것이 더 이상 불가능합니다.
8 버전부터는 PHP 필터 모듈이 기본적으로 설치되지 않습니다. 이 기능을 활용하기 위해서는 모듈을 직접 설치해야 합니다.
Drupal 웹사이트에서 모듈의 최신 버전을 다운로드합니다.
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
다운로드가 완료되면 관리
> 보고서
> **사용 가능한 업데이트
**로 이동합니다.
**찾아보기
**를 클릭하고, 다운로드한 디렉토리에서 파일을 선택한 후 **설치
**를 클릭합니다.
모듈이 설치되면 **콘텐츠
**를 클릭하고 새 기본 페이지를 생성합니다. 이는 Drupal 7 예제에서 했던 방식과 유사합니다. 다시 한 번, 텍스트 형식
드롭다운에서 PHP 코드
를 선택하는 것을 잊지 마세요.
현재 버전에서는 기본 설치 후 웹에만 접근하여 플러그인을 설치하는 것이 더 이상 불가능합니다.
모듈을 다운로드하고, 백도어를 추가한 후 설치하는 것이 가능했습니다. 예를 들어, Trurnstile 모듈을 압축 형식으로 다운로드하고, 그 안에 새로운 PHP 백도어 파일을 생성하여 .htaccess
파일을 통해 PHP 파일에 접근할 수 있도록 했습니다:
그리고 **http://drupal.local/admin/modules/install
**로 가서 백도어가 설치된 모듈을 설치하고 **/modules/turnstile/back.php
**에 접근하여 실행합니다.
게시물 공유자 Coiffeur0x90
확장 메뉴 (/admin/modules)에서 이미 설치된 것으로 보이는 플러그인을 활성화할 수 있습니다. 기본적으로 플러그인 미디어 및 _미디어 라이브러리_는 활성화되지 않은 것으로 보이므로 활성화하겠습니다.
활성화 전:
활성화 후:
구성 동기화 기능을 활용하여 Drupal 구성 항목을 덤프(내보내기)하고 업로드(가져오기)하겠습니다:
/admin/config/development/configuration/single/export
/admin/config/development/configuration/single/import
system.file.yml 패치
먼저 allow_insecure_uploads
의 첫 번째 항목을 패치하는 것으로 시작하겠습니다:
파일: system.file.yml
다음:
파일: system.file.yml
Patch field.field.media.document.field_media_document.yml
그런 다음, 두 번째 항목 file_extensions
를 다음과 같이 패치합니다:
File: field.field.media.document.field_media_document.yml
다음으로:
파일: field.field.media.document.field_media_document.yml
이 블로그 포스트에서는 사용하지 않지만,
file_directory
항목을 임의로 정의할 수 있으며, 경로 탐색 공격에 취약하다는 점이 주목됩니다 (따라서 Drupal 파일 시스템 트리 내에서 위로 올라갈 수 있습니다).
마지막 단계는 가장 간단하며, 두 개의 하위 단계로 나뉩니다. 첫 번째는 .htaccess 형식의 파일을 업로드하여 Apache 지시문을 활용하고 .txt 파일이 PHP 엔진에 의해 해석되도록 허용하는 것입니다. 두 번째는 우리의 페이로드를 포함하는 .txt 파일을 업로드하는 것입니다.
File: .htaccess
왜 이 트릭이 멋진가요?
웹쉘(우리가 LICENSE.txt라고 부를 것)을 웹 서버에 배포하면, $_COOKIE
를 통해 명령을 전송할 수 있고, 웹 서버 로그에는 텍스트 파일에 대한 정당한 GET 요청으로 나타납니다.
왜 우리의 웹쉘을 LICENSE.txt라고 이름 짓나요?
단순히 Drupal 코어에 이미 존재하는 다음 파일, 예를 들어 core/LICENSE.txt를 사용하면, 339줄과 17.6 KB 크기의 파일이 있어 중간에 작은 PHP 코드 조각을 추가하기에 완벽합니다(파일이 충분히 크기 때문에).
파일: 패치된 LICENSE.txt
먼저, Add Document (/media/add/document) 기능을 활용하여 Apache 지시어가 포함된 파일(.htaccess)을 업로드합니다.
Part 3.2 (파일 LICENSE.txt 업로드)
그 다음, Add Document (/media/add/document) 기능을 다시 활용하여 라이선스 파일에 숨겨진 Webshell을 업로드합니다.
마지막 부분은 Webshell과 상호작용하는 것으로 구성됩니다.
다음 스크린샷에서 볼 수 있듯이, Webshell에서 기대하는 쿠키가 정의되지 않으면 웹 브라우저를 통해 파일을 조회할 때 다음과 같은 결과를 얻습니다.
공격자가 쿠키를 설정하면 Webshell과 상호작용하고 원하는 명령을 실행할 수 있습니다.
로그에서 볼 수 있듯이, 요청된 것은 txt 파일뿐인 것처럼 보입니다.
이 기사를 읽어주셔서 감사합니다. 여러분이 몇 개의 쉘을 얻는 데 도움이 되기를 바랍니다.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)