The name is a lie. cpanel_cracker contains zero brute-force logic — no password lists, no login loops, no credential stuffing of any kind. It is a config grabber and system file reader, attributed via in-source watermarks (“Coded by Don / Made In Malaysia 2014”) consistent with the Donnazmi handle associated with AnonGhost. The misnomer is itself an intelligence signal: either the author aspired to capabilities they never implemented, or the name is inherited from a template that predates the actual code.
Capabilities
The core function is a symlink-based config grabber that targets approximately 120 hardcoded paths covering WordPress, Joomla, WHMCS, vBulletin, Drupal, osCommerce, ZenCart, SMF, HostBills, and dozens of other CMS and billing platforms. The symlink approach creates a filesystem alias from a readable directory to the target config file, bypassing open_basedir restrictions that would otherwise prevent cross-account file reads on shared hosting. A secondary module parses /etc/named.conf to enumerate all domains and their associated system users — a complete map of which domain belongs to which hosting account.
The tool includes a stealth-404 evasion layer: it checks the User-Agent header against a hardcoded list of search engine crawlers — Google, Yandex, Slurp, MSNBot, Rambler, ia_archiver — and returns a fake HTTP 404 page to any of them. This keeps the tool out of search engine indexes and away from researchers who discover shells via Google dorking. The evasion is simple but effective against the most common discovery vectors.
Vulnerabilities
| # | Class | Impact | Status |
|---|---|---|---|
| 1 | Live /etc/passwd read on default page load — no authentication required | Full user enumeration | Live-proven |
| 2 | Stealth-404 evasion — returns HTTP 404 to Google, Yandex, Slurp, MSNBot, Rambler, ia_archiver | Evades crawler-based discovery | Confirmed |
| 3 | Symlink config grabber — ~120 hardcoded CMS/billing paths, exposes entire filesystem | Cross-tenant credential harvest | Confirmed |
| 4 | /etc/named.conf domain and user enumerator | Domain-to-account mapping | Confirmed |
The most immediate finding is that the default page load — no parameters, no authentication, no interaction — returns the contents of /etc/passwd. A simple GET request to the deployed URL is sufficient to enumerate every user account on the server. On shared hosting, that single file maps the entire tenant population of the box, turning one compromised account into a target list for the full server.
Self-incrimination is extensive: the author handle, scene affiliation, year of creation, and social media contact are embedded in the page title, footer, and directory artifacts created during operation.
Detection Surface
File-system indicators
| Indicator | Type | Detail |
|---|---|---|
| Single PHP file ≈ 60 KB | Size | |
Donnazmi / AnonGhost | Strings | Author attribution watermarks in source |
mkdir("Donnazmi/") | Code pattern | Creates author-named directory during operation |
symlink( to ~120 CMS paths | Code pattern | Mass symlink creation to config files across user home directories |
/etc/named.conf | String | Domain and user enumeration target |
| VT status: NOT ON VT | Detection gap | Exclusive to this corpus — not in any public malware database |
| Runtime: PHP 5.6 + PHP 7.4 | Compatibility | Works on modern PHP — not accidentally neutralized |
HTTP access-log indicators
| Log pattern | What it means |
|---|---|
| HTTP 404 response to search engine UAs | Stealth-404 evasion — blocks Googlebot, Yandex, Slurp, MSNBot, Rambler, ia_archiver |
Single GET request with /etc/passwd in response body | Dumps all server users without authentication on default page load |
Single GET with no further interaction | Data exfiltrated on first load — operator does not need to interact further |
Mass symlink( calls visible in PHP logs | Symlink creation to well-known config paths across user home directories |
YARA rule
rule tool_cpanel_cracker {
meta:
description = "cpanel_cracker config grabber (Donnazmi / AnonGhost)"
author = "OHIIHO Threat Research"
reference = "https://research.ohiiho.com/arsenal/cpanel-cracker/"
status = "validated"
strings:
$donnazmi = "Donnazmi" ascii
$anonghost = "AnonGhost" ascii
$ungku = "ungku_nazmi" ascii
$mkdir_don = "mkdir(\"Donnazmi/\")" ascii
$named = "/etc/named.conf" ascii
$passwd = "/etc/passwd" ascii
$ua_google = "Googlebot" ascii
$ua_yandex = "Yandex" ascii
$ua_slurp = "Slurp" ascii
$ua_msn = "MSNBot" ascii
$symlink = "symlink(" ascii
condition:
filesize < 80KB
and (
($donnazmi or $anonghost or $ungku or $mkdir_don)
or ($symlink and ($passwd or $named)
and 2 of ($ua_*))
)
}
MITRE ATT&CK
| Technique | Context |
|---|---|
| T1083 | File and Directory Discovery (symlink config grabber) |
| T1087 | Account Discovery (/etc/passwd + /etc/named.conf enumeration) |
| T1552.001 | Unsecured Credentials: Credentials In Files (~120 CMS config paths) |
| T1190 | Exploit Public-Facing Application (symlink open_basedir bypass) |
| T1036 | Masquerading (stealth-404 fake response to crawlers) |
OHIIHO Threat Research.
