system hacking

Layer7 포너블 2차시 과제 - overwrite_ret64 풀이

leesu0605 2022. 9. 21. 08:27

일단 파일을 다운받아 아이다로 열어보았다.

overwrite_ret32와 코드는 같았고,
아까처럼 buf address를 입력받아 파싱해주고, size에 페이로드의 길이를 입력해준 후, ret 주소를 변조할 페이로드를 보내주면 풀리는 문제 같았다.

그러나, 64비트이기 때문에 buf address의 길이가 많이 다르다.
아까는 4바이트로 출력됐지만, 이번엔 6바이트로 출력된다.

따라서 파싱 부분의 코드를 조금 바꿔주면 이 문제는 해결할 수 있다.

또, sfp와 ret 주소가 각각 4바이트에서 8바이트가 되므로, 264가 아닌 272를 입력해야 페이로드를 입력할 수 있다.
따라서 size를 입력받을 때 272를 보내주면 된다.

마지막으로 주소를 p32가 아니라 p64로 패킹해 보내주면 공격이 먹힐 것이다.

한 번 직접 구현해보자.

이렇게 아까 말했던 방식(쉘코드 + (264-쉘코드의 길이)의 무작위값 + buf를 p64로 패킹한 값)을 보내주면 쉘이 따진다.

이를 실행하면,

쉘이 제대로 따진 걸 볼 수 있다.

flag : L7{0e0674f9d00cfbe8d79f73a80ab29de8}