Я открываю для себя ZAP и его активный сканер.Я попытался выполнить активное сканирование одного из уязвимых магазинов BodgeIT.На странице basket.jsp
внутренний код выглядит следующим образом:
stmt = conn.prepareStatement("INSERT INTO BASKETCONTENTS (BasketID, ProductID, Quantity, PriceToPay) VALUES (" + basketId + ", " + productId + ", " + Integer.parseInt(quantity) + ", " + price + ")"); // add it in the basket in the DB
Предполагается, что переменная quantity
является целым числом, значение которого получено из запроса клиента в качестве параметра POST.
ZAP обнаружил, что при предоставлении нечислового значения сервер возвращает ошибку 500 и закрывает соединение:
Проблема в том, что бэкэнд написан на Java, который имеет механизм проверки границ, что делает невозможным для разработчика вводить уязвимости переполнения буфера (вместе с самим языком).
Итак, почему ZAP считает, что имеется переполнение буфера, просто видя эту «ошибку 500» + «соединение закрыто»?
Редактировать : я проверил правило сканирования на переполнение буфераи нашел это: https://github.com/zaproxy/zap-extensions/blob/master/src/org/zaproxy/zap/extension/ascanrules/BufferOverflow.java#L119
Сообщает ли ZAP переполнение буфера каждый раз, когда получает внутреннюю ошибку сервера?