본문 바로가기

Wargame/Lord Of Buffer overflow

[LOB] 11번 skeleton -> golem





id : golem

password : cup of coffee


로그인 후 darkknight.c 코드를 보면 다음과 같다.







이번 문제는 FPO를 이용하면 된다.


FPO(Frame Pointer Overwrite)란 main에서 서브함수를 호출했을 때 서브함수의 SFP 1byte를 조작해서 서브함수가 종료되었을 때 ebp를 바꿔주고 main 함수의 에필로그 때 쉘코드가 있는 주소로 갈 수 있도록 해준다.






일단 bash2로 바꿔주고 길이가 같은 파일 이름으로 복사해준다.


그리고 gdb로 분석하는데 gdb는 주소가 부정확하므로 core dump로 분석을 해봐야한다.





darkknight는 권한이 없어서 core 가 안뜨므로 복사본으로 core를 분석해야 한다.





서브 함수의 에필로그에서 

mov esp, ebp

pop ebp

pop eip


를 통해 ebp는 0xbffffaac로 바뀐다.


그리고 main 함수로 돌아가서 main 함수를 종료시켜 주는데


main 함수의 에필로그에서 pop eip가 0xbffffab4가 되어


nop sled를 통해 쉘코드가 실행된다.






따라서 SFP의 1byte를 \xac로 바꿔주면 쉘이 실행된다.


비밀번호를 알아낼 수 있다.

'Wargame > Lord Of Buffer overflow' 카테고리의 다른 글

[LOB] 15번 giant -> assassin  (0) 2017.12.01
[LOB] 13번 darkknight -> bugbear  (0) 2017.11.22
[LOB] 10번 vampire -> skeleton  (0) 2017.11.17
[LOB] 9번 troll -> vampire  (0) 2017.11.16
[LOB] 8번 orge -> troll  (0) 2017.11.16