我的系统安全课程需要缓冲区溢出。因此,我有一个程序(称为canary)我需要启动,它要求输入字符串(read())。
我需要计算一个canary(使用pid和time构建的随机canary)以成功地实现缓冲区溢出。我已经写了一个程序(getcanary),可以让我得到正确的金丝雀。问题是:
我尝试在一个额外的终端中启动canary,然后获取它的pid,然后计算程序,然后写入canary的stdin。最后一件事是我有问题的地方。

#!/bin/bash
echo "start canary"
x-terminal-emulator -e ./canary &
sleep 1
PID=$(pgrep canary)
CANARY=$(./getcanary $PID)

如何将命令写入额外的终端?我已经尝试了几种解决方案,
echo "cmd" > /proc/$PID/fd/0

是其中之一
我也试过了
mkfifo fifo
cat > fifo &
./canary < fifo
echo "cmd" > fifo

我的环境不允许使用其他一些解决方案,因为脚本必须在干净的xubuntu安装上运行,所以我不能使用screen或tmux
我希望你能帮助我,
谢谢您!:)
注:很抱歉,如果我误解了我尝试过的任何解决方案,我对shell脚本不是很熟悉。

最佳答案

写入终端,而不是运行进程!

#!/bin/bash
echo "start canary"
x-terminal-emulator -e ./canary &
termpid=$!
sleep 1
xvkbd -window $(xdotool search --sync --pid $termpid) -text "echo Hello world!\n"

关于linux - 在后台启动进程,获取PID,然后在Shell中写入stdin,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47004891/

10-11 10:24