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

Basic Info

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

Default port: 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 Guidance

{{#ref}} web-api-pentesting.md {{#endref}}

Методологія

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

  • Почніть з ідентифікації технологій, що використовуються веб-сервером. Шукайте поради, які слід пам'ятати під час решти тесту, якщо вам вдасться успішно ідентифікувати технологію.
  • Чи є якісь відомі вразливості версії технології?
  • Використовується якась відомо технологія? Якась корисна порада для отримання додаткової інформації?
  • Чи є якийсь спеціалізований сканер для запуску (наприклад, wpscan)?
  • Запустіть сканери загального призначення. Ви ніколи не знаєте, чи знайдуть вони щось цікаве.
  • Розпочніть з початкових перевірок: robots, sitemap, 404 помилка та сканування SSL/TLS (якщо HTTPS).
  • Розпочніть павукоподібне сканування веб-сторінки: час знайти всі можливі файли, папки та параметри, що використовуються. Також перевірте на особливі знахідки.
  • Зверніть увагу, що кожного разу, коли під час брутфорсингу або павукоподібного сканування виявляється новий каталог, його слід просканувати.
  • Брутфорсинг каталогів: спробуйте брутфорсити всі виявлені папки, шукаючи нові файли та каталоги.
  • Зверніть увагу, що кожного разу, коли під час брутфорсингу або павукоподібного сканування виявляється новий каталог, його слід брутфорсити.
  • Перевірка резервних копій: перевірте, чи можете ви знайти резервні копії виявлених файлів, додаючи загальні розширення резервних копій.
  • Брутфорсинг параметрів: спробуйте знайти приховані параметри.
  • Як тільки ви ідентифікували всі можливі кінцеві точки, що приймають введення користувача, перевірте на всі види вразливостей, пов'язаних з цим.
  • Слідуйте цьому контрольному списку

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

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

Перевірте, чи є відомі вразливості для версії сервера, що працює.
HTTP заголовки та куки відповіді можуть бути дуже корисними для ідентифікації технологій та/або версії, що використовуються. Сканування Nmap може ідентифікувати версію сервера, але також можуть бути корисні інструменти whatweb, webtech або 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 вразливості веб-додатку версії

Перевірте, чи є WAF

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

Деякі трюки для пошуку вразливостей у різних відомих технологіях:

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

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

Якщо вихідний код програми доступний на github, окрім виконання вашого власного тесту White box програми, є деяка інформація, яка може бути корисною для поточного Black-Box тестування:

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

{{#ref}} code-review-tools.md {{#endref}}

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

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

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: 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 або (M)oodle
droopscan: Drupal, Joomla, Moodle, Silverstripe, Wordpress

bash
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/
  • Також перевірте коментарі на основних та вторинних сторінках.

Силове викликання помилок

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

  • Доступ до фальшивих сторінок на кшталт /whatever_fake.php (.aspx,.html,.тощо)
  • Додайте "[]", "]]" та "[[" у значення cookie та значення параметрів, щоб створити помилки
  • Генеруйте помилку, надаючи вхідні дані у вигляді /~randomthing/%s в кінці URL
  • Спробуйте різні HTTP методи такі як PATCH, DEBUG або неправильні, як FAKE

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

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

  • Брутфорсити облікові дані
  • Завантажити файли через WebDav у інші знайдені папки на веб-сторінці. У вас можуть бути права на завантаження файлів в інших папках.

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

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

Використовуйте testssl.sh для перевірки вразливостей (в програмах Bug Bounty, ймовірно, такі вразливості не будуть прийняті) і використовуйте 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:

Spidering

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

  • gospider (go): HTML spider, LinkFinder у JS файлах та зовнішні джерела (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
  • hakrawler (go): HML spider, з LinkFinder для JS файлів та Archive.org як зовнішнє джерело.
  • dirhunt (python): HTML spider, також вказує на "соковиті файли".
  • evine (go): Інтерактивний CLI HTML spider. Він також шукає в Archive.org.
  • meg (go): Цей інструмент не є spider'ом, але може бути корисним. Ви можете просто вказати файл з хостами та файл з шляхами, і meg отримає кожен шлях на кожному хості та збере відповідь.
  • urlgrab (go): HTML spider з можливостями рендерингу JS. Однак, виглядає так, що він не підтримується, попередньо скомпільована версія стара, а поточний код не компілюється.
  • gau (go): HTML spider, який використовує зовнішні постачальники (wayback, otx, commoncrawl).
  • ParamSpider: Цей скрипт знайде URL з параметрами та виведе їх.
  • galer (go): HTML spider з можливостями рендерингу JS.
  • LinkFinder (python): HTML spider, з можливостями beautify для JS, здатний шукати нові шляхи в JS файлах. Також варто звернути увагу на JSScanner, який є обгорткою для LinkFinder.
  • goLinkFinder (go): Для витягування кінцевих точок як з HTML джерела, так і з вбудованих javascript файлів. Корисно для шукачів вразливостей, червоних команд, інфосек ніндзя.
  • JSParser (python2.7): Скрипт python 2.7, що використовує Tornado та JSBeautifier для парсингу відносних URL з JavaScript файлів. Корисно для легкого виявлення AJAX запитів. Виглядає так, що не підтримується.
  • relative-url-extractor (ruby): Даний файл (HTML) витягне URL з нього, використовуючи хитрі регулярні вирази для знаходження та витягування відносних URL з непривабливих (мінімізованих) файлів.
  • JSFScan (bash, кілька інструментів): Збирає цікаву інформацію з JS файлів, використовуючи кілька інструментів.
  • subjs (go): Знаходить JS файли.
  • page-fetch (go): Завантажує сторінку в безголовому браузері та виводить всі URL, завантажені для завантаження сторінки.
  • Feroxbuster (rust): Інструмент для виявлення контенту, що поєднує кілька опцій попередніх інструментів.
  • Javascript Parsing: Розширення Burp для знаходження шляхів та параметрів у JS файлах.
  • Sourcemapper: Інструмент, який, отримавши URL .js.map, надасть вам beautified JS код.
  • xnLinkFinder: Цей інструмент використовується для виявлення кінцевих точок для заданої цілі.
  • waymore: Виявляє посилання з wayback machine (також завантажуючи відповіді в wayback та шукаючи більше посилань).
  • HTTPLoot (go): Краулінг (навіть заповнюючи форми) та також знаходить чутливу інформацію, використовуючи специфічні regex.
  • SpiderSuite: Spider Suite - це просунутий багатофункціональний GUI веб-безпековий краулер/spider, розроблений для фахівців з кібербезпеки.
  • jsluice (go): Це пакет Go та інструмент командного рядка для витягування URL, шляхів, секретів та інших цікавих даних з вихідного коду JavaScript.
  • ParaForge: ParaForge - це просте розширення Burp Suite для витягування параметрів та кінцевих точок з запиту для створення користувацького списку слів для фуззингу та перерахунку.
  • katana (go): Чудовий інструмент для цього.
  • Crawley (go): Друкує кожне посилання, яке може знайти.

Brute Force директорій та файлів

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

  • 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, видалить "дубльовані" URL.
  • Scavenger: Розширення Burp для створення списку директорій з історії burp різних сторінок.
  • TrashCompactor: Видаляє URL з дублікатами функціональностей (на основі js імпортів).
  • Chamaleon: Використовує wapalyzer для виявлення використовуваних технологій та вибору списків слів для використання.

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

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

Що перевірити в кожному знайденому файлі

  • 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 або backup-gen.
  • Виявлення нових параметрів: Ви можете використовувати інструменти, такі як Arjun, parameth, x8 та Param Miner для виявлення прихованих параметрів. Якщо зможете, спробуйте шукати приховані параметри в кожному виконуваному веб-файлі.
  • Arjun всі стандартні списки слів: 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
  • Коментарі: Перевірте коментарі всіх файлів, ви можете знайти облікові дані або приховану функціональність.
  • Якщо ви граєте в CTF, "звичайний" трюк - це сховати інформацію всередині коментарів праворуч від сторінки (використовуючи сотні пробілів, щоб ви не бачили дані, якщо відкриєте вихідний код у браузері). Інша можливість - використовувати кілька нових рядків та сховати інформацію в коментарі в нижній частині веб-сторінки.
  • API ключі: Якщо ви знайдете будь-який API ключ, є посібник, який вказує, як використовувати API ключі різних платформ: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird
  • Google API ключі: Якщо ви знайдете будь-який API ключ, що виглядає як AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik, ви можете використовувати проект gmapapiscanner, щоб перевірити, до яких API ключ може отримати доступ.
  • S3 Buckets: Під час spidering перевірте, чи є якийсь субдомен або будь-яке посилання, пов'язане з якимось S3 bucket. У такому випадку, перевірте дозволи на bucket.

Спеціальні знахідки

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

Цікаві файли

  • Шукайте посилання на інші файли всередині CSS файлів.
  • Якщо ви знайдете файл .git, можна витягнути деяку інформацію
  • Якщо ви знайдете .env, можна знайти інформацію, таку як API ключі, паролі бази даних та іншу інформацію.
  • Якщо ви знайдете API кінцеві точки, ви також повинні їх протестувати. Це не файли, але, ймовірно, "виглядатимуть" як вони.
  • JS файли: У розділі spidering згадувалися кілька інструментів, які можуть витягувати шляхи з JS файлів. Також було б цікаво моніторити кожен знайдений JS файл, оскільки в деяких випадках зміна може вказувати на те, що потенційна вразливість була введена в код. Ви можете використовувати, наприклад, JSMon.
  • Вам також слід перевірити виявлені JS файли за допомогою RetireJS або JSHole, щоб дізнатися, чи є вони вразливими.
  • Javascript Deobfuscator і 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 (обхід)

{{#ref}} 403-and-401-bypasses.md {{#endref}}

502 Proxy Error

Якщо будь-яка сторінка відповідає з цим кодом, це, ймовірно, погано налаштований проксі. Якщо ви надішлете HTTP запит, наприклад: GET https://google.com HTTP/1.1 (з заголовком хоста та іншими загальними заголовками), проксі спробує доступитися до google.com і ви знайдете SSRF.

NTLM Authentication - Розкриття інформації

Якщо працюючий сервер запитує аутентифікацію, це Windows або ви знаходите вхід, що запитує ваші облікові дані (і запитує ім'я домену), ви можете спровокувати розкриття інформації.
Надішліть заголовок: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” і через те, як працює NTLM аутентифікація, сервер відповість внутрішньою інформацією (версія IIS, версія Windows...) у заголовку "WWW-Authenticate".
Ви можете автоматизувати це, використовуючи плагін nmap "http-ntlm-info.nse".

HTTP Redirect (CTF)

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

Перевірка веб-вразливостей

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

{{#ref}} ../../pentesting-web/web-vulnerabilities-methodology.md {{#endref}}

Знайдіть більше інформації про веб-вразливості на:

Моніторинг сторінок на зміни

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

HackTricks Автоматичні команди

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}

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