聚焦源代码安全,网罗国内外最新资讯!

编译:代码卫士

受邀制漏洞奖励平台 Detectify Crowdsource 的两名黑客 Hakluke 和 Farah Hawa 分享了在安全测试中常被错过的10类web漏洞。本文是第二部分完结篇。

猎洞时,尤其是对于竞争力大的漏洞奖励计划,最好是能够猎取竞争小的漏洞。其中一种方法就是关注常被错过的payload 交付方法或 web 漏洞。为此,本文作者表示自己常常查找的是鲜有人知的漏洞类型或少有人知的漏洞挖掘方法。

虽然本文所列的漏洞类型并非黑客机密或者原创研究,但其中一些肯定少人有知!这些漏洞或者因为交付方式不同、或者常被误解或者常被错过。

6、 Web 缓存欺骗

该漏洞探索的是 web 缓存功能配置的漏洞。有时当 web 缓存仅根据其扩展决定是否缓存页面时,攻击者久可滥用该功能在应用程序上查看敏感信息。

按照缓存最佳实践,缓存的文件通常是公开的、静态的且不包含任何敏感信息如样式表、JavaScript 文件和公开镜像。另一方面,包含敏感或用户特定信息如账户或钱包详情的文件并未缓存。

要检测文件是否缓存,可观察响应标头。例如,如果该应用程序使用了 Varnish 缓存,则由反向代理缓存的任意文件将在响应中包含 Age 标头,而该响应的值则说明距离文件上次缓存过去的时长。

由于敏感文件从未缓存,因此profile.php这样的敏感文件会在响应中返回 Age:0。然而,公开的 JavaScript 文件如 test.js 可能具有更大的 Age 值。

路径混淆

路径混淆指的是构建如下 URL:

www.example.com/profile.php/nonexistent.js

根据服务器的技术和配置不同,很有可能该 URL 的nonexistent.js 部分被忽视而响应包含 profile.php 的内容,同时浏览器中的URL 仍然是:

www.example.com/profile.php/nonexistent.js

如之前所述,缓存被配置为保存扩展为 .css、.js、.png 等的文件。因此,当我们请求像之前提到的URL时,该缓存最后将看到 .js 缓存并不管URL的内容如何都将保存该响应。

为进行测试,我们所需要做的就是构建如下 URL:www.example.com/profile.php/nonexistent.js  并确保响应中包含用户的资料数据。

一旦受害者在浏览器中加载该URL,则其敏感数据将被缓存,攻击者仅通过加载同样的URL即可查看(仅在受害者导航至该URL时才能)。

相关论文;https://sajjadium.github.io/files/usenixsec2020wcd_paper.pdf

7、Web 缓存投毒

缓存服务器使用缓存密钥来判断响应是否已经存在于由用户提出的请求的缓存中。最常见的情况是,这些缓存密钥取自 Host 标头以及 HTTP 请求中的请求行。

在这个逻辑下,如果两个请求拥有相同的请求行和 Host 标头,则缓存服务器不考虑其它标头的情况会分配相同的响应。

缓存投毒的目标是在缓存服务器上缓存一个有害的响应,而缓存的方法是如果用户恰巧请求被投毒的端点,则会得到有害响应。

从缓存的立场来看,请求一般具有两种输入类型:

  • Keyed 输入:用于判断某特定请求的响应是否存储在缓存中。

  • Unkeyed 输入:虽然并不用于判断任何内容但仍然是该请求和响应的一部分。

作为攻击者,我们需要将payload 注入unkeyed 输入中,以便被缓存服务器忽略但仍然会被存储在响应中。

为了在请求中找到unkeyed 标头,我们可使用 BurpSuite 上的 Param Miner 扩展并使用选项“猜测标头“。

具有和攻击者相同 keyed 输入的用户将收到由该攻击者存储的恶意响应。

查找缓存投毒漏洞需要通过如下步骤:

  • 查找正在被缓存的页面

  • 查找请求中的Unkeyed 输入(使用 Param Miner 等工具)

  • 确保请求中不存在被缓存的响应

  • 将payload 注入unkeyed 输入并提交请求

8、 h2c Smuggling

这种攻击利用代理的行为,同时升级HTTP/1.1 和h2c 的连接。利用的结果将使我们绕过代理背后应用程序的访问控制。

相关文章:https://labs.bishopfox.com/tech-blog/h2c-smuggling-request-smuggling-via-http/2-cleartext-h2c

h2c 是什么?

h2 表示的是按照TLS使用时的HTTP/2。而h2c 指的是按照明文TCP连接使用时的HTTP/2。

要升级已有的和h2c 的HTTP/1.1 连接,我们使用由HTTP/1.1 协议提供的Upgrade 标头,并以值:Upgrade:h2c 发送。

当客户端发送标头为 Upgrade:h2c 的 HTTP/1.1 请求时,服务器会以状态码 101 Switching Protocols 响应。

和 Upgrade 标头一起,该客户端还需要发送 HTTP2-Settings 和 Connection 标头。这就是升级 h2c 连接时的简单请求的样子:

GET / HTTP/1.1
Host: www.example.com
Upgrade: h2c
HTTP2-Settings: YWJjMTlzlT8kKiYoKSctPUB+
Connection: Upgrade, HTTP2-Settings

HTTP2-Settings 标头的值时Base64 编码的字符串,包含HTTP/2 连接参数。

HTTP/2 文档指出,h2c 升级仅允许在明文连接上显示,而 HTTP2-Settings 标头不应转发。cURL、BurpSuite 和其它 HTTP/2 客户端因此不允许按照 TLS 协议升级。然而,定制化客户端可用于测试该漏洞。

漏洞

当 app 使用代理时,升级至h2c 的情况如下:

使用代理升级至 h2c 的问题产生,原因是客户端和服务器之间建立 h2c 连接后,代理不再监控二者之间的通信内容。它意味着可通过直接请求h2c连接上受限端点的方法绕过该使用代理的应用程序执行的任何访问控制。例如,如果某款应用程序限制低权限用户(攻击者)访问 /payment 端点,则攻击者可建立 h2c 连接并成功访问 /payment 端点。

9、次级子域名接管

当某种配置不当类型可使用户控制域名时,就会发生子域名接管问题。比如,当使用AWS S3 服务托管网站且S3实例在没有删除 DNS 记录的情况下被终止时就会发生这种情况。一旦子域名处于这种状况,攻击者就能够设置和此前被终止的S3存储桶一样名称的S3存储桶,控制托管在该域名上的内容(并捕获HTTP访问日志)。由于易受攻击的组织机构仍然有指向该 S3 存储桶的 DNS 记录,因此攻击者就能够在由它们拥有的子域名上托管任意内容。

当被接管的域名被主域名以某种方式引用时,就会发生次级子域名接管情况。例如,我们的目标是 example.com。该域名托管的网站加载了一个外部脚本如<script src="https://assets.dodgycdn.com"></script>。

在这种情况下,如果 assets.dodgycdn.com 易受子域名接管影响,则我们称之为 “example.com 上的次级子域名接管“。查找子域名接管的多数人不检查次级子域名接管问题,因为它需要实时额外的步骤。流程如下:

1、通过HTTP爬取页面

2、提取指向其它域名(脚本来源、图像来源等)的任意引用

3、检查子域名接管的所有结果

影响

次级子域名可能会以不同的方式造成重大安全影响:

  • 如果次级子域名被用于导入脚本,则应用程序内所有页面上出现持久性XSS

  • 如请求次级子域名的方式可能包含令牌,如在 Referer 标头中的情况,则提取用户和/或会话令牌

10、postMessage 漏洞

浏览器的同源策略限制来源不同的两个窗口或框架相互通信。然而,有时web 应用需要嵌入来源不同的内联框架或打开来源不同的新窗口,如在应用程序上嵌入第三方通讯录。

在这种情况下,由于父(主应用程序)和子窗口的来源不同,同源策略不允许它们相互通信,除非通过使用 JavaScript 的 postMessage()函数,而该函数允许在两个窗口之间发送信息。

如果 postMessage() 未安全实现,则可导致多种漏洞问题,使得攻击者能够向窗口发送任意消息或者从窗口接收敏感数据。如下是这两种情况下的易受攻击代码。

发送者来源未验证

在理想情况下,安全的子窗口应该具有 if 语句,用来验证消息发送者匹配可信来源:

然而,如果未执行该验证,则会给受攻击者控制的应用程序留下向子窗口发送恶意数据如 XSS payload 的空间。

从父窗口向子窗口发送消息的一个例子是,app 打开通讯录表单的新窗口并在子窗口预先填充用户的个人信息。如果该实现易受攻击,则作为猎手的目标就是通过向包含通讯录表单的子窗口发送恶意消息。

目标来源未指定

postMessage() 甚至允许从子窗口将消息发回给父窗口。在这种场景下,如果子窗口将通配符 (*) 指定为消息目的地的来源,则攻击者将能够捕获由子窗口发送的敏感数据:

从子窗口向父窗口发送消息的例子是当 app 打开新的登录窗口并成功登录后,将会话数据发送给父窗口。

如果该实现易受攻击,则作为猎手的目标就是托管攻击者网站,从之前提到的登录页面中窃取用户的会话数据。

记得在鲜有人知的地方找漏洞

不管你是漏洞猎手还是安全践行者,都要查找 OWASP Top 10 漏洞以外的常被错过的 web 漏洞。如果你在看其他人不关注的地方,那么你就可能挖到金砖。


推荐阅读

2021 OWASP Top 10 榜单(初稿)发布,头牌易主

被利用达数百万次、瞄准 Linux 系统的 Top 15漏洞

美英澳联合发布2020-2021期间遭利用最多的 Top 30漏洞

MITRE 发布2021 CWE Top 25 榜单

原文链接

https://labs.detectify.com/2021/09/30/10-types-web-vulnerabilities-often-missed/

题图:Pixabay License

本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的产品线。

 觉得不错,就点个 “在看” 或 "赞” 吧~

少有人挖但仍可获得奖金的10类Web 漏洞(下)相关推荐

  1. 高瓴资本创始人张磊:极少有人真正理解时间的价值

    作者:张磊 来源:价值投资者(ID:touzi020188) 01 关于价值投资 对于投资来说,简单和不简单的事或许相似:如何保持内心的平静,在不断的市场诘问和自我拷问中,不随波逐流,最需要的是深植行 ...

  2. 读书笔记:少有人走的路

    本文更新版本已挪至  http://www.zhoujingen.cn/blog/1403.html ------------------------- 记得好像是五六年前在公司投稿后得到一本书,这本 ...

  3. 区块链大咖专访丨摩联科技:走一条少有人走的路

    零识区块链专访: 作为零识区块链官方媒体平台旗下首档行业互动访谈栏目,即日起面向区块链行业发起访谈邀请. 专访将通过走访腾讯区块链加速器.BSN等联盟代表性区块链企业,系统全面地了解区块链企业的发展现 ...

  4. 不完美才美—少有人知道的幸福之路

    2017年11月12日看了这本书,里面一段话很有感触,我发了个朋友圈. 在你的生命中,有没有一个人,你可以在凌晨4点不假思索地给Ta打电话诉说你的烦恼? 如果有的话,你就比没人可以打电话的人长寿. 哈 ...

  5. 极少有人知道的手机4大隐藏功能

    极少有人知道的手机4大隐藏功能 v1.隐形的备用电池(手机使用小秘诀,让你的手机永远有电!!! ) 你的手机电量不足了,为了让它能够继续使用,按*3370#键,手机会重新启动,启动完毕 后,你就会发现 ...

  6. 《少有人走的路:心智成熟的旅程》--[美]M·斯科特·派克

    <少有人走的路>,美国作家M·斯科特·派克所著 下面是我的书摘: * 归根到底,它告诉我们怎样找到真正的自我. * 人可以拒绝任何东西,但绝对不可以决绝成熟.决绝成熟,实际上就是在规避问题 ...

  7. 分享6款堪称神器却很少有人知道的软件,让人惊喜!

    给大家分享6款堪称神器却很少有人知道的软件,喜欢的话记得点赞支持哦~ 1.彩虹工具箱 彩虹工具箱是一款全能的电脑端工具想软件 .软件界面非常简洁 ,操作也非常简单流畅 ,目前拥有Windows和Mac ...

  8. 《你的误区》《少有人走过的路》下载doc格式

    <你的误区> <少有人走过的路> 下载 <你的误区>.doc <https://pan.baidu.com/s/1aJoC-UCkpGmvA5bc_87Tsw ...

  9. smart原则_为什么现在少有人用德鲁克的SMART原则做目标管理了?

    互联网平台充斥了各类成功学文章,但大多数鸡汤文只谈坚持,不谈策略.王健林定下一个亿的小目标被网友编成了各种段子,却极少有人去探究他实现目标的过程,用的什么方法.从企业规模来看,我们没有理由说王健林定下 ...

最新文章

  1. 利用C语言实现顺序表
  2. 【剑指offer-Java版】11数值的整数次方
  3. 三维重建_快速分类–三向和双枢轴
  4. x264_param_t结构体参数分析
  5. 转: Linux下单网卡多vlan多虚拟机
  6. PowerShell遍历文件夹下的子文件夹和文件
  7. 读取PDF的文字--zt
  8. android获取app用户数据,专项研究:Android收集用户数据是iPhone的20倍!
  9. 理解JAVASCRIPT 闭包
  10. 博文视点新书样章下载
  11. 美容院店务管理系统哪家好?
  12. 移动网站建设应注意哪些问题?
  13. windows中定时同步文件
  14. JDK8绿色安装详细步骤
  15. Spring Security 小记 - @Secured(), @PreAuthorize() 及 @RolesAllowed()
  16. Linux网络适配器不见了,linux – lspci未显示HyperV网络适配器
  17. The value of ESP was not properly saved across a function call解决方案
  18. Java学成什么样,可以出去找实习工作?
  19. php实现手机归属地的查询、,PHP实现查询手机归属地的方法详解
  20. sort函数使用cmp出错Line 22: Char 38: error: reference to non-static member function must be called

热门文章

  1. js页面重定向跳转代码总结(待续)
  2. mysql数据库中命令行下常用命令的操作(增、删、改、查)和数据类型
  3. 微软企业库Unity学习笔记
  4. UDP协议相关及报文格式
  5. MySQL 常用命令大全
  6. Swift iOS : 代码分析DrawController
  7. Linux 下编译安装OpenCV【转】
  8. bootstrap中让图片自适应不同的分辨率的方法
  9. zz 鸡汤穷三代,励志毁一生
  10. Linux平台 Oracle 11gR2 RAC安装Part1:准备工作