오늘은 x64 Buffer Overflow를 정리하겠습니다
제목부터 64비트에서 BOF를 터트리라는거 같군요👀
우선 Mitigation을 확인해보면
NX와 FULL RELRO가 걸려있습니다.
IDA로 까보겠습니다.
너무 짧은 코드라 굉장히 쉬운 문제이다.
맨처음 _isoc99_scanf로 변수 S에 입력을 받을텐데
Buffer Check를 해주지 않으니 BOF가 터질 것이다.
그럼 우리는 여기서 쉘을 띄울 수 있는 방법을
생각해야된다.
우선 Mitigation을 확인하였을때 NX bit가 걸려있어
쉘코드 삽입은 불가능 할 것이다.
ASLR은 걸려있지 않은거 같으니
RTL 기법으로 풀면 될거 같다.
공교롭게도 callMeMaybe라는 함수가 존재한다.
이 함수의 주소값으로 RET Overwrite를 진행하면 될거 같다.
바로 페이로드를 작성해봅시다👏
페이로드도 정말 간단합니다.
S의 Buffer을 Dummy 값으로 채워준 후
RET Overwrite를 위해 SFP 역시 Dummy 값으로 채워줍니다.
그 후 RET 부분에 callMeMaybe 주소를 대입해줍니다.
그럼 FLAG가 뜨게 됩니다🙌
정말 기초 문제라 어려운 점은 없었지만
하나 주의 할 점은 Binary 파일이 64비트이기 때문에
여태까지 풀었던 32비트 문제들과는 달리 SFP의 크기가 8byte라는 것
또한 패킹을 해줄때 p32가 아닌 p64로 패킹을 해주는 것만
주의한다면 너무나도 쉬운 문제입니다
감사합니다🙇♀️
FLAG = HackCTF{64b17_b0f_15_51mpl3_700}
'Wargame > HackCTF' 카테고리의 다른 글
[Pwnable] Simple_Overflow_ver_2 (0) | 2020.09.19 |
---|---|
[Pwnable] x64 Simple_size_BOF (0) | 2020.09.19 |
[Pwnable] 내 버퍼가 흘러넘친다!!! (0) | 2020.09.15 |
[Pwnable] Basic_FSB (0) | 2020.09.06 |
[Pwnable] Basic_BOF #1 & Basic_BOF #2 (0) | 2020.09.02 |