GOT overwitre & GOT dereference

Author Avatar
Aryb1n 7月 24, 2017

还是来自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