Нулевые байты в шеллкоде? - PullRequest
2 голосов
/ 19 марта 2012

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

http://pastie.org/private/feg8du0e9kfagng4rrg

Ответы [ 2 ]

3 голосов
/ 24 марта 2012

Проблема с нулевыми байтами в шелл-коде существует только в тех случаях, когда он внедряется с использованием переполнения при обработке строк в стандартной библиотеке строк на языке Си, где нулевой байт означает конец строки, поэтому копирование на нем останавливается. Использование переполнения буфера строкой в ​​стиле C было самым популярным подходом к внедрению шелл-кода в середине 90-х годов. В настоящее время большая часть кода C (AFAIK) защищена от этого с помощью других функций (либо набор OpenBSD strlcpy / strlcat, набор * _s (), либо доморощенные функции) и менее старых сред, поскольку C ++ уже получил библиотеку строк без нулевого байта. прекращение. В настоящее время в большинстве эксплойтов некоторые программные ошибки используются в качестве слишком маленького буфера или неправильной проверки входящего значения, когда оно должно находиться в пределах некоторых границ.

Я не анализировал код, который вы связали, но, похоже, он использует некорректную обработку TLV в двоичных данных. В любом случае он безопасен для нулевых значений благодаря обработке двоичных данных (но может использоваться иным способом).

1 голос
/ 22 марта 2012

Они используют нулевые указатели в переменных окружения .... explore !!!

...