
# نصوص كشف لـ CVE-2023-50164 في Apache Struts2، توفر أدوات PowerShell و Bash لفحص الإصدارات المعرضة للخطر عبر أنظمة الملفات والأرشيفات.
من أجل Powershell 5.1 والإصدارات الأحدث. كتبه Kjetil Sigvartsen من Norsk helsenett SF.
[String[]]$Extensions = @('*.jar', '*.war', '*.ear')
[string]$searchString = 'struts2-core'
foreach ($Disk in (Get-CimInstance Win32_LogicalDisk)) {
[string]$DriveLetter = $Disk.DeviceID
[string]$Path = "$($driveLetter)\"
foreach ($ChildItem in (Get-ChildItem -Path $Path -Recurse -Include $Extensions -File -ErrorAction SilentlyContinue)) {
[String]$FilePath = $ChildItem.FullName
$Content = Get-Content -Path $filePath -Raw
if ($Content -like "*$searchString*") {
Write-Output $filePath
} #if
} #foreach
} #foreach
من أجل Powershell 5.1 والإصدارات الأحدث. كتبه Kjetil Sigvartsen من Norsk helsenett SF.
قد يكون هذا السكربت أكثر استهلاكًا لوحدة المعالجة المركزية (CPU) إلى حد ما، لكنه أسرع بشكل ملحوظ من النسخة المذكورة أعلاه. لاحظ أن C:\Windows مستبعد أيضًا حفاظًا على السرعة.
إذا رغبت في الحصول على مخرجات أكثر تفصيلًا، أضف ما يلي إلى أعلى السكربت:
$VerbosePreference = 'Continue'
أما بقية الكود فهو كالتالي:
[String[]]$Extensions = @('*.jar', '*.war', '*.ear')
[string]$searchString = 'struts2-core'
[string[]]$Exceptions = @('C:\Windows')
foreach ($Disk in (Get-CimInstance Win32_LogicalDisk)) {
[string]$DriveLetter = $Disk.DeviceID
[string]$Path = "$($driveLetter)\"
Write-Verbose -Message "Working on $Path"
try {
[System.IO.DirectoryInfo[]]$Folders = Get-ChildItem -Path $Path -Directory -ErrorAction Stop
} #try
catch {
Write-Verbose -Message "Unable to get child folders in disk $Path"
continue
} #catch
[System.Management.Automation.Job[]]$Jobs = $Null
[System.Management.Automation.Job[]]$Jobs = foreach ($Folder in $Folders) {
[string]$JobName = $Path + $Folder.Name
if ($Exceptions -contains $JobName) {
Write-Verbose -Message "Skipping $JobName, in exception list"
continue
} #if
Write-Verbose -Message "Starting jobs for $JobName"
Start-Job -Name $JobName -ScriptBlock {
Return (Get-ChildItem -Path $Using:JobName -Recurse -Include $Using:Extensions -File -ErrorAction SilentlyContinue)
} #Start-Job
} #Foreach
[System.Object[]]$JobResults = $Null
[System.Object[]]$JobResults = Receive-Job -Job $Jobs -AutoRemoveJob -Wait -ErrorAction Stop
[System.Management.Automation.Job[]]$RemainingJobs = $Null
[System.Management.Automation.Job[]]$RemainingJobs = get-Job -Name "$Path*" -ErrorAction Stop
if ($RemainingJobs) {
Write-Verbose -Message "$($RemainingJobs.count) jobs remaining"
} #if
foreach ($ChildItem in $JobResults) {
[String]$FilePath = $ChildItem.FullName
[string]$Content = Get-Content -Path $filePath -Raw
if ($Content -like "*$searchString*" -or $FilePath -like "*$searchString*") {
Write-Output $filePath
} #if
} #foreach
} #foreach
sudo find / -type f \( -iname "*.jar" -o -iname "*.war" -o -iname "*.ear" \) -exec grep -Fl "struts2-core" {} 2>/dev/null \;
ستقوم السكربتات بإدراج الملفات التي تمثل مكتبة struts2 core أو تحتوي عليها. وفيما يلي مثالان على ذلك:
/sti/til/mappe/struts2-core-6.3.0.2.jar - هنا توجد مكتبة struts2 core مباشرة على نظام الملفات، والنسخة هي 6.3.0.2، حيث تم إصلاح الثغرة.
/sti/til/mappe/apps/struts2-showcase-6.3.0.2.war - هنا توجد مكتبة struts 2 core داخل ملف .war، ويجب عرض محتوياته لمعرفة إصدار Struts2 المضمّن:
$ unzip -l /sti/til/mappe/apps/struts2-showcase-6.3.0.2.war | fgrep struts2-core
1519992 2023-12-05 05:58 WEB-INF/lib/struts2-core-6.3.0.2.jar
من أجل Powershell 5.1 والإصدارات الأحدث. كتبه Kjetil Sigvartsen من Norsk helsenett SF.
[string[]]$ZipFiles = @(
'C:\sti\til\mappe\apps\struts2-showcase-6.3.0.2.war'
)
Add-Type -AssemblyName System.IO.Compression.FileSystem
foreach ($ZipFile in $ZipFiles) {
foreach ($Entry in ([System.IO.Compression.ZipFile]::OpenRead($zipFile).Entries)) {
if ($Entry.FullName -like "*struts2-core*") {
Write-Output $Entry.FullName
} #if
} #foreach
} #foreach