Я хотел бы попробовать некоторые шелл-коды и отключить защиту Linux.
Я знаю, что могу компилировать, используя флаги, но я знаю, что существует другой способ отключить эти защиты в общем, я просто не могу вспомнить. Вы можете помочь мне?
Защита стека осуществляется компилятором (добавьте некоторые дополнительные данные в стек и спрячьте некоторые при вызове, проверьте работоспособность при возврате). Не могу отключить это без перекомпиляции. Это часть дела, правда ...
Чтобы расширить то, что сказал vonbrand (правильно, +1), есть две части защиты стека Linux.
Стек канареек
Канарские стеки - это обязательная для компилятора функция, на которую ссылается vonbrand. Они не могут быть отключены без перекомпиляции.
Чтобы доказать это себе и посмотреть, как они работают, возьмите следующий код:
Теперь скомпилируйте this (
gcc -fstack-protector -masm=intel -S test.c
) во что-то gnu, которое будет радо собрать и прочитать вывод. Важным моментом является то, что при выходе изmybadfunction
функции есть небольшой фрагмент кода:Как вы можете догадаться, это берет cookie из стека
[ebp-12]
и сравнивает его со значением вgs:20
. Не совпадает? Затем он вызывает функцию__stack_chk_fail
в glibc, которая тут же убивает вашу программу.Есть способы обойти это с точки зрения написания эксплойтов, но самый простой способ с точки зрения создания тестового примера шелл-кода - это скомпилировать вашу программу
-fno-stack-protector
.Неисполняемые страницы
Есть несколько других соображений о современных системах Linux. Если вы берете обычную заглушку тестирования шелл-кода:
современный GCC / Linux будет отображать
.rodata
раздел PE-файла только для чтения без каких-либо разрешений на выполнение. Вы должны отключить это, что можно сделать с помощью примера кода из этого поста в блоге . Основная идея: вы используетеmprotect
для добавления необходимых разрешений на страницы, на которых находятся данные шеллкода.Неисполняемые стеки
Если вы собираетесь протестировать традиционный сценарий эксплойта, например мой неверный код выше, с вашим шелл-кодом, то вам также необходимо убедиться, что стек является исполняемым для простых случаев. Формат файла PE содержит поле для определения, является ли стек исполняемым - вы можете запросить и контролировать это с помощью execstack . Чтобы включить исполняемый стек, запустите
Это может быть сделано на произвольных программах без необходимости перекомпиляции, но не будет автоматически отключать канареек стека, так как они запекаются при компиляции.
Добавленный бонус: aslr:
Чтобы отключить это
echo 0 > /proc/sys/kernel/randomize_va_space
.Ты только что рассказал кому-нибудь, как эксплуатировать моего драгоценного пингвина?
Нет. Любой эксплойт должен работать с канареками стека (очень нетривиально) и либо находить программу с
execstack
set, либо устанавливать ее (то есть она может выполнять произвольные команды в любом случае), либо использовать более сложные методы, такие как return to libc / return. ориентированное программирование.источник
С помощью этих опций вы можете отключить некоторые средства защиты (обнаружение разрушения стека и сделать исполняемый стек).
Вы также можете отключить ASLR (рандомизацию размещения адресного пространства) с помощью Bash с помощью команды:
источник