我需要为我的系统安全课程做一个缓冲区溢出。因此我有一个程序(称为canary)我需要启动它要求输入字符串(read())。 我需要计算一个金丝雀(用PID和时间构建的随机金丝雀)来成功缓冲区溢出。我已经写了一个程序(getcanary),它让我得到了正确的金丝雀。问题: 我尝试在额外的终端中启动金丝雀,然后获取它的PID,然后计算程序,然后写入金丝雀的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
我希望你能帮助我, 谢谢! :)
PS:我很抱歉,如果我误解了我尝试的任何这些解决方案,我对shell脚本不太熟悉。答案 0 :(得分:0)
写入终端,而不是正在运行的进程!
#!/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"