Вопрос или проблема
Я использую некоторые запросы захвата, чтобы проверить, есть ли атака на мое веб-приложение или нет. Сегодня я нашел это (1′”5000) в моих колонках, которые хранят IP-адрес источника, отправившего запрос, и вот что он отправил:
{
"destinationIP": "MY.IP.IS.HERE",
"destinationPort": 80,
"headers": {
"referer": "1'\"3000",
"accept-language": "1'\"6000",
"client-ip": "1'\"4000",
"host": "mydomain.com",
"connection": "Keep-alive",
"x-forwarded-for": "1'\"5000",
"accept-encoding": "gzip,deflate,br",
"user-agent": "1'\"2000",
"via": "1'\"7000",
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
},
"sourcePort": 60486,
"sourceIP": "103.161.35.121",
"requestURI": "/fonts/danapro/index/1'\"1000",
"httpMethod": "GET",
"queryString": "N/A",
"parameters": {}
}
Вот код для получения IP-адреса источника:
private String getClientIpAddress(HttpServletRequest request) {
for (String header : TextUtils.HEADERS_TO_TRY) {
String ip = request.getHeader(header);
if (ip != null && !ip.isEmpty() && !"unknown".equalsIgnoreCase(ip)) {
return ip;
}
}
return request.getRemoteAddr();
}
И HEADERS_TO_TRY:
public static final String[] HEADERS_TO_TRY = {
"X-Forwarded-For",
"Proxy-Client-IP",
"WL-Proxy-Client-IP",
"HTTP_X_FORWARDED_FOR",
"HTTP_X_FORWARDED",
"HTTP_X_CLUSTER_CLIENT_IP",
"HTTP_CLIENT_IP",
"HTTP_FORWARDED_FOR",
"HTTP_FORWARDED",
"HTTP_VIA",
"REMOTE_ADDR"
};
И вопрос в том, как getClientIpAddress может вернуть 1′”5000 мне? И что это такое?
Значение “1′”5000” подозрительно и похоже на попытку SQL-инъекции или других форм инъекционных атак. Злоумышленники часто используют такие полезные нагрузки, как “1′”, чтобы проверить уязвимости, связанные с неправильной очисткой входных данных.
Тестирование SQL-инъекций: Одинарная кавычка ‘ используется в SQL для обозначения строковых литералов. Неправильно обработанная или неэкранированная кавычка может вырваться за пределы предполагаемой структуры запроса, позволяя злоумышленникам манипулировать SQL-командами, которые выполняет ваша база данных.
Злоумышленное зондирование: Вводя такие значения в различные заголовки и параметры, злоумышленники исследуют ответы вашего приложения, чтобы увидеть, ведет ли оно себя неожиданно, что указывает на потенциальную уязвимость.
Ответ или решение
Что такое IP-адрес 1’"5000 и откуда он взялся?
Введение
При анализе аномалий в запросах к веб-приложению вы можете столкнуться с необычными значениями в заголовках HTTP. Одним из таких значений является 1'"5000
, которое было зафиксировано в заголовке x-forwarded-for
. Этот адрес вызывает подозрения и может свидетельствовать о попытке атаки на ваше приложение.
Источники и методы получения IP-адреса
В вашем коде используется метод getClientIpAddress(HttpServletRequest request)
, который ищет IP-адрес клиента в различных заголовках запроса. В массиве HEADERS_TO_TRY
перечислены заголовки, в которых используется широкий спектр методов определения источника запроса, включая X-Forwarded-For
и HTTP_CLIENT_IP
. Метод возвращает первое непустое и неуказанное значение ‘unknown’ из этих заголовков или, в крайнем случае, возвращает адрес удаленного клиента через request.getRemoteAddr()
.
Значение 1'"5000
Значение 1'"5000
представляет собой странный IP-адрес, и скорее всего, это не актуальный адрес. Он выглядит как попытка внедрения кода (инъекция). Структура этого значения:
- 1′ — символ один с одинарной кавычкой, что может указывать на попытку SQL-инъекции. В SQL одинарная кавычка используется для обозначения строковых литералов, и таким образом, неэкранированная кавычка может разорвать структуру запроса.
- "5000 — число, которое может быть использовано для создания ложного контекста или для тестирования обработки данных вашим приложением.
Возможные цели атаки
- Проверка на уязвимости: Использование значений вроде
1'"5000
— это обычная практика тестирования безопасности. Таким образом, злоумышленник пытается определить, корректно ли ваше приложение обрабатывает невалидные или необычные входные данные. - Изучение реакции приложения: Часть расследования заключается в том, чтобы увидеть, как приложение реагирует на неожиданные данные. Если ваше приложение не заблокирует такие запросы или допустит их обработку, это может указывать на наличие уязвимости.
Рекомендации по защиты
- Экранирование входных данных: Все входные данные должны обрабатываться и экранироваться перед передачей в запросы к базе данных.
- Проверка на наличие инъекций: Используйте средства для защиты от инъекций SQL и другие инструменты тестирования безопасности для выявления уязвимостей.
- Логирование и мониторинг: Внедрите системы логирования и мониторинга, чтобы быстро выявлять и анализировать подозрительные запросы.
Заключение
Значение 1'"5000
в заголовке x-forwarded-for
является признаком возможной атаки, связанной с SQL-инъекцией или другой формой внедрения. Необходимо следить за такими аномалиями и принимать меры для защиты вашего веб-приложения от потенциальных угроз. Убедитесь, что все входные данные обрабатываются надлежащим образом, и введите строгий мониторинг на предмет подозрительных действий.