格式化字符串的经典利用:劫持got表。但是遇到漏洞点只能执行一次的情况,该怎么办?
前言
如果存在格式化字符串,保护机制开的不健全,通常可以劫持got表,构造后门函数。然而,如果不存在循环、栈溢出控制rop等方式,如果格式化字符串漏洞点正常来说只能执行一次,getshell是比较困难的。
不过,linux下的二进制程序,在最后退出时,总会执行一些清扫函数,其中涉及到了fini_array这个数据结构。
一、fini_array
网上有很多优质博客,具体原理还是各位佬讲的清楚详细(注意静态链接和动态链接的区别):
通过利用fini_array部署并启动ROP攻击 | TaQini-优快云博客
简单来说,fini_array数组存放了函数指针,在退出时,会进行调用。
因此,面临用户代码区域中之后一次漏洞机会时,可以通过劫持fini_array来实现二次利用。