劫持系统(“/ bin / sh”)运行任意命令

时间:2017-04-08 12:42:26

标签: c linux shell

我正在尝试使用执行调用的二进制文件执行权限提升攻击:

system("/bin/sh");

有没有办法将命令作为“参数”等传递给打开的shell? (我没有看到它打开,我想它会立即运行并且在没有任何关系的情况下立即死亡。)

编辑:我无法编辑代码。它已经编译好了。

2 个答案:

答案 0 :(得分:1)

如果你执行

system("/bin/bash");

shell进入交互模式。它从标准输入读取命令并将答案写入标准输出。标准输入和输出继承自调用(您的)程序。您的程序将一直等到shell完成(即直到您输入命令exit或者在行的开头键入^ D)。 shell将以与调用程序相同的权限运行。

答案 1 :(得分:0)

如果你控制stdin

你需要做的是将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