[Hack CTF – x64 Simple_size_BOF]
Wargmae/HackCTF

[Hack CTF – x64 Simple_size_BOF]

728x90

Hack CTF – x64 Simple_size_BOF

 

Execute

Simple_size_bof실행 결과

먼저 문제 파일을 실행 하면 특정 address값을 leak해조고 문자열을 입력받는다. 실행시마다 leak되는 값이 달라지는 것을 확인 할 수 있다.

 


 

 

Analyze

Mitigation

아무런 보호기법도 걸려있지 않은 것을 확인할 수 있다. 특히 nxbit가 풀려있으므로 shellcode를 올려서 shell을 얻을 수 있다.

Main

 

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 addressv4변수로 변경하면 성공적으로 shell을 획득할 수 있을 것이다.

먼저 shellcode를 만들어야 하는데 앞선 문제처럼 msfvenom을 이용해 생성 할 것이다. /bin/sh명령을 수행하는 64bit환경의 shellcode를 만들면 된다.

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파일이므로 sfp8byte일 것이다. 결과적으로 payload는 아래와 같다.

 

Shellcode(47byte)+dummy*0x6d01+sfp(8byte)+v4leak address

 

 

 

여기까지의 결론을 바탕으로 exploit을 작성해보자.

 

 

성공적으로 shell을 얻어 flag를 확인 할 수 있다.

728x90

'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