#gdb #cpu-architecture #buffer-overflow #security
#gdb #архитектура процессора #переполнение буфера #Безопасность
Вопрос:
Я следую руководству на YouTube, чтобы узнать об эксплойтах переполнения буфера. Основное различие, которое я вижу между его машиной и моей, заключается в том, что его адреса состоят из 8 байт, а мои — из 12. Однако оба наших блока памяти имеют размер 8 байт.
Когда он запускает свою команду эксплойта внутри gdb, он использует
r $(python -c 'print "xffxffxffxff" "x-" * 6 "%s"')
где "xffxffxffxff"
его адрес памяти.
Я запускаю свою команду с помощью
r $(python -c 'print "xFFxFFxFFxFFxFFxFF" "x-" * 3 "%s"')
где xFFxFFxFFxFFxFFxFF
мой адрес памяти. (Я изменил его *6
на *3
, поскольку его указатель стека находился на расстоянии 6 от его адреса памяти, а мой — на расстоянии 3).
Я попытался изменить количество "x"
имеющихся у меня значений, а также изменить значение на %x012
а также %x12
.
Существует ли конкретный способ работы с 12-байтовыми адресами, или этот эксплойт присутствует с 12-байтовыми адресами? ASLS отключен.
Комментарии:
1. Вы имеете в виду 12 шестнадцатеричных цифр? Это 6 байт, 48 бит. Вероятно, на самом деле 64-разрядный, но с большими нулями, как обычно для канонических адресов x86-64.
Ответ №1:
Скорее всего, вы скомпилировали свою программу как 64-битную, в то время как учитель сделал свою в 32-битной.
Переполнение буфера не будет работать так же в 64-битном режиме. Есть разные вещи, которые следует учитывать. Рекомендую скомпилировать как 32-битный и попробовать этот способ, если вы хотите сначала разобраться с основами.
Комментарии:
1. Я сделаю это и, возможно, вернусь к этому в будущем в 64-битной версии. Каковы будут основные соображения при преобразовании в 64-разрядную версию?