80,443 - Pentesting Web Methodology

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки 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

Керівництво з використання веб-API

pageWeb API Pentesting

Підсумок методології

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

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

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

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

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

Перевірка наявності WAF

Хитрощі веб-технологій

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

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

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

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

  • Чи є Change-log або Readme або файл Version або щось з інформацією про версію, доступне через веб?

  • Як і де зберігаються персональні дані? Чи є які-небудь (доступні?) файли з обліковими даними (іменами користувачів або паролями)?

  • Чи є паролі у чистому тексті, зашифровані або який алгоритм хешування використовується?

  • Чи використовується який-небудь мастер-ключ для шифрування чогось? Який алгоритм використовується?

  • Чи можна отримати доступ до цих файлів, використовуючи якусь вразливість?

  • Чи є якась цікава інформація в github (вирішені та невирішені) проблеми? Або в історії комітів (можливо, якийсь пароль введено в старому коміті)?

pageSource 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 метод, WebDav)

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

  • Перебор облікових даних

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

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

  • Якщо додаток не вимагає використання HTTPS в будь-якій частині, то він вразливий до атаки Man-in-the-Middle (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>

Інформація про уразливості SSL/TLS:

Павук

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

  • gospider (go): HTML павук, LinkFinder у файлах JS та зовнішні джерела (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).

  • hakrawler (go): HTML павук, з LinkFider для файлів JS та Archive.org як зовнішнє джерело.

  • dirhunt (python): HTML павук, також вказує "соковиті файли".

  • evine (go): Інтерактивний CLI HTML павук. Також шукає в Archive.org

  • meg (go): Цей інструмент не є павуком, але може бути корисним. Ви можете просто вказати файл з хостами та файл зі шляхами, і meg витягне кожний шлях на кожному хості та збереже відповідь.

  • urlgrab (go): HTML павук з можливостями рендерингу JS. Однак, виглядає, що він не підтримується, попередня скомпільована версія застаріла, а поточний код не компілюється.

  • gau (go): HTML павук, який використовує зовнішні постачальники (wayback, otx, commoncrawl)

  • ParamSpider: Цей скрипт знайде URL-адреси з параметром та перерахує їх.

  • galer (go): HTML павук з можливостями рендерингу JS.

  • LinkFinder (python): HTML павук, з можливостями красивого відображення 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 отримає вам красивий JS-код

  • xnLinkFinder: Це інструмент, який використовується для виявлення кінцевих точок для заданої цілі.

  • waymore: Відкрийте посилання з машини wayback (також завантажуючи відповіді в машину wayback та шукаючи більше посилань

  • HTTPLoot (go): Пошук (навіть заповнюючи форми) та також пошук чутливої інформації за допомогою конкретних регулярних виразів.

  • SpiderSuite: Spider Suite - це розширений багатофункціональний GUI-павук для кібербезпеки, призначений для професіоналів у галузі кібербезпеки.

  • jsluice (go): Це пакет Go та інструмент командного рядка для вилучення URL-адрес, шляхів, секретів та іншої цікавої інформації з вихідного коду JavaScript.

  • ParaForge: ParaForge - це просте розширення Burp Suite для вилучення параметрів та кінцевих точок з запиту для створення власного словника для фаззінгу та переліку.

Перебір директорій та файлів

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

  • 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): Це не павук, але інструмент, який, знаючи список знайдених URL-адрес, видаляє "дубльовані" URL-адреси.

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

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

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

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

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

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

  • Перевірка пошкоджених посилань: Знаходьте пошкоджені посилання всередині 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: Під час сканування перевірте, чи який-небудь піддомен або будь-яке посилання пов'язане з якимось S3 bucket. У цьому випадку, перевірте дозволи на відро.

Спеціальні відкриття

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

Цікаві файли

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

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

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

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

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

  • Деобфускатор та розпакувальник Javascript: https://lelinhtinh.github.io/de4js/, https://www.dcode.fr/javascript-unobfuscator

  • Красивий код Javascript: http://jsbeautifier.org/, http://jsnice.org/

  • Розшифровка JsFuck (javascript з символами:"[]!+" https://ooze.ninja/javascript/poisonjs/)

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

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

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

403 Заборонено/Базова аутентифікація/401 Неавторизовано (обхід)

page403 & 401 Bypasses

502 Помилка проксі-сервера

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

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

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

HTTP Перенаправлення (CTF)

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

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

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

pageWeb Vulnerabilities Methodology

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

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

Ви можете використовувати інструменти, такі як 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.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 від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated