Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2022-22965 — 用于 Spring Framework 中 CVE-2022-22965 (Spring4Shell) 漏洞的检测脚本和指南,包括用于检测易受攻击的 JAR/WAR 文件和 JDK 版本检查的 PowerShell 和 Bash 扫描器。 | Kitploit
工具/GitHubGitHub/helsecert/cve-2022-22965
静态分析漏洞扫描器漏洞分析代码分析Web安全学习与教育精选资源
GitHubhelsecert/cve-2022-22965

CVE-2022-22965

用于 Spring Framework 中 CVE-2022-22965 (Spring4Shell) 漏洞的检测脚本和指南,包括用于检测易受攻击的 JAR/WAR 文件和 JDK 版本检查的 PowerShell 和 Bash 扫描器。

查看仓库
124年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Spring Framework 漏洞 - CVE-2022-22965

易受攻击/不易受攻击的软件列表

https://github.com/NCSC-NL/spring4shell/blob/main/software/README.md

发现易受攻击的代码

易受 CVE-2022-22965 攻击的前提条件:

1) 使用 Spring Framework

请参阅下面的 PowerShell 和 bash 脚本。

2) Spring Framework 的版本必须存在漏洞,这原则上适用于所有早于 5.3.18 和 5.2.20 的版本。

Hilko Bengen 发布了一个扫描器,用于根据 CachedIntrospectionResults.class 的版本搜索易受攻击的版本:https://github.com/hillu/local-spring-vuln-scanner

3) 使用 JDK9 或更高版本,并且运行 JRE 9 或更高版本。

可以通过在相关系统上运行以下命令来确定:

root@kitploit:~
java -version

请注意,Java 应用程序可以通过多种方式运行,并且可能同时安装多个不同版本。为了确定正在运行的 Java 版本,可以首先识别 Java 二进制文件的运行位置,然后查看该 Java 二进制文件对应的版本。

在 Linux 中,可以通过运行以下命令来实现:

root@kitploit:~
ps aux | grep java

例如,如果找到 /usr/lib/jvm/java-11-openjdk-amd64/bin/java,则可以使用绝对路径运行以下命令:

root@kitploit:~
$ /usr/lib/jvm/java-11-openjdk-amd64/bin/java -version
openjdk version "11.0.14.1" 2022-02-08
OpenJDK Runtime Environment (build 11.0.14.1+1-Ubuntu-0ubuntu1.18.04)
OpenJDK 64-Bit Server VM (build 11.0.14.1+1-Ubuntu-0ubuntu1.18.04, mixed mode, sharing)

在 Windows 中,可以通过 WMI 或 PowerShell 找到正在运行的 Java 进程的绝对路径:

root@kitploit:~
WMI: C:\> wmic process where "name='java.exe'" get ExecutablePath
PowerShell: PS C:\> Get-Process java | Select-Object Path

4) 使用 Spring Framework 的代码还必须使用特定的方法及参数,攻击者才能利用该漏洞。

JFrog 发布了用于识别此类用法的 Python 代码,可以直接在编译后的 Java 程序上使用,无需解压 .jar/.war 文件:https://github.com/jfrog/jfrog-spring-tools

关于在系统上识别 Spring Framework,这取决于运行的操作系统:

Windows

以下 PowerShell 脚本用于发现可能存在漏洞的应用程序,即使用或基于 Spring Framework 的应用程序。请注意,这些脚本不会区分是否已更新版本,但它们会识别出当前可能具有该漏洞的系统(参考上述第1点)。

在所有 *.war 文件中搜索 spring-beans*.jar 和 cachedintrospectionresults.class:

root@kitploit:~
$SearchName = "*.war"
$Drives = Get-WmiObject Win32_LogicalDisk -Filter 'DriveType=3' | Select -ExpandProperty DeviceID
#$Drives = Get-CimInstance Win32_LogicalDisk -Filter 'DriveType=3' | Select-Object -ExpandProperty DeviceID 
#powershell version 6

$Vulnerable = $false
$entries = @()
$hits = @()
$search1 = "spring-beans*.jar"
$search2 = "cachedintrospectionresults.class"
Foreach ($drive in $drives) {
    $SearchDir = "$drive\"
    $wars= (&cmd /c pushd $searchDir `& robocopy /l "$searchDir" null "$searchName" /ns /njh /njs /np /nc /ndl /xjd /mt /s)  -replace '^\s+|\s+$'
        
    Foreach ($war in $wars){
        If($war) {
            #$war
            Add-Type -AssemblyName System.IO.Compression
            Add-Type -AssemblyName System.IO.Compression.FileSystem
            $entries = ([System.IO.Compression.ZipArchive](https://github.com/helsecert/cve-2022-22965/blob/main/%5BSystem.IO.Compression.ZipFile%5D%3A%3AOpenRead%28%24war))).Entries
            foreach ($entry in $entries){
                if ($entry.Name -like $search1) {
                    "$($war)\$($entry.FullName)"
                    $hits = $hits +1
                    }
                if ($entry.Name -like $search2) {
                    "$($war)\$($entry.FullName)"
                    $hits = $hits +1
                    }
                }
            
        }
    
    }
    
}
If ($hits){ "Vulnerable" }
Else { "Compliant" }

此外,在所有 .jar 文件中搜索 cachedintrospectionresults.class 也很有用,因为我们知道 spring-beans*.jar 并不总是包含这个类。

root@kitploit:~
$SearchName = "*.jar"
$Drives = Get-WmiObject Win32_LogicalDisk -Filter 'DriveType=3' | Select -ExpandProperty DeviceID
#$Drives = Get-CimInstance Win32_LogicalDisk -Filter 'DriveType=3' | Select-Object -ExpandProperty DeviceID 
#powershell version 6

$Vulnerable = $false
$entries = @()
$hits = @()
$search1 = "cachedintrospectionresults.class"
Foreach ($drive in $drives) {
    $SearchDir = "$drive\"
    $wars= (&cmd /c pushd $searchDir `& robocopy /l "$searchDir" null "$searchName" /ns /njh /njs /np /nc /ndl /xjd /mt /s)  -replace '^\s+|\s+$'
        
    Foreach ($war in $wars){
        If($war) {
            #$war
            Add-Type -AssemblyName System.IO.Compression
            Add-Type -AssemblyName System.IO.Compression.FileSystem
            $entries = ([System.IO.Compression.ZipArchive](https://github.com/helsecert/cve-2022-22965/blob/main/%5BSystem.IO.Compression.ZipFile%5D%3A%3AOpenRead%28%24war))).Entries
            foreach ($entry in $entries){
                if ($entry.Name -like $search1) {
                    "$($war)\$($entry.FullName)"
                    $hits = $hits +1
                    }
                }
            
        }
    
    }
    
}
If ($hits){ "Vulnerable" }
Else { "Compliant" }

Linux

在 Linux 上搜索时,可以查找磁盘上所有 .jar 和 .war 文件中的 cachedintrospectionresults.class 类,同时还要在 *.war 文件中查找 spring-beans*.jar:

root@kitploit:~
find / -name '*.jar' -exec grep -Fi 'cachedintrospectionresults.class' {} \;
find / -name '*.war' -exec grep -Ei 'cachedintrospectionresults\.class|spring-beans.*\.jar' {} \;

以及搜索 .war 文件内部 .jar 文件中相同的类名:

root@kitploit:~
#!/bin/bash

find / -name '*.war' -print0 2>/dev/null -print0 | while read -d $'\0' spring; do
        echo -en "${spring}: "$(unzip -p "${spring}" '*.jar' | strings | grep -Fi 'cachedintrospectionresults.class' | awk '{ print $NF }')"\n"
done
exit 0

资源

https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement

https://www.praetorian.com/blog/spring-core-jdk9-rce/

https://bugalert.org/content/notices/2022-03-30-spring.html

https://www.rapid7.com/blog/post/2022/03/30/spring4shell-zero-day-vulnerability-in-spring-framework/

https://www.lunasec.io/docs/blog/spring-rce-vulnerabilities/

下载工具