linux平台漏洞利用技术实例分析目录Linux平台常见漏洞与缓解措施64位系统下栈溢出漏洞利用ROP技术绕过NX保护字符串格式化漏洞覆盖kernel_vsyscall并利用中断绕过缓解措施常见漏洞栈溢出strcpy()、gets()格式化字符串漏洞printf()整数漏洞类型转换堆漏洞UAF/DOUBLEFREE/堆溢出常见漏洞缓解措施0x01栈溢出漏洞简要分析进入该vuln后subrsp-0x40,堆栈开辟了0x40字节空间然后调用gets函数读入数据到edi所指向的空间,edi此时实际上是等于rsp的,指向栈顶的位置gets函数读入数据以换行符号为结束标志,在遇到换行符号前,会读取任意数据到栈里,这样当读入超长字符串后,就会覆盖函数的返回地址超长字符串导致返回地址被覆盖0x02漏洞调试通过调试信息可以看到开启了nx保护。因为堆栈只开辟了0x40字节空间,那么我们用0x40个字符a覆盖此空间,再用8个字符b覆盖ebp,后面用8个字符c就可以覆盖返回地址了目录64位系统下栈溢出漏洞利用ROP技术绕过NX保护字符串格式化漏洞覆盖kernel_vsyscall并利用中断绕过缓解措施0x01漏洞利用思路跳转到libc空间去执行代码执行system函数获得SHELL首先获得system函数地址使得system函数第一个参数为’/bin/sh’地址利用printf函数,打印某个函数地址根据偏移计算system获得/bin/sh地址利用gets读入/bin/。因为图中call执行完后要判断rbxrbp是否相等,不等要继续循环,所以这里让rbx为0,rbp为1就绕过了循环判断。所以覆盖完返回地址后继续用0x0和0x1填充,这样pop时就可以覆盖掉rbx,rbp接下来用printf的got地址填充,这样可以pop给r12,刚好rbx为0,然后call的时候执行printfR13传给了edx这里并没什么作用,因此就用0x0填充R14传给了RSI是我们想要打印的地址,这里打印printfgot表地址指向的内容,所以用printfgot表地址覆盖R15传给了edi,对于printf来说他是一个格式化串,直接就用rop里该串的地址0x400784填充Popr15后执行的是retn,要返回到rsp指向的空间,这里因为我们要跳转到0x400740去执行call,所以后面就用0x400740来填充Call执行完后,还要执行一个“addrsp,8”和6次pop,然后返回,那么我们在后面再布置7个地址,然后返回地址用vuln的地址,然后rop继续跳转到漏洞函数里去,方便后面再操作。所以接下来填充7个0x0和0x400656
linux平台漏洞利用技术与实例分析 来自淘豆网www.taodocs.com转载请标明出处.