
Per PowerShell 5.1 e versioni successive. Scritto da Kjetil Sigvartsen presso 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
Per PowerShell 5.1 e versioni successive. Scritto da Kjetil Sigvartsen presso Norsk helsenett SF.
Questa versione può essere un po' più intensiva per la CPU, ma sarà notevolmente più veloce della variante precedente. Nota che C:\Windows è stata esclusa anche per motivi di velocità.
Se si desidera un output più dettagliato, inserisci quanto segue all'inizio dello script:
$VerbosePreference = 'Continue'
Il codice è il seguente:
[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 \;
Gli script elencheranno i file che sono, o che contengono, la libreria core di Struts2. Un paio di esempi:
/sti/til/mappe/struts2-core-6.3.0.2.jar - qui la libreria core di Struts2 si trova direttamente sul filesystem e la versione è 6.3.0.2, in cui la vulnerabilità è stata risolta.
/sti/til/mappe/apps/struts2-showcase-6.3.0.2.war - qui la libreria core di Struts2 si trova all'interno del file .war, il cui contenuto deve essere elencato per vedere quale versione di Struts2 è inclusa:
$ 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
Per PowerShell 5.1 e versioni successive. Scritto da Kjetil Sigvartsen presso 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