본문 바로가기

CTF/Defcon

(4)
Defcon pwnable_speedrun-002 Write up 일단 ROP 문제이다 ROP 하라고 친절하게 plt,got 준다. 일단 puts 로 릭한다음에 원가젯으로 박살내면 된다. 일단 서버가 데프콘 서버가 아니라서 맞는 libc 가 아니라 실제 offset 이 틀리다. 이점 감안하고 익스를 봐야된다. libc 확인하는법은 마지막 12비트는 검색하면 맞는 libc 가 나온다. https://libc.blukat.me 최종 익스플로잇은 from pwn import * p = process("speedrun-002") binf = ELF("speedrun-002") context.terminal = ['tmux', 'splitw', '-h'] #gdb.attach(p) #addr_read_got = binf.got['read'] #addr_read_plt = bin..
Defcon pwnable_speedrun-001 Write up 일단 이 문제는 간단한 SROP 문제이다. (그러면서 대회 당일날 못풀었다 ㅋㅋㅋ) 일단 syscall 을 구해줘야된다. 그리고 rax, rdi, rsi, rdx, syscall 순으로 구해줘야된다. 가젯을 구하기위해서 나는 ropgadget 이란것을 사용했다. 이런식으로 가젯을 구해주고 syscall 도 구하면 된다. 처음에 syscall 구하는방법을 몰라서 고생했다 ㅋㅋㅋㅋ 그냥 이런식으로 바꿔줘서 찾으면 된다 ㅋㅋㅋ 여기에 존재한다. 익스 시나리오를 짜보면 syscall 이 존재하므로 sys read 를 이용해서 bss영역에 /bin/sh 을 쓸준비를 한다. 그리고 bss 영역에있는 /bin/sh 을 사용하여 sys_execve 를 이용해서 쉘을 따주면 되겠다. from pwn import * p ..
Defcon pwnable_r0pbaby Write up 이거 익스하느라 좀 애먹었다 그냥 64비트 ROP 문제인데, 가젯이 재대로 안들어가서 애좀 먹었다 공격 시나리오는 3번에서 bof 가 터지므로 거기를 ROP 시키면된다. 3번 버튼을 입력하면 우리에 payload 에 맞게 길이를 입력해주고 다음에 payload 를 던저주면 된다. from pwn import * context.terminal = ['tmux', 'splitw', '-h'] p = process("r0pbaby") binf = process("r0pbaby") #gdb.attach(p) p.recvuntil("\n:") p.send("2\n") p.recvuntil(":") p.send("system\n") p.recvuntil("Symbol system: ") tmp = p.recvunt..
PlaidCTF pwnable_ropasaurusrex Write up 전형적인 32 비트 ROP 문제이다. 공격 시나리오는 메모리 leak 을 시킨다음에 그걸로 offset 계산해서 익스시켜주면 되는 문제이다. 함수는 read 랑 write 함수가 주어진다. 그냥 개꿀하고 정석 ROP 로 익스시켜주면된다. from pwn import * #context.log_level = 'debug' context.terminal = ['tmux', 'splitw', '-h'] p = process("./ropasaurusrex") binf = ELF("./ropasaurusrex") #gdb.attach(p) write_plt = binf.plt['write'] write_got = binf.got['write'] read_plt = binf.plt['read'] read_got =..