execve缓冲区溢出成功完成后的CPU执行流程? ..int 0x80成功完成之后?

问题描述 投票:0回答:1

我正在学习Linux下的缓冲区溢出shellcode方法。 https://seedsecuritylabs.org/Labs_16.04/Software/Buffer_Overflow/

我使用的shellcode以movb $ 0x0b,%a1和int $ 0x80结尾。 Shellcode执行后,我得到命令提示符。我读过许多execve和int 0x80“不返回”的地方。好..好的,但是当execve进程成功并退出时(〜我在命令行提示符下输入“ exit”),程序执行流向何处去?

我以为调用程序的堆栈框架已替换为新的execve代码的信息。新的execve代码是否保留被覆盖进程的返回地址,并像原来一样返回该地址? (因此,它是否确实返回了..到借入的地址?)就int $ 0x80而言,在int 0x80指令之后的下一个字节继续执行吗?如果没有,那么下一个字节是什么?

在缓冲区溢出问题和int 0x80的情况下,例如说一个517字节的hack覆盖了一个24字节的缓冲区。字节将替换缓冲区之外的堆栈存储器地址处的值,包括指向其自身在堆栈中较高位置的可执行代码的返回地址。但是,有意代码在内存中占用了其他数百个其他堆栈字节,从而破坏了不相关的外部作用域进程的堆栈帧。有了这些被破坏的堆栈框架,当... ...>

1),当shell从int 0x80返回并执行了更多的堆栈数据,这些数据不是hack的一部分。现在有什么未指定的字节,可能是无效的CPU操作码。

2)外部堆栈框架的上下文已被破坏,因此在我的shell命令提示符下输入“ exit”后,系统如何继续正常运行?

任何帮助表示赞赏!

我正在学习Linux下的缓冲区溢出shellcode方法。 https://seedsecuritylabs.org/Labs_16.04/Software/Buffer_Overflow/我使用的shellcode以movb $ 0x0b,%a1和int $ ...]结尾,然后以int $ ...

stack system-calls buffer-overflow execve buffer-overrun
1个回答
0
投票

如果我们讨论execve是什么以及它如何工作,我想您会明白发生了什么。

© www.soinside.com 2019 - 2024. All rights reserved.