소스를 보면 다음과 같이 RET값을 스택 및 공유 라이브러리 영역으로 지정할 수 없고 이전단계에서 추가된 사항으로 인해 RET뒤로는 값을 채울수가 없다. SFP와 RET만 가지고 뭔갈 해야되는데 친절하게 FEBP라고 Fake EBP 기법을 쓰라고 적혀있다.
FAKE EBP 기법을 간단히 설명하면 EBP값을 조작한 뒤 RET에 leave ret Gadget을 넣어 leave ret을 한번더 실행하게하면 현재 EBP영역의 4바이트값이 leave명령어에 의해 제거되고 결국 EBP+4영역의 4바이트값이 ret를 통해 실행되는 형식이다.
조작할 EBP 영역은 쉘코드의 주소값이 담긴 영역에 -4바이트 이다.
여러가지 방법이 있지만 현재 buf에 내가원하는 값을 담을 수 있기 때문에 buf에 쉘코드 주소를 담고 실제 쉘코드는 성공확률을 높이기위해 NOP를 많이 박으려고 환경변수를 통해 올려놨다.
먼저 환경변수에 쉘코드를 올려놓은 후 주소를 구했다.
그럼 현재까지 "\x96\xfe\xff\xbf"+"A"*36+"buf-4주소"+"leave ret gadget 주소" 이렇게 완성할 수 있고 buf-4주소는 임의의 값을 넣은 후 세그먼트 fault 발생시켜 코어파일을 통해 구했다.
buf-4 주소 = 0xbffff9bc
현재까지 페이로드는 "\x96\xfe\xff\xbf"+"A"*36+"\xbc\xf9\xff\xbf"+"leave ret gadget 주소" 이고 마지막으로 leave ret gadget은 main 함수 맨 마지막에 있는 주소를 썼다.
leave ret gadget 주소 = 0x80484df
이제 필요한건 다구했으니 익스플로잇 해주면된다.
"\x96\xfe\xff\xbf"+"A"*36+"\xbc\xf9\xff\xbf"+"\xdf\x84\x04\x08"
'Wargame > Lord Of the Bof(redhat)' 카테고리의 다른 글
LOB succubus -> nightmare (0) | 2018.01.12 |
---|---|
LOB zombie_assassin -> succubus (0) | 2018.01.11 |
LOB giant -> assassin (0) | 2018.01.11 |
LOB bugbear -> giant (0) | 2018.01.11 |
LOB darkknight -> bugbear (0) | 2018.01.10 |