Web Hacking 101 中文版 十八、内存(一)
十八、内存
作者:Peter Yaworski
译者:飞龙
协议:CC BY-NC-SA 4.0
描述
缓冲区溢出是一个场景,其中程序向缓冲区或内容区域写入数据,写入的数据比实际分配的区域要多。使用冰格来考虑的话,你可能拥有 12 个空间,但是只想要创建 10 个。在填充格子的时候,你添加了过多的水,填充了 11 个位置而不是 10 个。你就溢出了冰格的缓存区。
缓冲区溢出在最好情况下,会导致古怪的程序行为,最坏情况下,会产生严重的安全漏洞。这里的原因是,使用缓冲区移除,漏洞程序就开始使用非预期数据覆盖安全数据,之后会调用它们。如果这些发生了,覆盖的代码会是和程序的预期完全不同的东西,这会产生错误。或者,恶意用户能够使用移除来写入并执行恶意代码。
这里是来自 Apple 的一个图片:
这里第一个例子展示了可能的缓冲区溢出。strcpy
接受字符串Larger
,并将其写入到内存,无论分配的可用空间(白色格子),以及将其写入非预期的内容中(红色格子)。
越界读取
除了越过分配的内容写入数据之外,另一个漏洞时越过内容边界读取数据。这是一类缓冲区溢出,因为内容被越界读取,这是缓存区不允许的。
越界读取数据漏洞的一个著名的近期示例,是 OpenSSL Heartbleed 漏洞,在 2014 年 4 月发现。在发现的时候,大约 17%(500K)的互联网安全服务器,由可信授权机构颁发证书,被认为存在此漏洞。
Heartbleed 可以利用来盗取服务器的私钥,回话数据,密码,以及其他。它通过向服务器发送“Heatbleed 请求”消息来执行,服务器会向请求者发送相同信息。消息包含长度参数。那些漏洞服务器会基于长度参数为消息分配内存,而不验证消息的真实大小。
因此,Heartbleed 消息通过发送小型消息以及较大的长度参数来利用,存在漏洞的接受者会读取额外数据,这超出了为消息分配的内存长度。这里是来自维基百科的图片:
虽然缓冲区溢出需要更详细的分析,读取越界和 Heartbleed 超出了本书的范围。如果你对它们感兴趣,这里是一些不错的资源:
Apple 的文档
维基百科:缓冲区溢出词条
维基百科:NOP 垫
OWASP:缓冲区溢出
heartbleed.com
内存截断
内存截断是一种技巧,用于通过使代码执行一些不常见或者非预期的行为,来发现漏洞。它的效果类似于缓冲区溢出,其中内容在不该暴露的时候暴露了。
一个例子是空字节注入。这发生在提供了空字节%00
或者十六进制的0x00
,并导致接收程序的非预期行为时。在 C/C++,或低级编程语言中,空字节表示字符串的末尾,或者字符串的终止符。这可以告诉程序来立即停止字符串的处理,空字节之后的字节就被忽略了。
当代码依赖字符串长度时,它的影响力十分巨大。如果读取了空字节,并停止了处理,长度为 10 的字符串就只剩 5 了。例如:
thisis%00mystring
这个字符串的长度应该为 15,暗示如果字符串以空字节终止,它的长度为 6。这对于管理自己的内存的低级语言是有问题的。
现在,对于 Web 应用,当 Web 应用和库、外部 API 以及其它用 C 写成的东西交互的时候,这就有关系了。向 URL 传入%00
可能使攻击者操作更广泛服务器环境中的 Web 资源。尤其是当编程语言存在问题的时候,例如 PHP,它是使用 C 语言编写的。
OWASP 链接
查看 OWASP 缓冲区溢出,OWASP 为缓冲区覆盖和溢出复查代码,OWASP 检测缓冲区溢出,OWASP 检测堆溢出,OWASP 检测栈溢出,OWASP 嵌入空字符。
示例
1. PHPftp_genlist()
难度:高
URL:无
报告链接:https://bugs.php.net/bug.php?id=69545
报告日期:2015.5.12
奖金:$500
描述:
PHP 编程语言使用 C 语言写成,C 语言自己管理内存。像上面描述的那样,缓冲区溢出允许恶意用户写入应该为不可访问的内存,并可能执行远程代码。
这里,FTP 扩展 的ftp_genlist()
函数允许溢出,或者发送多于 ~4293MB 的数据,它们会被写入到临时文件中。
这使得分配的缓冲区太小,而不能存放写入临时文件的数据,在将文件内容加载回内存时,这会造成堆溢出。
重要结论
缓冲区溢出是非常古老,知名的漏洞,但是在处理自己管理内存的应用时,还是很普遍的,特别是 C 和 C++。如果你发现,你正在处理基于 C 语言(PHP 用它编写)的 Web 应用,缓冲区溢出是一个明显的可能性。但是,如果你刚起步,可能你需要花费一些时间,来寻找和漏洞相关的简单注入,在更有经验时,再返回到缓冲区溢出。
Web Hacking 101 中文版 十八、内存(一)相关推荐
- Web Hacking 101 中文版 十八、内存(二)
2. Python Hotshot 模块 难度:高 URL:无 报告链接:http://bugs.python.org/issue24481 报告日期:2015.7.20 奖金:$500 描述: 像 ...
- Web Hacking 101 中文版 十六、模板注入
十六.模板注入 作者:Peter Yaworski 译者:飞龙 协议:CC BY-NC-SA 4.0 模板引擎是允许开发者或设计师在创建动态网页的时候,从数据展示中分离编程逻辑的工具.换句话说,除了拥 ...
- Web Hacking 101 中文版 十四、XML 外部实体注入(一)
十四.XML 外部实体注入 作者:Peter Yaworski 译者:飞龙 协议:CC BY-NC-SA 4.0 XML 外部实体(XXE)漏洞涉及利用应用解析 XML 输入的方式,更具体来说,应用程 ...
- Web Hacking 101 中文版 十二、开放重定向漏洞
十二.开放重定向漏洞 作者:Peter Yaworski 译者:飞龙 协议:CC BY-NC-SA 4.0 描述 根据 OWASP,开放重定向出现在应用接受参数并将用户重定向到该参数值,并且没有对该值 ...
- Web Hacking 101 中文版 十、跨站脚本攻击(一)
十.跨站脚本攻击 作者:Peter Yaworski 译者:飞龙 协议:CC BY-NC-SA 4.0 描述 跨站脚本,或者 XSS,涉及到站定包含非预期的 JavaScript 脚本代码,它随后传给 ...
- Web Hacking 101 中文版 十五、代码执行
十五.代码执行 作者:Peter Yaworski 译者:飞龙 协议:CC BY-NC-SA 4.0 描述 远程代码执行是指注入由漏洞应用解释和执行的代码.这通常由用户提交输入,应用使用它而没有任何类 ...
- Web Hacking 101 中文版 十、跨站脚本攻击(二)
4. 雅虎邮件存储型 XSS 难度:低 URL:Yahoo Mail 报告链接:https://klikki.fi/adv/yahoo.html 报告日期:2015.12.26 奖金:$10000 描 ...
- Web Hacking 101 中文版 十四、XML 外部实体注入(二)
作者:Peter Yaworski 译者:飞龙 协议:CC BY-NC-SA 4.0 示例 1. Google 的读取访问 难度:中 URL:google.com/gadgets/directory? ...
- Web Hacking 101 中文版 二十、漏洞报告
二十.漏洞报告 作者:Peter Yaworski 译者:飞龙 协议:CC BY-NC-SA 4.0 所以这一天终于来了,你发现了你的第一个漏洞. 首先,恭喜你! 认真来讲,发现漏洞并不容易,但是有一 ...
最新文章
- android cpp做成so库,Android增量更新(二)—制作合成文件so库
- Spring Boot 应用系列 5 -- Spring Boot 2 整合logback
- LeTax如何多行注释
- 大文件上传 进度条显示(仿CSDN资源上传效果) .
- 求解组合问题的一个迭代算法
- DE11 Theory of General Second-order Linear Homogeneous ODEs
- 高速EDA设计课程报告(三)
- quarkus-contexts和DI介绍(原理)
- 草坪护理产品行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- Develop -- Training(十五) -- 显示高效位图
- MYSQL圆角矩形表示_圆角矩形“RoundRectShape”使用详解
- wifi mouse linux,WiFi Mouse Pro
- 开放平台中的鉴权的实现
- python生成6位数验证码_Python随机生成一个6位的验证码代码分享
- C++ 时间戳 时间相关函数
- 要怎么在计算机里清除桌面内存,怎么清理运行内存占用_怎么清理电脑运行内存-win7之家...
- qtableview选中第一行时表头会变色_亲民的“网红潜水表”精工鱼罐头 Prospex,你会选择吗?...
- 硬件描述语言实验四:四位加法器实验
- 制作简单的WPF时钟
- 国产网游的悲哀!毁掉国产网游的七大恶心设定
热门文章
- WordPress主题 酱茄模块源码
- 255.0.0.0子网掩码相应的cidr前缀表示法是?_六十四、前缀,后缀,中缀表达式转化求值问题...
- r语言 c语言调用函数返回值,r语言中怎样查看函数源代码
- vite配置 vite.config.js
- web加载本地html,WKWebview加载本地html问题汇总
- 袁大头 如何辨别假货
- Cookie禁用了,Session还能用吗?
- 用JavaScript获取页面上被选中的文字的技巧
- Swift快速参考手册
- jQuery弹出层登录和全屏注册表单