部分写固定思路
我们知道, 在开启了随机化(ASLR,PIE)后, 无论高位的地址如何变化,低 12 位的页内偏移始终是固定的, 也就是说如果我们能更改低位的偏移, 就可以在一定程度上控制程序的执行流, 绕过 PIE 保护。
正常情况我们不能写入12位,只能写入16位,因此我们只能猜测最后4位(一个16进制位)的数值,然后循环碰撞即可。
|
|
注意:gets()
、printf()
等字符串输入函数会在输入末尾加上\x00
导致部分写失败。部分写只在read()
上使用。
我们知道, 在开启了随机化(ASLR,PIE)后, 无论高位的地址如何变化,低 12 位的页内偏移始终是固定的, 也就是说如果我们能更改低位的偏移, 就可以在一定程度上控制程序的执行流, 绕过 PIE 保护。
正常情况我们不能写入12位,只能写入16位,因此我们只能猜测最后4位(一个16进制位)的数值,然后循环碰撞即可。
|
|
注意:gets()
、printf()
等字符串输入函数会在输入末尾加上\x00
导致部分写失败。部分写只在read()
上使用。