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

#ClassImpactStatus
1Live /etc/passwd read on default page load — no authentication requiredFull user enumerationLive-proven
2Stealth-404 evasion — returns HTTP 404 to Google, Yandex, Slurp, MSNBot, Rambler, ia_archiverEvades crawler-based discoveryConfirmed
3Symlink config grabber — ~120 hardcoded CMS/billing paths, exposes entire filesystemCross-tenant credential harvestConfirmed
4/etc/named.conf domain and user enumeratorDomain-to-account mappingConfirmed

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

IndicatorTypeDetail
Single PHP file ≈ 60 KBSize
Donnazmi / AnonGhostStringsAuthor attribution watermarks in source
mkdir("Donnazmi/")Code patternCreates author-named directory during operation
symlink( to ~120 CMS pathsCode patternMass symlink creation to config files across user home directories
/etc/named.confStringDomain and user enumeration target
VT status: NOT ON VTDetection gapExclusive to this corpus — not in any public malware database
Runtime: PHP 5.6 + PHP 7.4CompatibilityWorks on modern PHP — not accidentally neutralized

HTTP access-log indicators

Log patternWhat it means
HTTP 404 response to search engine UAsStealth-404 evasion — blocks Googlebot, Yandex, Slurp, MSNBot, Rambler, ia_archiver
Single GET request with /etc/passwd in response bodyDumps all server users without authentication on default page load
Single GET with no further interactionData exfiltrated on first load — operator does not need to interact further
Mass symlink( calls visible in PHP logsSymlink 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

TechniqueContext
T1083File and Directory Discovery (symlink config grabber)
T1087Account Discovery (/etc/passwd + /etc/named.conf enumeration)
T1552.001Unsecured Credentials: Credentials In Files (~120 CMS config paths)
T1190Exploit Public-Facing Application (symlink open_basedir bypass)
T1036Masquerading (stealth-404 fake response to crawlers)

OHIIHO Threat Research.