JVMJava 虚拟机(Java Virtual Machine, JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的 JVM 实现是 Java 语言“一次编译,随处可以运行”的关键所在。如下图所示,不同编程语言(Java、Groovy、Kotlin、JRuby、Clojure ...)通过各自的编译器编译成 .class 文件,并最终通过 JVM 在不同平台(Windows、Mac、Linux)上运行。
JDK 和 JREJDK(Java Development Kit)是一个功能齐全的 Java 开发工具包,供开发者使用,用于创建和编译 Java 程序。它包含了 JRE(Java Runtime Environment),以及编译器 javac 和其他工具,如 javadoc(文档生成器)、jdb(调试器)、jconsole(监控工具)、javap(反编译工具)等。JRE 是运行已编译 Java 程序所需的环境,主要包含以下两个部分:JVM : 也就是我们上面提到的 Java 虚拟机。Java 基础类库(Class Library):一组标准的类库,提供常用的功能和 API(如 I/O 操作、网络通信、数据结构等)。简单来说,JRE 只包含运行 Java 程序所需的环境和类库,而 JDK 不仅包含 JRE,还包括用于开发和调试 Java 程序的工具。如果需要编写、编译 Java 程序或使用 Java API 文档,就需要安装 JDK。某些需要 Java 特性的应用程序(如 JSP 转换为 Servlet 或使用反射)也可能需要 JDK 来编译和运行 Java 代码。因此,即使不进行 Java 开发工作,有时也可能需要安装 JDK。
JDK 9 引入了一种新的编译模式 AOT(Ahead of Time Compilation) 。和 JIT 不同的是,这种编译模式会在程序被执行前就将其编译成机器码,属于静态编译(C、 C++,Rust,Go 等语言就是静态编译)。
AOT 避免了 JIT 预热等各方面的开销,可以提高 Java 程序的启动速度,避免预热时间长。并且,AOT 还能减少内存占用和增强 Java 程序的安全性(AOT 编译后的代码不容易被反编译和修改),特别适合云原生场景。
AOT 的主要优势在于启动时间、内存占用和打包体积。JIT 的主要优势在于具备更高的极限处理能力,可以降低请求的最大延迟。提到 AOT 就不得不提 GraalVM 了!GraalVM 是一种高性能的 JDK(完整的 JDK 发行版本),它可以运行 Java 和其他 JVM 语言,以及 JavaScript、Python 等非 JVM 语言。
AOT 避免了 JIT 预热等各方面的开销,可以提高 Java 程序的启动速度,避免预热时间长。并且,AOT 还能减少内存占用和增强 Java 程序的安全性(AOT 编译后的代码不容易被反编译和修改),特别适合云原生场景。
AOT 的主要优势在于启动时间、内存占用和打包体积。JIT 的主要优势在于具备更高的极限处理能力,可以降低请求的最大延迟。提到 AOT 就不得不提 GraalVM 了!GraalVM 是一种高性能的 JDK(完整的 JDK 发行版本),它可以运行 Java 和其他 JVM 语言,以及 JavaScript、Python 等非 JVM 语言。
在内网渗透中,当攻击者获取到内网某台机器的控制权后,会以被攻陷的主机为跳板,通过收集域内凭证等各种方法,访问域内其他机器,进一步扩大资产范围。通过此类手段,攻击者最终可能获得域控制器的访问权限,甚至完全控制基于Windows操作系统的整个内网环境,控制域环境下的全部机器。
执行net share命令,可以获得Windows默认开启的网络共享,其中C$为C盘共享,ADMIN$为系统目录共享,还有一个IPC$共享
执行net share命令,可以获得Windows默认开启的网络共享,其中C$为C盘共享,ADMIN$为系统目录共享,还有一个IPC$共享
将我从沙盒中隔离出来 - 探索 CNG 密钥隔离的特权提升
最近几个月,微软修补了我报告的 CNG Key Isolation 服务漏洞,编号为 CVE-2023-28229 和 CVE-2023-36906,CVE-2023-28229 包含 6 个原因类似的释放后使用漏洞,而 CVE-2023-36906 是一个越界读取信息泄露漏洞。微软在评估状态中将其标记为“不太可能被利用”,但实际上,我利用这两个漏洞完成了利用
客户端可以指定要设置哪个属性,如果属性名为“使用上下文”,它将分配一个可由客户端控制大小的新缓冲区,并将“使用上下文”缓冲区存储到提供程序对象中,但是当我查看查询代码时,我注意到“使用上下文”应该是字符串类型,它将在 while 循环中遍历缓冲区,并在遇到空字符 [c] 时中断,然后将整个缓冲区返回给客户端。
当我将“使用上下文”属性设置为缓冲区中的非零内容时,将发生越界读取,实际上,此属性是一个很好的利用对象,因为缓冲区的大小和内容可以由客户端控制。
最近几个月,微软修补了我报告的 CNG Key Isolation 服务漏洞,编号为 CVE-2023-28229 和 CVE-2023-36906,CVE-2023-28229 包含 6 个原因类似的释放后使用漏洞,而 CVE-2023-36906 是一个越界读取信息泄露漏洞。微软在评估状态中将其标记为“不太可能被利用”,但实际上,我利用这两个漏洞完成了利用
客户端可以指定要设置哪个属性,如果属性名为“使用上下文”,它将分配一个可由客户端控制大小的新缓冲区,并将“使用上下文”缓冲区存储到提供程序对象中,但是当我查看查询代码时,我注意到“使用上下文”应该是字符串类型,它将在 while 循环中遍历缓冲区,并在遇到空字符 [c] 时中断,然后将整个缓冲区返回给客户端。
当我将“使用上下文”属性设置为缓冲区中的非零内容时,将发生越界读取,实际上,此属性是一个很好的利用对象,因为缓冲区的大小和内容可以由客户端控制。
JavaScript 是网络上使用最广泛的编程语言之一,因此成为网络犯罪分子的主要目标。它的流行以及其客户端执行为各种攻击媒介创造了机会。在本文中,您将学习一些 JavaScript 基础知识,以识别和利用 Web 应用程序中的漏洞,例如跨站点脚本 (XSS)、跨站点请求伪造 (CSRF),以及一些其他常见安全漏洞
OWASP ZAP 预装在 Kali Linux 上,因此请确保在您的终端中使用其进行更新sudo apt update %% sudo apt upgrade。
从应用程序菜单或 zaproxy在终端中输入启动应用程序,并配置必要的设置,例如目标 URL 和代理设置(考虑使用FoxyProxy这样的插件来轻松更改代理)。
扫描目标Web应用程序:
点击“攻击”按钮或从“工具”菜单中选择“蜘蛛”选项,即可启动扫描。这将启动对 Web 应用程序的爬取并识别潜在漏洞的过程。
查看结果:
扫描完成后,OWASP ZAP 将在“警报”选项卡中显示已识别漏洞的列表。您可以单击每个警报以查看更多详细信息,例如漏洞类型、严重性(通过彩色标志轻松可视化)和简要说明。
从应用程序菜单或 zaproxy在终端中输入启动应用程序,并配置必要的设置,例如目标 URL 和代理设置(考虑使用FoxyProxy这样的插件来轻松更改代理)。
扫描目标Web应用程序:
点击“攻击”按钮或从“工具”菜单中选择“蜘蛛”选项,即可启动扫描。这将启动对 Web 应用程序的爬取并识别潜在漏洞的过程。
查看结果:
扫描完成后,OWASP ZAP 将在“警报”选项卡中显示已识别漏洞的列表。您可以单击每个警报以查看更多详细信息,例如漏洞类型、严重性(通过彩色标志轻松可视化)和简要说明。
手动测试漏洞
手动测试 Web 应用程序是否存在漏洞是确定是否存在漏洞的一种方法。最常见的手动测试涉及在输入或表单字段中使用 JavaScript 来查看命令是否会运行。还有许多其他类型的手动测试(OWASP 整理了 XSS 过滤器逃避备忘单),但这通常是涉及的第一步。
步骤 1:设置 DVWA
DVWA 也预装在 Kali Linux 中。如果你使用其他操作系统,请从其 GitHub 存储库下载,或sudo apt install dvwa在终端中使用。
通过运行托管应用程序的 Web 服务器启动 DVWA。
通过 Web 浏览器访问 DVWA,通常在http://localhost/dvwa。
使用提供的凭据登录或创建新帐户。
导航到“XSS”类别下的“反射型 XSS”部分。
第 2 步:识别漏洞
第一步是观察用户输入字段,因为这些是我们希望用于此类 XSS 攻击的元素。在开发者控制台中,检查易受攻击页面的源代码,以找到可能易受反射型 XSS 攻击的输入字段。
手动测试 Web 应用程序是否存在漏洞是确定是否存在漏洞的一种方法。最常见的手动测试涉及在输入或表单字段中使用 JavaScript 来查看命令是否会运行。还有许多其他类型的手动测试(OWASP 整理了 XSS 过滤器逃避备忘单),但这通常是涉及的第一步。
步骤 1:设置 DVWA
DVWA 也预装在 Kali Linux 中。如果你使用其他操作系统,请从其 GitHub 存储库下载,或sudo apt install dvwa在终端中使用。
通过运行托管应用程序的 Web 服务器启动 DVWA。
通过 Web 浏览器访问 DVWA,通常在http://localhost/dvwa。
使用提供的凭据登录或创建新帐户。
导航到“XSS”类别下的“反射型 XSS”部分。
第 2 步:识别漏洞
第一步是观察用户输入字段,因为这些是我们希望用于此类 XSS 攻击的元素。在开发者控制台中,检查易受攻击页面的源代码,以找到可能易受反射型 XSS 攻击的输入字段。
您已设置了一个简单的监听服务器来捕获 XSS 负载发送的数据。每当执行负载时,服务器日志都会显示接收到的数据,这正是我们现在要做的。您可以更改代码以捕获其他信息,例如 cookie、URL 等。
利用反射型XSS
现在,我们将演示一种利用反射型 XSS 漏洞捕获敏感用户输入(例如登录凭据)并将其发送到攻击者控制的服务器的高级技术。在本次演示中,我们将再次使用 DVWA。
步骤 1:导航到“反射型 XSS”部分
在您的网络浏览器中打开 DVWA,通常可以通过 访问http://localhost/dvwa。
使用提供的凭据登录或创建新帐户。
导航到“XSS”类别下的“反射型 XSS”部分。
步骤 2:制作有效载荷
现在,我们编写一个 JavaScript 有效负载,它在执行时会捕获用户在特定表单字段中输入的内容,并将其发送到您控制的服务器。
利用反射型XSS
现在,我们将演示一种利用反射型 XSS 漏洞捕获敏感用户输入(例如登录凭据)并将其发送到攻击者控制的服务器的高级技术。在本次演示中,我们将再次使用 DVWA。
步骤 1:导航到“反射型 XSS”部分
在您的网络浏览器中打开 DVWA,通常可以通过 访问http://localhost/dvwa。
使用提供的凭据登录或创建新帐户。
导航到“XSS”类别下的“反射型 XSS”部分。
步骤 2:制作有效载荷
现在,我们编写一个 JavaScript 有效负载,它在执行时会捕获用户在特定表单字段中输入的内容,并将其发送到您控制的服务器。
hook glbic的方法更多的只是用在用户态做阻拦,例如之前文章中通过LD_PRELOAD进行动态链接阻拦的方法如果通过sudo命令运行,或者使用syscall运行的时候就无法进行拦截
现在需要将我们的思维发散,在终端下实现whoami命令的时候,调用的其实是getuid()这个函数,所以我们要针对的是getuid
引入一个Liunx下一个非常特别的内核机制,eBPF。那么什么是eBPF。eBPF(Extended Berkeley Packet Filter) 是一种高效、灵活的 内核扩展 机制,允许开发者在 不修改内核代码 的情况下,在内核中 运行安全的自定义程序,用于 网络处理、安全监控、系统跟踪、性能优化 等,最关键的一个点是它不需要直接修改Linux相关的内核,保证了内核的安全,减少了系统崩溃的风险
现在需要将我们的思维发散,在终端下实现whoami命令的时候,调用的其实是getuid()这个函数,所以我们要针对的是getuid
引入一个Liunx下一个非常特别的内核机制,eBPF。那么什么是eBPF。eBPF(Extended Berkeley Packet Filter) 是一种高效、灵活的 内核扩展 机制,允许开发者在 不修改内核代码 的情况下,在内核中 运行安全的自定义程序,用于 网络处理、安全监控、系统跟踪、性能优化 等,最关键的一个点是它不需要直接修改Linux相关的内核,保证了内核的安全,减少了系统崩溃的风险