Lord of BOF_15_Assassin

이번에는 strncpy를 이용하여 복사하는 길이에 제한이 있다. 딱 return address까지만 복사하며, return address에 스택 주소나 라이브러리 주소가 올 수 없다.

EBP backup 조작을 막지 않으므로 Fake EBP를 이용할 수 있다.

EBP를 셸 코드의 주소가 있는 위치보다 4 낮은 곳으로 옮기고, 실행파일에 있는 leave-ret 코드를 return address로 하여 다시 한 번 ESP가 바뀌게 한다.

leave를 실행한 상태에서 ret를 하면 (임의로 정한 EBP주소+4) 위치에 저장되어 있던 주소를 return address로 이용한다.

환경변수에 셸 코드와 주소를 등록하고 프로그램을 터트려 core파일을 생성, 정확한 주소를 확인했다.

셸 코드의 시작 주소는 0xbffffea0 이다. EBP를 보낼 주소는 0xbfffff09 이다.

leave-ret 가젯 주소는 0x080484df이다.

환경변수에 셸 코드 주소를 넣어 조정한 뒤 payload를 보낸다.

zombie_assassin 의 비밀번호는 no place to hide 이다.


tags: writeup, pwnable, buffer overflow, stack overflow, memory corruption, elf file, linux, ret sled, fake ebp, c lang, x86asm