Перейти к основному содержимому

Уязвимости веб-приложений и серверов

Разработчику Тестировщику

Раздел 8.10, шаг 6 из 9. Предыдущий — Wi-Fi; далее — оценка уязвимостей.


Модель безопасности веб-приложений

Веб-пентест опирается на понимание как HTTP-сессия связывает запросы и где доверие к клиенту ошибочно.

Same-Origin Policy и CORS

Same-Origin Policy (SOP) — браузер ограничивает чтение ответов другого origin (схема + host + port). CORS (Cross-Origin Resource Sharing) — механизм ослабления SOP через заголовки Access-Control-Allow-*. Misconfigured CORS (Allow-Origin: * с credentials) открывает кражу данных с другого сайта.

Сессии и cookies

Атрибут cookieЗащита от
HttpOnlyКража через XSS (document.cookie)
SecureПередача по HTTP
SameSite=Strict/LaxCSRF
Короткий TTL + rotationSession fixation, hijacking

Пентестер проверяет: cookie без HttpOnly на чувствительном приложении, session ID в URL, отсутствие logout на сервере.

OWASP Testing Guide — фазы

ФазаДействия
Information GatheringCrawl, технологии, entry points
Configuration ManagementTLS, headers, default creds
Identity ManagementRegistration, username enumeration
AuthenticationBrute force, MFA bypass
AuthorizationIDOR, privilege escalation
Session ManagementTimeout, fixation
Input ValidationInjection, XSS, SSRF
Error HandlingStack traces, oracle
CryptographyWeak algorithms at app layer
Business LogicRace, price manipulation

Это каркас; OWASP Top 10 (8.07/1) группирует классы уязвимостей по частоте.


Две поверхности атаки

Пентест веб-стека обычно делят на:

УровеньЧто проверяютТипичные находки
Сервер / инфраструктураОС, nginx/Apache, TLS, заголовки, CVEУстаревший OpenSSL, directory listing, default vhost
ПриложениеЛогика, сессии, API, формыIDOR, SQLi, XSS, SSRF, broken auth

Теория классов уязвимостей — в безопасности приложений и инъекциях. Здесь — инструменты Kali, порядок проверки и углублённая теория классов атак.

Классы уязвимостей — краткая теория

КлассСутьМеханизм эксплуатации
InjectionДанные интерпретируются как код/запросSQL, OS command, LDAP, template
Broken Access ControlНет проверки «может ли этот user»IDOR, path traversal, forced browsing
XSSЧужой JS в контексте жертвыReflected, stored, DOM-based
SSRFСервер делает запрос по URL атакующегоMetadata, internal scan
Security MisconfigurationDefault, лишние сервисы, verbose errorsNikto, ручной обзор
Cryptographic FailuresСлабое шифрование, ключи в кодеTLS audit, static analysis

Injection требует понимания контекста: SQLi — когда ввод попадает в запрос БД; CMDi — в shell; XSS — в HTML/JS. Один payload не работает везде.

IDOR (Insecure Direct Object Reference) — ссылка на объект (/invoice/12345) без проверки владельца. Horizontal (чужой user того же уровня) vs vertical (эскалация до admin).

SSRF превращает сервер в прокси атакующего во внутреннюю сеть. Blind SSRF — ответ не виден, но есть side-channel (DNS, time).


Burp Suite и OWASP ZAP

Burp Suite

Burp — прокси между браузером и сервером. Перехватывает HTTP/HTTPS, позволяет править запросы, повторять их, сканировать (Pro).

Базовая настройка:

  1. Запустите Burp (burpsuite из меню или CLI).
  2. Proxy → 127.0.0.1:8080.
  3. В браузере укажите прокси; для HTTPS импортируйте CA-сертификат Burp (Proxy → Import / export CA certificate).
  4. Включите Intercept для ручного анализа или выключите для пассивного сбора в HTTP history.

Ключевые вкладки:

ВкладкаНазначение
ProxyПерехват и изменение запросов
RepeaterРучная отправка вариантов одного запроса
IntruderFuzzing параметров (осторожно с rate на prod)
ScannerАвтоматический поиск (Pro)

Burp хранит site map — дерево URL и параметров. Ручной пентест часто = systematic обход site map + Repeater на каждый параметр.

Режимы proxy:

РежимКогда
Intercept onИзучение одного запроса, правка перед отправкой
Intercept offПассивный сбор history + spider

Scope в Burp ограничивает, что попадает в history — полезно, когда браузер ходит и на google.com, и на target.

OWASP ZAP

ZAP — open-source альтернатива с автоматическим spider и active scan:

zaproxy
# или headless
zap.sh -daemon -port 8090 -config api.disablekey=true

Подходит для CI и быстрого baseline; глубокая логика — ручной Burp.

Active scan на production

Active scan генерирует тысячи запросов и может создать инцидент. Запускайте только в согласованное окно или на staging в scope.


Сканирование сервера

Nikto

Проверка известных misconfiguration и CGI:

nikto -h https://scanme.nmap.org

Nmap NSE для HTTP/SSL

nmap -p 443 --script ssl-enum-ciphers,http-headers example.com

testssl.sh

Детальный аудит TLS (часто ставят отдельно):

testssl.sh https://example.com

Ищите: слабые cipher suites, TLS 1.0/1.1, отсутствие HSTS, проблемы с цепочкой сертификатов. См. SSL/TLS.

Типовые misconfiguration серверов

ПроблемаРискКак находят
Directory listingУтечка backup, конфигов/, /uploads/
Default страницыВерсия продукта/server-status, Tomcat manager
Verbose errorsStack trace, путиОшибочный ввод
HTTP без redirectDowngrade, cookie theftcurl -I http://
Открытый .gitИсходный код/.git/HEAD
SMB на веб-сервереLateral movementnmap -p445

Defense in depth: даже при RCE на веб-сервере сегментация и минимальные права процесса ограничивают post-exploitation.


Веб-уязвимости — практика в лаборатории

Используйте DVWA, WebGoat, PortSwigger Web Security Academy — не prod без scope.

SQL injection

Ручная проверка в Repeater:

GET /vulnerabilities/sqli/?id=1' OR '1'='1&Submit=Submit

sqlmap (только там, где разрешено):

sqlmap -u "http://192.168.56.101/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" \
--cookie="security=low; PHPSESSID=..." --dbs

Флаги --os-shell и --dump — только в учебной среде или с явным разрешением.

XSS

Reflected XSS — payload в параметре отражается в ответе:

<script>alert(1)</script>

Stored XSS — payload сохраняется (комментарии, профиль). Проверяйте контекст (HTML, attribute, JS). Защита — CSP, encoding; см. 113.

IDOR и broken access control

Подмена user_id=1001 на 1002 в API. Burp Repeater + два аккаунта (жертва и атакующий).

SSRF

Параметр URL заставляет сервер запросить внутренний ресурс:

POST /fetch url=http://169.254.169.254/latest/meta-data/

Критично в облаке (metadata AWS/GCP).

SQL injection — теория

SQLi возникает, когда приложение конкатенирует пользовательский ввод в SQL. Классы:

ТипПризнакПример идеи
In-bandОтвет в том же каналеUNION SELECT
Error-basedОшибка БД в ответе' AND 1=CONVERT(int, @@version)--
Blind booleanРазный контент true/false' AND SUBSTRING(password,1,1)='a
Blind timeЗадержка SLEEP(5)' OR IF(1=1,SLEEP(5),0)--
Out-of-bandDNS/HTTP exfilредко, нужен stack

Защита — parameterized queries (prepared statements), ORM с binding, least privilege DB user.

XSS — контексты вывода

КонтекстЭкранирование
HTML body&lt;, &gt;
AttributeКавычки, entities
JavaScriptНе вставлять user data в JS
URLEncoding scheme

DOM XSS — уязвимость в client-side JS (location.hashinnerHTML), Burp видит не всё; нужен анализ фронтенда.

Business logic

Логические баги не находит типовой scanner:

  • Оплата: изменить amount=0.01 в скрытом поле
  • Купон: применить дважды через race (parallel requests в Burp Turbo Intruder)
  • Регистрация: шаг admin через пропуск /setup-complete

Требуют понимания домена и flow приложения.


ffuf и перебор

# Директории
ffuf -u https://target/FUZZ -w /usr/share/seclists/Discovery/Web-Content/common.txt

# Параметры
ffuf -u https://target/page?FUZZ=test -w params.txt

SecLists (/usr/share/seclists) — стандартный набор словарей в Kali.


Анализ серверных CVE

После recon сопоставьте версии с базами:

  • NVD
  • searchsploit apache 2.4
searchsploit apache 2.4.49

Эксплуатация публичного exploit против системы заказчика — только в scope и с планом отката.


Hardening — взгляд защитника

ОбластьРекомендация
TLSTLS 1.2+, сильные cipher, HSTS
ЗаголовкиX-Frame-Options, CSP, X-Content-Type-Options
СерверУбрать версию в Server, отключить лишние модули
ПриложениеParameterized queries, CSRF-токены, RBAC
ФайлыЗапретить .git, backup .bak, listing
WAFДополнительный слой, не замена secure coding

Мини-чек-лист пентеста веб+сервер

  1. Scope URL и out-of-scope поддомены зафиксированы.
  2. Passive crawl (Burp, ZAP spider).
  3. TLS и заголовки (nikto, testssl.sh).
  4. Auth — logout, session fixation, password reset.
  5. Все параметры — injection, IDOR.
  6. File upload — тип, path traversal.
  7. Business logic — обход оплаты, race.
  8. Findings → шаблон отчёта.

Практическое задание

  1. Разверните DVWA в той же lab-сети, что Kali.
  2. Пройдите уровни SQLi и XSS на low security через Burp Repeater.
  3. Запустите nikto против своего контейнера и исправьте одну находку (например, заголовок).
  4. Оформите один finding по шаблону из 8.09/2 (title, steps, impact, remediation).

Связанные материалы


См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").