gpt4 book ai didi

c - 如何写入正在运行的程序的标准输入

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:50 26 4
gpt4 key购买 nike

我试图利用 C 代码中的缓冲区溢出漏洞,基本上可以归结为:

int main(void) {
char buf[100];
gets(buf);
return 0;
}

在不详细说明赋值的情况下,我想溢出这个缓冲区而不必手动键入 Unicode 字符,并且复制/粘贴对某些特殊字符无效。

我尝试过的

直接复制/粘贴字符串。这似乎对某些角色有奇怪的结果。例如,如果我粘贴字符“\x90”并检查 gdb 中的内存,它显示为“\x90\x21”。

Writing to/proc//fd/0 这种方法可以在终端打印我想要的字符串,但是如果我在上面的代码中添加 printf,它不会打印任何内容。我尝试使用终端和正在运行的程序的 pid 并得到相同的结果。

使用 pipe()、fork()、dup()、exec() 最后,我编写了一个打开管道的程序,将写入流复制到标准输入,执行程序,然后写入攻击写管道。这实际上写了字符串,并将打印它。但是,它不会写入所有字节。如果我尝试向易受攻击的程序写入 500 字节的“A”,它只会打印 ~120,而且程序甚至不会崩溃。

有没有我缺少的方法?或者我在上述方法中做错了什么?

我在 VirtualBox 中使用 Ubuntu 12.04。如果需要更多信息,请告诉我。

最佳答案

您可以将命令的输出通过管道传输到您的程序中。将 100 个“X”字符后跟一个换行符发送到您的程序(我称之为 ./prog)的简单方法:

sh -c 'for i in `seq 1 100` ; do echo -n X; done; echo ""' | ./prog

替换上面的 100 以更改换行符前的 'X' 个字符数

关于c - 如何写入正在运行的程序的标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49469061/

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