소스를 보면 다음과 같이 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
블로그 이미지

JeonYoungSin

메모 기록용 공간

,