Hack CTF – x64 Simple_size_BOF
Execute
먼저 문제 파일을 실행 하면 특정 address값을 leak해조고 문자열을 입력받는다. 실행시마다 leak되는 값이 달라지는 것을 확인 할 수 있다.
Analyze
아무런 보호기법도 걸려있지 않은 것을 확인할 수 있다. 특히 nxbit가 풀려있으므로 shellcode를 올려서 shell을 얻을 수 있다.
Main
- Line 6 : s변수의 내용을 puts함수를 통해 출력한다.
- Line 7: printf함수를 통해 v4변수의 address를 leak해준다.
- Line 8 : gets함수를 통해 v4변수에 입력을 받는다.
gets함수는 입력값의 길이를 검증하지 않기 때문에 buffer overflow를 발생 시킬 수 있을 것이다.
Solve
앞서 말한 것처럼 NXbit가 해제 되어있기 때문에 shellcode를 메모리에 올려서 실행이 가능하다. 현재 v4변수에 입력이 가능하며 v4변수의 address까지 leak해주기 때문에 buffer overflow를 통해 return address를 v4변수로 변경하면 성공적으로 shell을 획득할 수 있을 것이다.
먼저 shellcode를 만들어야 하는데 앞선 문제처럼 msfvenom을 이용해 생성 할 것이다. /bin/sh명령을 수행하는 64bit환경의 shellcode를 만들면 된다.
buf = b""
buf += b"\x6a\x3b\x58\x99\x48\xbb\x2f\x62\x69\x6e\x2f\x73\x68"
buf += b"\x00\x53\x48\x89\xe7\x68\x2d\x63\x00\x00\x48\x89\xe6"
buf += b"\x52\xe8\x08\x00\x00\x00\x2f\x62\x69\x6e\x2f\x73\x68"
buf += b"\x00\x56\x57\x48\x89\xe6\x0f\x05"
성공적으로 shellcode를 생성 할 수 있다. 이제는 buffer overflow를 return address를 덮어쓸 때 정확히 얼마만큼의 dummy가 필요한지 계산해야 한다. 먼저 v4변수의 크기를 확인해보자.
rbp-0x6D30에 위치하는 것을 확인 할 수 있다. 따라서 dummy의 크기는 0x6D30-47일 것이다. 해당 크기를 계산하면 아래와 같다.
따라서 dummy의 크기는 0x6d01이다. 또한 이번 문제 역시 64bit elf파일이므로 sfp가 8byte일 것이다. 결과적으로 payload는 아래와 같다.
Shellcode(47byte)+dummy*0x6d01+sfp(8byte)+v4의 leak된 address
여기까지의 결론을 바탕으로 exploit을 작성해보자.
성공적으로 shell을 얻어 flag를 확인 할 수 있다.
'Wargmae > HackCTF' 카테고리의 다른 글
[Hack CTF - BOF_PIE] (0) | 2021.01.09 |
---|---|
[Hack CTF – Simple_Overflow_ver_2] (0) | 2021.01.06 |
[Hack CTF – x64 Buffer Overflow] (0) | 2021.01.05 |
[Hack CTF – 내 버퍼가 흘러넘친다!!!] (1) | 2021.01.03 |
[Hack CTF - Baisc_FSB] (0) | 2021.01.03 |