通过接受用户输入覆盖内存中的值

Overwrite value in memory by taking in user input

这与堆栈粉碎攻击有关。

基本上,我试图通过为程序提供特定输入来粉碎堆栈。该程序接受这样的用户输入,使用 getchar:

for (i = 0; (c = getchar()) != '\n'; i++) buf[i] = c;

我想覆盖内存变成0x000000a1。不幸的是,0xa1 不是 ascii 字符,所以我不能只输入 ¡(倒置感叹号)之类的东西,因为这最终会在内存中给出 0x0000a1c2。如何在不更改程序中处理用户输入的方式的情况下将值覆盖为 0x000000a1

您可以使用bash注入任意字符:

echo -e '\xA1' | /path/to/program

您可以添加额外的输入,将 echo 放入循环等。

echo -e 'Something\xA1\xA1\xA1' | /path/to/program

没有提供您系统的信息,但通常标准输入只是一个字节流。这意味着您可以发送任意字节流,而不仅仅是有效字符。

例如,如果您的受害程序是 ./a.out,您可以创建一个程序来发出有效载荷

#include <stdio.h>

int main(void) {
    putchar(0xa1);
    putchar('\n'); /* to have the victim finish reading input */
    return 0;
}

并编译为 ./b.out 并使用管道执行

$ ./b.out | ./a.out

$ 是您终端的提示符)