0x01程序分析

程序开启了PIE,说明got表和plt表位置需要通过泄露得到。
题目一共可以存放下标为0-9一共10个role,游全局变量0x202130存放。Add函数添加role的管理结构,并将该结构指针存放于全局变量0x2020e0中。输入“S”则调用print的函数指针显示role管理结构所指向的内容。

Add函数,为每一个添加的role分配一个结构用于管理,并将该结构地址返回存放于全局变量0x2020e0中。

0x02利用思路
Add函数中第一个gets用来修改name指针存放的位置,第二个gets修改显示的内容。泄露heap地址
通过变量覆盖修改role[1]的指针为0x55xxxx0050,将role[1]的信息存放到0x55xxxx0050处,之后泄露heap地址的时候可以通过第二个gets覆盖v7为0x55xxxx0050读取name处存放的堆地址(gets在末尾会自动添加'\x00')。
add('b'*0x28+'qtsqtshh'*2+'b'

本文详细分析了一个开启PIE保护的程序,探讨了如何通过变量覆盖泄露heap和程序地址,以及如何修改got表实现控制流程。首先,通过覆盖role[1]指针泄露heap地址,然后伪造role[3]以泄露func_ptr地址。最后,利用system与strlen的固定偏移修改strlen的got表,实现权限提升。
最低0.47元/天 解锁文章
1332

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



