버퍼 오버플로 익스플로잇을 이해하려고합니다.보다 구체적으로 어떻게 자신의 코드를 실행하는 데 사용할 수 있습니까? 우리 자신의 악의적 인 응용 프로그램이나 비슷한 것을 시작합니다.버퍼 오버플로 익스플로잇을 사용하여 자체 코드 실행
gets() 함수를 사용하여 버퍼 오버플로 문제를 이해하고 있지만 (충분히 긴 문자열로 반환 주소를 덮어 쓰고 그 주소로 건너 뛰기) 이해할 수있는 몇 가지 사항이 있습니다. 실제 응용 프로그램에서는 다음과 같습니다 :
반환 코드 바로 뒤에있는 문자열에 내 코드를 넣을 수 있습니까? 그렇다면 점프 할 주소를 어떻게 알 수 있습니까? 그리고 그렇지 않다면 어디서 뛰어 오르고 실제 코드는 어디에 있습니까?
코드를 실행하는 실제 페이로드는 실행중인 소프트웨어이고 다른 프로그램은 페이로드에 제공된 모든 지침입니까? 또는 더 구체적으로, 버퍼 오버플로 익스플로잇 구현은 실제로 어떻게 생겼습니까?
주소 (또는 명령어)에 0이 포함되어 있으면 어떻게해야합니까? gets() 함수는 0을 읽었을 때 읽기를 멈추므로이 문제를 어떻게 해결할 수 있습니까? 숙제로
일반적으로 공유 라이브러리 중 하나에서 jmp에서 rsp와 같은 명령어를 찾습니다. 공유 라이브러리는 항상 알려진 주소에로드되므로 외부에서 이러한 함수의 주소를 확인할 수 있습니다. –
이것은 [Sec.SE] (https://Security.stackexchange.com) – SmokeDispenser