[BUUCTF]刷题记录-----roarctf_2019_easy_pwn

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

查看程序保护机制

题目分析

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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

saulgoodman-q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值