Wargame/HackCTF

[HackCTF] x64 Buffer Overflow 문제 풀이

핏디 2021. 7. 17. 02:50
SMALL

[문제]

 


[풀이]

64bof_basic 파일의 보호기법과 파일 형태를 확인하니 이전과 달리 64비트로 구성되어 있었다. NX 또한 enabled 상태로 쉘코드를 삽입하는 것은 불가능하다. 이에 gdb를 확인해보았다.

 

info func 명령으로 함수 목록을 확인하니 callMeMaybe라는 함수가 눈에 띄었다.

 

 

 

해당 함수를 disassemble 해봤고, callMeMaybe+8에서 /bin/bash로 쉘을 실행하는 것을 알 수 있었다.

이에 callMeMaybe 함수를 이용해 exploit 할 수 있음을 알 수 있었다.

 

이후 main 함수를 확인하니 코드가 다음과 같이 구성되었다.

더보기

main+24 : scanf 로 입력 받는 값을 저장할 공간 할당

main+44 : scanf 함수 호출

main+49~59 : 입력 받은 값의 길이 계산

main+77 : "Hello %s" 문자열 가져옴

main+87 : Hello [입력 값] 출력

 

main(){

scanf();

printf("Hello %s");

return 0;

}

 

먼저, scanf 입력 받는 곳에 bp를 걸어두고 rbp-0x110의 값을 확인하니 입력 값이 저장되고 있었다.

 

이후 ret까지 실행해보니 ret을 실행하기 위해

0x7fffffffdf48 --> 0x7ffff7a03bf7 (<__libc_start_main+231>: mov    edi,eax)

를 가져오는 것을 알 수 있었고, 0x7fffffffdf48은 rbp-0x110과 0x118(280)만큼 차이를 두고 있다.

 

이를 exploit 하기 위해서는

dummy(280) + callMeMaybe 주소 입력을 해주면 쉘을 실행할 수 있다.

 

 

LIST