หน้าเว็บ

วันพุธที่ 6 กุมภาพันธ์ พ.ศ. 2556

การหาจุดที่ Bug จาก CMS ภาค 2

          สวัสดีครับวันนี้ก็จะมาอธิบายเรื่องการหาจุดที่ Bug จาก CMS ภาค 2 นะครับ หลังจากที่ ภาคที่แล้ว ได้อธิบายเกี่ยวกับพื้นฐานกันไป วันนี้มาดูอีกขั้นนึงนะครับ

          เนื่องจากได้ไปเจอในเว็บ packetstormsecurity มาเลยนำมาชำแหละโค้ดให้ศึกษากัน Bug ที่ว่านั้นตัวนี้ครับผม => Glossword 1.8.12 XSS / CSRF / Shell Upload / Database Disclosure (เราจะหา Shell Upload กันนะ) ขั้นแรกเข้าไปในลิงค์นั้น ทางเว็บก็ไม่มีบอกว่าบัคได้ยังไง จากนั้นก็โหลดสคริป CMS ตัวมาดูเลยครับ

          สังเกตุจะมีรูปให้ดูผลลัพธ์อย่างเดียว => http://oi47.tinypic.com/crsde.jpg สังเกตุจากชื่อไฟล์ shell.php


          เมื่อเราจะหาช่องโหว่ Shell Upload ก็ต้องนึกก่อนว่าการ upload ใน php นั้นมีฟังก์ชั่นอะไรบ้าง (copy() ฟังก์ชั่นนี้เก่าตั้งแต่ php 4+, move_uploaded_file() อันนี้น่าจะ php 5+) จากนั้นผมก็ใช้สคริปที่เคยเขียนไว้นานมาแล้ว (ใน linux ใช้ grep คำสั่งเดียวแหละแต่ตอนนี้ linux ผมพังเลยซบ windows พักนึง 555) ค้นหาฟังก์ชั่น move_uploaded_file ก็ได้ผลลัพธ์มาดังนี้


          จะเห็นว่าเจอหลายไฟล์เลยแงะไปแงะมาเจอไฟล์นึงที่ gw_addon\users\users_edit.inc.php ที่มีฟังก์ชั่น move_uploaded_file อยู่ด้วยจากโค้ดนี้

$file_location = '';
if (isset($this->gw_this['vars']['_files']['file_location']))
{
 $file_location = $this->gw_this['vars']['_files']['file_location'];
}
/* */
if (!empty($file_location))
{
 $avatar_file = isset($file_location['tmp_name']) ? $file_location['tmp_name'] : '';
 if ( $avatar_file ) {
  $ar_img_size = getimagesize($avatar_file);
  $file_target = urlencode($this->sys['time_now'].'_'.$file_location['name']);
  /* Create directory */
  $this->oFunc->file_put_contents($this->sys['path_temporary'].'/a/'.$file_target, '');
  if (is_uploaded_file($avatar_file)
   && move_uploaded_file($avatar_file, $this->sys['path_temporary'].'/a/'.$file_target)
  )
  {

          สังเกตุจากตัวแปร $file_target ที่บรรทัดนี้จะสอดคล้องกับชื่อ shell คือมีการใช้ฟังก์ชั่น urlencode เวลาขณะนั้นตามด้วย underscore แล้วก็ชื่อไฟล์จากโค้ดตรงนี้

$file_target = urlencode($this->sys['time_now'].'_'.$file_location['name']);

          จากนั้นก็สังเกตุจากการใช้ function move_uploaded_file จากโค้ดตรงนี้

move_uploaded_file($avatar_file, $this->sys['path_temporary'].'/a/'.$file_target)

           จะมีการใช้ class จากตรงนี้ $this->sys['path_temporary'] ผมก็เลยค้นหาไปเจอได้ว่า sys['path_temporary] นั้นอยู่ในไฟล์ \inc\config.inc.php จากโค้ดตรงนี้

$sys['path_temporary']     = 'gw_temp';

          ตัวแปร $avatar_file ได้เก็บ temp path ของไฟล์ที่จะอัพโหลดไว้ ซึ่งเงื่อนไขดังกล่าวได้ตรงกับ path ในรูปที่มี shell อยู่ จึงมั่นใจได้ว่าบัคได้เกิดจากไฟล์นี้แน่นอน เท่านี้เราก็จะรู้ได้แล้วว่า CMS ตัวนี้บัค Shell Upload จากไฟล์นี้นั่นเอง ขอบคุณที่อ่านจนจบครับ สงสัยอะไรถามได้เลย ,, ICheer_No0M

Ref : http://packetstormsecurity.com/files/120045/glossword_1.8.12_multiplevulns.txt

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

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