我需要为我的系统安全类(class)做一个缓冲区溢出。因此我确实有一个程序(称为金丝雀)我需要启动它要求输入字符串(read())。 我需要计算一个金丝雀(使用 PID 和时间构建的随机金丝雀)以成功缓冲区溢出。我已经编写了一个程序 (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 上运行,所以我不能使用屏幕或 tmux
我希望你能帮助我, 谢谢你! :)
PS.:如果我误解了我尝试过的任何这些解决方案,我很抱歉,我对 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 中写入标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47004891/