1. 문제 의도 파악
파일을 한번 실행시켜보았다.
오 자살방지 문제라니.. 쉽나보다 다행....
printf 함수를 통해 v4의 주소가 leak 되고 있다. 나중에 써먹으면 될 듯하다.
그리고 gets 함수로 입력을 받아 v4 버퍼에 저장하는데, gets 함수는 입력값을 검증하지 않기에 bof를 일으켜 RET 값을 변경할 수 있을 것이다.
2. Offset 구하기
main의 스택 프레임은 위와 같다.
v4의 시작주소는 RBP-0x6D30이므로, RBP로부터 27952 Byte 만큼 떨어져있다.
-> offset은 (27952 + 8)이다.
따라서 버퍼에 shellcode를 넣고 RET 전까지를 dummy 값으로 채운 뒤 RET에 v4의 시작 주소를 넣으면 될 듯하다.
payload는 다음과 같을 것이다.
payload = "shell code" + "dummy 값" + v4의 주소
3. payload 작성하기
위의 논리대로 payload를 작성해보았다.
x64라는 점을 고려해서 쉘코드도 x64용 쉘코드를 썼다.
그리고 v4의 주소는 실행 시 노출이 되기 때문에 14바이트만큼 받아서 16진수로 변환해서 사용하였다.
완성된 Payload는 다음과 같다.
shellcode(23Byte) + Dummy값(27952+8-23) + v4의 시작주소
성공적으로 flag를 획득하였다!!
'Wargame > HackCTF' 카테고리의 다른 글
[HackCTF] RTL_Core (0) | 2021.03.31 |
---|---|
[HackCTF] RTL_World (0) | 2021.03.20 |
[HackCTF] Basic_FSB (0) | 2021.03.19 |
[HackCTF] Basic_Bof #2 (0) | 2021.03.19 |
[HackCTF] Basic_Bof - Simple_Overflow_ver_2 (0) | 2021.03.13 |