GOT overwitre & GOT dereference
还是来自sploitfun
的blog,绕过地址随机化之三
概念
GOT overwitre
其实就是我们常说的GOT表覆写,这个got表的地址是早已经确定的,但got表的内容
offset_diff = execve_addr - getuid_addr
GOT[getuid] = GOT[getuid] + offset_diff
其实ret2dl-resolve
是不是有类似的地方
GOT dereference
这个没有使用过
offset_diff = execve_addr - getuid_addr
eax = GOT[getuid]
eax = eax + offset_diff
实现
是用ROP咯
GOT overwitre
作者找到了几个gadget
# gadget1
add eax, [ebx + 0x5d5b04c4]
ret
这样子让$eax = offset
并且$ebx = got[uid] -0x5d5b04c4
就阔以啦
# gadget2
pop ebx
ret
我们先把所要的值搞到栈里,然后调到这里来完成给ebx的赋值
# gadget3
pop eax
ret
emmmmm~,这样子就阔以了,然后作者说找不到这个gadget3
GOT dereference
技巧
原文中提到了stack pivot
,利用leave
来实现,因为leave
其实相当于可以控制esp
,所以相当于可以自定义栈地址
所以只需要改掉ebp
,然后跳到leave; ret