สวัสดีครับวันนี้ก็จะมาอธิบายเรื่องการหาจุดที่ 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
ไม่มีความคิดเห็น:
แสดงความคิดเห็น