如何从命令行提供stdin输入?

Lor*_*oh. 3 c security penetration-testing stack-smash

我试图对类分配的程序执行缓冲区溢出攻击.攻击程序以及易受攻击的程序都是由我编写的.

易受攻击的代码用于scanf从stdin读取数据.

./vulnerable < malicious_payload_file.txt工作良好. more malicious_payload | ./vulnerable并且echo JUNK_JUNK_JUNK_JUNK | ./vulnerable也按预期工作.

但是,我想使用攻击程序继续提供更长的有效负载,直到程序崩溃.所以,我需要动态生成更大的有效载荷.我正在使用system ("./vulnerable");反复调用和测试异常退出.

如何指定这样的有效负载?

有没有办法运行./vulnerable < malicious_payload_binary或以某种方式使我不必将恶意有效负载放在文件中,但可以在命令行中指定它?

Sus*_*Pal 8

这个怎么样?

echo "your payload goes here" | ./vulnerable
Run Code Online (Sandbox Code Playgroud)

您可以echo使用任何生成所需的./vulnerable输入的命令替换该命令.一个这样的例子是作为输入的不断的垃圾流,你可以这样做:

cat /dev/urandom | ./vulnerable
Run Code Online (Sandbox Code Playgroud)


Chr*_*odd 2

您可以尝试使用以下命令,而不是尝试使用命令popensystem

FILE *fp = popen("./vulnerable", "w");
// write stuff to fp -- it goes to vulnerable's stdin
int exitcode = pclose(fp);
Run Code Online (Sandbox Code Playgroud)

如果您使用另一个进程来创建数据并通过 shell 将其通过管道传输到 ./vulnerable,那么您获得的退出代码与您获得的退出代码pclose相同system