80,443 - Pentesting Web Methodology
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Отримайте перспективу хакера щодо ваших веб-додатків, мережі та хмари
Знайдіть і повідомте про критичні, експлуатовані вразливості з реальним бізнес-імпактом. Використовуйте наші 20+ спеціальних інструментів для картографування атакуючої поверхні, знаходження проблем безпеки, які дозволяють вам підвищити привілеї, і використовуйте автоматизовані експлойти для збору важливих доказів, перетворюючи вашу важку працю на переконливі звіти.
Веб-сервіс є найпоширенішим і найширшим сервісом, і існує багато різних типів вразливостей.
Порт за замовчуванням: 80 (HTTP), 443(HTTPS)
У цій методології ми будемо припускати, що ви будете атакувати домен (або піддомен) і тільки його. Тому ви повинні застосовувати цю методологію до кожного виявленого домену, піддомену або IP з невизначеним веб-сервером у межах обсягу.
Перевірте, чи є відомі вразливості для версії сервера, що працює. HTTP заголовки та куки відповіді можуть бути дуже корисними для ідентифікації технологій та/або версії, що використовуються. Сканування Nmap може ідентифікувати версію сервера, але також можуть бути корисні інструменти whatweb, webtech або https://builtwith.com/:
Search for вразливості веб-додатку версії
Декілька трюків для пошуку вразливостей у різних відомих технологіях:
Зверніть увагу, що один і той же домен може використовувати різні технології на різних портах, папках та піддоменах. Якщо веб-додаток використовує будь-яку відому технологію/платформу, зазначену раніше, або будь-яку іншу, не забудьте пошукати в Інтернеті нові трюки (і дайте мені знати!).
Якщо вихідний код додатку доступний на github, окрім виконання вашого власного тесту White box додатку, є деяка інформація, яка може бути корисною для поточного Black-Box тестування:
Чи є Change-log або Readme або Version файл або щось з інформацією про версію, доступною через веб?
Як і де зберігаються облікові дані? Чи є якийсь (доступний?) файл з обліковими даними (іменами користувачів або паролями)?
Чи є паролі у звичайному тексті, зашифровані або який алгоритм хешування використовується?
Чи використовується якийсь майстер-ключ для шифрування чогось? Який алгоритм використовується?
Чи можете ви доступитися до будь-яких з цих файлів, експлуатуючи якусь вразливість?
Чи є якась цікава інформація в github (вирішені та не вирішені) проблеми? Або в історії комітів (можливо, якийсь пароль, введений у старому коміті)?
Якщо використовується 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
Якщо ви виявили, що WebDav увімкнено, але у вас недостатньо прав для завантаження файлів у кореневу папку, спробуйте:
Брутфорсити облікові дані
Завантажити файли через WebDav у інші знайдені папки на веб-сторінці. У вас можуть бути права на завантаження файлів в інших папках.
Якщо додаток не примушує користувача використовувати HTTPS в жодній частині, то він вразливий до MitM
Якщо додаток надсилає чутливі дані (паролі) за допомогою HTTP. Тоді це висока вразливість.
Використовуйте testssl.sh для перевірки вразливостей (в програмах Bug Bounty, ймовірно, такі вразливості не будуть прийняті) та використовуйте a2sv для повторної перевірки вразливостей:
Information about SSL/TLS vulnerabilities:
Запустіть якийсь 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-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 для виявлення використовуваних технологій та вибору списків слів для використання.
Рекомендовані словники:
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
Зверніть увагу, що щоразу, коли під час brute-forcing або spidering виявляється новий каталог, його слід brute-force.
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
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: Під час spidering перевірте, чи є якийсь субдомен або будь-яке посилання, пов'язане з якимось S3 bucket. У такому випадку, перевірте дозволи на bucket.
Під час виконання spidering та brute-forcing ви можете знайти цікаві речі, на які вам слід звернути увагу.
Цікаві файли
Шукайте посилання на інші файли всередині CSS файлів.
Якщо ви знайдете .env, можна знайти інформацію, таку як API ключі, паролі бази даних та іншу інформацію.
Якщо ви знайдете API кінцеві точки, ви також повинні їх протестувати. Це не файли, але, ймовірно, "виглядатимуть" як вони.
JS файли: У розділі spidering згадувалися кілька інструментів, які можуть витягувати шляхи з JS файлів. Також було б цікаво моніторити кожен знайдений JS файл, оскільки в деяких випадках зміна може вказувати на те, що потенційна вразливість була введена в код. Ви можете використовувати, наприклад, JSMon.
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 Bypasses502 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)
Можливо вставити вміст всередину Redirection. Цей вміст не буде показаний користувачу (оскільки браузер виконає редирекцію), але щось може бути сховане там.
Тепер, коли було виконано всебічну нумерацію веб-додатку, настав час перевірити на багато можливих вразливостей. Ви можете знайти контрольний список тут:
Web Vulnerabilities MethodologyЗнайдіть більше інформації про веб вразливості на:
Ви можете використовувати інструменти, такі як https://github.com/dgtlmoon/changedetection.io, щоб моніторити сторінки на предмет модифікацій, які можуть вставити вразливості.
Отримайте перспективу хакера на ваші веб-додатки, мережу та хмару
Знайдіть та повідомте про критичні, експлуатовані вразливості з реальним бізнес-імпактом. Використовуйте наші 20+ спеціальних інструментів для картографування поверхні атаки, знаходження проблем безпеки, які дозволяють вам підвищити привілеї, та використовуйте автоматизовані експлойти для збору важливих доказів, перетворюючи вашу важку працю на переконливі звіти.
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)