新的bash脚本编写因此有一点小问题,并且想知道是否有人可以解决我遇到的一些麻烦,我有一个简单的C文件叫做test,它创建一个shell,如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main()
{
execl("/bin/sh", "/bin/sh", (void *) NULL);
perror("exec");
return 1;
}
我想创建一个bash脚本来执行这个文件,我在下面已经完成了,但是在执行时我希望将命令发送到二进制文件创建的shell - 这是否可能我尝试以下无效:
#!bin/bash
/var/testfolder/test; # execute the test c file to spawn the shell
??? #don't know how to pass commands to the new shell created :(
答案 0 :(得分:0)
您编译的C二进制文件是否具有我认为的SETUID权限?使用二进制和参数,您可以使用此二进制权限执行任何类似的shell:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main( int argc, char ** argv )
{
execv("/bin/sh", argv );
perror("exec");
return 1;
}
输出测试脚本以打印参数和当前进程:
$ ./test_execv ./test.sh foo bar
Executing $0: ./test.sh
Args $*: foo bar
process:
PID TTY TIME CMD
3300 pts/1 00:00:08 bash
3498 pts/1 00:00:00 sh
3499 pts/1 00:00:00 ps
安全问题
如果您可以将脚本执行到root shell,则任何人都可以执行此操作。我想你只需添加一些你的脚本(只有那些需要的)和一个sudo权限,从你需要的帐户以root身份运行。
答案 1 :(得分:0)
试试这个:
#!/bin/bash
/var/testfolder/test <<EOF
cmdtopass1
cmdtopass2
cmdtopass3
EOF