이 게시물을 만들기 전에 이전의 QA를 시도했지만 읽지는 않았지만 정확한 질문에는 대답하지 않는 것 같습니다. .EIP를 ESP 주소로 지정하고 ESP에 내 쉘 코드를 넣었지만 SIGSEGV, Segmentation 오류가 발생했습니다
아래 링크의 가이드를 참고하기도하지만 중요한 것을 놓치고 있습니다.
https://www.corelan.be/index.php/2009/07/19/exploit-writing-tutorial-part-1-stack-based-overflows/
다음은이 프로그램의 버퍼 오버 플로우는 내가 EIP와 EBP의 오프셋 (사용 MSF 도구)를 파악, 내가 지금까지 무슨 짓을했는지. 그것은 각각 267과 263입니다.
첫 번째 입력으로 "42"를 입력해야하는 경우 A * 264에 버퍼 오버 플로우를 줄 수있는 다른 질문이 표시됩니다. 아래는 내가 사용하고있는 페이로드입니다. 문자열 42, NOP 썰매 (정확하게 263 개), EBP 값 보존, ESP 메모리 오프셋 (0xbffff480)을 EIP와 쉘 코드에 덮어 씁니다.
I 실행 후에 상기, GDB에서 I는 ESP 및 EIP 값, 즉 동일하다 보면 0xbffff480 내 쉘 코드 넣어하고 EIP이 가리키는 곳이다
. 하지만, 왜 내 쉘 코드가 실행되지 않습니까? "프로그램 수신 신호 SIGSEGV, 세그먼트 오류"로 실패합니다.
어디서 잘못 가고 있는지 잘 모르겠습니다. ESP 값으로 EIP를 가리키거나 겹쳐 쓰는 것에 대한 나의 생각은 잘못 되었습니까? 아니면 내 셸 코드와 관련이 있을까요? 예를 들어 무언가를 출력하거나 실행이 진행되고 있는지 확인하는 간단한 쉘 코드/페이로드를 작성하려면 어떻게해야합니까?
는 업데이트 :
나는 이진은 NX가 내가 가진 출력은 아래의 활성화 여부를 확인하기 위해 checksec.sh 스크립트를 사용했다.
RELRO STACK CANARY NX PIE RPATH RUNPATH FILE
Partial RELRO No canary found NX enabled No PIE No RPATH No RUNPATH output
내 쉘 코드를 실행할 수 없다는 뜻입니까? NX를 우회하거나 우회하는 데 집중해야합니다. - 부분 릴로가 어떤 차이를 낳습니까?
바이너리가 DEP 또는 ASLR을 사용할 수 있습니까? – drum
또한 쉘 코드가 제대로 작동합니까? – drum
빠른 응답을 주셔서 감사합니다 @ 드럼. 어떻게 활성화되어 있는지 확인할 수 있습니까? 또한 어떻게 쉘 코드를 테스트 할 수 있습니까? msfpayload를 사용하여 생성했습니다. 'code'msfpayload linux/x86/exec CMD =/bin/sh R | msfencode -b \ x00 \ xff -t c> 쉘 코드 – h4xorhead