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

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

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

Web tech tricks

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

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

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

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

  • Чи є Change-log or Readme or Version файл або щось із version info accessible через веб?
  • Як і де зберігаються credentials? Чи є якийсь (доступний?) file з credentials (usernames або passwords)?
  • Чи зберігаються passwords у plain text, encrypted, або який hashing algorithm використовується?
  • Чи використовується якийсь master key для шифрування чогось? Який algorithm використовується?
  • Чи можна access any of these files, експлуатуючи якусь вразливість?
  • Чи є якась цікава інформація в github (вирішені та невирішені) issues? Або в commit history (можливо якийсь password introduced inside an old commit)?

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, не забудьте run a scanner, можливо буде знайдено щось цікаве:

Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: WordPress, Drupal, Joomla, vBulletin сайти на предмет Security issues. (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 і запустили якийсь сканер.

Step-by-step Web Application Discovery

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

Initial checks

Default pages with interesting info:

  • /robots.txt
  • /sitemap.xml
  • /crossdomain.xml
  • /clientaccesspolicy.xml
  • /.well-known/
  • Check also comments in the main and secondary pages.

Forcing errors

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

  • 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)

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

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

SSL/TLS vulnerabilites

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

Use testssl.sh to checks for vulnerabilities (In Bug Bounty programs probably these kind of vulnerabilities won’t be accepted) and use 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 файлах та external sources (Archive.org, CommonCrawl.org, VirusTotal.com).
  • hakrawler (go): HML spider, з LinkFinder для JS файлів та Archive.org як зовнішнє джерело.
  • dirhunt (python): HTML spider, також вказує на “juicy files”.
  • evine (go): Інтерактивний CLI HTML spider. Також шукає в Archive.org
  • meg (go): Цей інструмент не є spider, але може бути корисним. Можна вказати файл з hosts і файл з paths, і meg завантажить кожен path для кожного host і збереже відповіді.
  • urlgrab (go): HTML spider з можливістю рендерингу JS. Однак виглядає як покинуте, попередньо скомпільована версія стара і поточний код не компілюється.
  • gau (go): HTML spider, що використовує external providers (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 для знаходження шляхів і параметрів у JS файлах.
  • BurpJSLinkFinder Enhanced: Burp extension (Jython), який пасивно аналізує JavaScript-відповіді (за MIME type і /js шляхами) для витягування endpoints/links і за бажанням позначає вбудовані секрети з рівнем severity.
  • Sourcemapper: Інструмент, який за URL .js.map дасть вам beatified JS код.
  • xnLinkFinder: Інструмент для виявлення endpoints для заданої цілі.
  • waymore: Виявляє посилання з wayback machine (також завантажуючи відповіді у wayback і шукаючи додаткові посилання).
  • HTTPLoot (go): Проводить краулінг (навіть заповнюючи форми) і також знаходить чутливу інформацію за допомогою специфічних regex.
  • SpiderSuite: Spider Suite — просунутий багатофункціональний GUI веб-сканер/краулер для cybersecurity професіоналів.
  • jsluice (go): Go-пакет і command-line tool для витягування URL, шляхів, секретів та іншої цікавої інформації з JavaScript-коду.
  • ParaForge: ParaForge — просте Burp Suite extension для витягування параметрів і endpoints з request для створення кастомних wordlist для фуззингу та енумерації.
  • katana (go): Відмінний інструмент для цього.
  • Crawley (go): Виводить кожне посилання, яке вдається знайти.

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

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

  • Dirb / Dirbuster - Включені в Kali, старіповільні) але функціональні. Дозволяють auto-signed certificates та recursive search. Занадто повільні порівняно з іншими опціями.
  • Dirsearch (python): Не дозволяє auto-signed certificates, але підтримує recursive search.
  • Gobuster (go): Дозволяє auto-signed certificates, він не має recursive search.
  • 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 видаляє “дублікати”.
  • Scavenger: Burp Extension для створення списку директорій з burp history сторінок.
  • TrashCompactor: Видаляє URL з дубльованою функціональністю (на основі js імпортів).
  • Chamaleon: Використовує wapalyzer для визначення використовуваних технологій і підбору відповідних wordlists.

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

Зауваження: щойно під час brute-forcing або spidering виявлено нову директорію, її слід негайно Brute-Force-ити.

What to check on each file found

  • Broken link checker: Знаходить broken links в HTML, які можуть бути вразливими до takeover.
  • File Backups: Після того як ви знайдете всі файли, шукайте резервні копії виконуваних файлів (“.php”, “.aspx”…). Поширені варіанти імен для backup: 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, “поширений” трюк — ховати інформацію в коментарях праворуч від сторінки (використовуючи сотні пробілів, щоб не бачити дані при відкритті source у браузері). Інша можливість — використовувати кілька new lines і ховати інформацію в коментарі внизу сторінки.
  • API keys: Якщо ви знайдете будь-який API key, є проекти, які показують як використовувати API keys для різних платформ: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird
  • Google API keys: Якщо знайдете API key, що починається з AIza (наприклад, 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>

## Посилання

- [https://github.com/panchocosil/burp-js-linkfinder-enhanced](https://github.com/panchocosil/burp-js-linkfinder-enhanced)

> [!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>