破解了! KringleCon 5 亮点:金戒指

破解了! KringleCon 5 亮点:金戒指

在 2022 年 SANS 假日黑客挑战赛中,学习与乐趣相遇——在我挫败 Grinchum 的犯规计划并取回五个金戒指的过程中,系好安全带,在北极进行疯狂的骑行

这是我第一年参加 SANS 假日黑客挑战 这是一个爆炸。 通过一系列从易到难的 16 个挑战,我练习分析可疑的网络流量和 PowerShell 日志,编写 苏里卡塔规则, 打破了 Docker容器,找到泄露的密钥以利用 GitLab CI/CD 流水线AWS 用户,进行 XML 外部实体攻击,并破解智能合约以购买 不可替代的令牌.

这段经历最好的部分是它向我介绍了新的工具和技术,从而进一步扩展了我的网络安全知识。 在这里,我分享了解决挑战的一些亮点。

方向

每个参与者都会收到一个头像,以浏览设置在北极的浏览器内视频游戏环境:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

在入职培训期间,您会收到一个加密货币钱包,游戏使用该钱包来奖励完成挑战的 KringleCoins,并且您在最后一个挑战中使用它来破解智能合约。 有趣的是,该游戏会跟踪以太坊区块链中的所有 KringleCoin 交易,这意味着您的进度的完整记录也存储在该区块链中。

进入游戏的第一环。

1.托尔金戒指

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

找到托尔金指环需要锻炼我的日志分析能力。

Wireshark 网络钓鱼

首先,我使用 Wireshark 来分析提供的 .pcap 显示服务器的文件 adv.epostoday[.]英国 下载文件 Ref_Sept24-2020.zip 到电脑:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

在 ZIP 文件中查看,我发现了一个名为 Ref_Sept24-2020.scr 在 ESET Endpoint Security 中触发了两次检测: BAT/亚军.ES 泛型标签标签. 该恶意软件最终导致在内存中运行名为 配置文件 并被 ESET 检测到 高级内存扫描仪 as Win32/Dridex.DD.

Windows事件日志

接下来,我分析了提供的 采用.evtx 包含带有事件查看器的 PowerShell 日志的文件。 虽然还有其他工具可以分析 PowerShell 日志,但如果攻击者知道如何使用离地二进制文件来躲避监视,那么防御者也应该精通操作系统提供的本机工具。

由于日志包含 10,434 个事件,我按日期对事件进行分组,然后运行“查找”操作以查找包含 $ 特点。 在 PowerShell 中, $ 用于创建和引用 变量. 我发现攻击发生在 24 年 2022 月 XNUMX 日,当时攻击者运行了以下脚本:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

看起来攻击者找到了一个秘方,切换了秘方 蜂蜜 鱼油, 然后创建了一个新的配方文件。 这触发了一个 ID 为 4104 的事件,它代表远程 PowerShell 命令的执行。 因此,我按此 ID 过滤事件,帮助我更快地找到其他恶意事件。

苏里卡塔帆船赛

Tolkien Ring 的最后一个练习是编写四个 Suricata 规则来监控 Dridex 感染的网络流量:

alert dns $HOME_NET any -> any any (msg:”Known bad DNS lookup, possible Dridex infection”; dns.query; content:”adv.epostoday.uk”; nocase; sid:1; rev:1;)

alert http 192.185.57.242 any <> any any (msg:”Investigate susgious connections, possible Dridex infection”; sid:2; rev:1;)

alert tls any any -> any any (msg:”Investigate bad certificates, possible Dridex infection”; tls.cert_subject; content:”CN=heardbellith.Icanwepeh.nagoya”; sid:3; rev:1;)

alert http any any -> any any (msg:”Suspicious JavaScript function, possible Dridex infection”; file_data; content:”let byteCharacters = atob”; sid:4; rev:1;)

按顺序,这些规则捕获 DNS 查找 adv.epostoday[.]英国, 连接到 IP 地址 192.185.57[.]242, 恶意服务器的使用 heardbellith.Icanwepeh[.]名古屋 通过通用名称 (CN) 在 TLS 证书中,以及 JavaScript 的使用 原子() 函数在客户端解码包含 base64 编码数据的二进制字符串。

完成这三个挑战为我赢得了托尔金戒指:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

到二环。

2.精灵戒指

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

Elfen Ring 最突出的挑战是 Prison Escape 和 Jolly CI/CD。

越狱

越狱是一个严厉的提醒,在 Docker 容器中向用户授予 root 权限与在主机系统上授予 root 权限一样好。 挑战在于打破容器。 好吧,当你是 root 时很容易做到:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

作为 root 用户,我列出了设备的分区表,然后挂载了主机文件系统,授予我对主机的完全访问权限。 现在我可以搜索密钥了,它应该位于游戏内提示显示的主目录中:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

乔利 CI/CD

虽然这很快,但 Jolly CI/CD 花了我最长的时间来解决所有挑战。 首先,我们获得了一个 Git 存储库以通过 HTTP 克隆:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

从 URL 中,我可以看到存储库的名称是 wordpress.flag.net.internal,所以我转到存储库并找到了一个 WordPress 网站。 我检查了网站是否在线:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

是的,该网站可以正常运行。 我很好奇源代码历史中是否有任何泄漏的密钥。 如果是,我应该能够将编辑推送到源代码。 所以我跑了 混帐日志:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

从提交消息来看,它看起来像 承诺 是在添加资产以修复呐喊之后制作的。 是时候检查 pre-whoops 提交了:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

太好了,我找到了一个 .ssh 带键的目录。 让我们复制这些密钥并配置一个 SSH 代理和一个 Git 用户,看看我是否可以模拟这些密钥的所有者:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

现在让我们回到主分支并测试我们是否可以对源代码进行微不足道的更改(使用 nano,我只是在其中一个文件中添加了一个空格):

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

所以,我通过模仿一位 WordPress 开发人员完成了挑战的第一部分,但是在我推送之后网站是否仍然有效?

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

我的推送改变了一些东西,因为现在网站重定向到端口 8080。

到目前为止,我一直忽略了挑战的 CI/CD 部分,这应该是完成它的关键。 该存储库包含一个 .gitlab-ci.yml 文件,它提供 GitLab CI/CD 管道的配置。 每次推送到存储库时,CI/CD 系统都会启动,并且 GitLab 亚军 执行此 YML 文件中的脚本。 我想,这与在安装了 GitLab Runner 的服务器上实现远程代码执行一样好。

走近一看,我看到了一个 rsync的 脚本将所有文件从 Git 存储库复制到提供网站服务的 Web 服务器上的目录。 起初,我尝试使用 rsync的 通过将所有文件从 Web 服务器复制到 Git 存储库来反转数据流,但没有成功。

经过大量的假设检验,我最终有了突破性的见解:与其尝试“修复”WordPress 网站或通过构建系统运行恶意脚本,不如为从 Web 服务器泄漏信息的网站提供服务。 里面 的index.php (位于存储库的顶层),我可以注释掉加载 WordPress 网站并运行探测 Web 服务器的 PHP 命令的代码。

事实上,我什至可以使用 PHP 运行 shell 命令。 我找到 通路() 工作轻松。

In 的index.php, 我用了 // 注释掉两行,然后我添加了 passthru('ls -la /'); 在最后一行。 这将创建一个网站,列出 Web 服务器根目录中的所有文件:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

然后我将此更改推送到 Git 存储库,GitLab CI/CD 系统负责为我更新网站:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

啊,精灵之戒一定在 旗帜.txt! 我重复了前面的步骤,但这次使用 passthru('cat /flag.txt'); 下次我请求网站时显示 Elfen Ring:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

到第三环。

3.网环

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

对我来说最有趣的挑战是 Open Boria Mine Door,尽管 Glamtariel's Fountain 很有趣,同时也提供谜语。

打开 Boria 矿门

在 Open Boria Mine Door 中,我们看到了六个图钉或小型挑战以绕过输入验证或 内容安全政策 连接引脚之间的入口和出口管道,包括匹配管道颜色。 对于大多数引脚,我使用 HTML 编写连接字母“o”的列表。 这是我的最终解决方案:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

销1

Pin 1 没有验证,所以这是一个简单的 HTML 和内联 CSS 问题:

销2

Pin 2 的内容安全策略不允许 JavaScript 但允许内联 CSS,所以这对我的方法来说没有问题:

销3

Pin 3 的内容安全策略不允许使用 CSS 但允许内联 JavaScript,因此我使用 JavaScript 来更改样式:

销4

Pin 4 没有内容安全策略,但它在客户端有一个 sanitizeInput 函数,可以去除双引号、单引号、左尖括号和右尖括号。 这里的技巧是要意识到这个函数不是通过提交表单触发的,而是通过 Onblur 事件。 换句话说,将鼠标移离输入字段会触发 Onblur 事件,清理任何输入。 解决方案是通过按 输入 键,同时注意不要将鼠标光标移动到输入字段的边界之外:

销5

引脚 5 具有相同的 清理输入 功能和绕过内容安全策略禁止内联 CSS,但允许内联 JavaScript:

销6

最后,Pin 6 没有净化输入,但它使用了更严格的内容安全策略,禁止内联 CSS 和 JavaScript。 我的解决方案是使用已弃用的 HTML 来获取我需要的样式并使用表格而不是列表:

Glamtariel的喷泉

Glamtariel的喷泉 是一个练习的机会 XML 外部实体 (XXE) 攻击. 弄清楚如何定义自定义 XML 实体、定义从服务器请求文件的实体以及将该实体作为负载添加到 HTTP 请求并不难。 最困难的部分是弄清楚游戏中的谜语以预测服务器可能泄露的文件的路径。 这是揭示金戒指位置的突破请求:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

我将提供从这一挑战中吸取的两个教训。 首先,使用 内容类型转换器 扩展在 打嗝 将 JSON 有效负载转换为 XML。 其次,尝试将 XXE 有效负载放在不同的标签中——我花了很长时间才弄清楚我所要做的就是将 &xx; 中的有效载荷 请求类型 标签而不是 图像丢失 标签。

到第四环。

4.云环

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

Playing for the Cloud Ring 是对 Amazon Web Services (AWS) 命令行界面 (CLI) 的初学者尝试。

这组挑战的重点是使用 松露猪 在 Git 存储库中查找 AWS 凭据,然后利用它们以 AWS 用户身份进行身份验证。 到达这个位置的攻击者可以使用 aws我 命令查询适用于用户的策略,从而可以访问和滥用哪些云资产。

到第五环。

5. 燃烧的火环

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

这组挑战中最具启发性的部分是学习 默克尔树 利用智能合约和 进入购买不可替代代币 (NFT) 的预售清单. 这里的挑战是发现证明值,连同我的钱包地址和 Merkle 树的根值,证明我包含在预售列表中。

在几次提供证明值的尝试失败后,我意识到我永远无法计算出所提供的根值的证明值,因为无法知道用于计算它的所有叶值。 我需要更改根值,以便提供有效的 Merkle 树。

运用 QPetabyte 教授的工具,我用两片叶子创建了一个默克尔树,其中包括我的钱包地址和 BSRS_nft 智能合约,我在游戏的以太坊区块链的第二个区块中使用游戏中的区块链资源管理器发现了它。 该工具生成了这棵树的根值和我的钱包地址的证明值。 然后我使用 Burp 拦截对服务器的请求并更改默认根值,以便我可以提交有效的 Merkle 树。 这是我的 NFT 孢子 以 100 KringleCoins 的固定价格购买:

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

确实是一个丑陋的标本。

最后

破解了! KringleCon 5 亮点:金环柏拉图区块链数据智能。垂直搜索。人工智能。

非常感谢 SANS Holiday Hack Challenge 的组织者以新的方式拓展我的思维并帮助加深我的网络安全知识。 我不仅期待明年的挑战,而且我什至会尝试 2020 年和 2021 年的挑战。 如果您以前没有参加过这项挑战,我希望这些亮点已经激起了您的兴趣。

时间戳记:

更多来自 我们安全生活