gpt4 book ai didi

c - 理解一个shellcode例子

转载 作者:太空狗 更新时间:2023-10-29 15:08:07 24 4
gpt4 key购买 nike

在 shellcode 教程中,我看到了以下示例:

 main(){

exit(0);

}

我们的想法是创建一个 exit() 系统调用。因此,然后他们生产组件:

  Section .text

global _start

_start:
mov ebx, 0
mov eax, 1
int 0x80

我明白了。 0 是我们存储在 ebx 中的 exit() 的参数,1 是退出系统调用的编号,使用 0x80 我们将 CPU 更改为内核模式并执行系统调用。

之后,他们让我们生成以下操作码:

    bb 00 00 00 00
b8 01 00 00 00
cd 80

然后,他们将其翻译成 C 语言,如下所示:

 char example[] = "\xbb\x00\x00\x00\x00"
"\xb8\x01\x00\x00\x00"
"\xcd\x80"

int main(){

int *pointer;
pointer = (int *)&pointer+2;
(*pointer) = (int)example;
}

所以,我的理解是他们将操作码放在一个字符数组中,但我不明白他们在 main() 方法中做了什么。第一行没问题。但是他们想用第 2 行和第 3 行表达什么?

最好的问候,

最佳答案

代码获取堆栈变量的地址,然后是它上面两个指针大小的地址。然后,这个位置的任何内容都会被 shellcode 的地址覆盖。

如果被覆盖的位置是函数的返回地址,那么当函数退出时shellcode将被执行。实验和反汇编可以帮助计算从局部变量到返回地址的正确偏移量。


通常,实际的利用将涉及堆栈缓冲区溢出(即,一个函数不检查它放入堆栈缓冲区的长度,允许它“溢出”到返回地址):缓冲区可能填充shellcode,“溢出”部分将包含缓冲区的地址;这样,当函数退出时,它将在缓冲区内执行 shellcode。

关于c - 理解一个shellcode例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26075825/

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