在HTTPS安全页面中加载HTTP不安全的内容,如何绕过安全警告?

简介: 在HTTPS安全页面中加载HTTP不安全的内容,如何绕过安全警告?

简介

毫无疑问,如今互联网正在一步一步向HTTPS安全迈进。大多数大公司都会将证书应用到他们的网站上,以获得安全保护。这时你可能就有疑问了:这能保证安全到何种程度呢?除了可以抵御中间人攻击(MITM),网络嗅探/篡改等攻击,HTTPS 协议是否可以避免终端用户受到来自其他方面的攻击呢?答案是肯定的。

众所周知,当前攻击者使用各种渠道来传播他们的恶意payload,恶意广告便是其中之一。他们购买廉价的广告空间来展示一些广告内容,但实际上,在这些banner之下,我们总是能够看到经过混淆的恶意代码。同时我们还了解到了这些攻击者是如何判定用户为潜在受害者或是安全研究人员:即如果键盘背后的人是一个毫无经验的用户,那么攻击者会提供完整的恶意payload,否则他们就会伪装成合法的广告。

混合内容警告

攻击者们最近这段事件应该有些头疼,因为他们的欺骗工作现在只在不安全的页面才生效了,而浏览器默认情况下不会在安全的网站展示不安全的内容。也就是说,如果攻击者需要被迫通过HTTPS加载代码,他们的很多欺骗行为(比如检测文件系统)会失效。设想一下:现下浏览器拒绝从安全的域(HTTPS)加载不安全的内容 (HTTP)。这也就是所谓的“混合内容”。

我们打开一个HTTPS网页的时候,浏览器不会加载不安全的内容(例如,一个内含banner的HTTP iframe)。针对这些内容,IE浏览器将向用户发出“显示所有内容”(重新加载主页并显示所有混合内容)的选项。    

Edge浏览器则会阻止这部分内容,除非用户使用开发者工具-控制台窗口查看,否则不会显示警告。另一方面,如果iframe的来源是不安全的,则会显示混乱的错误信息而不是HTTP内容。    

允许加载图片

但其实也存在例外,即所有浏览器都允许无限制加载并渲染不安全的图片。换句话说,如果攻击者已经在网络中进行嗅探,他们可以在远端查看以及替换图片。不过实际上,这并不代表着会对用户构成真正的威胁。早在2011年Eric Lawrence(aka: Internet Hero)就写了一篇解释IE团队允许不提示警告的情况下加载不安全图像的详细博文。这很有意义:许多网站使用HTTP协议从外部加载图片,更糟糕的是,它们在资源中硬编码了指向本地图片的HTTP协议,但内容本身(html/scripts)是安全的。所以,它们决定允许image标签加载没有警告的渲染器,当加载不安全的内容,地址栏右边的提示小锁会消失。

以下为地址栏在IE上加载不安全图片前后的变化图。注意主地址栏的安全协议没有改变。  

同样的事情我们在Microsoft Edge上进行尝试,但锁的图标在左边。如果你想体验这个过程,可以戳这里。

有趣的是,两个浏览器都认为伪协议(res: mhtml: file:)是不安全的,所以就无法加载这些东西了(就像常规的http中夹杂https):

These iframes won't render anything if the main page is secure/https

<iframe src="http://">
<iframe src="res://">
<iframe src="file://">
<iframe src="mhtml://">
<iframe src="mhtml:res://">

伪协议行为

你可能会想,HTTPS与这些奇怪的mhtml:和res:协议有什么联系?这些奇怪的协议被攻击者用来加载硬盘中的文件,以及用于检测本地文件的存在。如果主页是安全的,攻击者就遇到了一个大问题:IE会拒绝解析这些协议,也就避免了运行那些欺骗脚本!也就是说,安全页面,不仅帮助我们免受中间人攻击,而且还可以用来阻止执行攻击者的很多欺骗脚本。

谨记:当攻击者想要在她的文件系统中检查用户是否存在特定文件,他们更倾向于滥用mhtml/res/file协议技术。 如果你从来没有见过相关技巧,建议先看看这篇博文,在这里只需明白一点:当下浏览器默认不允许“混合内容”,而且许多欺骗行为在HTTPS下是失效的。

强制加载内容

这样我们就解释清楚了攻击者的意图,所以就需要跟上脚步,尝试绕过这些警告。

通过上面的内容,我们知道了在没有用户交互的情况下渲染内容的规则有一个例外情况(image 标签)——于是我尝试加载以IFRAME(而不是 IMG)作为源的图片 ,但并没有成功。之后使用EMBED和OBJECT 元素(两者都可以渲染html)也没真正成功。

最后,我试着用常规IFRAME ,但是使用服务器重定向来代替直接使用不安全的URL设置其location属性。似乎能正常运行,内容最终成功加载。

Main page should be secure/https

The iframe below renders an insecure (http) bing.com

<iframe src="https://www.cracking.com.ar/redir/redir.php?URL=http://www.bing.com">

作为安全研究人员,这个发现的确非常有趣,但是从攻击者的角度来看并没有什么大的卵用。我们已经能够在无用户交互的情况下加载混合内容:由于显示了不安全的内容,浏览器会弹出一个警告(bing.com真的是以http协议加载的),然而攻击者显然不希望会有这样的警示信息告知用户。

不安全的bing.com试图渲染另一个不安全的内嵌iframe的时候,就会产生这个问题——各位可以体会一下。换言之,即便是在不安全的上级iframe嵌套下,次级嵌套的iframe也需要是安全的。当然我们也可以使用重定向再次加载,但是这并没什么用,因为攻击者想要加载IE伪协议(mhtml: res: 和 file:)来实现他们的欺骗行为,而IE拒绝服务器重定向至那些协议。所以我们需要有更好的选择。

绕过警告信息

我偶然找到了解决方案。我很惊讶,居然是那么基础的东西:在不安全的 iframe中放一个document.write就够了。可能这么简单吗?

Main page should be secure/https

The iframe below renders an insecure (http) page which does a document.write

<iframe src="https://www.cracking.com.ar/redir/redir.php?URL=http://unsafe.cracking.com.ar">

The HTML code in the iframe is quite simple:

<script>document.write()</script>

我们一旦加载了不安全的内容和document.write,该iframe就可以自由加载不安全的内容而无需重定向。换句话说,这时攻击者可以加载mhtml/res协议,无限制的施展他们的欺骗手段:IE不知道这些内容正在被渲染,每个嵌入的iframe将完美加载。

点击在线查看PoC

最后值得一提的是,Edge浏览器虽然受到前面所述重定向欺骗的影响,但document.write这招没用。或许针对Edge浏览器还有其他方法可行,我就不继续下去了。

得知攻击者实现他们恶意目的方式如此简单,我整个人都不好了。


相关文章
|
2月前
|
Ubuntu Linux Shell
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
384 68
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
|
9天前
|
网络协议 安全 网络安全
Introduction to the HTTP and HTTPS Protocol
HTTP protocol is the foundation of the Internet, and HTTPS is the secure version of HTTP. HTTP is an application layer protocol based on TCP/IP protocol. It does not involve packet (packet) transmission, mainly specifying the communication format between the client and the server, and the default po
61 25
|
26天前
|
安全 搜索推荐 网络安全
HTTPS与HTTP:区别及安全性对比
HTTP和HTTPS是现代网络通信中的两种重要协议。HTTP为明文传输,简单但不安全;HTTPS基于HTTP并通过SSL/TLS加密,确保数据安全性和完整性,防止劫持和篡改。HTTPS还提供身份验证,保护用户隐私并防止中间人攻击。尽管HTTPS有额外的性能开销和配置成本,但在涉及敏感信息的场景中,如在线支付和用户登录,其安全性优势至关重要。搜索引擎也更青睐HTTPS网站,有助于提升SEO排名。综上,HTTPS已成为大多数网站的必然选择,以保障用户数据安全和合规性。
55 1
|
2月前
|
应用服务中间件 Linux 网络安全
nginx安装部署ssl证书,同时支持http与https方式访问
为了使HTTP服务支持HTTPS访问,需生成并安装SSL证书,并确保Nginx支持SSL模块。首先,在`/usr/local/nginx`目录下生成RSA密钥、证书申请文件及自签名证书。接着,确认Nginx已安装SSL模块,若未安装则重新编译Nginx加入该模块。最后,编辑`nginx.conf`配置文件,启用并配置HTTPS服务器部分,指定证书路径和监听端口(如20000),保存后重启Nginx完成部署。
584 7
|
2月前
|
安全 算法 网络安全
HTTP和HTTPS的区别
本文介绍HTTP与HTTPS的区别、HTTPS链接建立过程及常见加密算法。HTTP为明文传输,易被窃听;HTTPS通过SSL/TLS协议加密,确保数据安全。HTTPS使用端口443,提供认证机制。文中还详细讲解了对称加密(如AES、DES)和非对称加密(如RSA、ECC)算法的特点及应用场景。
|
2月前
|
负载均衡 监控 安全
HTTP代理IP的安全与稳定技术与策略的结合
随着科技与互联网的发展,企业对代理的需求日益增长。为加强HTTP代理IP的安全性和稳定性,可采取用户教育、使用加密协议、定期更换IP、监控可用性、设置访问控制、负载均衡、配置防火墙及定期更新维护等措施。这些方法能有效提升代理服务的安全性和可靠性。
71 7
|
3月前
|
Web App开发 Linux 应用服务中间件
【DrissionPage】Linux上如何将https改为http
通过上述步骤,可以在Linux上将DrissionPage从HTTPS改为HTTP。关键在于修改DrissionPage配置、代码中的HTTPS设置、URL以及Web服务器配置,确保所有部分都正确使用HTTP协议。通过合理配置和测试,能够确保系统在HTTP环境下稳定运行。
90 1
|
3月前
|
缓存 安全 网络安全
HTTP/2与HTTPS在Web加速中的应用
HTTP/2与HTTPS在Web加速中的应用
111 11
|
3月前
|
前端开发 JavaScript 数据库
https页面加载http资源的解决方法
https页面加载http资源的解决方法
88 5
|
2月前
|
安全 网络安全 数据安全/隐私保护
第六问:http和https区别与联系
HTTP 和 HTTPS 是现代网络通信中的两种重要协议。HTTP 是明文传输协议,无加密功能;HTTPS 在 HTTP 基础上加入 SSL/TLS 加密层,提供数据加密、身份验证和数据完整性保障。HTTP 适用于非敏感信息传输,如新闻网站;HTTPS 适用于在线支付、账户登录等需要保护用户数据的场景。
59 0