linux - 在 Linux 中编写我的第一个漏洞利用程序

标签 linux c buffer

如何修改func( )中的源代码,使得程序执行func()后返回的地址改变为:指令printf("first print\n”)被跳过。使用func()中定义的指针*ret修改返回地址适本地以实现这一目标。

这是代码:

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

void func(char *str)
{
    char buffer[24];
    int *ret;
    strcpy(buffer,str);
}

int main(int argc, char **argv)
{
    if (argc < 2)
    {
       printf("One argument needed.\n");
       exit(0);
    }

    int x;
    x = 0;
    func(argv[1]);
    x = 1;
    printf("first print\n");printf("second print\n");
}

最佳答案

正如 sherrellbc 所指出的,程序的漏洞利用通常是在不修改其源代码的情况下编写的。但如果您愿意,可以将这两行插入到 func() 中:

    ret = (int *)&str;  // point behind saved return address
    ret[-1] += 12;      // or however many code bytes are to be skipped

关于linux - 在 Linux 中编写我的第一个漏洞利用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27446222/

相关文章:

C 编程检查缓冲区中的消息

linux - 没有安装 jenkins 时如何更改 Jenkins 主目录 (~/.jenkins)

linux - 如何使用v4l2读取视频文件

c - 测量进程的生命周期(因为它被加载到内存中)

c - 为什么 zlib 努力只计算正指针差异?

java - 0x0A 和 0x0D 的区别

linux - 无法将 python3 内核添加到 Jupyter

linux - -ll gcc 的标志是什么?

python - 将 Python C 库移植到 "pure"C 的问题

buffer - 什么是缓冲区欠载?