POC详情: 17cd7d0ef07c69e83dc29104cbd6ecdb2071ea4e

来源
关联漏洞
标题: Apache Struts 安全漏洞 (CVE-2023-50164)
描述:Apache Struts是美国阿帕奇(Apache)基金会的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架,主要提供两个版本框架产品,Struts 1和Struts 2。 Apache Struts 存在安全漏洞,该漏洞源于file upload参数存在路径遍历漏洞。攻击者可利用该漏洞上传恶意文件并执行远程代码。受影响的产品和版本:Apache Struts 2.0.0至2.5.32版本,6.0.0至6.3.0.1版本。
介绍
# CVE-2023-50164
## Sårbare versjoner
- Struts 2.0.0 - Struts 2.3.37 (EOL)
- Struts 2.5.0 - Struts 2.5.32
- Struts 6.0.0 - Struts 6.3.0

## Versjoner hvor sårbarheten er lukket
- Struts 2.5.33
- Struts 6.3.0.2

## Script for søk

### Windows/PowerShell
For Powershell 5.1 og nyere. Skrevet av [Kjetil Sigvartsen](https://github.com/kjetils-labs) i Norsk helsenett SF.
```powershell
[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
```

### Windows/PowerShell Multi-threaded
For Powershell 5.1 og nyere. Skrevet av [Kjetil Sigvartsen](https://github.com/kjetils-labs) i Norsk helsenett SF.
Denne kan være en del mer CPU-intensiv, men vil være vesentlig raskere enn varianten over. Merk at `C:\Windows` er også filtrert ut av hastighetshensyn.
Hvis mer detaljert output er ønskelig, legg inn følgende på toppen av scriptet:

```powershell
$VerbosePreference = 'Continue'
```
Koden er forøvrig som følger:

```powershell
[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
```


### Linux/Bash
```bash
sudo find / -type f \( -iname "*.jar" -o -iname "*.war" -o -iname "*.ear" \) -exec grep -Fl "struts2-core" {} 2>/dev/null \;
```

## Tolking av resultater
Scriptene vil liste ut filer som er, eller inneholder, struts2 core biblioteket. Et par eksempler på dette:

`/sti/til/mappe/struts2-core-6.3.0.2.jar` - her ligger struts2 core biblioteket direkte på filsystemet, og versjonen er `6.3.0.2`, hvor sårbarheten er lukket.

`/sti/til/mappe/apps/struts2-showcase-6.3.0.2.war` - her ligger struts 2 core biblioteket inni .war-filen, hvor innholdet må listes ut for å se hvilken versjon av Struts2 som er lagt inn:

### Linux/Bash
```bash
$ 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
```

### Windows/PowerShell:
For Powershell 5.1 og nyere. Skrevet av [Kjetil Sigvartsen](https://github.com/kjetils-labs) i Norsk helsenett SF.
```powershell
[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
```
文件快照

[4.0K] /data/pocs/17cd7d0ef07c69e83dc29104cbd6ecdb2071ea4e └── [4.6K] README.md 0 directories, 1 file
神龙机器人已为您缓存
备注
    1. 建议优先通过来源进行访问。
    2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
    3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。