gpt4 book ai didi

assembly - execve shellcode 写段错误

转载 作者:行者123 更新时间:2023-12-04 03:02:49 25 4
gpt4 key购买 nike

我正在尝试研究 execve shellcode,

操作系统:Linux bt 2.6.39.4

root@bt:~/exploit#cat gshell.s

.globl _start

_start:

nop
jmp MyString

shell:

popl %esi
xorl %eax,%eax

movl %al,9(%esi)
movl %esi,10(%esi)
movl %eax,14(%esi)

movb $11,%al
movl %esi, %ebx
leal 0xa(%esi),%ecx
leal 0xe(%esi),%edx
int $0x80



movl $1,%eax
movl $0,%ebx
int $0x80


MyString:
call shell
shellvar:
.ascii "/bin/bashADDDDCCCC"

root@bt:~/exploit# as -gstabs -o gshell.o gshell.s

root@bt:~/exploit#ld -o gshell gshell.o

root@bt:~/exploit# ./gshell段错误(核心已转储)root@bt:~/利用#

GDB:

(gdb) 中断 *_start0x8048054 处的断点 1:文件 gshell.s,第 6 行。

(gdb) r启动程序:/root/exploit/gshell

程序收到信号 SIGSEGV,段错误。外壳 () 在 gshell.s:1414 movb %al,9(%esi)

(gdb) 打印/x $esi$1 = 0x804807a(gdb) x/16cb $esi0x804807a : 47 '/' 98 'b' 105 'i' 110 'n' 47 '/' 98 'b' 97 'a' 115 's'0x8048082 : 104 'h' 65 'A' 68 'D' 68 'D' 68 'D' 68 'D' 67 'C' 67 'C'(gdb)

从上面的输出来看,我似乎已经成功地将/bin/sh 地址 pope 到 ESI 寄存器中但是当我尝试将 0 移动到 9(%esi) 时 --> 它会导致段错误。甚至试图修改这个程序:将 $0 移动到 $esi。想知道在0x804807a地址是否被限制写入?是什么导致了这个故障?以及我如何继续成功运行此 shellcode

谢谢,小 jack

最佳答案

正如 Bo 在他的评论中所说,.text 部分在当前系统中默认是只读的。要使此代码工作,您必须使其可写。例如,您可以像这样在源文件中使用指令:

.section wtext, "awx", @progbits

等效的 nasm 指令是:

section wtext exec write

或者,也可以将 -N 开关传递给链接器。

请注意,此类 shell 代码通常用于堆栈执行,这是当前操作系统中通常禁用的另一件事。如果您想在堆栈上尝试此操作,您可能需要 -z execstack 链接器选项。

关于assembly - execve shellcode 写段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13777445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com