이 두 유형의 공격의 정확한 차이점을 이해하고 싶습니다. 읽은 내용 :차이점 - 버퍼 오버플로 및 libc 공격으로 돌아 가기
버퍼 오버플로 : 스택의 ret 주소를 악성 코드가 삽입 된 코드의 다른 섹션을 가리 키도록 덮어 씁니다. 그래서 효과적으로 - 실제로 공격을 수행하기 위해 프로그램의 소스 코드를 수정해야합니다.
로 돌아 가기 Libc-로 돌아 가기 소스 코드를 수정하는 대신 C 라이브러리에서 제공하는 런타임 함수 호출이 사용됩니다 (예 : 셸 열기). 여기서 함수 호출에 사용 된 매개 변수는 스택의 ret 부분 이후에 끝나는 덮어 쓰기 버퍼에도 전달됩니다.
위 내용이 정확한 설명입니까?
그리고 또 다른 관련 질문 - 원래 프로그램의 소스 코드를 실제로 수정하지 않고도 버퍼 오버 플로우 공격이 가능합니까? 아마도 새 프로그램을 작성하여 메모리의 특정 섹션 (원래 프로그램의 손상된 스택에있는 새 재시도 주소)을 수정할 수있는 경우 일 것입니다. 그렇다면 커널에서 프로세스간에 제공되는 메모리 보호로 인해 이것이 가능하지 않을 수도 있습니다.
무슨 뜻인지 설명해 주시겠습니까? 메모리를 실행 가능 (또는 비 실행 가능)로 설정하십시오. 그리고 다른 의심 (내 원래 질문의 일부)은 - 나는 C 코드가 메인 메모리의 모든 부분에 액세스하지 못할 것이라고 믿는다. 악의적 인 어셈블리 코드가 메모리에 저장되는 위치는 어떻게 확인됩니까? 대부분의 메모리 영역을 생각하기 때문에 거기에 돌아 왔을 때 세분화 오류가 표시됩니다. – Hari
삽입하는 익스플로잇 코드의 핵심은 일반적으로 패밀리 스타일 기능을 사용하고 exec()입니다. 즉, 적절한 매개 변수를 입력하면 루트 사용자로/bin/sh 쉘을 생성 할 수 있습니다. 이것은 프로그램을 실행하고 * 더 이상 할 수 없습니다. 다양한 보안 조치가 있지만이 내용은 예를 들어 – gnometorule
http://en.wikipedia.org/wiki/NX_bit에 설명되어 있습니다. – gnometorule