hacktricks/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md
2024-02-11 02:13:58 +00:00

7.5 KiB

LFI2RCE kupitia Kusubiri Milele

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

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:

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/ 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.

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:

{% 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).