80,443 - Pentesting веб-методологія

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 з невизначеним веб-сервером в межах області.

  • Почніть з виявлення технологій, які використовує веб-сервер. Шукайте трюки, які варто врахувати під час решти тесту, якщо вам вдасться ідентифікувати tech.
  • Чи існують якісь відомі вразливості для версії цієї технології?
  • Використовується якась well known tech? Чи є якісь корисні трюки для отримання додаткової інформації?
  • Чи є якісь specialised scanner для запуску (наприклад wpscan)?
  • Запустіть general purposes scanners. Ви ніколи не знаєте, чи знайдуть вони щось або якусь цікаву інформацію.
  • Почніть з initial checks: robots, sitemap, 404 error та SSL/TLS scan (якщо HTTPS).
  • Почніть spidering веб-сторінки: настав час знайти всі можливі файли, папки та параметри, що використовуються. Також перевірте на наявність special findings.
  • Зверніть увагу, що щоразу, коли під час brute-forcing або spidering виявляється нова директорія, її слід spidered.
  • Directory Brute-Forcing: Спробуйте brute force усі виявлені папки в пошуках нових файлів та директорій.
  • Зверніть увагу, що щоразу, коли під час brute-forcing або spidering виявляється нова директорія, її слід Brute-Forced.
  • Backups checking: Перевірте, чи можете ви знайти backups виявлених файлів, додаючи поширені розширення резервних копій.
  • Brute-Force parameters: Спробуйте знайти приховані параметри.
  • Як тільки ви виявите всі можливі endpoints, що приймають user input, перевірте їх на всі види пов’язаних вразливостей.
  • 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

Шукайте для vulnerabilities of the web application version

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

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

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

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

Перегляд вихідного коду

Якщо вихідний код застосунку доступний на 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 використовується?
  • Чи можете ви отримати доступ до будь-якого з цих файлів, експлуатуючи якусь вразливість?
  • Чи є якась цікава інформація в github (вирішені та невирішені) issues? Або в commit history (можливо, якийсь password було додано в старому коміті)?

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 або (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)
  • Add “[]”, “]]”, and “[[” in cookie values and parameter values to create errors
  • Generate error by giving input as /~randomthing/%s at the end of URL
  • Try different HTTP Verbs like PATCH, DEBUG or wrong like FAKE

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

If you find that WebDav is enabled but you don’t have enough permissions for uploading files in the root folder try to:

  • Brute Force credentials
  • Завантажуйте файли via WebDav to the rest of found folders inside the web page. You may have permissions to upload files in other folders.

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

  • If the application isn’t forcing the user of HTTPS in any part, then it’s vulnerable to MitM
  • If the application is sending sensitive data (passwords) using HTTP. Then it’s a high vulnerability.

Use testssl.sh to checks for vulnerabilities (In Bug Bounty programs probably these kind of vulnerabilities won’t be accepted) and use a2sv for повторної перевірки вразливостей:

./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).
  • 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 завантажить кожен шлях на кожному хості і збереже відповіді.
  • 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): Для витягання endpoint-ів як з 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: Інструмент для виявлення endpoint-ів для цілі.
  • waymore: Виявляє посилання з wayback machine (також завантажуючи відповіді з wayback і шукаючи більше посилань).
  • HTTPLoot (go): Краулить (навіть заповнюючи форми) і також знаходить чутливу інформацію за допомогою специфічних regex-ів.
  • SpiderSuite: Spider Suite — просунутий багатофункціональний GUI web security Crawler/Spider для фахівців з кібербезпеки.
  • jsluice (go): Go package та command-line tool для витягання URL, шляхів, секретів та іншої цікавої інформації з JavaScript коду.
  • ParaForge: ParaForge — проста Burp Suite extension для витягнення параметрів та endpoint-ів з запитів для створення кастомних wordlist-ів для fuzzing та enumeration.
  • katana (go): Відмінний інструмент для цього.
  • Crawley (go): Друкує кожне посилання, яке вдається знайти.

Brute Force directories and files

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

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

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

Зверніть увагу, що кожного разу, коли під час 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 and 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, є проекти, що допомагають використовувати ключі різних платформ: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird
  • Google API keys: Якщо знайдете API key, що починається з AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik, можна використати проект gmapapiscanner щоб перевірити, до яких API дає доступ ключ.
  • S3 Buckets: Під час spidering дивіться, чи будь-який subdomain або посилання повʼязані з якимось S3 bucket. У такому випадку перевірте permissions бакета.

Special findings

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

Interesting files

  • Шукайте посилання на інші файли всередині CSS файлів.
  • If you find a .git file some information can be extracted
  • Якщо знайдете .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 with chars:“[]!+” 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 plugin_http-ntlm-info.nse_.

HTTP Redirect (CTF)

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

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>