Profile

youngsouk

youngsouk

LOB FC3 hell_fire -> evil_wizard

오늘은 LOB 4단계인 hell_fire를 풀어볼겁니다. 우선 소스부터 보져


흠 GOT overwriting을 써야하군요 GOT에는 실제 함수의 주소들이 저장되어있는데 그것을 덮어씌어서 printf문 대신에 system(/bin/sh) 가 실행되게 만들겁니다. 자 이제 objdump를 이용해 <strcpy@plt>, <printf@plt>를 구하고, <pop_pop_ret>을 gdb를 통해 구해봅시다.

그리고 사진에는 안나와있지만 objdump -d ./evil_wizard | grep printf@plt주소 요거를 해주시면 printf@got가 구해집니다.



여기 pop_pop_ret 주소를 구할 때 우리는 pop 2번 + ret만 필요하므로 <pop_pop_ret + 3>의 주소를 구해야합니다.


자 이번에는 마지막에 넣을 system()의 주소와 /bin/sh의 주소를 구해봅시다.


이제 system 함수의 주소 0x7507c0을 리틀 엔디안 방식으로 하나 하나 objdump를 이용해 찾아줍시다. 

저기저 빨간색 된부분의 아무거나 이용해도 됩니다. 이제 공격 코드를 구상해보죠. 일일이 수작업으로 하기는 귀찮으니 파이썬을 이용해 1문자씩 복붙하는것을 만들죠


https://st4nw.tistory.com/58?category=760763


여기를 참고하면 됩니다. 아니면 수작업으로 하실분의 페이로드는

dummy268 + strcpy@plt(그냥 strcpy의 주소가 안되는 이유는 ascii armor 때문입니다.) + pop_pop_ret + print@got[1] + \xc0의 주소

+ strcpy@plt+ pop_pop_ret + print@got[2] + \x07의 주소

+ strcpy@plt+ pop_pop_ret + print@got[3] + \x75의 주소 

+ strcpy@plt+ pop_pop_ret + print@got[2] + \x00의 주소 

이 되게 됩니다. 저는 왠지 모르지만 안되서 수작업으로...ㅠㅠㅠㅠㅠㅠ


참고로 저기 왜 pop_pop_ret를 하냐면 pop 2번을 하게 되면 저 인자들을 건너띄어서 esp가 우리가 원하는 리턴값으로 가기 때문입니다. 함수 인자에 따라서 pop의 개수는 유동적으로 변하게 됩니다.



요렇게 완료가 됩니다.

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

LOB FC3 evil_wizard -> dark_stone  (0) 2019.02.25
LOB FC3 dark_eyes -> hell_fire  (0) 2019.02.22
해커스쿨 lOB FC3 iron_golem -> dark_eyes  (0) 2019.02.22
LOB FC3 gate -> iron_golem  (0) 2019.02.22
FC3 보호기법에 대해  (0) 2019.02.22