HTML走私在网络钓鱼中是怎么被利用的?

HTML走私是一种利用浏览器在主机上创建恶意文件的攻击技术,常用于网络钓鱼。通过JavaScript Blob和DataURL,攻击者能将恶意文件隐藏在HTML内容中,逃避安全检测。本文介绍了HTML走私的概念、利用方法及其在钓鱼攻击中的应用,强调了其在绕过安全防御方面的挑战,以及在电子邮件链接和HTML附件中实施的可能性。同时,文章提出了防御和检测HTML走私的策略,包括禁止JavaScript执行、限制HTML附件和使用Windows应用程序防护等。
摘要由CSDN通过智能技术生成

今天雨笋教育小编来给大家介绍一种走私技术,HTML Smuggling,这不是一种特别新的攻击方法,但是它确实在越来越多的攻击场景中出现,其中就包括网络钓鱼。接下来我们就来了解一下HTML走私的来龙去脉以及它在钓鱼中是怎样被利用的吧。

 

HTML走私介绍

什么是HTML走私?HTML走私是指,浏览器根据HTML文件的内容在主机上创建恶意文件,而不是直接转发/下载恶意软件的一种技术。HTML走私可以通过在HTML页面中将恶意文件隐藏为编码后的“string”来绕过外围安全性检查和在线检测。

大多数周边/在线安全检测方法都是通过匹配文件中的某些特定模式。但在HTML走私的情况下,恶意文件被嵌在浏览器中,所以检测这样隐藏的代码是困难的。而且由于代码中的混淆,甚至检测HTML走私这种情况本身也很困难。

 

利用方法

在去年也就是2020年的网络钓鱼调查中,我遇到了两种本质上不同的HTML走私方式。这两种方案都将数据存储在HTML文件中,并且提供了无需向服务器发送额外请求就可以“下载”数据的方法。此外,这两种方案都是基于HTML5的下载属性(虽然不是强制性的但是有好处)。

Javascript Blob

先介绍第一种方案,基于JavaScript Blob,也是我经常看到的方案。Blob对象表示一个不可变、原始数据的类文件对象。它的数据可以按照文本或二进制的格式进行读取,也可以转换为ReadableStream来读取。借助Blob,我们可以将我们的恶意文件存储在HTML代码中,然后将其置入浏览器中,而不是直接向Web服务器发送文件上传请求。

我们可以通过下面两个链接来创建我们的HTML页面:

https://gist.github.com/darmie/e39373ee0a0f62715f3d2381bc1f0974
https://developer.mozilla.org/en-US/docs/Web/API/Blob

要存储文件,首先,需要将文件编码为,可以在PowerShell中使用一下代码来实现:

$string = [Convert]::ToString([IO.File]::ReadAllBytes($FileName))

然后替换下面html文件中<>所指的值。fileName变量表示你希望在默认情况下下载文件的名称。_encoded_file变量存储编码后的文件。

<html>

<body>

<script>

var fileName = <>

var _encoded_file = <>

function _ToArrayBuffer(,mimeType) {

var binary_string = window.atob();

var len = binary_string.length;

var bytes = new Uint8Array( len );

for (var i = 0; i < len; i++) {

bytes[i] = binary_string.charCodeAt(i);

}

return URL.createObjectURL(new Blob([bytes], {type: mimeType}))

}

var url = _ToArrayBuffer(_encoded_file,'octet/stream')

const link = document.('a');

document.body.(link);

link.href = url;

link.download = fileName;

link.innerText = 'Download';

</script>

</body>

</html>

现在只要我们点击上面的链接,就会开始下载步骤。

DataURL

实现HTML走私的另一种方案是使用DataURL。这种解决方案就不需要使用JavaScript了。使用DataURL进行HTML走私的目标就是将较小的文件嵌入HTML文件中。

虽然上面强调了小文件,但是实际上,限制也不是很严格。DataURL的最大长度由浏览器中的最大URL长度决定。比如,在Opera中,这个大小是65535个字符,虽然这个字节数对于转移1080p的电影来说是远远不够的,但是用来反弹shell已经足够了。

这种方法比第一种基于JS Blob的要简单得多。先看一下语法:

data: :前缀;
[<mediatype>]:可选项,是一个MIME类型的字符串,比如我们最常见的image/jpeg表示JPEG图像,如果缺省,默认值为text/plain;ch
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值