Profile

youngsouk

youngsouk

LOB FC3 gate -> iron_golem

이제부터 본격적으로 LOB FC3 풀이에 대해 할것입니다. 먼저 level1의 아이디와 비번은 모두 gate로 동일합니다! 먼저 iron_golem의 소스를 보져



여기서 strcpy 이 부분에서 BOF가 발생하고, 힌트를 보니 fake ebp라 되어있군요 fake ebp는 말 그대로 ebp를 우리가 원하는 값으로 변조 한뒤에 공격을 하는 것입니다. 우리는 여기서 RET에 execl함수 주소를 넣고 execl의 첫번째 인자의 주소 - 8을 한 주소로 ebp를 변조할 것입니다.

먼저 ASLR의 적용을 안받는 GOT부분을 보져



주소가 0x8049618인것을 알 수 있습니다. 다음에는 iron_golem 프로그램을 복사한 뒤 그 프로그램을 gdb로 열어보고 저 주소의 값들을 봅시다.




0x0804954c 의 값이 0x00000001이라는 것을 알 수 있습니다. 우리는 0x00000001 이라는 이름을 가진 프로그램을 만들고 그런뒤 0x0804954c - 8을 한 주소를 SFP에 넣고 RET에 execl+ 3이 되게 할것이다. 여기서 execl +3 이 RET인 이유는 모든 함수를 실행할 때 함수의 첫부분에 push ebp, mov ebp,esp를 실행하기 때문에 그냥 execve함수로 RET를 해주면 우리가 기껏 수정한 ebp가 무용지물이 된다.


다음으로 gdb를 통해 execl+3의 주소를 알아보자



execl+3의 주소는 0x7a5723이다. 자 그다음으로 0x00000001의 이름을 가진 쉘을 불러오는 프로그램을 만들자

이제 만들어 졌으니 ln 명령어로 0x00000001의 이름을 가진 프로그램으로 만들자 


그 다음에는 공격 코드에 Dummy르 얼마나 넣어야 하는지 알아봅시다.



main + 3 부분에 0x108을 빼는데 16진수 108은 10진수로 264입니다. 따라서 공격코드는 264바이트 아무거나 + (0x0804954c - 8)(SFP) + execl + 3주소(RET)가 됩니다. 자 공격해봅시다.



성공했군요 봐주셔서 감사합니다!