簡體   English   中英

將命令傳遞到使用bash腳本運行Shell的Binary中

[英]Passing Commands into a Binary that runs a shell using a bash script

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腳本來執行此文件,該文件我已經在下面完成了,但是在執行時,我希望將命令發送到該二進制文件創建的外殼-這是否可能使我無濟於事:

#!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 :(

我想您編譯的C二進制文件具有SETUID權限嗎? 使用二進制文件和參數,您可以使用以下二進制權限執行任何這樣的外殼程序:

#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

安全問題
如果您可以對根shell執行腳本,那么任何人都可以這樣做。 我認為您只需要添加一些具有sudo權限的腳本(僅需要的腳本)即可從所需帳戶作為root用戶運行。

嘗試這個:

#!/bin/bash
/var/testfolder/test <<EOF
cmdtopass1
cmdtopass2
cmdtopass3
EOF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM