mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-27 07:01:09 +00:00
109 lines
7.5 KiB
Markdown
109 lines
7.5 KiB
Markdown
# LFI2RCE kupitia Kusubiri Milele
|
|
|
|
<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>
|
|
|
|
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 [**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>
|
|
|
|
## Taarifa Msingi
|
|
|
|
Kwa chaguo-msingi, wakati faili inapakiwa kwenye PHP (hata kama haitegemei), itazalisha faili ya muda katika `/tmp` yenye jina kama **`php[a-zA-Z0-9]{6}`**, ingawa nimeona picha za docker ambapo faili zilizozalishwa hazina tarakimu.
|
|
|
|
Katika kuingiza faili ya ndani, **ikiwa utaweza kuingiza faili hiyo iliyoletwa, utapata RCE**.
|
|
|
|
Tafadhali kumbuka kuwa kwa chaguo-msingi **PHP inaruhusu kupakia faili 20 kwa ombi moja tu** (imewekwa katika `/etc/php/<version>/apache2/php.ini`):
|
|
```
|
|
; Maximum number of files that can be uploaded via a single request
|
|
max_file_uploads = 20
|
|
```
|
|
Pia, **idadi ya majina ya faili yanayowezekana ni 62\*62\*62\*62\*62\*62 = 56800235584**
|
|
|
|
### Mbinu nyingine
|
|
|
|
Mbinu nyingine inategemea kushambulia itifaki za PHP (hutaweza ikiwa unadhibiti sehemu ya mwisho ya njia), kufichua njia ya faili, kutumia faili zinazotarajiwa, au **kufanya PHP ipate kosa la segementation ili faili za muda mfupi zilizopakiwa zisifutwe**.\
|
|
Mbinu hii ni **sawa sana na ile ya mwisho lakini bila haja ya kupata siku ya sifuri**.
|
|
|
|
### Mbinu ya kusubiri milele
|
|
|
|
Katika mbinu hii, **tunahitaji tu kudhibiti njia ya kihusishi**. Ikiwa tunaweza kupakia faili na kufanya **LFI isikome kamwe**, tutakuwa na "muda wa kutosha" kufanya **brute-force kwenye faili zilizopakiwa** na **kupata** moja yoyote kati ya zilizopakiwa.
|
|
|
|
**Faida za mbinu hii**:
|
|
|
|
* Unahitaji tu kudhibiti njia ya kihusishi ya kihusishi
|
|
* Hauhitaji nginx au kiwango kisichotarajiwa cha ufikiaji wa faili za kuingiza kwenye faili za kuingiza
|
|
* Hauhitaji siku ya sifuri kusababisha kosa la segementation
|
|
* Hauhitaji kufichua njia
|
|
|
|
**Matatizo makuu** ya mbinu hii ni:
|
|
|
|
* Inahitaji faili maalum (inaweza kuwa zaidi)
|
|
* Idadi **isiyo ya kawaida** ya majina ya faili yanayowezekana: **56800235584**
|
|
* Ikiwa seva **haitumii tarakimu**, idadi kamili ya uwezekano ni: **19770609664**
|
|
* Kwa chaguo-msingi, **faili 20 tu** zinaweza kupakiwa kwa **ombi moja**.
|
|
* Idadi **kubwa ya wafanyakazi wanaofanya kazi wakati mmoja** kwenye seva iliyotumiwa.
|
|
* Kikomo hiki pamoja na vikomo vingine vinaweza kufanya shambulio hili lisichukue muda mrefu sana
|
|
* **Muda wa kusubiri ombi la PHP**. Kwa ideali hii inapaswa kuwa ya milele au inapaswa kuua mchakato wa PHP bila kufuta faili zilizopakiwa za muda mfupi, ikiwa sivyo, hii pia itakuwa shida
|
|
|
|
Basi, unawezaje **kusababisha kuingiza kwa PHP isikome kamwe**? Kwa kuingiza faili **`/sys/kernel/security/apparmor/revision`** (**haipatikani kwenye kontena za Docker** kwa bahati mbaya...).
|
|
|
|
Jaribu tu kuita:
|
|
```bash
|
|
php -a # open php cli
|
|
include("/sys/kernel/security/apparmor/revision");
|
|
```
|
|
## Apache2
|
|
|
|
Kwa chaguo-msingi, Apache inasaidia **150 yaunganisho yanayofanya kazi wakati mmoja**, kufuatia [https://ubiq.co/tech-blog/increase-max-connections-apache/](https://ubiq.co/tech-blog/increase-max-connections-apache/) inawezekana kuongeza idadi hii hadi 8000. Fuata hii ili kutumia PHP na moduli hiyo: [https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04).
|
|
|
|
Kwa chaguo-msingi, (kama ninavyoona katika majaribio yangu), **mchakato wa PHP unaweza kudumu milele**.
|
|
|
|
Hebu tufanye hesabu:
|
|
|
|
* Tunaweza kutumia **unganisho 149** kuunda **2980 faili za muda** na webshell yetu.
|
|
* Kisha, tumia **unganisho la mwisho** kufanya **brute-force** kwenye faili zinazowezekana.
|
|
* Kwa kasi ya **ombi 10/s**, nyakati ni:
|
|
* 56800235584 / 2980 / 10 / 3600 \~= **masaa 530** (nafasi ya 50% katika masaa 265)
|
|
* (bila tarakimu) 19770609664 / 2980 / 10 / 3600 \~= masaa 185 (nafasi ya 50% katika masaa 93)
|
|
|
|
{% hint style="warning" %}
|
|
Tafadhali kumbuka kuwa katika mfano uliopita tunasababisha **DoS kamili kwa wateja wengine**!
|
|
{% endhint %}
|
|
|
|
Ikiwa seva ya Apache imeboreshwa na tunaweza kutumia **unganisho 4000** (nusu ya idadi kubwa). Tunaweza kuunda `3999*20 = 79980` **faili** na **idadi** itapunguzwa hadi takriban **masaa 19.7** au **masaa 6.9** (masaa 10, masaa 3.5 nafasi ya 50%).
|
|
|
|
## PHP-FMP
|
|
|
|
Ikiwa badala ya kutumia moduli ya kawaida ya php kwa apache kuendesha skripti za PHP, **ukurasa wa wavuti unatumia PHP-FMP** (hii inaboresha ufanisi wa ukurasa wa wavuti, kwa hivyo ni kawaida kuipata), kuna kitu kingine kinachoweza kufanywa kuboresha mbinu hii.
|
|
|
|
PHP-FMP inaruhusu **kuweka** **parameta** **`request_terminate_timeout`** katika **`/etc/php/<php-version>/fpm/pool.d/www.conf`**.\
|
|
Parameta hii inaonyesha idadi kubwa ya sekunde **wakati** **ombi kwa PHP lazima litamatike** (kwa chaguo-msingi ni isiyo na kikomo, lakini **30s ikiwa paramu haijafutwa**). Wakati ombi linapopitishwa na PHP kwa idadi iliyotajwa ya sekunde, ombi hilo linakuwa **limekatwa**. Hii inamaanisha kuwa ikiwa ombi lilikuwa linapakia faili za muda, kwa sababu **usindikaji wa php ulisimamishwa**, faili hizo **hazitafutwa**. Kwa hivyo, ikiwa unaweza kufanya ombi lidumu kwa muda huo, unaweza **kuunda maelfu ya faili za muda** ambazo hazitafutwa, ambazo zitasaidia **kupunguza muda wa kuzipata** na kupunguza uwezekano wa DoS kwa jukwaa kwa kuchukua unganisho zote.
|
|
|
|
Kwa hivyo, ili **kuepuka DoS**, hebu tuseme kuwa **mshambuliaji atatumia unganisho 100 tu** kwa wakati mmoja na muda wa usindikaji wa php kwa njia ya **php-fmp** (`request_terminate_timeout`**)** ni **30s**. Kwa hivyo, idadi ya **faili za muda** zinazoweza kuundwa **kwa sekunde** ni `100*20/30 = 66.67`.
|
|
|
|
Kisha, ili kuunda **faili 10000**, mshambuliaji atahitaji: **`10000/66.67 = 150s`** (kwa kuunda **faili 100000** wakati utakuwa **dakika 25**).
|
|
|
|
Kisha, mshambuliaji anaweza kutumia **unganisho hizo 100** kufanya **brute-force** ya utafutaji. Kwa kasi ya 300 ombi/s wakati unaohitajika kutekeleza hii ni kama ifuatavyo:
|
|
|
|
* 56800235584 / 10000 / 300 / 3600 \~= **masaa 5.25** (nafasi ya 50% katika masaa 2.63)
|
|
* (na faili 100000) 56800235584 / 100000 / 300 / 3600 \~= **masaa 0.525** (nafasi ya 50% katika masaa 0.263)
|
|
|
|
Ndiyo, inawezekana kuunda faili 100000 za muda kwenye kifaa cha ukubwa wa kati cha EC2:
|
|
|
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (3).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
{% hint style="warning" %}
|
|
Tafadhali kumbuka kuwa ili kusababisha muda wa kumalizika, itakuwa **ya kutosha kuweka ukurasa ulio hatarini wa LFI**, ili iingie kwenye mzunguko wa kuingiza usio na mwisho.
|
|
{% endhint %}
|
|
|
|
## Nginx
|
|
|
|
Inaonekana kwa chaguo-msingi Nginx inasaidia **unganisho 512 yanayofanya kazi wakati mmoja** (na idadi hii inaweza kuboreshwa).
|