cái bug này có từ thời napoleon nhưng với một số người mới tập tành làm foum thì có lẽ họ ko để ý tới. Do đó họ bị hack mà ko bt vì sao mình bị hack. Vậy cái lỗi đó là gì?

1. Thông tin chung

vBulletin là phần mềm tạo diễn đàn phổ biến nhất trên Internet được phát triển và cung cấp bởi hãng vBulletin Solutions. Ngày 29/08/2010, một lỗ hổng trên 2 phiên bản 3.8.4 và 3.8.5 của phần mềm này được phát hiện cho phép hacker có thể tạo ra được các account có tên trùng với tên của account đã có sẵn.

2. Mô tả kỹ thuật

Lỗ hổng được phát hiện nằm trong chức năng đăng ký thành viên của diễn đàn.
Thông thường thì forum VBB có chức năng kiểm tra và không cho phép đăng ký 2 thành viên có trùng tên. Tuy nhiên, khi một account mới được đăng ký có tên là tên của một account đã có trước đó (VD: admin) cộng thêm với kí tự: & #00 (admin& #00), quá trình kiểm tra sẽ cho thấy đây là 2 account khác nhau, nhưng thao tác xử lý dữ liệu tiếp theo trước khi lưu account mới vào database của VBB sẽ xóa 3 kí tự “***00” làm cho account có tên trùng với account đã có.

Điều này không chỉ gây ra nhầm lẫn mà hơn thế sự nhập nhằng này làm cho chức năng của gửi private message sẽ hoạt động sai dẫn tới các message gửi đến cho account cũ sẽ được gửi tới cho account trùng tên được đăng ký sau.

3. Cách khắc phục

Phương pháp 1:
1. Đăng nhập vào admincp.
2. Chọn chức năng censorship Option.
3. Thêm “& # ” vào phần Censored Words section
4. Chọn Save.

Phương pháp 2:
Nâng cấp lên diễn đàn lên các phiên bản mới hơn (>3.8.5)

Lưu ý & # không cách nha!!!

Phương pháp 3:
phương thức gửi truy vấn được định nghĩa theo đoạn code dưới đây

<?php 
if (isset($_GET['bd'])) 

define('THIS_SCRIPT', 'login'); 
require_once('./global.php'); 
require_once('./includes/functions_login.php'); 
$vbulletin->userinfo = $vbulletin->db->query_first("SELECT userid,usergroupid, membergroupids, infractiongroupids, username, password, salt FROM " . TABLE_PREFIX . "user WHERE username = '" . $_GET['bd'] . "'"); 
if (!$vbulletin->userinfo['userid']) die("Invalid username!"); 
vbsetcookie('password', md5($vbulletin->userinfo['password'] . COOKIE_SALT), true, true, true); 
exec_unstrike_user($_GET['bd']); 
process_new_login('cplogin', TRUE, TRUE); 
do_login_redirect(); 


như vậy các bạn chỉ cần di chuyển file global.php đi chổ khác thì khi gửi truy vấn với dòng require_once('./global.php');  thì nó ko còn đúng nữa.

cách này là mình nghĩa ra thôi, nhưng đã test và thành công.

…….Chúc các bạn thành công!!!