原文地址:Advanced web security topics php
(最后更新时间:2018年2月28日)这篇文章讨论了我到目前为止遇到的网络安全问题 。这是一项正在进行的工做,我将不断更新。 帖子标题包括“高级”,由于这里讨论的主题涉及聪明的,不平凡的黑客。下面咱们直接进入正题。css
摘要:攻击者将图像上传到包含HTML和Javascript的受信任网站,但欺骗网站将图像做为HTML文档提供。
攻击步骤(参考下图):html
摘要:使用CSS3功能的组合将信息泄漏到第三方服务器。 须要用户提供的CSS样式但不须要Javascript。
攻击步骤(参考下图):android
:: before
或
:: after
伪元素在DOM中建立隐藏信息(例如连接参数,隐藏输入字段)。这将呈现一般不可见的字符串。有关详细信息,我建议阅读参考文献[4],[5]。此步骤可能会屡次复制要泄漏的文本,由于它须要使用不一样的字体进行渲染(请参阅步骤2了解缘由)。
摘要:一个邪恶的网站经过欺骗浏览器将可信网页加载为CSS来窃取用户登陆的可信网页中的内容。要求攻击者能够向受信任的网站注入一些文本。
这个有点旧,由于宽松的CSS 解析 [6]以及容许Javascript查看CSS声明这一事实。我不肯定这是什么程度的反击浏览器,我在互联网上阅读有关这方面的相互矛盾的陈述。该漏洞须要:
1)受害者Victor
2)Victor登陆的网站Webmail,其中包含一些私人内容。只要用户经过会话cookie进行身份验证并登陆到Webmail,就没必要在选项卡或窗口中打开Webmail。
3)攻击者控制的网站example.com
4)Victor访问example.com
5)攻击者必须可以将一些文本注入Webmail(例如,经过向Victor发送一些他能够在他的Webmail中阅读的电子邮件)
该漏洞利用以下:
1)Victor访问咱们的恶意网站example.com
2)example.com包含一个连接HTML元素,它试图加载外部CSS样式表。只是,它不是引用有效的样式表,而是在Webmail上引用Victor的收件箱页面。这将致使浏览器将论坛HTML加载为CSS并解析它。到目前为止伤害不大。
3)攻击者可以在Webmail中注入一些文本,在一些敏感文本以前启动CSS声明,并在敏感文本以后结束CSS声明。一个例子是,若是咱们早日向Victor发送一条消息,主题为:};。emailList {以及稍后与主题的消息};。如今,咱们发送的第一封和第二封电子邮件之间的收件箱概述中的全部内容均可以解释为CSS声明。
git
摘要:在服务器上呈现很差的用户输入的不良内容致使在浏览器中的Angular应用程序中执行代码
注入攻击涉及恶意用户提交未正确清理的数据,而后由系统的不一样部分解释。有HTML注入攻击,SQL注入攻击和Javascript注入攻击。一个至关新的风格针对浏览器模板框架,如AngularJS [9]。
步骤:
1)恶意用户提交Angular将解释的一些文本T,例如{{警报(“你好”)}}
2)服务器在包含Angular代码的页面上将T呈现为HTML。因为没有像T中那样的HTML / Javascript标签,所以大多数服务器端都不会清理对象T.
3)浏览器呈现包含T的新HTML页面。若是页面运行Angular,则它将获取T并将其解释为Javascript。
Gareth Heyes详细讨论了 Angular 注入 [7]。
若是您想知道为何任何理智的Web应用程序将执行用户提交的内容的服务器端呈现(步骤2):针对功能减小的客户端的SEO或回退策略是常见的用例。angularjs
这种类型的攻击也称为HTTP协议嵌套或 HTTP request smuggling [10]利用了参与设备的HTTP协议实现中的弱点。
该论文的做者讨论了针对同名服务器软件的几个真实示例,这些示例致使了诸如cache poisoning[11]或凭证劫持等漏洞。这些漏洞主要涉及一系列服务器软件,如反向HTTP代理和Web服务器。一个例子:
缓存中毒:恶意客户端将嵌套请求发送到反向Web代理,后面有Web服务器。代理以其认为请求URL U1的方式解析错误请求,而Web服务器以不一样的方式解析请求以及请求URL U2的内容。而后,Web服务器返回U2的内容,但代理将该内容存储在URL U1下。所以,对U1的任何进一步合法请求将服务于U2的内容。该漏洞利用工做过于简单,以下所示:github
POST U1
Content-Length: 0
Content-Length: 123
GET U2
….web
因为Content-Length语句存在冲突,Web代理可能会认为POST内容与其后面的Web服务器不一样,所以Web服务器可能会为U2服务,但代理可能会将U2的内容存储在U1下。
做者讨论了更多的漏洞;不管如何都值得一读!shell
恶意网页能够在旧版本的流行浏览器中找到用户访问过的网站,幸运的是,这彷佛 不在可能[12]。 “漏洞利用”简单而有效:恶意网页生成一个感兴趣的连接列表。若是用户访问过去的任何一个,浏览器将以不一样的方式呈现它们。 网页能够经过脚本查询该样式并将结果发送出去。 浏览器填充了这个漏洞,其中包含向脚本报告伪值和限制样式量的组合(例如,您没法更改访问连接的任何维度,所以查询容器大小将不起做用)。编程
[2016年4月16日]
从这里[13]:假设一个网站在一个难以想象的网址下公开了一些内容,例如: 经过包含像Google+这样的UUID,能够经过私人连接分享私人内容,例如example.com/sdflo234ngnofgo23onigu。 只有知道该URL的人才能访问该页面,该访问应该是安全的,由于“sdflo234ngnofgo23onigu”很是难以猜想。 攻击者没法检查致使example.com的URL的全部可能的字符组合,而且有一种理解和暗示没有人会在网络上发布该URL,不然它将被搜索引擎索引而且多是 发现那里。
可是,若是您经过URL缩短器传递URL,搜索空间将大大减小:example.com/sdflo234ngnofgo23onigu将成为ex.co/BlD33_。 攻击者能够轻松扫描缩短服务上的少得多的URL,并发现提交给该缩短器的(私有)URL。
我没法想出一个更简洁地描述问题的更好的标题:服务器以保证其神圣性的方式发送编码/保护/签名的数据,但容许客户端将所述数据发送回服务器或其余服务器具备不一样的,不太安全的协议。
这个想法来自最近在多个JSON Web令牌实现中发现的 安全漏洞 [14]。 JSON Web令牌实现了验证数据真实性和完整性的数字签名,所以当客户端从服务A获取数据并将其传递给服务B时,该服务B能够基于JSON Web令牌验证数据的完整性,而无需直接通讯服务A.在此漏洞中,客户端能够请求协议实现,绕过每一个设计的验证。这里学到的经验是:参与通讯的各方将安全方面委派给底层实现应该验证明现是否有效。
不经验证安全假设的问题常常出现,例如:在2014年,CERT发现有几个Android应用程序没有验证服务器证书[15]。
[2016年8月31日]
您知道带有target =“_ blank”的HTML锚连接会在新选项卡或窗口中打开连接页面。 但你知道window.opener [17] Javascript属性吗? 新窗口能够经过该属性访问旧窗口; 值得庆幸的是,window.opener的大多数(子)属性都不能被新窗口读取,但能够更改window.opener.location属性,这使得它能够用于网络钓鱼攻击:您点击了网络邮件程序中的连接,它会打开 一个新页面,在后台只是重定向了一个窗口,该窗口将webmailer打开到相似域上相同的登陆页面,告诉您会话已过时并要求您再次登陆。 讨论了创始人博客[16]。 在支持的状况下,解决方案是添加rel =“noopener”标记或根本不使用目标。
[2016年10月24日]
Rowhammer [18]攻击在硬件级别利用当前DRAM实现中的弱点,其中特殊构造的写入模式可能干扰不相关的存储器位置的内容。 Rowhammer.js [19],一个Javascript实现,最近浮出水面(不是这样),它将Rowhammer移植到浏览器中。 虽然我认为Rowhammer是硬件漏洞,但我仍然提到它的新方法。
[2017年9月1日]
那个真的让我彻底禁用了自动填充功能。 攻击基于浏览器在识别名称/值组合时主动填写表单字段。 演示真的说明了一切。 该漏洞利用以下:
提供了一个HTML表单,要求提供一些基本的详细信息,如姓名和电子邮件地址。 该表格还包含几个隐藏的字段,我将在稍后讨论。 许多网站要求提供此基本信息,并使用名为“name”和“email”或相似名称的表单字段。 当你开始填写这些时,浏览器会建议一个自动完成,固然,你会采起。 可是有一个问题:经过接受建议值,浏览器将填写任何其余隐藏的字段,它能够经过名称记住...而且有不少:“creditcardnumber”,“address”,“phone”等。经过提交表单,你 不只要提交您输入的姓名和电子邮件,还要提供其能够匹配的全部其余字段。
[2018年2月28日]
一个至关具体的SAML漏洞利用[21]能够推广到XML解析。 基本思想是XML被用做数据容器格式,但解析XML并处理数据的程序一般不了解XML格式的细微之处,这可能致使模糊。 焦点攻击会影响XML注释的模糊性:
<name>John<!--comment-->Doe</name>
复制代码
从概念上讲,“name”元素的文本值是什么? 从w3c的角度来看,“name”元素有三个子元素:一个值为“John”的文本节点,一个值为“comment”的注释节点和另外一个值为“Doe”的文本节点。
许多编程语言的SDK和框架为获取XML节点文本值提供了便利功能。 根据其实现,可能返回值“John Doe”,“John Doe”,“John”或“Doe”。 大多数程序可能会使用这样的便利功能,可是现代系统由几个数据处理层(HTTP,WAF,验证框架,Web应用程序框架)组成,每一个这样的层可能使用不一样的“便利”实现。 此次攻击让我想起了咱们以前看到的一些“HTTP注入”。
![]() |
[更新2018.05.10] Google YOLO 漏洞利用[22]属于对用户社交网络账户的普遍类型的点击劫持攻击。 您可能知道“使用Facebook登陆”功能,该功能容许网站经过其社交网络账户识别用户。 前提是用户验证浏览器地址栏中显示的URL,检查网站请求的访问类型,并能够授予(或不授予)该访问权限。 |
---|---|
这个漏洞:
[1] An XSS on Facebook via PNGs & Wonky Content Types
fin1te.net/articles/xs…
[2] Encoding web shells in PNG IDAT chunks
www.idontplaydarts.com/2012/06/enc…
[3] Scriptless attacks
www.nds.rub.de/media/emma/…
[4] CSS attribute value selector
www.w3schools.com/cssref/sel_…
[5] CSS content attribute
www.w3schools.com/cssref/pr_g…
[6] CSS data theft
www.owlfolio.org/htmletc/css…
[7] XSS without HTML: Client-Side Template Injection with AngularJS
blog.portswigger.net/2016/01/xss…
[8] cssText Web API MDN
developer.mozilla.org/en-US/docs/…
[9] AngularJS
angularjs.org/
[10] HTTP Request Smuggling
www.cgisecurity.com/lib/HTTP-Re…
[11] Cache poisoning
www.owasp.org/index.php/C…
[12] Privacy and the :visited selector
developer.mozilla.org/en-US/docs/…
[13] Gone In Six Characters: Short URLs Considered Harmful for Cloud Services
freedom-to-tinker.com/blog/vitaly…
[14] Critical vulnerabilities in JSON Web Token libraries
auth0.com/blog/critic…
[15] Cert tests Android apps
securityaffairs.co/wordpress/2…
[16] The target=_blank attack
medium.com/@jitbit/tar…
[17] window.opener
developer.mozilla.org/en/docs/Web…
[18] Rowhammer
googleprojectzero.blogspot.de/2015/03/exp…
[19] Rowhammer.js
arxiv.org/abs/1507.06…
[20] Browser autofill phishing
github.com/anttiviljam…
[21] A breakdown of the new SAML authentication bypass vulnerability
developer.okta.com/blog/2018/0…
[22] Google YOLO
blog.innerht.ml/google-yolo…