• Downloading from our site will require you to have a paid membership. Upgrade to a Premium Membership from 10$ a month today!

    Dont forget read our Rules! Also anyone caught Sharing this content will be banned. By using this site you are agreeing to our rules so read them. Saying I did not know is simply not an excuse! You have been warned.

Hướng dẫn fix bug sql injection mod music gift vbb

Admin

Well-Known Member
Staff member
Administrator
Vào AdminCP > Plugins & Products > Plugin Manager, sau đó kéo xuống và tìm đến Plugin của mod Music Gift.




Sửa plugin có hook là ajax_start, thêm vào đoạn đầu phần Plugin PHP Code hàm sau (hàm này có tác dụng lọc input của câu lệnh SQL):
PHP:
function anti_sql($sql) {$sql = str_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|*|--|\)/"),"",$sql);return trim(strip_tags(addslashes($sql))); #strtolower()}
Tiếp theo bạn nhấn Ctrl+F và nhập từ khóa:
PHP:
if($_POST['do'] == 'check_name')


Chúng ta sẽ lọc input tại đây, tốt nhất nên copy toàn bộ PHP Code ra một trình biên soạn cho dễ nhìn (mình dùng Notepad++):
02.PNG



03.PNG


Code gốc khi chưa lọc input:
PHP:
if($_POST['do'] == 'check_name') {         $vbulletin->input->clean_array_gpc('p', array(                                        'name'         => TYPE_STR)              );     $u = explode(',',$_POST['name']);                             $found = '';                              $lost = '';                             foreach($u as $v) {                             $m = $vbulletin->db->query_first("SELECT * FROM ". TABLE_PREFIX ."user WHERE username = '".$v."'");                              if($m[userid] > 0) {$q = $vbulletin->db->query_first("SELECT * FROM ". TABLE_PREFIX ."usergroup WHERE usergroupid = '".$m[usergroupid]."'");                                   $m[username] = $q[opentag].$m[username].$q[closetag];                                  $found = $found.$m[username].',';} else { $lost = $lost.$v.',';}                             }                                   $answer = '';                               if($found <> '') $answer = "Đã tìm được <b> ".$found."</b>.  Hệ thống sẽ gửi tin nhắn đến bạn ấy để thông báo về món quà của bạn.";     if($lost <> '') $answer = $answer."<br>Không tìm được <b><font color='red'>".$lost."</font></b> Nếu bạn gửi bài hát này đến tất cả mọi người, bạn không cần nhập tên chính xác.";       echo $answer;                     }
Chúng ta sửa thành như sau (sử dụng hàm Anti SQL ở trên để lọc input được người dùng nhập vào):
PHP:
if($_POST['do'] == 'check_name') {         $vbulletin->input->clean_array_gpc('p', array(                                        'name'         => TYPE_STR)              );     $_name = anti_sql($_POST['name']); // Clean Input     $u = explode(',',$_name);                             $found = '';                              $lost = '';                             foreach($u as $v) {                             $m = $vbulletin->db->query_first("SELECT * FROM ". TABLE_PREFIX ."user WHERE username = '".$v."'");                              if($m[userid] > 0) {$q = $vbulletin->db->query_first("SELECT * FROM ". TABLE_PREFIX ."usergroup WHERE usergroupid = '".$m[usergroupid]."'");                                   $m[username] = $q[opentag].$m[username].$q[closetag];                                  $found = $found.$m[username].',';} else { $lost = $lost.$v.',';}                             }                                   $answer = '';                               if($found <> '') $answer = "Đã tìm được <b> ".$found."</b>.  Hệ thống sẽ gửi tin nhắn đến bạn ấy để thông báo về món quà của bạn.";     if($lost <> '') $answer = $answer."<br>Không tìm được <b><font color='red'>".$lost."</font></b> Nếu bạn gửi bài hát này đến tất cả mọi người, bạn không cần nhập tên chính xác.";       echo $answer;                     }



Các bạn Save lại và sửa tiếp Plugin có hook là misc_start, các bạn nhấn Ctrl+F và tìm dòng sau:
PHP:
$m = $vbulletin->db->query_first("SELECT * FROM ". TABLE_PREFIX ."hqth_music WHERE id = " . $_GET['id']) . ";");
Thêm hàm addslashes để clean input:
PHP:
$m = $vbulletin->db->query_first("SELECT * FROM ". TABLE_PREFIX ."hqth_music WHERE id = '".addslashes($_GET['id'])."';");
Cuối cùng là Save.


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


Tutorial by Juno_okyo - Juno_okyo's Blog.
Great thanks to Neods and James.



* Update: các bạn có thể dùng bộ lọc vBulletin đã có sẵn:





  • $db->escape_string($input)



Hoặc:




  • POST (Ví dụ $_POST['input_name']): $vbulletin->input->clean_gpc('p', 'input_name', TYPE_NOHTML)
  • GET (Ví dụ: $_GET['input_name']): $vbulletin->input->clean_gpc('g', 'input_name', TYPE_NOHTML)





 

Facebook Comments

New posts New threads New resources

Back
Top