원격 서버에서 실행중인 응용 프로그램을 악용하는 프로젝트 (사실상 경쟁 대상)로 작업 중입니다. 일부 디버그 정보 (소스 코드 없음)와 스택 보호 기능을 사용하여 컴파일 된 바이너리가 있습니다. 쉘 코드를 스택에 주입하고 반환 주소를 덮어 쓰면 문제없이 실행됩니다.버퍼 오버플로 - 하드 코드 된 복귀 주소
유일한 것은 내가 하드 코딩 된 반송 주소를 주입한다는 것입니다. 운영 체제 및 아키텍처 (32 비트 여야 함)에 따라 약간의 주소 차이가있을 수 있습니다.
서버가 ASLR로 바이너리를 실행하는지 여부는 알 수 없습니다. 그러나 그것은 비활성화되었습니다 - 동적 인 적절한 반송 주소를 주입하는 방법이 있습니까?
또한 로컬로 내 컴퓨터에서 실행되는 서버에 연결하여 가능한 ASLR 주소를 강제로 시도했습니다. 반환 주소가 정확하지 않으면 분기 된 프로세스가 충돌하기 때문에 파일 설명자가 해제되지 않고 1024를 시도한 후에 더 이상 연결할 수 없습니다. 주소를 무차별 공격 할 수 있습니까?
감사합니다.
고맙습니다! 질문 하나만 더 : EIP를 여전히 제어하지 않으면 사용 가능한 주소를 어떻게 계산할 수 있습니까? 글쎄, 나는 그것을 제어하지만 나는 그것으로 내 자신의 코드를 실행할 수 없습니다. – toetoe
제 사과를 받아 들여주세요.하지만 제 의견을 제대로 이해하지 못한다고 생각합니다. 당신이 내 대답을 언급하고 있다면, 특별한 상황에서 취약한 함수 안에있는 함수의 지역 변수를 참조하는 포인터의 값이 애플리케이션에 누설된다고 상상해보십시오 (얼마나 편리합니까?). 스택 프레임 레이아웃을 알고있는 바이너리를 가지고 있기 때문에이 값을 사용하여 스택 프레임 주소를 계산할 수 있습니다. 따라서 2 단계 공격입니다 : 1) 유출 된 포인터의 값을 검색합니다. 2) 이전에 검색된 값을 사용하여 페이로드 위치를 계산합니다.> ASLR이 활성화 된 스택 기반 오버 플로우 공격을 계산합니다. – dna
네, 무슨 뜻인지 압니다. 문제는 바이너리가 원격으로 실행되고 주소가 네트워크를 통해 전송되어야한다는 것입니다. 불행히도 그럴 가능성은 없습니다. – toetoe