LFI2RCE kupitia Kusubiri Milele
Reading time: 6 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Taarifa za Msingi
Kwa kawaida, wakati faili inapoupwa kwenye PHP (hata kama haitarajii), itaunda faili ya muda katika /tmp
yenye jina kama php[a-zA-Z0-9]{6}
, ingawa nimeona picha zingine za docker ambapo faili zilizozalishwa hazina nambari.
Katika uingizaji wa faili wa ndani, ikiwa utaweza kuingiza faili hiyo iliyoupwa, utapata RCE.
Kumbuka kwamba kwa kawaida PHP inaruhusu kupakia faili 20 tu katika ombi moja (iliyowekwa 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 yanayoweza kuwa ni 62*62*62*62*62*62 = 56800235584
Mbinu nyingine
Mbinu nyingine zinategemea kushambulia protokali za PHP (hutoweza ikiwa unadhibiti sehemu ya mwisho ya njia), kufichua njia ya faili, kutumia faili zinazotarajiwa, au kufanya PHP ipate makosa ya segmentation ili faili za muda zilizopakiwa zisifutwe.
Mbinu hii ni sawa sana na ya mwisho lakini bila kuhitaji kupata siku sifuri.
Mbinu ya kusubiri milele
Katika mbinu hii tunahitaji tu kudhibiti njia ya jamaa. Ikiwa tutafanikiwa kupakia faili na kufanya LFI isikome kamwe, tutakuwa na "wakati wa kutosha" ili kujaribu nguvu faili zilizopakiwa na kupata yoyote kati ya zile zilizopakiwa.
Faida za mbinu hii:
- Unahitaji tu kudhibiti njia ya jamaa ndani ya kujumuisha
- Haihitaji nginx au kiwango kisichotarajiwa cha ufikiaji wa faili za log
- Haihitaji siku sifuri ili kusababisha makosa ya segmentation
- Haihitaji kufichua njia
Matatizo makuu ya mbinu hii ni:
- Inahitaji faili maalum kuwapo (huenda kuna zaidi)
- Kiasi cha ajabu cha majina ya faili yanayoweza: 56800235584
- Ikiwa seva haitumii nambari jumla ya uwezo ni: 19770609664
- Kwa kawaida faili 20 tu zinaweza kupakiwa katika ombio moja.
- idadi ya juu ya wafanyakazi wa sambamba wa seva inayotumika.
- Kizuizi hiki pamoja na vya awali kinaweza kufanya shambulio hili kudumu kwa muda mrefu
- Muda wa kupita kwa ombi la PHP. Kwa kawaida hii inapaswa kuwa milele au inapaswa kuua mchakato wa PHP bila kufuta faili za muda zilizopakiwa, ikiwa sivyo, hii pia itakuwa shida
Basi, unaweza aje kufanya kujumuisha PHP kusiishe kamwe? Kwa kujumlisha tu faili /sys/kernel/security/apparmor/revision
(haipatikani katika kontena za Docker kwa bahati mbaya...).
Jaribu kwa kuitwa:
php -a # open php cli
include("/sys/kernel/security/apparmor/revision");
Apache2
Kwa kawaida, Apache inasaidia michango 150 ya pamoja, kufuatia https://ubiq.co/tech-blog/increase-max-connections-apache/ inawezekana kuboresha nambari hii hadi 8000. Fuata hii 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 kawaida, (kama ninavyoona katika majaribio yangu), mchakato wa PHP unaweza kudumu milele.
Hebu tufanye hesabu:
- Tunaweza kutumia michango 149 kuzalisha 149 * 20 = 2980 faili za muda na webshell yetu.
- Kisha, tumia mchango wa mwisho kufanya brute-force faili zinazoweza kuwa.
- Kwa kasi ya maombi 10/s nyakati ni:
- 56800235584 / 2980 / 10 / 3600 ~= masaa 530 (50% nafasi katika masaa 265)
- (bila nambari) 19770609664 / 2980 / 10 / 3600 ~= 185h (50% nafasi katika masaa 93)
warning
Kumbuka kwamba katika mfano wa awali tunafanya DoS kwa wateja wengine kabisa!
Ikiwa seva ya Apache imeboreshwa na tunaweza kutumia michango 4000 (katika nusu ya nambari ya juu). Tunaweza kuunda 3999*20 = 79980
faili na nambari itakuwa imepunguzwa hadi karibu 19.7h au 6.9h (10h, 3.5h 50% nafasi).
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, hivyo ni kawaida kuikuta), kuna kitu kingine kinachoweza kufanywa kuboresha mbinu hiyo.
PHP-FMP inaruhusu kuunda parameta request_terminate_timeout
katika /etc/php/<php-version>/fpm/pool.d/www.conf
.
Parameta hii inaonyesha kiwango cha juu cha sekunde wakati maombi kwa PHP yanapaswa kumalizika (isiyo na kikomo kwa kawaida, lakini 30s ikiwa parameta imeondolewa maoni). Wakati ombi linaposhughulikiwa na PHP kwa idadi iliyotajwa ya sekunde, inakatishwa. Hii inamaanisha, kwamba ikiwa ombi lilikuwa likipakia faili za muda, kwa sababu usindikaji wa php umesitishwa, hizo faili hazitafutwa. Kwa hivyo, ikiwa unaweza kufanya ombi kudumu muda huo, unaweza kuunda maelfu ya faili za muda ambazo hazitafutwa, ambayo itachochea mchakato wa kuzipata na kupunguza uwezekano wa DoS kwa jukwaa kwa kutumia michango yote.
Hivyo, ili kuepuka DoS hebu tuone kwamba mshambuliaji atatumia michango 100 tu kwa wakati mmoja na muda wa usindikaji wa php kwa php-fmp (request_terminate_timeout
) ni 30s. Kwa hivyo, idadi ya faili za muda zinazoweza kuzalishwa kwa sekunde ni 100*20/30 = 66.67
.
Kisha, ili kuunda faili 10000 mshambuliaji angehitaji: 10000/66.67 = 150s
(kuunda faili 100000 muda ungekuwa dakika 25).
Kisha, mshambuliaji angeweza kutumia hizo michango 100 kufanya tafuta brute-force. **** Tukikadiria kasi ya maombi 300 req/s muda unaohitajika kutumia hii ni kama ifuatavyo:
- 56800235584 / 10000 / 300 / 3600 ~= masaa 5.25 (50% nafasi katika masaa 2.63)
- (ikiwa na faili 100000) 56800235584 / 100000 / 300 / 3600 ~= masaa 0.525 (50% nafasi katika masaa 0.263)
Ndio, inawezekana kuunda faili 100000 za muda katika mfano wa ukubwa wa kati wa EC2:
warning
Kumbuka kwamba ili kuanzisha muda wa kukatisha itakuwa ya kutosha kujumuisha ukurasa wa LFI ulio hatarini, ili uingie katika mzunguko wa kujumuisha wa milele.
Nginx
Inaonekana kwamba kwa kawaida Nginx inasaidia michango 512 ya sambamba kwa wakati mmoja (na nambari hii inaweza kuboreshwa).
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.