Процес аудиту безпеки веб-сайтів є досить тривалим й вимагає терпіння, уважності, спостережливості та зосередженості. Тим не менш, при правильному підході, ця робота є досить ефективною і дозволяє швидко виявити та усунути вразливості. У сьогоднішому мануалі я розкажу як провести аудит безпеки веб-додатків, з яких етапів він складається, які інструменти і які кроки потрібно виконати, з чого почати та багато іншого корисного.
Насамперед необхідно налаштувати середовище для роботи, наприклад:
DAST (Dynamic Application Security Testing) та IAST (Interactive Application Security Testing) — це методи, які найчастіше використовуються для автоматичного виявлення вразливостей веб-додатків.
Кожен з них має свій підхід до аналізу безпеки:
Список популярних IAST/DAST інструментів:
Розгортаємо ці інструменти на віртуалці Kali Linux, запускаємо їх і поки відбуватиметься сканування (а воно буде виконуватись тривалий час), переходимо до ручного тестування.
Напівавтоматичне ручне сканування вимагає від спеціаліста певного багажу знань, досвіду та навичок, оскільки поєднує використання автоматичних інструментів та ручний (manual) аналіз для більш детального та точного виявлення вразливостей.
Для проведення усіх вищеперелічених нижче перевірок ви повинні мати попередній досвід: уміти “копати”, розуміти архітектуру і структуру веб-додатків. Усвідомлювати, де можуть знаходитися ті чи інші потенційні точки входу та вразливості.
Даний етап є частиною OSINT-розвідки. Його завданням є виявлення всіх ресурсів, котрі можуть бути пов’язані з досліджуваним об’єктом й містити додаткові відомості, службові компоненти і т.д. Усі вони можуть бути вразливими до атак. Тому їх необхідно зібрати та вивчити.
Інструменти та сервіси:
Приклади команд:
censys subdomains [hostname]
— пошук субдоменів з допомогою CLI Censys;python3 censys-subdomain-finder.py [hostname]
— виявлення субдоменів з допомогою скрипту на базі API Censys;bbot -t [hostname] -f subdomain-enum
— пошук субдоменів з допомогою утиліти BBOT;subfinder -d [hostname]
— пошук субдоменів з допомогою утиліти Subfinder;subfinder -dL domains.txt -all -recursive -o list_all.txt
— пошук субдоменів із всіх можливих джерел для вказаного списку у файлі;python3 sublist3r.py -d [hostname]
— пошук субдоменів з допомогою утиліти Subl1s3r;amass enum -d evil.com -o evil_amass.txt
— пошук субдоменів з допомогою утиліти OWASP Amass зі збереженням результатів в файл;amass enum -active -d evil.com -o evil.active_scan.txt
— пошук субдоменів з допомогою активного сканування;amass enum -passive -d evil.com -o evil.passive_scan.txt
— пошук субдоменів з допомогою пасивного сканування;assetfinder domain.com
— пошук субдоменів з допомогою утиліти assetfinder;knockpy -d [hostname] --recon --bruteforce
— брутфорс субдоменів з допомогою утиліти knock;python3 cloakquest3r.py [hostname]
— брутфорс субдоменів з допомогою утиліти CloackQuest;gobuster dns -d [hostname] -w ~/wordlists/subdomains.txt
— енумерація субдоменів по словнику з допомогою утиліти gobuster;dnsenum [hostname]
— комплексна перевірка DNS з енумерацією субдоменів;ffuf -w ~/SecLists/Discovery/DNS/subdomains-top1million-5000.txt -H "Host: FUZZ.example.com" -u [hostname]
— брутфорс субдоменів по словнику з допомогою утиліти FFUF;cat * | sort -u | tee subdomains.txt
— збирає вміст усіх файлів у поточному каталозі, сортує їх в алфавітному порядку і видаляє дублікати, зберігаючи в файл;cat domains.txt | while read domain; do host $domain | grep "has address" | awk '{print $1, $4}'; done > ips_domains.txt
— отримати список IP-адрес для списку доменів зі збереженням у текстовий файл;cat all_domains.txt | httpx -ports 80,443,8009,8080,8081,8083,8090,8180,8443,2082,2083,2086,2087,7080 -sc -cl -title -t 100 -fr -nc | tee subdomains_list.txt
— зчитує список доменів або субдоменів із файлу, перевіряє їх доступність на зазначених портах, отримує код статусу, розмір контенту та заголовок сторінки, й зберігає всі результати у файл результату.На виході будуємо зведену таблицю з впорядкованим списком зібраних ресурсів:
Domains list | IP-address |
example.com | XX.XXX.XXX.XXX |
sub2.example.com | XX.XXX.XXX.XXX |
… | … |
Читайте також:
Продовжуємо кібер-розвідку. На цьому етапі виконуємо WEBINT-дослідження – аналізуємо зібрані хости (домени/субдомени) та їх IP-адреси. Аналізуємо дані WHOIS та інших джерел. Завдання – витиснути і відфільтрувати якомога більше корисної інформації про об’єкти.
Cервіси та інструменти:
Приклади команд:
shodan host xx.xx.xxx.xxx
— аналіз хоста в кібер-пошуковій системі Shodan CLI;./shodan_check.sh
— Bash-скрипт для масового аналізу ip-адрес з допомогою Shodan;cat ips.txt | ipinfo | less
— отримати інформацію по списку IP-адрес з допомогою CLI IPinfo;cat ips.txt | ipinfo summarize
— отримати зведену статистику по списку IP-адрес;censys search [hostname]
— аналіз ip-адреси хоста в кібер-пошуковій системі Censys CLI;censys view XX.XX.XXX.XX
— отримання інформації про досліджуваний ресурс з кіберпошукового сервісу Censys;whois XX.XX.XXX.XXX
— отримання інформації про досліджуваний ресурс з реєстру WHOIS: дані про підмережу, реєстратора, власника;./whois_check.sh
— Bash-скрипт для масового аналізу WHOIS доменів і ip-адрес;curl --request GET \ --url https://api.securitytrails.com/v1/history/securitytrails.com/whois \ --header 'APIKEY: ***'
— отримання історії WHOIS з допомогою API SecurityTrails;curl https://freeapi.dnslytics.net/v1/ip2asn/XX.XX.XXX.XXX
— отримання номеру ASN провайдера з допомогою кіберпошукового сервісу DNSlytics;curl --request GET --url https://api.securitytrails.com/v1/ips/nearby/XX.XX.XXX.XXX --header 'APIKEY: ***'
— пошук пов’язаних ресурсів з допомогою API SecurityTrails;ping XX.XX.XXX.XXX
— перевірка чи відповідає, пінгується досліджуваний ресурс;traceroute --resolve-hostnames XX.XX.XXX.XXX
— визначення маршруту та проміжних вузлів через які проходить з’єднання з досліджуваним ресурсом;traceroute -I XX.XX.XXX.XXX
— те саме, тільки використовується ICMP протокол замість UDP.З отриманих результатів формуємо таку таблицю, яка допомагає систематизувати зібрану інформацію та полегшує її аналіз для прийняття подальших рішень:
Domain / Subdomain | IP-address | Hostname | Server / OS | Whois | Open ports | Hosting provider | Country | Other |
example.com | XX.XXX.XXX.XXX | example.default-host1.net | nginx | Власник: ABC Corp Створений: XX.XX.XXXX Дійсний до: XX.XX.XXX | 22, 25, 80, 443, 3306 | AS200000 Hosting Ukraine LTD | UA | Основний домен |
sub2.example.com | XX.XXX.XXX.XXX | static.your-server2.de | apache | Власник: XYZ Ltd Створений: XX.XX.XXXX Дійсний до: XX.XX.XXX | 80, 443, 587, 465, 2083 | AS24940 Hetzner Online GmbH | DE | Тестовий домен |
Читайте також:
На базі всіх добутих ресурсів, визначаємо мережевий переметр досліджуваної інфраструктури, формуємо мережеву карту.
Сканування проводити бажано на віртуальній машині або сторонньому VPS, щоб не розкривати свою локальну систему і щоб її не забанили зовнішні інтернет-системи.
Приклади команд:
sudo masscan -p1-65535 XX.XX.XXX.XXX
— сканування мережевих портів методом SYN Stealth з допомогою інструменту massscan.sudo nmap -sV -O -A -Pn XX.XX.XXX.XXX
— отримання відомостей про мережеві TCP-порти і компоненти з допомогою NMAP.sudo nmap -sU -p 1-124 XX.XXX.XXX.XXX
— отримання відомостей про мерережеві UDP-пороти і компоненти.nmap -sV --script vulners XX.XX.XXX.XXX
— сканування по скрипту NMAP з виявленням вразливостей.nmap -sV -p 3306 --script mysql-audit,mysql-databases,mysql-dump-hashes,mysql-empty-password,mysql-enum,mysql-info,mysql-query,mysql-users,mysql-variables,mysql-vuln-cve2012-2122 XX.XX.XXX.XXX
— деталізований аналіз і пошук вразливостей MySQL з допомогою NMAP.nmap -sV -p 22 --script ssh-auth-methods,ssh-hostkey,ssh-publickey-acceptance,ssh-run,ssh2-enum-algos,sshv1 XXX.XXX.XXX.XXX
— деталізований аналіз і пошук вразливостей SSH з допомогою NMAP.З отриманих результатів формуємо приблизно таку таблицю з впорядкованим набором інформації:
Target | IP Address | OS | Port | Protocol | Services | App / Verisons |
[hostname] | XXX.XX.XX.XX | Ubuntu 20.04 | 21 | TCP | FTP Server | PureFTPd 1.0.48 |
22 | TCP | SSH Server | OpenSSH 8.2 p1 | |||
53 | UDP | DNS Server | Bind 9.16 | |||
80 | TCP | HTTP Server | Nginx 2.16 | |||
111 | TCP | RPC Server | Rpcbind 2 | |||
443 | TCP | HTTPS Server | Nginx 2.16 | |||
… | … | … | … |
Цей етап є логічним продовженням попереднього і включає пасивну та активну розвідку даних DNS-зони (Domain Name System), яка містить прив’язування/направлення на різноманітні мережеві ресурси.
Приклади команд:
dig -x XX.XX.XXX.XXX
— отримати rDNS запис;dig +noall +answer +multiline [hostname] a && dig +noall +answer +multiline [hostname] aaaa && dig +noall +answer +multiline [hostname] mx && dig +noall +answer +multiline [hostname] txt && dig +noall +answer +multiline [hostname] ns && dig +noall +answer +multiline [hostname] soa
— комбінована команда для отримання всіх записів DNS-зони з допомогою інструменту dig;dig axfr @ns.example.com [hostname]
— перевірка повної передачі записів DNS, вразливість Zone Transfer;python3 dnsrecon.py -d [hostname]
— аналіз DNS з допомогою інструменту dnsreacon;curl --request GET \
--url https://api.securitytrails.com/v1/history/[hostname]]/dns/a \
--header 'APIKEY: ***' \
--header 'accept: application/json'
— аналіз історії DNS з допомогою API SecurityTrails;fierce --domain [hostname] --subdomains webmail ftp cpanel whm mail cp --connect
— аналіз підмережі за вказаними ресурсом та його субдоменами з допомогою утиліти fierce;fierce --domain [hostname]
— тест на передачу DNS-зони.cat domains.txt | ./DNSaxfr.sh -r 0
— масова перевірка на передачу DNS-зони з допомогою скрипту DNSaxfr.sh;dnswalk -r -a -d [hostname].
— перевірка DNS;dnsmap [hostname]
— маппінг DNS.З отриманих результатів формуємо приблизно таку таблицю з впорядкованим набором інформації:
[hostname] | ||||||
DNS Record | TTL | Value | IPv4 | IPv6 | ASN | Country |
TXT | 3600 | “v=spf1 include:_spf.mail.hostinger.com ~all” | XX.XX.XXX.XX | XX.XX.XXX.XX | Provider | USA, San Francisco |
MX | 14400 | 10 mx2.example.com | XX.XX.XXX.XX | XX.XX.XXX.XX | Provider | USA, San Francisco |
NS | 86400 | ns2.example.com. | XX.XX.XXX.XX | XX.XX.XXX.XX | Provider | USA, San Francisco |
ns1.example.com. | XX.XX.XXX.XX | XX.XX.XXX.XX | Provider | USA, San Francisco | ||
A | 1218 | XX.XX.XXX.XX | XX.XX.XXX.XX | Provider | USA, San Francisco | |
AAAA | 1137 | XX.XX.XXX.XX | XX.XX.XXX.XX | Provider | USA, San Francisco | |
SOA | ns1.dns-parking.com. dns.hostinger.com. ( 2023101901 ; serial 10000 ; refresh (2 hours 46 minutes 40 seconds) 2400 ; retry (40 minutes) 604800 ; expire (1 week) 600 ; minimum (10 minutes) ) | XX.XX.XXX.XX | XX.XX.XXX.XX | Provider | USA, San Francisco | |
rDNS (PTR) | XXX.XXX.XXX.XX.in-addr.arpa domain name pointer web.example.net. |
Таким чином, на базі результатів Network Perimeter Overview та DNS Discovery ми отримали МЕРЕЖЕВУ КАРТУ (Network Mapping) ІТ-інфраструктури досліджуваного ресурсу. Вона наочно показує всі ресурси і компоненти, включаючи домени і субдомени, IP-адреси, сервери, відкриті порти та сервіси.
Мережева карта допоможе визначити слабкі місця, виявити потенційні вразливості та вектори атак, відстежувати взаємозв’язки між серверами та доменами, а також планувати подальші кроки, залежно від контексту нашого дослідження.
Наступним кроком буде аналіз TLS-шифрування і SSL-сертифікату. TLS (Transport Layer Security) – це криптографічний протокол для забезпечення передачі даних на рівні сервера. SSL (Socket Layer Security) – це протокол, який забезпечує безпечне HTTPS-з’єднання та регулює його на рівні веб-браузера. Обидва протоколи повинні бути актуальними і валідними, щоби унеможливити перехоплення або модифікацію даних.
Сервіси:
Приклади команд:
./testssl.sh XX.XX.XXX.XXX
— тестування SSL/TLS з допомогою утиліти testssl.sh.curl -vvI [hostname]
— аналіз ланцюжка SSL сертифікатів.curl -v --cert-status [hostname]
— вивід інформації про сертифікат у зручному форматі.curl -tlsv1.2 [hostname]
— тест на підтримку TLS 1.2.openssl s_client -connect [hostname]:443 -showcerts
— перевірка TLS/SSL з допомогою openssl.Якщо досліджуваний ресурс містить у своєму DNS запис MX, який направлений на корпоративний поштовий сервер, а серед відкритимх портів досліджуваної інфраструктури доступний порт SMTP (25, 465, 587, 2525), необхідно провести аналіз SMTP-сервера.
SMTP-сервер (Simple Mail Transfer Protocol) відповідає за передачу електронної пошти між серверами. Аудит цього компонента важливий, оскільки вразливості можуть призвести до проблем із конфіденційністю, цілісністю та доступністю електронної пошти.
Сервіси:
Приклади команд:
nslookup -type=MX example.com
— визначення mx-записів для заданого домену;dig mx example.com
— визначення mx-записів домену;dig txt example.com
— перевірка txt-записів домену для виявлення spf, dmarc, dkim;dig mail.example.com aaaa +short
— перевірка AAAA запису в DNS-зоні поштового сервера;sudo nmap -p 25,465,587 mail.example.com
— перевірка доступності портів поштового сервера;openssl s_client -starttls smtp -crlf -connect mail.example.com:25
— перевірка підтримки шифрування для захисту переданих даних;openssl s_client -connect mail.example.com:25 -showcerts
— показати всі сертифікати, які сервер відправляє у відповідь на запит;curl -4 -v https://mail.example.com
— діагностика з’єднання з поштовним сервером з допомогою утиліти curl;smtp-user-enum -U /usr/share/commix/src/txt/usernames.txt -p 587 -t XX.XX.XXX.XXX
— виконує сканування SMTP-сервера для визначення наявності облікових записів користувачів.Перевірка неавторизованого з’єднання та тест на відкритий рілеїнг (Open Relay):
telnet mail.example.com 25 helo localhost ehlo localhost mail from: user1@example.org rcpt to: user2@example.org data Subject: Test Subject Content-Type: text/plain OR Content-Type: text/html Message content or HTML code . quit
Аудит безпеки FTP-сервера (File Transfer Protocol) є важливою частиною загальної перевірки безпеки інформаційної інфраструктури. FTP-сервери використовуються для передачі файлів між клієнтом і сервером, і через свою природу можуть бути вразливими до атак, якщо їх належним чином не захищено.
Приклади команд:
nc -nv X.X.X.X 21
— отримання назви і версії програмного забезпечення, яке обслуговує FTP-сервер.nmap -p 21,20,990 example.com
— перевірка доступних портів ftp з допомогою nmap;nmap -sV -p 21 example.com
— перевірка версії ftp;nmap -A -p21 XX.XX.XXX.XXX
— агресивний аналіз ftp;sudo nmap -p 21 --script ftp-anon,ftp-bounce,ftp-brute,ftp-libopie,ftp-proftpd-backdoor,ftp-syst,ftp-vsftpd-backdoor,ftp-vuln-cve2010-4221 XX.XX.XXX.XXX
— перевірка ftp з використанням NSE-скриптів NMAP;ftp XX.XX.XX.XX
— перевірка несанкціонованого з’єднання по ftp (перевірка команд dir, ls, put, get, mget та ін.);hydra -l admin -P /usr/share/wordlists/rockyou.txt XX.XX.XXX.XXX ftp
— перевірка несанкціонованого з’єднання по ftp з застосуванням логінів та паролів по замовчуванню;hydra -t 2 -L user.list -P passwords.list -M targetIPs.list -s 21 ftp
— перевірка стійкості облікових записів FTP;ftp://anonymous:anonymous@XX.XX.XXX.XXX
— перевірка з’єднання по ftp через веб-браузер;wget -m ftp://anonymous:anonymous@X.X.X.X
— завантаження усіх файлів з FTP-сервера.Перевірка вразливості Anonymous FTP Login з Metasploit:
use auxiliary/scanner/ftp/anonymous set RHOSTS file:/home/cyber1/Downloads/ftpanonips.txt run
Енумерація облікових записів з допомогою Metasploit:
msf > use auxiliary/scanner/ftp/ftp_login set RHOSTS x.x.x.x set RPORT 21 set PASS_FILE /usr/share/wordlists/passwords.txt set USER_FILE /usr/share/wordlists/users.txt run
Команди постексплуатації FTP:
Аналіз SQL-сервера є важливою частиною перевірки безпеки бази даних і системи в цілому. SQL-сервери, такі як MySQL, PostgreSQL та інші, часто зберігають чутливу інформацію і можуть стати мішенню для атак, якщо їх не захищено належним чином.
Приклади команд:
mysql -p 3306 -h XX.XXX.XX.XXX -u root
— перевірка віддаленого з’єднання з MySQL-сервером для користувача root;telnet XX.XX.XX.XX 3306
— перевірка з’єднання з SQL-сервером;nmap -p 1433,3306,5432,1521 x.x.x.x
— перевірка доступних портів SQL;sudo nmap -p 3306 --script mysql-audit,mysql-brute,mysql-databases,mysql-dump-hashes,mysql-empty-password,mysql-enum,mysql-info,mysql-query,mysql-users,mysql-variables,mysql-vuln-cve2012-2122 x.x.x.x
— перевірка sql по NSE-скриптам;nmap --script=mysql-empty-password -p 3306 x.x.x.x
nmap --script=mysql-databases --script-args="mysqluser='root',mysqlpass=''" -p 3306 x.x.x.x
hydra -L /path/to/usernames.txt -P /path/to/passwords.txt x.x.x.x sql
— перевірка стійкості до атак методом перебору.Перевірки з допомогою Metasploit:
use auxiliary/scanner/mysql/mysql_login run mysql://x.x.x.x threads=50 user_file=/users.txt pass_file=/passwords.txt use auxiliary/scanner/mysql/mysql_version set RHOSTS x.x.x.x exploit use auxiliary/scanner/mysql/mysql_login set PASS_FILE /tmp/passes.txt set RHOSTS x.x.x.x set USER_FILE /tmp/users.txt Run
auxiliary/admin/mysql/mysql_enum auxiliary/admin/mysql/mysql_sql auxiliary/scanner/mysql/mysql_file_enum auxiliary/scanner/mysql/mysql_hashdump auxiliary/scanner/mysql/mysql_login auxiliary/scanner/mysql/mysql_schemadump auxiliary/scanner/mysql/mysql_version auxiliary/scanner/mysql/mysql_writable_dirs
Читайте також:
SSH (Secure Shell) — це протокол, який дозволяє безпечно підключатися до віддалених серверів і взаємодіяти з файловою системою. Аналіз SSH-сервера допомагає забезпечити його безпеку, виявити потенційні вразливості і налаштувати його відповідно до найкращих практик безпеки.
Приклади команд:
ssh -v x.x.x.x
— перевірка віддаленого з’єднання з SSH-сервером з повним виводом подій;nc -vn x.x.x.x 22
— отримання назви і версії програмного забезпечення ssh (banner grabbing);sudo nmap -p 22 --script ssh-auth-methods,ssh-brute,ssh-hostkey,ssh-vuln-cve2014-0224 x.x.x.x
— перевірка SSH на вразливості з допомогою скриптів NMAP;hydra -l username -P passwords.txt x.x.x.x -t 4 ssh
— перевірка стійкості SSH до брутфорсу облікових записів../ssh-audit.py x.x.x.x
— аудит SSH з допомогою утиліти ssh-audit;HTTP-заголовки – це службова, технічна і описова інформація, яка передається на рівні “клієнт-сервер” при доступі до сайту. HTTP-заголовки діють як своєрідні інструкції, які вказують серверу як саме потрібно відрендерити веб-сторінку. Деякі заголовки виконують роль безпеки (HTTP Security Headers) і захищають ресурс від атак, тому їх відсутність різко підвищує кількість ризиків та вразливостей.
Сервіси:
Приклади команд:
curl -I [hostname]
— аналіз HTTP-заголовків з допомогою утиліти curl;./nikto.pl -h [hostname]
— аудит з допомогою утиліти Nikto;whatweb -v -a3 [hostname]
— аудит з допомогою утиліти WhatWeb.Аналіз технологій є важливим етапом аудиту веб-додатків, спрямованим на оцінку поточного стану і якості технологій, скриптів, віджетів, фреймворків та інших компонентів, що використовуються на стороні досліджуваного ресурсу.
Застарілі неоновлені компоненти можуть містити відомі вразливості й становити серйозну загрозу безпеці. Знаючи версії ти чи інших бібліотек можна також проаналізувати їх будову і написати експлойт.
Інструменти, додатки і сервіси:
Приклади команд:
wpscan --url [hostname] --enumerate u,ap,vt,tt,cb,dbe,m --api-token *** --random-user-agent
— сканування сайту на WordPress з допомогою утиліти WPScan;npx hint [hostname]
— сканування вихідного коду сайту і пошук вразливих технологій з допомогою сканера WebHint.io.Результати вносимо у таблицю, наприклад:
Технологія | Версія | Опис | Вразливості |
jQuery | 3.5.1 | JavaScript-бібліотека | CVE-2020-11022 |
WordPress | 4.6.11 | CMS-система | CVE-2021-29447 |
Lodash | 4.17.21 | JavaScript-бібліотека | CVE-2021-23337 |
Bootstrap | 5.1.0 | CSS-фреймворк | – / – |
… | … | … | … |
Цей етап включає обхід структури досліджуваного ресурсу, виявлення прихованих папок і файлів, адміністративних частин, парсинг/cкрапінг/фаззінг URL-адрес тощо.
Інструменти і сервіси:
Приклади команд:
cat domains.txt | waybackurls | tee wbk_urls.txt
— пошук URL для списку доменів з веб-архіву Wayback Machine зі збереженням у файл з допомогою утиліти waybackurls;cat domains.txt | katana -d 5 -ps -pss waybackarchive,commoncrawl,alienvault | tee ktna_urls.txt
— пошук URL для списку доменів по різним джерелам з допомогою утиліти Katana;cat domains.txt | gau > gau_urls.txt
— пошук URL для списку доменів з допомогою утиліти Gau;cat domains.txt | hakrawler -d 5 -s | tee hkrwlr_url.txt
— повний пошук URL, включаючи скрипти, для списку доменів з допомогою утиліти hakrawler;python3 photon.py -u "[hostname]"
— парсинг структури заданного ресурсу утилітою photon;python3 pidrila.py -u [hostname] -l ~/dir
— сканування структури сайту утилітою pidrila, шукає файли, каталоги які можуть містити важливу інформацію;webpalm -u [hostname] -l1 -x 404,401,403
— парсинг структури сайту з допомогою утиліти webpalm;wget -qO- [hostname] | tr \" \\n | grep https\*://
— вивід усіх URL-адрес зі сторінки на екран в консоль;gospider -q -s "https://example.com" -c 10 -d 5 -tee gospider_urls.txt
— пошук різноманітних URL-адрес з параметрами, включаючи адміністративні, по заданому домену з максимальною глибиною парсингу зі збереженням у файл з допомогою утиліти gospider;gospider -s "https://example.com" -c 10 -d 5 --blacklist ".(jpg|jpeg|gif|css|tif|tiff|png|ttf|woff|woff2|ico|pdf|svg|txt)" --other-source | gospider_urls.txt
— аналогічна команда тільки з фільтрацією вказаних розширень і використанням додаткових джерел;dirb [hostname]
— сканування директорій з допомогою утиліти dirb;dirhunt [hostname]
— сканування директорій з допомогою утиліти dirhunt;gobuster dir -u [hostname] -w /usr/share/dirbuster/wordlists/vulners.txt -e -s 200, 301, 302
— сканування директорій утилітою gobuster з показом результатів, що відповідають зазначеним статусам сервера;python3 dirsearch.py -e php -u [hostname] --exclude-status 403,401
— сканування на наявність файлів php утилітою dirsearch з показом усіх результатів, окрім відповідей 403 і 401;python3 dirsearch.py -l targets.txt -e php,asp,aspx,jsp,py,txt,conf,config,bak,backup,swp,old,db,sqlasp,aspx,aspx~,asp~,py,py~,rb,rb~,php,php~,bak,bkp,cache,cgi,conf,csv,html,inc,jar,js,json,jsp,jsp~,lock,log,rar,old,sql,sql.gz,sql.zip,sql.tar.gz,sql~,swp,swp~,tar,tar.bz2,tar.gz,txt,wadl,zip -i 200 --full-url
— комплексне сканування хостів зі списку на наявність вказаних розширень;ffuf -u [hostname]/FUZZ -w ~/seclists/Discovery/Web-Content/raft-medium-words-lowercase.txt -e .php,.html,.txt -mc 200
— пошук файлів утилітою ffuf по словнику з вказаними розширеннями та кодом відповіді сервера 200;ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -e .log,.json,.php,.xml,.md,.zip -mc 200
— пошук файлів заданого формату;cat * | gf urls | tee gf_urls.txt
— зчитує вміст усіх файлів у поточному каталозі, шукає в них URL-адреси і зберігає в результуючий файл;python2 cangibrina.py -u example.com --ext php
— пошук адмін-панелей з допомогою утиліти cangibrina;php inurlbr.php --target 'https://example.com' -o fuzz.txt -s php_result.txt -t 2 -a 'phpMyAdmin 2.11.4'
— фуззинг адмін-панелі phpmyadmin з допомогою утиліти inurlbr;php inurlbr.php --dork 'site:*.example.com.ua' -s 'urls-extracted-robots.txt' -q 1 --robots
— парсинг url, які містяться в robots.txt для списку веб-сторінок за вказаним дорком і пошуковою системою (q);sort -u urls.txt -o sorted_urls.txt
— сортування url, видалення усіх дублікатів зі збереженням очищеного списку в файл.Після збору інформації про доступні сторінки та файли, дані структуруються, класифікуються за типами контенту, рівнями доступу, важливістю та ієрархією. В результаті ми отримуємо ієрархічну мапу сайту:
Ця карта відображає взаємозв’язки між сторінками, дозволяє ідентифікувати важливі вузли та їхні залежності, що забезпечує більш ефективний аналіз і подальші дії щодо сайту.
Усі зібрані URL-адреси відправляємо на аналіз. Некоректно оброблені або незахищені параметри URL можуть стати точками компрометації і створити вразливості, які призведуть до таких атак як:
Пошук вразливих точок URL є важливим етапом аудиту безпеки, адже можуть вказати на явні проблеми конфіденційності.
Сервіси / інструменти:
Приклади команд:
python3 parampp.py -u "https://example.com/login"
— пошук вразливих параметрів для вказаної URL-адреси з допомогою утиліти ParamPamPam;python3 xsstrike.py -u "https://example.com" --crawl
— краулінг веб-сайту з допомогою утиліти XSStrike;python3 xsstrike.py -u "https://example.com/?p=" --fuzzer
— фаазінг (перебір) різноманітних потенційно небезпечних параметрів за вказаним URL;python3 xsstrike.py -u "https://example.com/webmail/?color=" --params
— парсинг потенційно небезпечних параметрів;python3 pwnxss.py -u http://vuln.example.com
— пошук вразливих параметрів для вказаної URL-адреси з допомогою утиліти PwnXSS;arjun -u https://api.example.com/endpoint
— виявлення прихованих вразливих URL-параметрів з допомогою утиліти Arjun;cat allurls.txt | gf xss | tee gf_xss.txt
— виконує пошук можливих місць для XSS-уразливостей у списку URL-адрес з допомогою утиліти GF;cat allurls.txt | gf sqli | tee gf_sqli.txt
— виконує пошук можливих місць для SQLi-уразливостей у списку URL-адрес;cat allurls.txt | gf lfi | tee gf_lfi.txt
— виконує пошук можливих місць для LFI-уразливостей у списку URL-адрес;cat allurls.txt | gf rce | tee gf_rce.txt
— виконує пошук можливих місць для RCE-уразливостей у списку URL-адрес;cat allurls.txt | gf ssrf | tee gf_ssrf.txt
— виконує пошук можливих місць для SSRF-уразливостей у списку URL-адрес;cat allurls.txt | gf idor | tee gf_idor.txt
— виконує пошук можливих місць для SSRF-уразливостей у списку URL-адрес;cat allurls.txt | gf interestingparams | tee gf_params.txt
— виконує пошук різноманітних потенційно вразливих параметрів у списку URL-адрес;cat allurls.txt | grep "?" | grep "=" | qsreplace | tee xss_urls2.txt
— виконує пошук URL-адрес з параметрами “=” з допомогою утиліти qsreplace;cat urls.txt | gf xss | sed 's/=.*/=/' | sed 's/URL: //' | tee cleanurls.txt
— пошук url-адрес з параметрами;cat wbk_urls.txt | uro --filter hasparams | tee uro_urls1.txt
— пошук url-адрес з параметрами зі списку і збереження їх у файл з допомогою утиліти uro;cat wbk_urls.txt | uro --filter hasext | tee uro_urls2.txt
— пошук url-адрес з різними розширеннями (напр., php, html, js та ін.);cat wbk_urls.txt | uro --filter vuln | tee uro_urls3.txt
— пошук вразливих url-адрес;cat urls1_xss.txt urls2_xss.txt | qsreplace '"><script>alert('1447')></script>' | airixss 'alert(1447)' | grep -v "Not"
— виконує тестування URL-адрес на вразливість до XSS-ін’єкцій з допомогою утиліти Airixss;dalfox file urls.txt
— перевірка параметрів вразливих до XSS-ін’єкцій для списку URL з допомогою утиліти dalfox;dalfox file urls.txt -b xss.example.com
— перевірка параметрів вразливих до Blind XSS-ін’єкцій для списку URL з допомогою утиліти dalfox та XSS Hunter;dalfox file hosts --mining-dom --deep-domxss --ignore-return -b 'xss.example.com' --follow-redirects --proxy http://127.0.0.1:8080
— пошук XSS-вразливостей утилітою Dalfox з допомогою XSSHunter і проксі Burpsuite;cat ktna_urls.txt | parth --pipe xss
— пошук потенційних XSS-вразливостей по списку url-адрес з допомогою утиліти parth. Доступні також опції: lfi, ssrf, sqli, xss, open_redirect, rce;paramspider -d example.com
— пошук URL-адрес з параметрами з допомогою утиліти paramspider;php inurlbr.php -s xss.txt --dork "inurl:search.php?q= site:example.com" -q 1,6 --exploit-get "<script>alert(1)</script>"
— пошук і експлуатація вразливих до XSS URL-адрес за вказаним дорком з допомогою утиліти inurlbr;echo http://vuln.example.com | waybackurls | gf xss | uro | httpx -silent | qsreplace '"><svg onload=confirm(1)>' | airixss -payload "confirm(1)"
— пошук і експлуатація вразливих до XSS URL-адрес за вказаним дорком з допомогою різних утиліт;python3 payloader.py
— експлуатація вразливих до XSS URL-адрес з допомогою утиліти xss loader;sqlmap -u 'https://vuln.example.com/index.php?id=' --dbs
— аналіз URL-адреси на SQLi вразливості з допомогою утиліти sqlmap;Особливо варто звернути увагу і протестувати наступні типи URL:
Читайте також:
На цьому етапі перевіряється вихідний веб-код сайту: чи валідний він, чи в ньому немає шкідливого коду, чи застосовуються безпечні методи кодування, чи немає витоків конфіденційної інформації у коді і так далі.
Інструменти, додатки, сервіси:
Приклади команд:
npx hint [hostname]
— сканування вихідного коду сайту і пошук вразливих технологій з допомогою сканера WebHint.io.snyk code test vuln.js
— сканування вихідного коду вказаного файлу з допомогою Snyk CLI.Важливо також перевіряти код не тільки з допомогою автоматичних інструментів, а й вручну. Автоматичні інструменти допомагають виявити очевидні помилки та недоліки, такі як синтаксичні помилки, неоптимальний код чи потенційні проблеми безпеки. Однак вони не завжди здатні виявити більш складні проблеми, такі як неправильне використання алгоритмів чи неочевидні баги.
Веб-елементи – це будь-які об’єкти та сутності на веб-сторінці, які формують DOM-структуру (структура документа, тіла сторінки), з якою взаємодіє користувач.
Під час ручної перевірки веб-елементів і аналізу GET/POST запитів можна виявити чимало помилок, слабких місць і точок входу, зокрема логічні помилки обробки даних, неправильне використання API, відсутність CSRF-токенів, численні вразливості до XSS/SQL-ін’єкцій, SSRF (Server Side Request Forgery) та інші аспекти, які можуть впливати на якість і надійність досліджуваного ресурсу.
Ось список веб-елементів на які я, зазвичай, звертаю увагу:
Деякі поради і рекомендації:
Провівши сканування і виявивши вразливості, необхідно провести їх ідентифікацію та оцінку, що є частиною Менеджменту вразливостей (Vulnerability Management / Risk Assessment).
Тут допоможуть CVE (Common Vulnerabilities and Exposures) та CWE (Common Weakness Enumeration) системи – це бази даних, які систематизують інформацію про різні вразливості та класифікують їх.
Кожній вразливості в системах CVE/CWE призначається ідентифікатор. По суті, це стандартизовані словники загальновідомих вразливостей і ризиків. Вони наповнюються і підтримуються світовою спільнотою з кібербезпеи. Відрізняються вони один від одного лише тим, що у базу CVE потрапляють конкретні вразливості, а в CWE – категорії.
Ось список популярних CVE/CWE баз даних:
Окрім того, існують бази даних експлойтів, які можуть знадобитися для того, щоб оцінити критичність, зрозуміти як ті чи інші вразливості можуть бути проексплуатовані:
Важливим інструментом є Common Vulnerability Scoring System (CVSS) – це відкрита стандартизована система оцінки вразливостей, яка використовує список CVE та інші джерела для отримання числової оцінки критичності вразливості. Система була розроблена об’єднанням груп реагування на інциденти та безпеку FIRST (Forum of Incident Response and Security Teams) у співпраці з NIST. Автори: Peter Mell, Karen Scarfone, Sasha Romanosky.
CVSS допомагає спеціалістам з кібербезпеки пріоритезувати ризики і підготувати рішення щодо їх усунення.
Калькулятор CVSS існує в різних версіях: CVSS 1.0 (2005), CVSS 2.0 (2007), CVSS 3.0 (2015), CVSS 4.0 (2023).
CVSS оцінює вразливість по 10-бальній шкалі:
Ступінь критичності | Бал CVSS | Опис |
Critical | 9.0 – 10 | Критичний рівень вразливості, який однозначно призводить до несанкціонованого доступу, зламу або втрати даних. Потребує негайного реагування. |
High | 7.0 – 8.9 | Високий рівень вразливості, що може призвести до несанкціонованого доступу, зламу, втрати або компрометації даних. Потребує негайного реагування. |
Medium | 4.0 – 6.9 | Cередній рівень вразливості, що за певних обставин та дій може призвести до несанкціонованого доступу, зламу, втрати або компрометації даних. Потребує реагування в найкоротші терміни. |
Low | 1.0 – 3.9 | Низький рівень вразливості, що у поєднанні з іншими вразливостями може являти потенційний ризик, що призводить до несанкціонованого доступу, зламу або втрати даних. Потребує своєчасного, планового реагування. |
Info | 0.1 – 0.9 | Інформаційний рівень вразливості, що являє собою додаткові відомості, які можуть сприяти подальшій розвідці та плануванню зловмисних атак на ресурс. Потребує ретельного аналізу. |
CVSS версії 3.1 складається з таких метрик:
В результаті проведення вищеперелічених дій по кожній знайденій вразливості у звіті аудитора повинна бути присутня настуна таблиця:
НАЗВА І ПОРЯДКОВИЙ НОМЕР ВРАЗЛИВОСТІ | |||
Класифікація: | HIGH | CVE-ID, CWE-ID | CVSS Score: x.x |
Шлях: | [hostname/path] – домен або ресурс на якому знайдена вразливість | ||
Опис / Технічні деталі: | Proof of Concept (POC): Детальний опис кроків, які приводять до вразливості. Вказати команди, які були використані, посилання, текст HTTP-запитів та інші технічні деталі. | ||
Підтвердження (Evidence): | Скріншоти і відео, які засвідчують факт наявності вразливості. | ||
Вплив (Impact): | Опис впливу: Що може зробити зловмисник з допомогою цієї вразливості? До якої інформації він може отримати доступ? Як це впливає на цільову систему? До яких наслідків може призвести експлуатація вразливості? | ||
Рекомендації: | Список рекомендацій як можна усунути вразливість. | ||
Джерела: | Список джерел, посилання на документації і матеріали про знайдену вразливість. |
Ця структура є умовною, але вона дозволяє зібрати усі необхідні дані для кожної вразливості, забезпечуючи чітке розуміння проблеми та шляхів її вирішення.
Вона є надзвичайно корисною для власника досліджуваного ресурсу з кількох причин:
👉 Детальніше про підготовку звіту та його приклади дивіться тут.
ПОДІЛИТИСЬ У СОЦМЕРЕЖАХ:
Заповніть, будь ласка, форму й наш спеціаліст зв’яжеться з Вами та надасть безкоштовну консультацію!
Вкажіть, будь ласка, контактний номер телефону. Наш менеджер миттєво зв’яжеться з Вами!