profile image

L o a d i n g . . .

1. 문제 의도 파악

파일을 한번 실행시켜보았다.

오 자살방지 문제라니.. 쉽나보다 다행....

 

ida로 파일을 띄어보았다.

 

printf 함수를 통해 v4의 주소가 leak 되고 있다. 나중에 써먹으면 될 듯하다.

그리고 gets 함수로 입력을 받아 v4 버퍼에 저장하는데, gets 함수는 입력값을 검증하지 않기에 bof를 일으켜 RET 값을 변경할 수 있을 것이다.

 

 

 

2. Offset 구하기

main의 스택 프레임

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
복사했습니다!