Post

The Panel Behind the Prompt: OSINT into a Live Lunex Stealer Network

OSINT follow-up to the ClickFix/CAPTCHA campaign: six confirmed Lunex stealer C2 panels across five countries, including a Cloudflare-hidden instance on a Google-impersonating domain. Cookie theft, credential harvesting, real-time JavaScript injection, browser spoofing, and full remote browser control -- documented from the observable panel interface.

The Panel Behind the Prompt: OSINT into a Live Lunex Stealer Network

The views and opinions expressed in this post are my own and do not represent those of my employer. This is a personal blog where I share research and things I am learning.

TL;DR – Following up on the ClickFix/CAPTCHA campaign post, passive OSINT surfaced six live Lunex stealer C2 panels across the US, Finland, Germany, the Netherlands, and Ukraine – plus a panel hiding behind Cloudflare on a domain designed to impersonate Google API traffic in network logs. This post documents what Lunex does once it has a foothold: cookie and credential theft, browser history and tab enumeration, real-time JavaScript injection, content spoofing, on-demand screenshots, and full remote browser control. It is built for financial fraud and identity theft – not just credential collection.

Do these first:

  • Block connections to the IOC IPs and domains below, particularly on port 8000
  • Enable PowerShell Script Block Logging (Event ID 4104) if not already active
  • Audit and baseline browser extensions across your endpoints via MDM/Group Policy
  • Hunt for connections to api-goo-drivehosting[.]com – designed to look like Google in logs
  • Review session replay anomalies: impossible travel, new-IP authentication alerts

A thread I left dangling

In my last post I noted, almost as an aside, that the ClickFix campaign delivered a Rust stealer beaconing to a C2 panel named Lunex – bilingual, Russian and English, visible on the public internet via OSINT. I did not go deep on it at the time. I was focused on the delivery chain and the payloads.

That mention stuck with me. So I went back and looked harder.

The C2 IP from the original sample – 94.154.32[.]21 – was hosting more than a stealer endpoint. A Lunex panel was running on port 8000 of the same IP. And once I started looking at that panel’s fingerprint, more started appearing.

I want to address the screenshots upfront. I kept visuals minimal in the original post – the analysis was about the malware mechanics and a screenshot of a PowerShell blob does not add much. This post is different. The goal here is to document what Lunex does: the interface makes the capability set explicit, and screenshots are the clearest way to convey it. All images have been redacted to protect any identifiable information. The welcome post says: code over screenshots – real snippets you can read, copy, and grep for. This is one of the exceptions. You cannot grep a UI.

The attack, briefly

For anyone arriving without the previous post: ClickFix is a social engineering technique where victims land on a page – typically a fake CAPTCHA or browser verification prompt – that instructs them to paste a command into a Run dialog or PowerShell window. In this campaign, the page at captcha-code[.]lol delivered a five-layer RC4-gzip PowerShell loader that ultimately dropped the Lunex infostealer, a Rust binary that force-installed a malicious browser extension, enumerated every active Windows logon session via LSA APIs, and performed Active Directory user and group reconnaissance.

The Lunex stealer is what phones home. It connects to the C2 panel and registers the compromised machine as a “bot.” From that point on, the operator has a live window into the victim’s browser.

The OSINT trail

Lunex panels are React single-page applications served by nginx. The React build includes a JavaScript bundle with a fingerprint-able hash in its filename. The Go-based REST API backend exposes a distinct CORS header pattern. Every deployment shares the same favicon – a unique MD5 hash (b9251db3aa9511157cba432c0b5402fc) that persists across all builds and serves as a reliable search fingerprint.

Starting from Shodan – title matching, JS bundle hash, nginx version, API response signature – and expanding to Validin queries across favicon hash, body hash, and server/title/length combinations, 212 raw records resolved to 16 unique IP:port pairs. After filtering Cloudflare edge IPs (whose real origins are hidden) and validating each remaining host, the cluster came into focus.

Six confirmed operator panels. Five countries. All active at time of investigation.

Timeline: the pace of modern operations

This is worth stopping on. The panel creation dates visible in the infrastructure data tell a story about operational tempo.

DateActivity
2026-05-14Germany panel deployed – Build 1 (CG6H0oQg)
2026-05-15Finland panel deployed – Build 3 (CFGtIMyC, hotfix of Build 1)
2026-05-26Ireland panel deployed – Build 2 (2SU4Xl4H)
2026-06-0494[.]154[.]32[.]21 panel deployed – Build 1 redeployed
2026-06-05api-goo-drivehosting[.]com registered; Cloudflare-hidden panel with newest build deployed
2026-06-11Original ClickFix campaign post published
2026-06-13This OSINT follow-up conducted

Less than thirty days from first confirmed panel to six active deployments across five countries. Four distinct panel builds in that same window. The Cloudflare-hidden panel and its Google-impersonating domain were stood up and running a newer build within a month of the first deployment.

Threat actors are not waiting for researchers to catch up.

Inside Lunex: how the panel works

The Lunex panel is clean and purposeful. If you pulled it up without context, it could pass for a SaaS analytics dashboard. That is clearly intentional.

The dashboard

The operator’s landing view is an aggregated statistics panel: total bots online and offline, cookies collected, passwords harvested, browser history volume, extensions, bookmarks, and open tabs. One view, complete operational picture.

Lunex C2 dashboard showing aggregate botnet statistics The Lunex operator dashboard. Data volume and live bot status at a glance.

Bot telemetry

Each compromised machine registers as a “bot” entry. The panel records: hostname, username, operating system version, CPU model, RAM, public IP address, timezone, browser language, and whether the current session carries administrator privileges. Admin status is explicitly flagged – operators can prioritise high-value targets.

Bot listing view showing multiple compromised machines Bot listing. Each row is a compromised machine. Admin flag, IP, and last-seen timestamp are front-of-house.

Bot detail view showing system telemetry Per-bot system profile. OS version, hardware, and network details stored on first beacon.

Browser data theft

The bulk of what Lunex collects is browser data. Per-bot panels break down into individual collection categories.

Cookies – every cookie from every browser profile on the machine, indexed by domain and stored in the panel. The operator can filter by domain to target specific platforms – banking sites, crypto exchanges, payment processors. A valid session cookie bypasses the password entirely, and in many cases bypasses MFA too.

Cookie theft panel showing stored browser cookies indexed by domain Stolen cookies, indexed by domain per bot. An operator can filter for banking or crypto domains specifically.

Passwords – saved browser credentials, pulled from the browser’s internal credential store and decrypted. The panel displays site URL, username, and cleartext password. DPAPI-protected storage is not protection against a process running as the same user.

Password theft panel showing harvested credentials Harvested passwords. Site URL, username, and cleartext password. Browser-saved credentials come out decrypted.

Browser history – full visit history, timestamp-indexed. History tells an operator which banks the victim uses, whether they have crypto exchange accounts, and what platforms they authenticate to. It is reconnaissance for the follow-on attack – even without the passwords, history narrows the target list.

Browser history panel Browser history. Timestamped, searchable. Tells operators which platforms are worth targeting.

Extensions – a complete inventory of installed browser extensions. This matters because extensions can include password managers, hardware wallet connectors, and crypto wallet extensions – all high-priority targets for injection attacks. It also tells operators whether the victim has any security tooling that might interfere.

Browser extension inventory panel Extension inventory. Password managers and hardware wallet extensions are flagged for follow-on targeting.

Bookmarks – reveal what a victim considers important enough to save, often financial or business sites.

Bookmarks panel Bookmark collection. A snapshot of the victim’s digital priorities.

Tabs – a live list of every open browser tab, including page title and URL. Where bookmarks show what a victim saved, tabs show what they are actively doing right now. An operator checking the tab list before issuing an inject command knows exactly which sites are open – and whether a banking session is currently active.

Open tabs panel showing live browser tab list Open tabs, live. An operator can see active sessions before deciding which command to issue.

Commands: real-time interaction with live machines

This is where Lunex stops being a data collector and becomes an active exploitation platform. The panel includes a command interface for issuing instructions to online bots in real time. Six command types are available.

open_url – navigate the victim’s active browser to any URL the operator specifies. This can redirect a victim mid-session to a phishing page, force authentication to a platform the operator wants to harvest credentials from, or push the browser toward a drive-by. The victim sees their browser navigate. They may not notice.

open_url command interface The open_url command. Any URL, pushed to any online bot’s active browser.

notify – push a browser notification to the victim’s machine. The operator controls the title and body text. Useful for social engineering: a fake security alert, a payment notification, an account verification prompt. Something that makes the victim take an action the operator wants.

notify command interface showing browser notification push Browser notification push. Operators craft the content. The victim’s system delivers it.

inject – execute JavaScript in a victim’s browser tab. This is the command that moves Lunex into financial fraud territory. A web injection can modify a banking site’s transfer form to redirect funds, intercept a one-time password before the user sees it, or silently add form fields to capture data the site never asked for. The victim is looking at what appears to be their bank’s interface. The attacker has already modified it.

inject command interface for JavaScript injection JavaScript injection. Operators modify what runs inside the victim’s browser on any site.

spoof – modify rendered browser content. Where inject runs code, spoof alters what the victim sees: overlays, substituted page elements, fake confirmation screens. This is the overlay attack mechanism used to bypass SMS-based two-factor authentication – the victim completes what looks like a legitimate transaction while funds are redirected, and the spoofed confirmation screen tells them everything went fine.

spoof command interface for browser content modification Content spoofing. The victim sees a modified version of reality. The attacker controls what that version shows.

screenshot – capture an image of the victim’s active browser tab on demand. The operator sees what the victim is currently looking at, in real time. Used to verify a session is active on a target site before issuing an inject or spoof command, or to confirm an outcome after the fact.

screenshot command interface On-demand screenshot of the active browser tab. Operators can verify session state before issuing follow-on commands.

remote – open a live remote browser control session. This is the escalation endpoint of the command set: the operator takes direct interactive control of the victim’s browser, navigating sites, clicking elements, and submitting forms as if they were physically at the keyboard. Where inject and spoof modify the browser programmatically, remote hands over the wheel entirely.

remote browser control interface Remote browser control. A single button opens a live interactive session inside the victim’s browser.

The API

Lunex exposes a full REST API that mirrors everything in the panel interface. An operator can automate bot queries, issue commands, and pull stolen data without ever touching the browser.

API key management panel API key management. The stealer’s full functionality is available programmatically.

Infrastructure breakdown

Six confirmed operator panels across five countries. One consistent underlying stack: nginx, Go API backend, React SPA frontend.

PanelHostingLocationBuildNotes
217[.]77[.]15[.]181:8000Contabo Inc.USBuild 1Shodan confirmed panel on :8000 (2026-06-09)
64[.]188[.]74[.]159:8000Senko Digital LLCFinlandBuild 3Shodan (2026-05-18) found :8080 CORS pattern
78[.]17[.]74[.]164:8000HOSTKEY B.V. / IT-TECHNOLOGY-VECTORGermany (RIPE/ipinfo) / Ireland (Shodan)Build 2Shodan confirmed :8080 API pattern
45[.]151[.]106[.]252:8000MHost LLC / LeaseWeb NetherlandsNetherlandsBuild 1Shodan confirmed panel on :8000 (2026-06-04)
94[.]154[.]32[.]21:8000SKAYVIN-BROADBAND-UAUkraine (RIPE) / France (ipinfo) / Turkey (Shodan)Build 1Same IP as original stealer C2; Shodan confirmed panel on :8000 (2026-06-09)
api-goo-drivehosting[.]com:443Cloudflare (origin hidden)UnknownBuild 4 (newest)Google-impersonating domain

Note: 45[.]151[.]106[.]252:443 is a false positive – a calendar/scheduling page on port 443 of the same IP. The Lunex panel is on port 8000 only.

Attribution note. IP geolocation is inherently approximate and three independent sources – RIPE RDAP (registered block ownership), ipinfo.io (routing and geolocation), and Shodan (independent scan data) – do not always agree. RIPE reflects who registered the IP block; that organisation may be in a different country than the physical server. Where sources conflict, both readings are noted in the table. For 78[.]17[.]74[.]164, RIPE and ipinfo place the block in Germany while Shodan (scanned 2026-06-11) shows Irish routing via BT Communications Ireland – likely a reflection of InterlIR’s Irish upstream transit. For 94[.]154[.]32[.]21, RIPE shows a Ukrainian registrant, ipinfo shows French routing, and Shodan shows Turkish routing – three independent readings of the same IP. All data reflects point-in-time observations. Infrastructure changes over time and these readings may not reflect the current state.

The original C2 panel

The panel at 94[.]154[.]32[.]21 is the same IP that appeared in the original ClickFix sample as the Rust stealer’s C2 endpoint on port 8080. The operator management panel sits on port 8000 of the same host. One IP, two services: stealer collection and panel management running side by side.

Build versions

Four distinct JS build hashes were identified across the cluster, showing active development. The builds are not versioned by the operators – each React build embeds a unique hash in the JS bundle filename (index-[hash].js). Comparing that filename across panels is enough to fingerprint which codebase each deployment is running. The timestamps in the table come from the HTTP Last-Modified header returned by each server.

BuildJS hashLast-ModifiedPanels using it
Build 1CG6H0oQg2026-05-15 19:30US, Ukraine (RIPE), Netherlands
Build 22SU4Xl4H2026-05-26 16:30Ireland
Build 3CFGtIMyC2026-05-15 21:55Finland
Build 4DdBj9bfk2026-06-05 13:35Cloudflare panel (newest)

Build 3 shares its CSS bundle with Build 1 and carries a Last-Modified timestamp approximately two hours later on the same day – consistent with a JS-only hotfix pushed shortly after the May 15 build. Build 4 is the newest observed build and appears only on the Cloudflare-hidden panel.

The Cloudflare panel: an OPSEC upgrade

The panel at api-goo-drivehosting[.]com stands apart from the others. Where the rest of the cluster is exposed on bare VPS IPs with no infrastructure obfuscation, this instance was deliberately hardened:

  • The real origin IP is hidden behind Cloudflare’s CDN
  • The domain name – api-goo-drivehosting[.]com – is crafted to blend into security logs as routine Google API or Google Drive traffic
  • The panel was deployed on the same day the domain was registered (2026-06-05)
  • It runs Build 4, the newest version not seen on any other operator panel

The domain name is the detail worth focusing on for defenders. A security analyst reviewing proxy logs or firewall alerts for connections to api-goo-drivehosting[.]com might reasonably dismiss it as a Google service. That is the intent. Any domain containing “goo”, “google”, or “drive” that is not directly confirmed as Google infrastructure warrants a second look – registration date, registrar, and certificate subject are all quick checks that would expose this domain.

Why this matters

The data collection capabilities – cookies, passwords, history, tabs – build a complete picture of a victim’s digital life. The command capabilities – inject, spoof, screenshot, remote – provide the mechanisms to exploit it.

An operator can enumerate open sessions via the tabs view, confirm a banking site is active via screenshot, inject a modified transfer form, and monitor the outcome via remote control. Each step is available from the same panel, in sequence, against a single victim. Lunex is not a blunt credential harvester – it is an interactive fraud platform.

ClickFix delivered Lunex here. But ClickFix is a template, not a single campaign. Any malicious page with a “paste this command” prompt can drop any payload. The delivery cost is low. The impact ceiling is identity theft and financial loss.

Techniques observed (MITRE ATT&CK)

TacticTechniqueATT&CK IDWhat it did here
Initial AccessDrive-by CompromiseT1189Victim accessed attacker-controlled fake CAPTCHA page at captcha-code[.]lol through web browsing; ClickFix social engineering begins once on the page
ExecutionUser ExecutionT1204Victim manually pasted and ran the PowerShell command at the instruction of the fake CAPTCHA prompt
ExecutionPowerShellT1059.001Payload delivered and executed via PowerShell
CollectionSteal Web Session CookieT1539Cookie theft per bot, indexed by domain; targets session tokens for financial platforms
Credential AccessCredentials from Web BrowsersT1555.003Saved passwords pulled from browser credential stores and decrypted
DiscoveryBrowser Information DiscoveryT1217History, bookmarks, open tabs, and extension inventory collected per bot
CollectionScreen CaptureT1113Screenshot command captures the active browser tab on operator demand
CollectionBrowser Session HijackingT1185open_url redirects live sessions; remote command gives direct interactive browser control
ImpactContent InjectionT1659inject and spoof commands modify live browser sessions and rendered page content
Defense EvasionMasquerading: Match Legitimate NameT1036.005api-goo-drivehosting[.]com impersonates Google API/Drive traffic in network logs
Command and ControlApplication Layer Protocol: Web ProtocolsT1071.001C2 over HTTP/HTTPS to panel REST API

ATT&CK IDs mapped from observed capabilities and command artefacts. Mapping is my own.

What defenders can do

Technique (ATT&CK)What to doEssential EightWhat to hunt for
T1059.001 PowerShellConstrained Language Mode; Script Block Logging enabledApplication ControlEvent ID 4104; encoded commands or long single-line scripts from explorer/browser parent processes
T1555.003 Browser CredentialsEnforce dedicated password manager; disable browser-native password saving via GPOUser Application HardeningNew extension IDs outside managed deployment windows; Secure Preferences written by a non-browser process; developer mode activating without user action
T1539 Cookie TheftShort session token lifetimes; step-up auth on sensitive actionsUser Application HardeningImpossible travel; authentication from new IPs after cookie access; device fingerprint mismatches
T1185 Session HijackingBaseline approved extensions via MDM; alert on new installs outside deployment windowsApplication ControlNew extension IDs outside managed deployment; Event ID 4688 for extension installer child processes
T1113 Screen CaptureEDR telemetry on screenshot API calls from unexpected processesUser Application HardeningGDI/WinRT screenshot APIs called from non-standard processes
T1659 Content InjectionInspect browser process outbound connections via proxy; alert on connections to uncategorised IPsno direct E8 homeProxy alerts on browser process connections to new/low-reputation IPs; unexpected POST requests from browser processes
T1036.005 MasqueradingVerify all “Google” domains against Google’s published IP ranges and ASNs; alert on new registrations containing brand stringsno direct E8 homeDomains with “goo”, “google”, or “drive” not resolving to Google ASNs; recent registrations flagged by proxy categorisation

PowerShell execution (T1059.001)

ClickFix is a paste-and-run attack. The payload arrives in the user’s clipboard and runs as soon as they press Enter. Script Block Logging (Event ID 4104) captures the command content at execution, before any obfuscation layers are unwrapped – it is the primary visibility mechanism here. For the RC4 PRGA pattern in this specific campaign, the string -bxor $S[($S[$i]+$S[$j])%256] in a 4104 event is a reliable detection signal.

Constrained Language Mode restricts PowerShell’s most dangerous capabilities from user-writable paths. It does not stop all ClickFix variants, but it raises the bar. Refer to Hardening Microsoft Windows 11 Workstations (ASD/ACSC, September 2025) for the baseline configuration.

Browser credential theft (T1555.003)

In this campaign, the stealer harvests browser credentials through a force-installed malicious extension rather than by reading encrypted files from disk. The extension runs inside the browser’s own process and calls the browser’s native cookie APIs directly – Chrome’s disk-level DPAPI encryption is never a factor because the extension never touches the encrypted files. The browser hands credentials over in cleartext because it trusts the extension. Detection is at the extension layer: new extension IDs appearing outside a managed deployment window, Secure Preferences written by a non-browser process, or developer mode activating without user action. The long-term control: disable browser-native credential saving via Group Policy and enforce a dedicated password manager. The extension can only steal what the browser is holding.

Stolen session cookies bypass multi-factor authentication. Short token lifetimes reduce the window of usefulness for a stolen cookie, but the detection side is where you get your best signal: impossible travel alerts, device fingerprint mismatches on authentication, and step-up re-authentication requirements for sensitive actions. For any account where the financial or business impact of takeover is significant, require re-authentication on sensitive actions regardless of existing session state.

Malicious extension activity (T1185)

The extension enumeration capability tells operators exactly what security tooling and credential management the victim has installed. The broader risk is operator-installed extensions used for persistence or in-browser interception. Baseline your approved extension list and enforce it through MDM or Group Policy. Unrecognised extension IDs appearing outside a managed deployment window are worth alerting on. See Hardening Microsoft Edge (ASD/ACSC) for Edge-specific extension management controls.

Web injection and content spoofing (T1659)

The inject and spoof capabilities are the hardest to detect from the victim’s perspective and the most dangerous in terms of financial impact. The only reliable defender-side signal is at the network layer: a browser process making unexpected outbound connections to an IP not in any known-good category. Proxy-based inspection of browser-origin traffic, alerting on connections to newly registered domains or low-reputation IPs, provides the earliest warning.

Domain masquerading (T1036.005)

api-goo-drivehosting[.]com is built to survive a casual log review. The mitigations here are two-step: first, block known-bad domains at the DNS or proxy layer (the IOC is in the table below). Second, build a detection for the class of technique – any domain containing Google brand strings (“goo”, “google”, “drive”, “gmail”) that does not resolve to a Google-owned ASN should fire a low-confidence alert for analyst review. Registration date is a strong secondary signal: legitimate Google services have been registered for years, not days.

Hunting and detection summary

  • Event ID 4104 (Script Block Logging): ClickFix payload execution; hunt for RC4 PRGA pattern, encoded commands, or long single-line PowerShell from interactive parent processes
  • DPAPI decryption calls from non-browser processes: browser credential theft
  • New browser extension installs (Event ID 4688, browser as parent): extension-based persistence or interception
  • Outbound HTTP/HTTPS from browser processes to new/low-reputation IPs on non-standard ports: C2 beacon or command channel
  • Screenshot API calls from non-standard processes: on-demand browser tab capture
  • Connections to port 8000/TCP on IOC IPs: direct Lunex panel communication
  • DNS/proxy requests to api-goo-drivehosting[.]com: Cloudflare-hidden Lunex panel; designed to look like Google traffic
  • Favicon hash hunt (b9251db3aa9511157cba432c0b5402fc): use Shodan http.favicon.hash or Validin to identify undiscovered Lunex instances
  • Authentication events from new IPs shortly after a session was active: stolen cookie replay
  • Impossible travel (geographically inconsistent auth within a short window): live session hijacking

Indicators of Compromise

C2 panels

TypeIndicatorNotes
IP217[.]77[.]15[.]181Lunex panel :8000, API :8080 – Contabo Inc., US (PTR: vmi3118446.contaboserver.net)
IP64[.]188[.]74[.]159Lunex panel :8000, API :8080 – Senko Digital LLC, Finland (PTR: 515231.senko.network)
IP78[.]17[.]74[.]164Lunex panel :8000, API :8080 – HOSTKEY B.V. / IT-TECHNOLOGY-VECTOR (RIPE/ipinfo: Germany; Shodan: Ireland)
IP45[.]151[.]106[.]252Lunex panel :8000, API :8080 – MHost LLC / LeaseWeb Netherlands B.V., Netherlands
IP94[.]154[.]32[.]21Lunex panel :8000, stealer C2 :8080 – SKAYVIN-BROADBAND-UA (RIPE: Ukraine; ipinfo: France; Shodan: Turkey) – see original post
Domainapi-goo-drivehosting[.]comLunex panel :443, Cloudflare-proxied – Build 4 (newest); Google-impersonating
Port8000/TCPLunex operator panel port across all bare-IP instances
Port8080/TCPLunex stealer C2 API port (bare-IP instances)

Fingerprints

TypeIndicatorNotes
Favicon MD5b9251db3aa9511157cba432c0b5402fcLunex favicon – unique across all builds; use for Shodan/Validin hunting
Servernginx/1.27.5Common across all confirmed bare-IP Lunex panels; consistent with Shodan scan data

IOCs from the original ClickFix campaign post are not duplicated here. See ClickFix/CAPTCHA campaign analysis for the full set including lure domain, shellcode C2, and original sample hashes.

Closing

I went looking for one panel and found six. Two of them I would not have found with Shodan alone – the Validin data was what surfaced the Finland instance and confirmed the Cloudflare-hidden panel via favicon hash matching.

The piece of this that will stay with me is the pace. Six panels across five countries, four distinct builds, and new delivery infrastructure still being registered while the first post about this campaign was being written. The Google-impersonating domain is the most recent data point – someone is actively iterating the operational security of this kit.

The ClickFix delivery mechanism requires no exploit, no zero-day, and no vulnerability. Just a convincing prompt and a paste action. The stack behind Lunex turns that single paste into the keys to a victim’s financial life. Application control and script execution policy are the technical answer. The full answer starts before the command is run.

Stay curious.


This investigation used read-only, non-destructive methods including open-source tooling and publicly available infrastructure data. This post does not describe or encourage unauthorized access to computer systems.

The writing and structure of this post was developed with AI assistance. The OSINT methodology, investigation findings, ATT&CK mappings, and detection logic are my own.

References

This post is licensed under CC BY 4.0 by the author.