80,443 - Pentesting Web Methodology

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

If you are interested in hacking career and hack the unhackable - we are hiring! (вимагається вільне володіння польською мовою в письмовій та усній формі).

Basic Info

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

Порт за замовчуванням: 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 Guidance

Web API Pentesting

Методологія

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

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

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

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

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 (вирішені та не вирішені) проблеми? Або в історії комітів (можливо, якийсь пароль, введений у старому коміті)?

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/

  • Також перевірте коментарі на основних та вторинних сторінках.

Примус помилок

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

  • Доступ до фальшивих сторінок на кшталт /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 для повторної перевірки вразливостей:

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

Information about SSL/TLS vulnerabilities:

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: Інструмент, який, given the .js.map URL, отримає вам 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 directories and files

Почніть 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, а інструмент, який, given the list of found URLs, видалить "дубльовані" URL.

  • Scavenger: Розширення Burp для створення списку каталогів з історії burp різних сторінок.

  • TrashCompactor: Видаляє URL з дублікатами функціональностей (на основі js імпортів).

  • Chamaleon: Використовує wapalyzer для виявлення використовуваних технологій та вибору списків слів для використання.

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

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

What to check on each file found

  • 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

  • Assetnote “parameters_top_1m”: https://wordlists.assetnote.io/

  • Коментарі: Перевірте коментарі всіх файлів, ви можете знайти облікові дані або приховану функціональність.

  • Якщо ви граєте в 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.

Special findings

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

Цікаві файли

  • Шукайте посилання на інші файли всередині CSS файлів.

  • Якщо ви знайдете .env, можна знайти інформацію, таку як API ключі, паролі бази даних та іншу інформацію.

  • Якщо ви знайдете API кінцеві точки, ви також повинні їх протестувати. Це не файли, але, ймовірно, "виглядатимуть" як вони.

  • JS файли: У розділі spidering згадувалися кілька інструментів, які можуть витягувати шляхи з JS файлів. Також було б цікаво моніторити кожен знайдений JS файл, оскільки в деяких випадках зміна може вказувати на те, що потенційна вразливість була введена в код. Ви можете використовувати, наприклад, JSMon.

  • Вам також слід перевірити виявлені JS файли за допомогою RetireJS або JSHole, щоб дізнатися, чи є вони вразливими.

  • JsFuck deobfuscation (javascript with chars:"[]!+" https://ooze.ninja/javascript/poisonjs/).

  • TrainFuck: +72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.

  • У кількох випадках вам потрібно буде зрозуміти регулярні вирази, які використовуються, це буде корисно: https://regex101.com/.

  • Ви також можете моніторити файли, в яких були виявлені форми, оскільки зміна параметра або поява нової форми може вказувати на потенційно нову вразливу функціональність.

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

403 & 401 Bypasses

502 Proxy Error

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

NTLM Authentication - Info disclosure

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

HTTP Redirect (CTF)

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

Web Vulnerabilities Checking

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

Web Vulnerabilities Methodology

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

Monitor Pages for changes

Ви можете використовувати інструменти, такі як 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.xyz/pentesting/pentesting-web

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}

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

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

Last updated