缓冲区溢出
程序漏洞从哪里来?
-
• 罪恶的根源:变量
-
• 数据与代码边界不清
-
• 最简漏洞原理—- shell脚本漏洞
-
• 大部分的漏洞是因为程序没有去判断用户输入的内容导致的
举例说明:
└─# cat a.sh
#!/bin/bash
echo $1
上面是一个很简单的脚本,意思就是这个脚本后面可以跟一个参数,该脚本返回这个参数。如下图所示:
但是这个脚本是有漏洞的,如果我们这样写,就会直接执行系统命令;注:除了;向&&、|等符号都可以;
什么是缓冲区溢出?
-
• 当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被”撑爆”,从而覆盖了相邻内存区域的数据;
-
• 成功修改内存数据,可造成进程劫持,执行恶意代码,获取服务器控制权等后果;
如何发现漏洞
-
• 代码审计
-
• 逆向工程
-
• 模糊测试
-
• 向程序堆栈半随机的数据,根据内存变化判断溢出
-
• 数据生成器:生成随机、半随机数据
-
• 测试工具:识别溢出漏洞
-
注:
-
• windows和Linux有安全机制:
-
• DEP:阻止代码从数据页被执行
-
• ASLR:随机内存地址加载执行程序和DLL,每次重启地址变化。
-
没有回复内容