Все части переполнение буфера
Предыдущая часть Переполнение буфера и перезапись переменных к конкретному значению - разработка эксплойтов, часть 2
Следующая часть Переполнение буфера и перезапись указателя на функцию - разработка эксплойтов, часть 4
Привет Codeby =) В предыдущей статье мы научились перезаписывать значение переменной к конкретному значению используя уязвимость переполнения буфера. Не будем останавливаться на достигнутом, двигаемся дальше...
Описание ExploitMe
Stack2 смотрит на переменные окружения, и как они могут быть использованы.
Этот уровень находится в / opt / protostar / bin / stack2
Исходный код
Решение
Здесь у нас всё тоже самое, единственное, что здесь новое эта функция getenv(). Посмотрим описание функции.
Функция getenv() возвращает указатель на информацию об окружении, ассоциированную со строкой name в таблице информации окружения.
Окружение программы может включать такие вещи, как имена путей и устройств. Точное содержание этих данных определяется операционной системой.
Если функция вызвана с аргументом, который не соответствует никаким переменным окружения, то возвращается нулевой указатель.
И так нам нужно перезаписать значение переменной modified со значением «0x0d0a0d0a». Чтобы это сделать нам надо опять переполнить буфер, но на этот раз переполнение буфера будет происходить через переменную окружения GREENIE. Кстати говоря, если заглянуть в «
И так установим переменную окружения GREENIE поэтому воспользуемся командой export .
Проверяем
Как видно из списка переменных окружения, переменная GREENIE появилась в списке со значение "test". Отлично теперь можно переходить к формированию наших "вредоносных" данных.
Для этого будем использовать всё так же питон. Как я говорил выше, переполнение будет происходить, через переменную окружения, поэтому нам нужно установить GREENIE c нужным нам значением, а именно, нам надо так же 64 байта для заполнения буфера, а следующие байты будут перезаписывать значение переменной. Чтобы это сделать воспользуемся апострофами и заключим между ними наше выражение на питоне.
Проверим нашу "боевую" нагрузку
И посмотрим
Все готово. Как нам видно из среды переменных окружения, байты под буфер и те байты возврата каретки и перехода на новую строку успешно добавлены. Теперь можно запустить саму программу, чтобы запустить процесс эксплуатации уязвимости. Так, как при запуске программы, она воспользуется переменной окружения GREENIE и съест нашу ядовитую строку.
Отлично на экране мы видим текст «you have correctly modified the variable», цель достигнута. В этом упражнение мы узнали, что для эксплуатации уязвимости может быть задействована среда переменных окружения, переходим на следующий уровень —
Предыдущая часть Переполнение буфера и перезапись переменных к конкретному значению - разработка эксплойтов, часть 2
Следующая часть Переполнение буфера и перезапись указателя на функцию - разработка эксплойтов, часть 4
Привет Codeby =) В предыдущей статье мы научились перезаписывать значение переменной к конкретному значению используя уязвимость переполнения буфера. Не будем останавливаться на достигнутом, двигаемся дальше...
Описание ExploitMe
Stack2 смотрит на переменные окружения, и как они могут быть использованы.
Этот уровень находится в / opt / protostar / bin / stack2
Ссылка скрыта от гостей
, VMИсходный код
C:
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
volatile int modified;
char buffer[64];
char *variable;
variable = getenv("GREENIE");
if(variable == NULL) {
errx(1, "please set the GREENIE environment variable\n");
}
modified = 0;
strcpy(buffer, variable);
if(modified == 0x0d0a0d0a) {
printf("you have correctly modified the variable\n");
} else {
printf("Try again, you got 0x%08x\n", modified);
}
}
Решение
Здесь у нас всё тоже самое, единственное, что здесь новое эта функция getenv(). Посмотрим описание функции.
Функция getenv() возвращает указатель на информацию об окружении, ассоциированную со строкой name в таблице информации окружения.
Окружение программы может включать такие вещи, как имена путей и устройств. Точное содержание этих данных определяется операционной системой.
Если функция вызвана с аргументом, который не соответствует никаким переменным окружения, то возвращается нулевой указатель.
И так нам нужно перезаписать значение переменной modified со значением «0x0d0a0d0a». Чтобы это сделать нам надо опять переполнить буфер, но на этот раз переполнение буфера будет происходить через переменную окружения GREENIE. Кстати говоря, если заглянуть в «
Ссылка скрыта от гостей
» , то мы не найдем там «0x0d0a0d0a», значения этих байтов, если погуглить можно понять из значения "0x0d0a0d0a", что 0x0d — это '\r' символ возврата каретки, а 0x0a — символ новой строки '\n'. И все таки эти байты, что-то да значат, как оказалось это спец.символы. Посмотреть их все, можно тут в
Ссылка скрыта от гостей
. Это наиболее полная таблица.И так установим переменную окружения GREENIE поэтому воспользуемся командой export .
export GREENIE=test
Проверяем
env
Как видно из списка переменных окружения, переменная GREENIE появилась в списке со значение "test". Отлично теперь можно переходить к формированию наших "вредоносных" данных.
Для этого будем использовать всё так же питон. Как я говорил выше, переполнение будет происходить, через переменную окружения, поэтому нам нужно установить GREENIE c нужным нам значением, а именно, нам надо так же 64 байта для заполнения буфера, а следующие байты будут перезаписывать значение переменной. Чтобы это сделать воспользуемся апострофами и заключим между ними наше выражение на питоне.
GREENIE=`python -c "print 'a' *64 + '\x0d\x0a\x0d\x0a'[::-1]"`
Проверим нашу "боевую" нагрузку
env
И посмотрим
Все готово. Как нам видно из среды переменных окружения, байты под буфер и те байты возврата каретки и перехода на новую строку успешно добавлены. Теперь можно запустить саму программу, чтобы запустить процесс эксплуатации уязвимости. Так, как при запуске программы, она воспользуется переменной окружения GREENIE и съест нашу ядовитую строку.
./stack2
Отлично на экране мы видим текст «you have correctly modified the variable», цель достигнута. В этом упражнение мы узнали, что для эксплуатации уязвимости может быть задействована среда переменных окружения, переходим на следующий уровень —
Ссылка скрыта от гостей
. Дальше будет еще веселее!!!