【问题标题】:How to both exploit buffer overflow and pass parameter to system() function in this program?如何在该程序中利用缓冲区溢出并将参数传递给 system() 函数?
【发布时间】:2017-11-01 22:53:07
【问题描述】:

首先,我很抱歉提出一个不合理的问题,因为我的英语不好,我无法清楚地辨认出来。我也不知道是什么东西?它叫什么。

我的问题如下:

我用C语言写了一个程序:

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

int main()  {
    char buf[2],buf1[10];

    fgets(buf,2,stdin);
    fgets(buf1,10,stdin);

    puts(buf);
    puts(buf1);

    printf("Opening Shell...\n");

    system("/bin/dash");

    printf("\nEND\n");
    return 0;
}

我的目的是将参数传递给溢出缓冲区变量并在 /bin/dash 之后插入一个命令来读取一些我不拥有的文件,等等......我试过: 管道

python2.7 -c 'print "a"*12 + "\n" + " -c \"cat tes.c > show\""' |  /myprogram

我的程序运行正常,但是shellcode-c "cat tes.c &gt; show"可能没有被使用。

我设置了所有文件和权限7777

那么,如何在/bin/dash之后插入shellcode?​​p>

感谢阅读!对不起我的英语不好。

【问题讨论】:

    标签: c arguments parameter-passing buffer-overflow


    【解决方案1】:

    您需要覆盖"/bin/dash" 末尾的\0 并插入以\0 结尾的代码,因为\0 标记了字符串的结尾。

    【讨论】:

    • 如果你愿意,你也可以根据你的需要覆盖“/bin/dash”。在空字符 \0 之前插入有效负载很重要。
    • \n\x00是一样的吗?
    • \n 是换行符。如果您在文本编辑器中并按回车键,则会插入一个 \n。 \0 和 \x00 相等。第二个是用“x”表示的十六进制。
    • 谢谢,但它不起作用:(。我已经尝试过\0\x00,但是程序可能会跳过system(/bin/dash)函数:(。
    • 很可能你在系统中的命令是错误的,因此没有被执行。
    猜你喜欢
    • 2013-12-09
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 2021-04-13
    • 2015-04-13
    相关资源
    最近更新 更多