417 lines
36 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 80,443 - Pentesting Web Methodology
{{#include ../../banners/hacktricks-training.md}}
## Основна інформація
Веб-сервіс є най**поширенішим та наймасштабнішим сервісом**, і існує багато **різних типів вразливостей**.
**Порт за замовчуванням:** 80 (HTTP), 443 (HTTPS)
```bash
PORT STATE SERVICE
80/tcp open http
443/tcp open ssl/https
```
```bash
nc -v domain.com 80 # GET / HTTP/1.0
openssl s_client -connect domain.com:443 # GET / HTTP/1.0
```
### Керівництво з Web API
{{#ref}}
web-api-pentesting.md
{{#endref}}
## Зведення методології
> У цій методології ми припускаємо, що ви збираєтесь атакувати один домен (або піддомен) і лише його. Отже, цю методологію слід застосувати до кожного виявленого домену, піддомену або IP з невизначеним веб‑сервером у межах обсягу тестування.
- [ ] Почніть з **виявлення** **технологій**, що використовуються веб‑сервером. Шукайте **трюки**, які слід врахувати протягом решти тесту, якщо вам вдасться ідентифікувати технологію.
- [ ] Чи є відомі **вразливості** для поточної версії цієї технології?
- [ ] Використовується відома технологія? Є якісь **корисні трюки** для витягнення додаткової інформації?
- [ ] Чи є спеціалізований сканер для запуску (наприклад, 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 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
```
Шукайте **для** [**vulnerabilities of the web application** **version**](../../generic-hacking/search-exploits.md)
### **Перевірте наявність 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)
- [**Artifactory**](artifactory-hacking-guide.md)
- [**Buckets**](buckets/index.html)
- [**CGI**](cgi.md)
- [**Drupal**](drupal/index.html)
- [**Flask**](flask.md)
- [**Git**](git.md)
- [**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)
- [**Jenkins**](<[https:/github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/pentesting-web/broken-reference/README.md](https:/github.com/HackTricks-wiki/hacktricks-cloud/tree/master/pentesting-ci-cd/jenkins-security)/>)
- [**Jira**](jira.md)
- [**Joomla**](joomla.md)
- [**JSP**](jsp.md)
- [**Laravel**](laravel.md)
- [**Moodle**](moodle.md)
- [**Nginx**](nginx.md)
- [**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)
- [**Tomcat**](tomcat/index.html)
- [**VMWare**](vmware-esx-vcenter....md)
- [**Web API Pentesting**](web-api-pentesting.md)
- [**WebDav**](put-method-webdav.md)
- [**Werkzeug**](werkzeug.md)
- [**Wordpress**](wordpress.md)
- [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/index.html)
_Майте на увазі, що **той самий домен** може використовувати **різні технології** на різних **портах**, **папках** та **субдоменах**._\
Якщо веб‑додаток використовує будь‑яку відому **tech/platform listed before** або **any other**, не забудьте **search on the Internet** нові трюки (і повідомте мені!).
### Огляд вихідного коду
Якщо **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>
wapiti -u <URL>
W3af
zaproxy #You can use an API
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, не забувайте **запустити сканер**, можливо знайдеться щось цікаве:
[**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)\
[**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)
```bash
cmsmap [-f W] -F -d <URL>
wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs
```
> На цьому етапі у вас уже має бути певна інформація про web server, що використовує клієнт (якщо надано будь‑які дані), і деякі прийоми, які варто пам'ятати під час тестування. Якщо пощастило, ви навіть знайшли CMS і запустили scanner.
## Покрокове виявлення веб-застосунку
> З цього моменту ми почнемо взаємодію з веб-застосунком.
### Початкові перевірки
**Сторінки за замовчуванням з цікавою інформацією:**
- /robots.txt
- /sitemap.xml
- /crossdomain.xml
- /clientaccesspolicy.xml
- /.well-known/
- Перевірте також коментарі на головних і другорядних сторінках.
**Примусове викликання помилок**
Web servers можуть **поводитись непередбачувано**, коли їм надсилають дивні дані. Це може відкрити **vulnerabilities** або призвести до розкриття конфіденційної інформації.
- Доступ до **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)**)**
Якщо ви виявите, що **WebDav** увімкнено, але у вас недостатньо прав для **uploading files** в кореневій папці, спробуйте:
- **Brute Force** credentials
- **Upload files** через WebDav у інші знайдені папки на сайті. Можливо, у вас є дозволи на завантаження файлів у інших папках.
### **Уразливості SSL/TLS**
- Якщо застосунок **не вимагає HTTPS** в жодній частині, то він вразливий до MitM
- Якщо застосунок **відправляє чутливі дані (паролі) через HTTP**, це серйозна вразливість.
Використовуйте [**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
# You can also use other tools, by testssl.sh at this momment is the best one (I think)
sslscan <host:port>
sslyze --regular <ip:port>
```
Інформація про вразливості SSL/TLS:
- [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
- [https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/](https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/)
### Spidering
Запустіть якийсь вид **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, з 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 directories and files
Почніть **brute-forcing** з кореневої теки і переконайтесь, що ви brute-force-ите **всі** **знайдені директорії** за **цією методою** і всі директорії, **виявлені** під час **Spidering** (ви можете виконувати brute-forcing **рекурсивно**, додаючи на початок вживаного wordlist-у імена знайдених директорій).\
Інструменти:
- **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)- 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** 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)
- raft-large-directories-lowercase.txt
- directory-list-2.3-medium.txt
- RobotsDisallowed/top10000.txt
- [https://github.com/random-robbie/bruteforce-lists](https://github.com/random-robbie/bruteforce-lists)
- [https://github.com/google/fuzzing/tree/master/dictionaries](https://github.com/google/fuzzing/tree/master/dictionaries)
- [https://github.com/six2dez/OneListForAll](https://github.com/six2dez/OneListForAll)
- [https://github.com/random-robbie/bruteforce-lists](https://github.com/random-robbie/bruteforce-lists)
- [https://github.com/ayoubfathi/leaky-paths](https://github.com/ayoubfathi/leaky-paths)
- _/usr/share/wordlists/dirb/common.txt_
- _/usr/share/wordlists/dirb/big.txt_
- _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
_Зверніть увагу, що щоразу, коли під час brute-forcing або spidering знаходиться нова директорія, її слід Brute-Force-ити._
### What to check on each file found
- [**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)
- **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** ви можете знайти **цікаві** **речі**, про які слід **повідомити**.
**Interesting files**
- Шукайте **посилання** на інші файли всередині **CSS** файлів.
- [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 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)
- Ви також можете **моніторити файли, де були виявлені форми**, оскільки зміна параметра або поява нової форми може свідчити про потенційно вразливий функціонал.
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
{{#ref}}
403-and-401-bypasses.md
{{#endref}}
**502 Proxy Error**
Якщо будь-яка сторінка **відповідає** цим **кодом**, ймовірно це **погано налаштований proxy**. **Якщо ви надішлете HTTP-запит типу: `GET https://google.com HTTP/1.1`** (з Host header та іншими стандартними заголовками), **proxy** спробує **доступитися** до _**google.com**_ **і ви знайдете** SSRF.
**NTLM Authentication - Info disclosure**
Якщо сервер, що вимагає аутентифікацію, — **Windows**, або ви натрапите на логін, який запитує ваші **credentials** (і просить **domain** **name**), ви можете спричинити **витік інформації**.\
**Надішліть** заголовок: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` і через те, як працює **NTLM authentication**, сервер відповість внутрішньою інфою (версія IIS, версія Windows...) у заголовку "WWW-Authenticate".\
Ви можете **автоматизувати** це за допомогою **nmap plugin** "_http-ntlm-info.nse_".
**HTTP Redirect (CTF)**
Можна **вкладати контент** всередину **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) для моніторингу сторінок на предмет змін, що можуть вносити вразливості.
### HackTricks Automatic Commands
```
Protocol_Name: Web #Protocol Abbreviation if there is one.
Port_Number: 80,443 #Comma separated if there is more than one.
Protocol_Description: Web #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for Web
Note: |
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/index.html
Entry_2:
Name: Quick Web Scan
Description: Nikto and GoBuster
Command: nikto -host {Web_Proto}://{IP}:{Web_Port} &&&& gobuster dir -w {Small_Dirlist} -u {Web_Proto}://{IP}:{Web_Port} && gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}
Entry_3:
Name: Nikto
Description: Basic Site Info via Nikto
Command: nikto -host {Web_Proto}://{IP}:{Web_Port}
Entry_4:
Name: WhatWeb
Description: General purpose auto scanner
Command: whatweb -a 4 {IP}
Entry_5:
Name: Directory Brute Force Non-Recursive
Description: Non-Recursive Directory Brute Force
Command: gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}
Entry_6:
Name: Directory Brute Force Recursive
Description: Recursive Directory Brute Force
Command: python3 {Tool_Dir}dirsearch/dirsearch.py -w {Small_Dirlist} -e php,exe,sh,py,html,pl -f -t 20 -u {Web_Proto}://{IP}:{Web_Port} -r 10
Entry_7:
Name: Directory Brute Force CGI
Description: Common Gateway Interface Brute Force
Command: gobuster dir -u {Web_Proto}://{IP}:{Web_Port}/ -w /usr/share/seclists/Discovery/Web-Content/CGIs.txt -s 200
Entry_8:
Name: Nmap Web Vuln Scan
Description: Tailored Nmap Scan for web Vulnerabilities
Command: nmap -vv --reason -Pn -sV -p {Web_Port} --script=`banner,(http* or ssl*) and not (brute or broadcast or dos or external or http-slowloris* or fuzzer)` {IP}
Entry_9:
Name: Drupal
Description: Drupal Enumeration Notes
Note: |
git clone https://github.com/immunIT/drupwn.git for low hanging fruit and git clone https://github.com/droope/droopescan.git for deeper enumeration
Entry_10:
Name: WordPress
Description: WordPress Enumeration with WPScan
Command: |
?What is the location of the wp-login.php? Example: /Yeet/cannon/wp-login.php
wpscan --url {Web_Proto}://{IP}{1} --enumerate ap,at,cb,dbe && wpscan --url {Web_Proto}://{IP}{1} --enumerate u,tt,t,vp --passwords {Big_Passwordlist} -e
Entry_11:
Name: WordPress Hydra Brute Force
Description: Need User (admin is default)
Command: hydra -l admin -P {Big_Passwordlist} {IP} -V http-form-post '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log In&testcookie=1:S=Location'
Entry_12:
Name: Ffuf Vhost
Description: Simple Scan with Ffuf for discovering additional vhosts
Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:FUZZ.{Domain_Name}" -c -mc all {Ffuf_Filters}
```
{{#include ../../banners/hacktricks-training.md}}