![][1] Для поиска уязвимостей все средства хороши, а чем хорош [фаззинг][2]? Ответ прост: тем, что он дает возможность проверить, как себя поведёт программа, получившая на вход заведомо некорректные (а зачастую и вообще случайные) данные, которые не всегда входят во множество тестов разработчика.
Некорректное завершение работы программы в ходе фаззинга позволяет сделать предположение о наличии уязвимости.
В этой статье мы:
* **продемонстрируем, как фаззить обработчик [JSON][3]-запросов;**
* **используя фаззинг, найдём уязвимость переполнения буфера;**
* **напишем шеллкод на Ассемблере для эксплуатации найденной уязвимости.**
Разбирать будем на примере исходных данных задания прошлого [NeoQUEST][4]. Известно, что 64-хбитный Linux-сервер обрабатывает запросы в формате JSON, которые заканчиваются [нуль-терминатором][5] (символом с кодом 0). Для получения ключа требуется отправить запрос с верным паролем, при этом доступа к исходным кодам и к бинарнику серверного процесса нет, даны только IP-адрес и порт. В легенде к заданию также было указано, что MD5-хеш правильного пароля содержится где-то в памяти процесса после следующих 5 символов: «hash:». А для того, чтобы вытащить пароль из памяти процесса, необходима возможность удалённого исполнения кода.
[Читать дальше →][6]
[1]:
https://habrastorage.org/files/e9d/d68/60d/e9dd6860d8e04b8db5b89b2dacd07ef6.jpg
[2]:
http://www.vr-online.ru/?q=content/fuzzing-tehnologija-ohoty-za-bagami-752
[3]:
http://www.json.org/json-ru.html
[4]:
http://neoquest.ru/timeline.php?year=2017&part=1
[5]:
https://ru.wikipedia.org/wiki/%D0%9D%D1%83%D0%BB%D1%8C-%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0
[6]:
https://habrahabr.ru/post/321912/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut