我正在尝试使用执行调用的二进制文件执行权限提升攻击:
system("/bin/sh");
有没有办法将命令作为“参数”等传递给打开的shell? (我没有看到它打开,我想它会立即运行并且在没有任何关系的情况下立即死亡。)
编辑:我无法编辑代码。它已经编译好了。
答案 0 :(得分:1)
如果你执行
system("/bin/bash");
shell进入交互模式。它从标准输入读取命令并将答案写入标准输出。标准输入和输出继承自调用(您的)程序。您的程序将一直等到shell完成(即直到您输入命令exit
或者在行的开头键入^ D)。 shell将以与调用程序相同的权限运行。
答案 1 :(得分:0)
你需要做的是将stdin连接到一些东西,当它被读取时,在调用该代码之前提供的命令源。
我在bash中写下面的内容,但您可以将其转换为您实际打算执行此操作的任何语言:
# create a file with the commands you want to run
cat >/tmp/commands <<'EOF'
echo "Hello world"
EOF
# open that file and copy its file descriptor to FD 0 (stdin)
exec </tmp/commands
# then invoke your compiled executable that starts a shell.
run-your-command-that-starts-a-shell
另一个选择是将ENV
的文件名传递给源:
cat >/tmp/commands <<'EOF'
echo "Hello world"
EOF
ENV=/tmp/commands run-your-command-that-starts-a-shell