80,443 - Pentesting Web Methodology

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Основна інформація

Веб-сервіс є найпоширенішим та наймасштабнішим сервісом, і існує багато різних типів вразливостей.

Порт за замовчуванням: 80 (HTTP), 443(HTTPS)

PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  ssl/https
nc -v domain.com 80 # GET / HTTP/1.0
openssl s_client -connect domain.com:443 # GET / HTTP/1.0

Керівництво Web API

Web API Pentesting

Стислий опис методології

У цій методології ми припускаємо, що ви будете атакувати один домен (або субдомен) і тільки його. Тож застосовуйте цю методологію до кожного виявленого домену, субдомену або IP з невизначеним веб-сервером у межах сфери тестування.

  • Почніть з ідентифікації технологій, які використовує веб-сервер. Шукайте трюки, які варто мати на увазі під час подальшого тестування, якщо вам вдасться ідентифікувати технологію.
  • Чи є які-небудь відомі вразливості для версії цієї технології?
  • Використовується якась well known tech? Є якісь корисні трюки для витягання додаткової інформації?
  • Чи є якийсь спеціалізований сканер для запуску (наприклад, wpscan)?
  • Запустіть general purposes scanners. Ви ніколи не знаєте, чи вони знайдуть щось інше або корисну інформацію.
  • Почніть з початкових перевірок: robots, sitemap, 404 error і SSL/TLS scan (якщо HTTPS).
  • Розпочніть spidering веб-сторінки: час знайти всі можливі файли, папки та параметри, що використовуються. Також перевірте на наявність особливих знахідок.
  • Зверніть увагу, що щоразу, коли під час brute-forcing або spidering виявляється новий каталог, його слід сканувати.
  • Directory Brute-Forcing: намагайтесь перебрати всі виявлені папки в пошуках нових файлів і директорій.
  • Зверніть увагу, що щоразу, коли під час brute-forcing або spidering виявляється новий каталог, його слід brute-forcити.
  • Перевірка резервних копій: спробуйте знайти backups виявлених файлів, додаючи поширені розширення для бекапів.
  • Brute-Force parameters: спробуйте знайти приховані параметри.
  • Коли ви ідентифікували всі можливі ендпойнти, що приймають ввід від користувача, перевіряйте всі можливі вразливості, пов’язані з ними.
  • Follow this checklist

Версія сервера (Вразлива?)

Ідентифікація

Перевірте, чи існують відомі вразливості для версії сервера, яка запущена.
HTTP headers і cookies відповіді можуть бути дуже корисними для ідентифікації технологій і/або версії, що використовується. Nmap scan може визначити версію сервера, але також можуть бути корисні інструменти whatweb, webtech or https://builtwith.com/:

whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
webtech -u <URL>
webanalyze -host https://google.com -crawl 2

Шукати для вulnerabilities of the web application version

Перевірте, чи є будь-який WAF

Трюки веб-технологій

Деякі трюки для знаходження вразливостей у різних відомих технологіях, що використовуються:

Майте на увазі, що той самий домен може використовувати різні технології на різних портах, папках та піддоменах.
Якщо веб-застосунок використовує будь-яку відому tech/platform listed before або будь-яку іншу, не забудьте шукати нові трюки в Інтернеті (і повідомити мені!).

Огляд вихідного коду

Якщо source code застосунку доступний на github, окрім виконання your own a White box test застосунку, існує деяка інформація, яка може бути корисною для поточного Black-Box testing:

  • Чи є файл Change-log або Readme або Version або щось із інформацією про версію, доступне через веб?
  • Як і де зберігаються облікові дані? Чи існує якийсь (доступний?) файл з обліковими даними (імена користувачів чи паролі)?
  • Чи зберігаються паролі у відкритому тексті, шифровані або який хеш-алгоритм використовується?
  • Чи використовує він якийсь master key для шифрування чогось? Який алгоритм використовується?
  • Чи можете ви отримати доступ до будь-якого з цих файлів, експлуатуючи якусь вразливість?
  • Чи є якась цікава інформація в github (вирішені та невирішені) issues? Або в commit history (можливо якийсь пароль був доданий у старому коміті)?

Source code Review / SAST Tools

Автоматичні сканери

Автоматичні сканери загального призначення

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: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: WordPress, Drupal, Joomla, vBulletin вебсайти на предмет проблем безпеки. (GUI)
VulnX: Joomla, Wordpress, Drupal, PrestaShop, Opencart
CMSMap: (W)ordpress, (J)oomla, (D)rupal or (M)oodle
droopscan: Drupal, Joomla, Moodle, Silverstripe, Wordpress

cmsmap [-f W] -F -d <URL>
wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs

На цьому етапі ви повинні вже мати деяку інформацію про веб‑сервер, який використовує клієнт (якщо надано будь‑які дані), та кілька трюків, які варто пам’ятати під час тесту. Якщо пощастить, ви навіть знайшли CMS і запустили сканер.

Покрокове виявлення веб‑застосунку

З цього моменту ми починаємо взаємодіяти з веб‑застосунком.

Початкові перевірки

Сторінки за замовчуванням з корисною інформацією:

  • /robots.txt
  • /sitemap.xml
  • /crossdomain.xml
  • /clientaccesspolicy.xml
  • /.well-known/
  • Перевірте також коментарі на головних та другорядних сторінках.

Примусове викликання помилок

Веб‑сервери можуть поводитися непередбачувано, коли їм надсилають некоректні дані. Це може призвести до вразливостей або витоку чутливої інформації.

  • Access fake pages like /whatever_fake.php (.aspx,.html,.etc)
  • Додайте “[]”, “]]”, і “[[” у cookie values та parameter values щоб спричинити помилки
  • Згенеруйте помилку, подавши вхід як /~randomthing/%s в кінці URL
  • Спробуйте різні HTTP Verbs, такі як PATCH, DEBUG або помилкові, наприклад FAKE

Перевірте, чи можете завантажувати файли (PUT verb, WebDav)

Якщо ви виявите, що WebDav увімкнено, але у вас недостатньо прав для завантаження файлів в кореневу папку, спробуйте:

  • Brute Force credentials
  • Завантажте файли через WebDav до решти знайдених папок на сайті. Можливо, у вас є дозволи на завантаження файлів в інших папках.

SSL/TLS вразливості

  • Якщо застосунок не примушує використання HTTPS в жодній частині, то він вразливий до MitM
  • Якщо застосунок надсилає чутливі дані (паролі) через HTTP — це серйозна вразливість.

Використовуйте testssl.sh для перевірки вразливостей (у Bug Bounty програмах, ймовірно, такого роду вразливості не будуть прийняті) та використовуйте a2sv to recheck the vulnerabilities:

./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:

Spidering

Запустіть якийсь spider на веб-сайті. Метою spider є знайти якомога більше шляхів у тестованому застосунку. Тому слід використовувати web crawling та зовнішні джерела, щоб знайти якомога більше валідних шляхів.

  • gospider (go): HTML spider, LinkFinder у JS файлах та зовнішні джерела (Archive.org, CommonCrawl.org, VirusTotal.com).
  • hakrawler (go): HML spider, з LinkFider для JS файлів та Archive.org як зовнішнє джерело.
  • dirhunt (python): HTML spider, також вказує “juicy files”.
  • evine (go): Інтерактивний CLI HTML spider. Також шукає в Archive.org
  • meg (go): Цей інструмент не є spider, але може бути корисним. Можна вказати файл з hosts та файл з paths, і meg завантажить кожен path на кожному хості та збереже відповідь.
  • urlgrab (go): HTML spider з можливістю рендерингу JS. Однак виглядає як незадокументований/непідтримуваний — попередньо скомпільована версія стара і поточний код не компілюється.
  • gau (go): HTML spider, який використовує зовнішніх провайдерів (wayback, otx, commoncrawl)
  • ParamSpider: Скрипт, який знайде URL з параметрами та виведе їх.
  • galer (go): HTML spider з можливістю рендерингу JS.
  • LinkFinder (python): HTML spider з можливістю JS beautify, здатний шукати нові шляхи в JS файлах. Варто також глянути на JSScanner, який є wrapper для LinkFinder.
  • goLinkFinder (go): Для витягання endpoints як з HTML, так і з вбудованих javascript файлів. Корисно для bug hunters, red teamers, infosec ninjas.
  • JSParser (python2.7): Скрипт на python 2.7, що використовує Tornado і JSBeautifier для парсингу відносних URL з JavaScript файлів. Корисний для швидкого виявлення AJAX запитів. Схоже, не підтримується.
  • relative-url-extractor (ruby): Беручи файл (HTML), витягне URL з нього за допомогою регулярних виразів, щоб знайти та витягти відносні URL з змащених (minify) файлів.
  • JSFScan (bash, several tools): Збирає цікаву інформацію з JS файлів за допомогою декількох інструментів.
  • subjs (go): Знаходить JS файли.
  • page-fetch (go): Завантажує сторінку в headless browser і виводить усі URL, які були підвантажені для завантаження сторінки.
  • Feroxbuster (rust): Інструмент для виявлення контенту, що поєднує кілька можливостей попередніх інструментів.
  • Javascript Parsing: Burp extension для знаходження шляхів і параметрів у JS файлах.
  • Sourcemapper: Інструмент, який за .js.map URL дістане beautified JS код.
  • xnLinkFinder: Інструмент для виявлення endpoints для заданої цілі.
  • waymore: Виявляє посилання з wayback machine (також завантажуючи відповіді з wayback та шукаючи там більше посилань).
  • HTTPLoot (go): Краулер (навіть із заповненням форм) і також знаходить чутливу інформацію за допомогою специфічних regex-ів.
  • SpiderSuite: Spider Suite — просунутий GUI web security Crawler/Spider для фахівців з кібербезпеки.
  • jsluice (go): Go пакет і command-line tool для витягання URL, шляхів, секретів та іншої цікавої інформації з JavaScript вихідного коду.
  • ParaForge: ParaForge — просте Burp Suite extension для витягання параметрів та endpoints з запитів, щоб створити кастомні wordlist для fuzzing та enumeration.
  • katana (go): Чудовий інструмент для цього.
  • Crawley (go): Виводить кожне посилання, яке вдається знайти.

Brute Force directories and files

Починайте brute-forcing з root каталогу і обов’язково brute-force’ьте всі знайдені директорії, використовуючи цей метод, а також всі директорії, виявлені під час Spidering (ви можете виконувати brute-forcing рекурсивно і додавати на початок використовуваного wordlist імена знайдених директорій).
Інструменти:

  • Dirb / Dirbuster - Встановлені в Kali, старіповільні), але функціональні. Підтримують авто-підписані сертифікати та рекурсивний пошук. Надто повільні порівняно з іншими опціями.
  • Dirsearch (python): Не дозволяє авто-підписані сертифікати, але підтримує рекурсивний пошук.
  • Gobuster (go): Підтримує авто-підписані сертифікати, не має рекурсивного пошуку.
  • Feroxbuster - Швидкий, підтримує рекурсивний пошук.
  • wfuzz wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ
  • ffuf - Швидкий: ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ
  • uro (python): Це не spider, але інструмент, який, беручи список знайдених URL, видаляє “дублікати”.
  • Scavenger: Burp Extension для створення списку директорій з історії Burp для різних сторінок.
  • TrashCompactor: Видаляє URL з дублікованою функціональністю (на основі js імпортів).
  • Chamaleon: Використовує wapalyzer для визначення технологій та підбору відповідних wordlists.

Рекомендовані словники:

Зверніть увагу: щоразу, коли під час brute-forcing або spidering виявляється нова директорія, її потрібно brute-force’ити.

What to check on each file found

  • 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 або backup-gen.
  • Discover new parameters: Ви можете використовувати інструменти як Arjun, parameth, x8 та Param Miner для виявлення прихованих параметрів. Якщо можете, спробуйте шукати приховані параметри в кожному виконуваному веб-файлі.
  • Arjun all default wordlists: https://github.com/s0md3v/Arjun/tree/master/arjun/db
  • Param-miner “params” : https://github.com/PortSwigger/param-miner/blob/master/resources/params
  • Assetnote “parameters_top_1m”: https://wordlists.assetnote.io/
  • nullenc0de “params.txt”: https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773
  • Comments: Перевіряйте коментарі у всіх файлах — там можна знайти credentials або приховану функціональність.
  • Якщо ви граєте в CTF, поширений трюк — ховати інформацію всередині коментарів праворуч від сторінки (використовуючи сотні пробілів, щоб не бачити дані при відкритті коду сторінки в браузері). Інша можливість — використати кілька нових рядків і сховати інформацію в коментарі внизу веб-сторінки.
  • API keys: Якщо ви знайдете будь-який API key, є керівництва/інструменти, які допомагають працювати з API keys різних платформ: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird
  • Google API keys: Якщо знайдете API key, що починається з AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik, можна використати проєкт gmapapiscanner, щоб перевірити, до яких API цей ключ має доступ.
  • S3 Buckets: Під час spidering перевіряйте, чи будь-який subdomain або посилання пов’язане з S3 bucket. У такому випадку перевірте права доступу цього бакета.

Special findings

Під час виконання spidering та brute-forcing ви можете натрапити на цікаві речі, на які варто звернути увагу.

Interesting files

  • Шукайте посилання на інші файли всередині CSS файлів.
  • Якщо ви знайдете .git файл, з нього можна витягти певну інформацію
  • Якщо знайдете .env, там можуть міститися API keys, паролі до БД та інша інформація.
  • Якщо знайдете API endpoints, їх також слід тестувати. Це не зовсім файли, але вони часто “виглядають” як файли.
  • JS files: У секції spidering згадувались інструменти для витягання шляхів з JS файлів. Також корисно моніторити кожен знайдений JS файл, оскільки іноді зміна в ньому може вказувати на появу вразливості в коді. Ви можете використати, наприклад, JSMon.
  • Також варто перевіряти знайдені JS файли за допомогою RetireJS або JSHole на предмет відомих вразливостей.
  • Javascript Deobfuscator and Unpacker: https://lelinhtinh.github.io/de4js/, https://www.dcode.fr/javascript-unobfuscator
  • Javascript Beautifier: http://jsbeautifier.org/, http://jsnice.org/
  • JsFuck deobfuscation (javascript з символами:“[]!+” https://enkhee-osiris.github.io/Decoder-JSFuck/)
  • TrainFuck: +72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.
  • Часто потрібно буде розуміти регулярні вирази, які використовуються. Це стане в нагоді: https://regex101.com/ або https://pythonium.net/regex
  • Також варто моніторити файли, у яких виявлено форми, оскільки зміна параметрів або поява нової форми може вказувати на потенційно вразливу функціональність.

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

403 & 401 Bypasses

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 плагіна “http-ntlm-info.nse”.

HTTP Redirect (CTF)

Можна помістити контент всередину Redirection. Цей контент не буде показаний користувачу (бо браузер виконає редирект), але в ньому може бути схована інформація.

Web Vulnerabilities Checking

Тепер, коли проведено детальну енумерацію веб-застосунку, час перевірити багато потенційних вразливостей. Чекліст можна знайти тут:

Web Vulnerabilities Methodology

Детальніше про web vulns:

Monitor Pages for changes

Ви можете використовувати інструменти, як-от https://github.com/dgtlmoon/changedetection.io, для моніторингу сторінок на зміни, які можуть додати вразливості.

HackTricks Automatic Commands

HackTricks Automatic Commands ```yaml 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}

</details>

> [!TIP]
> Вивчайте та практикуйте AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Вивчайте та практикуйте GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Вивчайте та практикуйте Azure Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Підтримайте HackTricks</summary>
>
> - Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
> - **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
>
> </details>