Hardnekkige malware opschonen

06/08/2026

Ik wordt regelmatig ingehuurd om gehackte websites op te schonen, zo ook afgelopen week. Meestal kan ik de malware binnen een uurtje wel verwijderen, maar in dit geval hadden te maken met zeer hardnekkige malware die steeds maar weer terugkwam. In dit artikel lees je wat er gebeurde en hoe ik het uiteindelijk heb opgelost.

De symptomen van de hack

Aan de voorkant van de site was er niets van de hack te zien, maar aan de achterkant des te meer:

  • Er werden 1 of meerdere nieuwe admin gebruikers aangemaakt, maar deze waren niet altijd zichtbaar bij de gebruikers in de WordPress admin.
  • Er werden meerdere plugins aangemaakt, maar ook deze waren niet zichtbaar in de WordPress admin.
  • Er werden ook enkele plugins aangemaakt in de mu-plugins map.
  • Er werd een user.ini bestand aangemaakt in de root map, waarin een malware bestand werd aangeroepen.
  • Dat malware bestand (en diverse andere malware bestanden) stonden in de map /wp-content.
  • Er werd malware toegevoegd onderaan het functions.php bestand van het actieve thema.
  • Er werd malware toegevoegd in WordPress core bestanden en mappen.
  • Er werd malware toegevoegd in de root bestanden, inclusief wp-config.php.
  • Er werd ook malware code toegevoegd aan enkele niet actieve thema’s.

Hoe ik de malware uiteindelijk heb kunnen verwijderen

Meestal gebruik ik WordFence om een website op te schonen. WordFence is een beveiligingsplugin voor WordPress en heeft een uitstekende malware scanner aan boord, die geïnfecteerde bestanden met één klik kan verwijderen. Maar WordFence vereist wel wat resources van de server, en veel budget hosts bieden onvoldoende resources om WordFence te draaien.

Bovendien deactiveerde deze specifieke malware WordFence automatisch.
Dat was dus geen optie in dit geval. Ik moest de malware handmatig vinden en opschonen.

Wil je dit liever uitbesteden? Huur mij in om je website op te schonen.

Maak eerst een backup

Voordat we alles gaan opschonen maken we eerst een backup. Daarvoor gebruik ik meestal Updraftplus. Zorg dat je ook een backup maakt van alle bestanden.

De meeste hostingbedrijven maken ook een dagelijkse backup.

Als je een backup van 2 tot 4 weken geleden hebt kun je eerst proberen deze terug te zetten, wellicht heb je geluk en was de website toen nog niet geïnfecteerd.

Leeg je cache en schakel deze uit

Als je een caching plugin gebruikt, of gebruik maakt van server caching, dien je deze eerst volledig te legen en uit te schakelen.

Zorg dat alles up to date is

Hackers komen vaak binnen door een lek in een plugin. Recentelijk was er zelfs een ernstig lek in WordPress zelf. Zorg dus eerst dat alles up to date is, zodat het lek waarmee de hacker is binnengekomen in elk geval gedicht is. Daarvoor ga je in de WordPress admin naar Dashboard –> Updates.

WordPress opnieuw installeren

Aangezien er dus ook een aantal WordPress core bestanden geïnfecteerd worden met malware dien je ook WordPress opnieuw te installeren. Ook dat kan in het updates scherm; daar zie je een knop “versie x opnieuw installeren”.

WordPress opnieuw installeren na hack

Malware opsporen via FTP

Dit loste echter niet alle problemen op. Hoewel de WordPress core bestanden nu weer vrij waren van malware wordt de map /wp-content/ niet overschreven. Daar zitten immers al je plugins en thema’s in. Daarnaast waren er ook extra bestanden toegevoegd aan de root (zoals het eerder genoemde user.ini), en zelfs wp-config.php was geïnfecteerd.

Om dat op te lossen moest ik inloggen via FTP. Hiermee kun je de bestanden van je website bekijken in een soort Windows Verkenner, met speciale software als WinSCP. Hier heb je speciale login gegevens voor nodig, deze kun je opvragen bij het hostingbedrijf. Als je geen FTP toegang hebt kun je eventueel ook een plugin als WP File Manager gebruiken, maar dat werkt een stuk minder handig en snel.

Het handmatig opschonen van malware is een zeer technisch en ingewikkeld proces.
Als je nog nooit van FTP gehoord hebt zou ik daar niet aan beginnen als ik jou was.
In dat geval kun je beter mij inhuren om je website op te schonen.

Als je inlogt via FTP kom je vaak direct in de root, al moet je soms nog op een folder klikken zoals je domeinnaam, www of public_html. Je moet hier in elk geval mappen zien met de namen wp-admin, wp-content en wp-includes zoals in onderstaand screenshot.

Malware verwijderen via FTP

Download nu eerst een schone versie van WordPress via nl.wordpress.org en unzip deze. Verwijder vervolgens alle losse bestanden in de root (let op, niet de mappen dus!), behalve wp-config.php. Daarin staan namelijk je database gegevens, die heb je nog nodig.

Upload nu alle bestanden in de root vanuit de schone WordPress versie die je net gedownload hebt. Open wp-config.php en kopieer de blauw gearceerde gegevens in het screenshot hieronder. Plak deze op dezelfde plek in wp-config-sample.php. Verwijder nu wp-config.php en hernoem wp-config-sample.php naar wp-config.php.

database gegevens in wp-config

Ik heb je gewaarschuwd he 😉 Toch liever mij inhuren?

Navigeer vervolgens naar de map /wp-content/. In deze map zou, naast een aantal mappen, slechts 1 los bestand moeten staan, namelijk index.php. Als er nog andere bestanden staan is dat overigens niet perse een probleem, sommige plugins voegen hier ook legitieme bestanden toe zoals maintenance.php en advanced-cache.php. Maar aangezien de malware ook deze bestanden kan comprimeren kun je die het beste gewoon verwijderen, deze worden toch automatisch weer opnieuw aangemaakt.

Index.php zou ook maar 2 regels tekst moeten bevatten, namelijk

<?php
// Silence is golden.

Vervolgens klik je op de map plugins. Daar vind je alle plugin bestanden. Zoals ik eerder schreef waren de malware plugins niet zichtbaar in de WordPress admin omgeving, dus deze kun je alleen vinden en opschonen via FTP.

Sorteer de plugins op “gewijzigd op”. Alles wat recent gewijzigd is, is verdacht.

Waarschijnlijk zie je hier een aantal recent gewijzigde mappen staan met namen die niet overeenkomen met de plugins die je in de WordPress admin omgeving ziet. Verwijder deze. Maar wees wel voorzichtig; de namen van de mappen komen meestal niet precies overeen met de naam van de plugin die je in de WordPress admin omgeving ziet.

Weet je niet zeker of een plugin malware is of niet? Open dan de map. Bij malware plugins zie je hier vaak maar één php bestand staan. Open dit en plak de inhoud in je favoriete AI tool. Die zal je meteen kunnen vertellen of het malware is.

Buiten de map plugins is er soms ook een map mu-plugins. Ook hierin wordt vaak malware geplaatst. Hierin vind je allerlei losse PHP bestanden (dus geen submappen). Ook hiervoor geldt, open de php bestanden en plak de inhoud in AI om te bepalen of het malware is of niet.

Malware verwijderen uit functions.php

Navigeer nu naar de map themes (nog steeds in wp-content). Ga naar de map van het actieve (parent) thema en open functions.php. Plak de inhoud daarvan weer in AI. Als deze malware vind, laat hem dan een schone versie maken en overschrijf de code in functions.php met de door AI aangeleverde code.

Ga vervolgens in de WordPress admin omgeving naar “thema’s” en verwijder daar alle niet gebruikte thema’s (ook de standaard twenty… thema’s). Deze waren in mijn geval namelijk ook geïnfecteerd.

Verwijder onbekende beheerders

Nadat je alle malware verwijderd hebt ga je in de WordPress admin omgeving naar “gebruikers”. Verwijder hier alle onbekende gebruikers met de beheerder rol.

In eerste instantie waren deze gebruikers niet zichtbaar in de WordPress admin, maar als alle malware nu verwijderd is zou dat nu wel het geval moeten zijn. Check voor de zekerheid ook de tabel “users” via PHPMyAdmin.

Overschrijf alle plugins en thema(s)

Soms wordt er ook malware toegevoegd in legitieme plugin of thema bestanden. Je kunt dan ook het beste al je plugins opnieuw installeren. Dat doe je door ze te downloaden vanaf wordpress.org (of de website van de plugin maker) en ze vervolgens handmatig te uploaden. Je krijgt dan de vraag of je de geïnstalleerde plugin wilt vervangen, kies dan ja.

Plugins op WordPress.org kun je ook simpelweg verwijderen en opnieuw toevoegen via plugins in de WordPress admin omgeving. Instellingen blijven daarbij meestal gewoon bewaard.

Kat en muis spel

Het grootste probleem is dat het script elke keer als iemand op de site komt opnieuw getriggerd werd, en alle malware bestanden en beheerders die ik zojuist had opgeschoond direct weer opnieuw werden aangemaakt.

Om dit te voorkomen kan het noodzakelijk zijn je website tijdelijk te blokkeren voor alle verkeer. Bij vrijwel elke hostingprovider kun je dit met een paar kliks instellen:

DirectAdmin: Ga naar Password Protected Directories-> Kies de map van je site -> Voeg een beveiligde map en gebruiker toe.

cPanel: Ga naar Directory Privacy (of Mapbeveiliging) -> Selecteer je hoofdmap (public_html) -> Vink “Wachtwoord beveiliging inschakelen” aan en maak een gebruiker + wachtwoord aan.

Nu is je website alleen toegankelijk voor gebruikers die het wachtwoord hebben (jij dus).

Succes ermee!

placeholder

Hulp nodig met het opschonen van malware?

Huur mij in om een website voor je te bouwen, een training over dit onderwerp te verzorgen of je op een andere manier te helpen met mijn strippenkaarten.

Heb je een vraag over dit artikel? Stel deze dan in de reacties hieronder.

Een aantal links op deze site zijn affiliate links. Als je via zo’n link een plugin of thema koopt ontvang ik daar een vergoeding voor.
Dat kost jou verder niets extra, maar zorgt er wel voor dat ik dit soort waardevolle content gratis voor je beschikbaar kan maken.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *