Profile

youngsouk

youngsouk

해커스쿨 lOB FC3 iron_golem -> dark_eyes

이번에는 iron_golem을 풀어볼것입니다. 먼저 dark_eyes 프로그램의 소스를 보져


hint를 보면 RET sleding이라고 합니다. RET sleding이란 리턴주소에 RET명령어가 계속 실행하게 해서 ebp의 값을 우리가 원하는 값으로 변조한뒤에 우리가 원하는 함수가 실행되게 하는겁니다. RET sleding 기법으로 ebp 변조를 하게되는 과정은 

1. 원래 함수의 leave, RET 실행 (pop 2번 -> esp 4 * 2만큼 상승)

2. RET 부분에 RET명령어를 원하는 갯수만큼 씀 

3. RET명령은 pop eip, jmp eip로 구성되어있으므로 esp는 RET를 실행할 때마다 4씩 상승

4. 우리가 원하는 함수 실행 

5. 함수 진입과정에서 push ebp, mov ebp, esp가 실행되어 ebp가 우리가 원하는 값으로 변조됨 

이렇게 됩니다. 이 과정이 실행되면 ebp의 값은 원래의 ebp + 4 * (RET갯수 + 1)이 됩니다. 왜냐하면 원래의 함수 종료과정에서 pop 2번, RET 갯수만큼 pop ,우리가 실행시킬 함수의 시작부분에서 push됩니다. 고로 ebp 주소는 ebp + 4 * (2 + rep 갯수 -1)이 되게 됩니다. 고로 ebp 주소는 ebp + 4 * (RET 갯수 + 1)로 되고 첫번째 인수는 ebp 주소 + 8이 됩니다.

자 이제 execl의 함수의 인수가 될 곳을 선택하죠 


흠 저는 여기서 0xFEEA4DF0를 인자로 쓰겠습니다. 이것을 바탕으로 우리가 삽입해야할 ret 주소의 값을 구해보면 3개가 됩니다. 다음으로 execl의 함수의 주소와 우리가 만들어야 할 프로그램의 이름을 알아보죠


2019/02/22 - [해커스쿨 LOB] - LOB FC3 gate -> iron_golem


위 글에서 했듯이 입력할 Dummy 갯수를 알아내고 쉘을 실행시키는 프로그램을 작성한 뒤에 심볼릭 링크를 걸어줍니다. 




그리고 RET 명령어의 주소까지 알아내면 payload를 작성하기 위한 준비는 끝났습니다.


지금까지 알아낸 정보를 바탕으로 공격을 하면 



이렇게 쉘이 따지게 됩니다. 봐주셔서 감사합니다.

'해커스쿨 LOB' 카테고리의 다른 글

LOB FC3 hell_fire -> evil_wizard  (0) 2019.02.23
LOB FC3 dark_eyes -> hell_fire  (0) 2019.02.22
LOB FC3 gate -> iron_golem  (0) 2019.02.22
FC3 보호기법에 대해  (0) 2019.02.22
bash 쉘 코드 입력기 프로그램 공유(putty용)  (0) 2019.02.11