80,443 - Pentesting Web Methodology
Якщо вас цікавить кар'єра в хакінгу і взламати невзламне - ми шукаємо співробітників! (вимагається вільне володіння польською мовою, як письмово, так і усно).
Основна інформація
Веб-сервіс є найбільш поширеним і обширним сервісом, і існує багато різних типів вразливостей.
Стандартний порт: 80 (HTTP), 443(HTTPS)
Керівництво з використання веб-API
pageWeb API PentestingПідсумок методології
У цій методології ми будемо припускати, що ви збираєтеся атакувати домен (або піддомен) і лише його. Тому вам слід застосовувати цю методологію до кожного виявленого домену, піддомену або IP-адреси з невизначеним веб-сервером в межах обсягу.
Версія сервера (Вразлива?)
Ідентифікація
Перевірте, чи є відомі вразливості для версії сервера, яка працює. HTTP-заголовки та файли cookie відповіді можуть бути дуже корисними для ідентифікації використовуваних технологій та/або версії. Сканування Nmap може ідентифікувати версію сервера, але також можуть бути корисними інструменти whatweb, webtech або https://builtwith.com/:
Пошук вразливостей веб-додатка версії
Перевірка наявності WAF
Хитрощі веб-технологій
Деякі хитрощі для пошуку вразливостей в різних відомих технологіях, які використовуються:
Пам'ятайте, що один і той же домен може використовувати різні технології на різних портах, папках та піддоменах. Якщо веб-додаток використовує будь-яку відому технологію/платформу, перераховану раніше або будь-яку іншу, не забудьте шукати в Інтернеті нові хитрощі (і дайте мені знати!).
Перегляд вихідного коду
Якщо вихідний код додатка доступний в github, крім того, що ви виконуєте тестування White box додатка, є деяка інформація, яка може бути корисною для поточного тестування Black-Box:
Чи є Change-log або Readme або файл Version або щось з інформацією про версію, доступне через веб?
Як і де зберігаються персональні дані? Чи є які-небудь (доступні?) файли з обліковими даними (іменами користувачів або паролями)?
Чи є паролі у чистому тексті, зашифровані або який алгоритм хешування використовується?
Чи використовується який-небудь мастер-ключ для шифрування чогось? Який алгоритм використовується?
Чи можна отримати доступ до цих файлів, використовуючи якусь вразливість?
Чи є якась цікава інформація в github (вирішені та невирішені) проблеми? Або в історії комітів (можливо, якийсь пароль введено в старому коміті)?
Автоматичні сканери
Автоматичні сканери загального призначення
Сканери 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
На цьому етапі вам вже слід мати деяку інформацію про веб-сервер, який використовує клієнт (якщо надано будь-які дані), а також деякі хитрощі, які варто мати на увазі під час тестування. Якщо ви пощастило, ви навіть знайшли 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 для повторної перевірки вразливостей:
Інформація про уразливості 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 для виявлення використаних технологій та вибору словників для використання.
Рекомендовані словники:
raft-large-directories-lowercase.txt
directory-list-2.3-medium.txt
RobotsDisallowed/top10000.txt
/usr/share/wordlists/dirb/common.txt
/usr/share/wordlists/dirb/big.txt
/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
Зауважте, що кожен раз, коли під час перебору або сканування виявляється новий каталог, його слід перебрати.
Що перевіряти у кожному знайденому файлі
Перевірка пошкоджених посилань: Знаходьте пошкоджені посилання всередині 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: Під час сканування перевірте, чи який-небудь піддомен або будь-яке посилання пов'язане з якимось S3 bucket. У цьому випадку, перевірте дозволи на відро.
Спеціальні відкриття
Під час виконання сканування та перебору ви можете знайти цікаві речі, на які варто звернути увагу.
Цікаві файли
Шукайте посилання на інші файли всередині файлів CSS.
Якщо ви знаходите .env, там можна знайти інформацію, таку як ключі API, паролі до баз даних та іншу інформацію.
Якщо ви знаходите API-точки, ви також повинні їх перевірити. Це не файли, але вони, ймовірно, будуть "схожі" на них.
JS файли: У розділі про сканування було згадано кілька інструментів, які можуть витягнути шлях з JS файлів. Також буде цікаво моніторити кожен знайдений JS файл, оскільки у деяких випадках зміна може вказувати на можливу вразливість, внесену в код. Наприклад, ви можете використовувати JSMon.
Деобфускатор та розпакувальник 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 Bypasses502 Помилка проксі-сервера
Якщо будь-яка сторінка відповідає таким кодом, це, ймовірно, погано налаштований проксі-сервер. Якщо ви надсилаєте запит 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
Last updated