Атаки с переполнением буфера, когда у вас нет доступного исходного кода, чаще всего обнаруживаются fuzzing . Fuzzing - это практика отправки недействительных, случайных или преднамеренно больших данных в систему, чтобы увидеть, как она себя ведет. То, что вы хотите видеть в качестве злоумышленника, - это скорее сбой, чем ошибка. Для удаленной системы сбой обычно выглядит как код ответа HTTP 500. Это говорит о том, что ваши данные переводят систему в неопределенное состояние. Имея это в виду, вы можете приступить к созданию атаки, чтобы использовать это неопределенное состояние.
Это причина, по которой стоит избегать полезных кодов возврата в диапазоне 400 и 500, возможно, возвращая только «400 - произошла ошибка» для любой возможной ошибки. В некоторых системах с высоким уровнем безопасности я возвращал 404 ошибки для каждой возможной проблемы. Это делает невероятную боль для отладки, но делает автоматизированное сканирование более сложным. Я не рекомендую этот подход в целом, но это стоит учитывать в системах с более высокой степенью безопасности.