【问题标题】:writing my first exploit in linux在 linux 中编写我的第一个漏洞利用
【发布时间】:2014-12-12 09:45:49
【问题描述】:

如何修改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");
}

【问题讨论】:

  • 这里有问题吗?
  • 您好,对此很抱歉。是的,我是 linux 新手,想运行它,但不知道如何。任何帮助,我将不胜感激
  • 我需要帮助修改代码。谢谢
  • 在这种情况下,我建议您编辑您的问题,以便您将第 1 点变成有人可以回答的问题。就像是; “我应该如何编辑这段代码,以便......”将其他两点留到后面的问题中,因为第一个问题的答案可能会解决其他问题。
  • 我希望现在问题很清楚了。感谢大家的帮助

标签: linux c buffer


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    相关资源
    最近更新 更多