Joomla on LiteSpeed: CSS and JavaScript 403 errors with query strings Joomla 3 to Joomla 6 with T3 and Purity III: a migration case study Website hacked? What to do first and mistakes to avoid How to import Excel into WordPress with a custom plugin ChatGPT Ads: Paid Advertising Is Challenging Google Ads Ecommerce localization in Italy: catalogue, checkout and technical support Italian web developer for website support and local coordination Italian website localization: more than translating web content Taking over an existing Italian website without rebuilding it Website localization in Italy: a technical guide for international companies WordPress Dashboard Won't Load: 8 Causes and How to Fix Them WordPress Not Working: What to Check Before Panicking WordPress Site Stuck After Update: How to Recover It WP-Admin Error 500: Common Causes and Effective Solutions How to Identify Which WordPress Plugin Is Really Slowing Down Your Site Without Guesswork Joomla on LiteSpeed: CSS and JavaScript 403 errors with query strings Joomla 3 to Joomla 6 with T3 and Purity III: a migration case study Website hacked? What to do first and mistakes to avoid How to import Excel into WordPress with a custom plugin ChatGPT Ads: Paid Advertising Is Challenging Google Ads Ecommerce localization in Italy: catalogue, checkout and technical support Italian web developer for website support and local coordination Italian website localization: more than translating web content Taking over an existing Italian website without rebuilding it Website localization in Italy: a technical guide for international companies WordPress Dashboard Won't Load: 8 Causes and How to Fix Them WordPress Not Working: What to Check Before Panicking WordPress Site Stuck After Update: How to Recover It WP-Admin Error 500: Common Causes and Effective Solutions How to Identify Which WordPress Plugin Is Really Slowing Down Your Site Without Guesswork
Case Study: Comprehensive Cleanup of a Compromised Joomla 3 Site

Case Study: Comprehensive Cleanup of a Compromised Joomla 3 Site

Author Graziano De Maio - Gdmtech
I wish you a good read and remember: if after reading this article you need help, don't hesitate to contact me.
Author: Graziano De Maio | Founder of Gdmtech
Table of contents

Case Study on Cleaning a Compromised Joomla 3 Site

Managing a Joomla 3 website demands vigilance, especially when facing security breaches. During an automated security check, the hosting provider detected numerous malicious PHP files scattered across various directories — a clear warning sign of malware infection.

Need help with a Joomla website? Get Joomla website support.

Compromise indicators in Joomla 3 sites

As a precaution, the hosting provider blocked:

  • PHP-based email sending,
  • Outbound connections to external services.

Further investigation revealed webshells hidden with seemingly innocent names such as cache.php, often in unusual and duplicated directory structures, for instance:

folder/
└── folder/
    └── cache.php

Common infection symptoms include:

  • Randomly named PHP files in the root directory,
  • Obfuscated code or dangerous functions like eval(base64_decode(...)),
  • Remote code execution or unauthorized file uploads.

Effective cleanup procedure

Conducting a thorough Joomla 3 site cleanup involves these critical steps:

StepDescription
1. BackupCreate full backups of the database and all site files before starting.
2. Remove webshellsDelete all suspicious PHP files (webshells, random names) and duplicated directories.
3. Search for backdoorsScan the entire site for residual obfuscated code or dangerous functions.
4. Restore Joomla coreOverwrite the Joomla core files with the latest available version in the same major release.
5. Verify extensionsUpdate, reinstall, or fully remove extensions, ensuring no leftover files remain.
6. Review user accountsInspect admin users for unknown accounts or abnormal privileges.
7. Change credentialsReset all passwords: Joomla admin, FTP/SFTP, database, and hosting panel.
8. Check permissionsReview .htaccess files, scheduled scripts, and directory permissions.
9. Final scanConfirm no malicious or suspicious PHP files remain before enabling hosting services again.

Key considerations

Removing only the files flagged by the provider does not guarantee the site is clean. A single leftover backdoor allows the malware to regenerate all removed webshells, neutralizing cleanup efforts.

A successful cleanup requires:

  • Complete removal of all malicious code and backdoors,
  • Core Joomla restoration to original files,
  • Extension updates and comprehensive cleaning,
  • Strict credential and permission verification,
  • Final thorough filesystem inspection.

Partnering with a professional joomla websites support service ensures a precise and secure recovery.


Joomla Cleanup FAQs

How to identify a webshell on Joomla? Look for suspicious PHP filenames like cache.php, use of eval combined with base64_decode, and duplicated folders.

Is deleting flagged files enough? No. A deep scan and full core restoration are necessary to prevent reinfection.

How to protect after cleanup? Keep Joomla and all extensions updated, enforce strong passwords, and routinely monitor the site for anomalies.

Author Graziano De Maio - Gdmtech
I wish you a good read and remember: if after reading this article you need help, don't hesitate to contact me.
Author: Graziano De Maio | Founder of Gdmtech