gpt4 book ai didi

assembly - 编写 shellcode : why my shellcode won't work?

转载 作者:行者123 更新时间:2023-12-03 06:43:07 27 4
gpt4 key购买 nike

我目前正在编写一个 shellcode,该代码利用使用 puts 函数的目标程序。该程序如下所示:

#include <stdio.h>
main() {
char buf[123];
puts(gets(buf));
}

我想要做的是溢出这个缓冲区并使用一些参数调用execve。我有一个用 c/inline assembly 编写的测试程序,可以使用一些参数调用 execve,然后我使用 gdb 从该程序获取 shellcode。根据我的理解,堆栈布局如下所示:

|-------buffer(+padding)---------|---------sfp---------|-------ret-------------|

通过查看gcc生成的目标程序的部分汇编代码:

.cfi_startproc                  
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
addq $-128, %rsp
leaq -128(%rbp), %rax
movq %rax, %rdi
call gets
movq %rax, %rdi
call puts
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc

我认为缓冲区和填充占用128字节,sfp和返回地址各占用8字节,所以总共144字节。基于此,我的 nop sled 、有效负载和新的返回地址(等于缓冲区的地址)组合(即我的 shellcode)也应该是 144 字节。例如,如果我的有效负载是 36 字节,由于返回地址占用 8 字节,所以我的 nop sled 将是 100 字节。但当我这样做时,它不起作用。所以我想也许我理解堆栈布局的方式是错误的。是不是搞错了?

请注意,在我的例子中,缓冲区地址是已知的,并且使用 execstack 将堆栈设置为可执行文件,并且使用 setarch 关闭了 ASLR。因此,如果返回地址被缓冲区的地址覆盖,则写入该缓冲区的代码将运行。

我正在 x86 64 位机器上工作。

如果我对堆栈布局的理解是正确的,我将提供有关我的 shellcode 的更多信息。

最佳答案

1) 您没有利用易受攻击的代码,因为它具有 puts() 函数,您之所以利用它,是因为它使用的是易受攻击的 gets() 函数此处堆栈溢出。

2) 当你有一个字符buf[123]时,如果你输入122个字符,然后输入一个空终止符,堆栈就可以了。但是当您输入的内容超过这个数量时,就会发生以下情况:

让我们假设它是 buf[4],当你执行 gets() 时

input AAAA
EBP - 4 => will be AAAA

input AAAAAAAA (8 bytes)
EBP -4 => AAAA
EBP also => AAAA

if you enter 12x A
function return address will be 0x41414141

现在您还将覆盖函数返回地址,因此它也将是 AAAA 0x41414141!从那里您需要将返回地址指向您的 shellcode 地址才能执行 shellcode。

所以当调用函数和溢出时,布局是:

Buffer for temporary storage
local variables
The saved EBP
Function return address
Function's arguments
Stack frame

所以是从下到上。实际上对于大变量最好使用metasploit pattern_offset.rb,它会生成大字符串,当你找到EIP值时,你可以使用patter_offset.rb的输出来检测覆盖 EIP 所需的精确填充才能执行 shellcode。

所以实际上要覆盖函数返回地址,大多数情况下需要[变量大小] + 8。但这取决于局部变量、它们的大小、它们的顺序等。还取决于编译器、体系结构等。大多数情况下是通过尝试和pattern_offset.rb等完成

关于assembly - 编写 shellcode : why my shellcode won't work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19531877/

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