Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2022-22965 — CVE-2022-22965 (Spring4Shell) 취약점 탐지 스크립트 및 가이드 - Spring Framework 관련, 취약한 JAR/WAR 파일 및 JDK 버전 확인을 위한 PowerShell 및 Bash 스캐너 포함. | Kitploit
도구/GitHubGitHub/helsecert/cve-2022-22965
Static AnalysisVulnerability ScannersVulnerability AnalysisCode AnalysisWeb SecurityLearning & EducationCurated Resources
GitHubhelsecert/cve-2022-22965

CVE-2022-22965

CVE-2022-22965 (Spring4Shell) 취약점 탐지 스크립트 및 가이드 - Spring Framework 관련, 취약한 JAR/WAR 파일 및 JDK 버전 확인을 위한 PowerShell 및 Bash 스캐너 포함.

저장소 보기
14년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

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) JDK 9 이상을 사용하고 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/HEAD/%5BSystem.IO.Compression.ZipFile%5D::OpenRead($war))).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/HEAD/%5BSystem.IO.Compression.ZipFile%5D::OpenRead($war))).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/

도구 다운로드