วันอาทิตย์ที่ 3 มีนาคม พ.ศ. 2556

วันพุธที่ 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

วันพฤหัสบดีที่ 31 มกราคม พ.ศ. 2556

‎17 ฟังก์ชันที่มีประโยชน์สำหรับจัดการอาร์เรย์ใน PHP.


1. sizeof($arr) *ใช้ count($arr) ก็ได้
ฟังก์ชั่นนี้จะคืนค่าจำนวนค่าทั้งหมดที่อยู่ใน array
$data = array("red", "green", "blue");
echo "Array has " . sizeof($data) . " elements"; // มี 3 ค่าใน array
// Output : Array has 3 elements
2. array_values($arr)
ฟังก์ชั่นนี้จะคืนค่า value ใน associative array
$data = array("hero" => "Holmes", "villain" => "Moriarty");
print_r(array_values($data));// คืนค่าเฉพาะ value
/* Output : 
Array
(
[0] => Holmes
[1] => Moriarty 
)*/
3. array_key($arr)
ฟังก์ชั่นนี้จะคืนค่า key ใน associative array
$data = array("hero" => "Holmes", "villain" => "Moriarty");
print_r(array_values($data)); // คืนค่าเฉพาะ key
/* Output : 
Array
(
[0] => hero
[1] => villain
)*/
4. array_pop($arr)
ฟังก์ชั่นนี้จะเอาค่า index สุดท้ายใน array ออก
$data = array("Donald", "Jim", "Tom");
array_pop($data); // Tom ถูกถอดออก
print_r($data);
/* Output : 
Array
(
[0] => Donald
[1] => Jim
)*/
5. array_push($arr,$val)
ฟังก์ชั่นนี้จะเพิ่มค่าลงไปใน array
$data = array("Donald", "Jim", "Tom");
array_push($data, "Harry"); // เพิ่ม Harry ลงใน array $data
print_r($data);
/* Output : 
Array
(
[0] => Donald
[1] => Jim
[2] => Tom
[3] => Harry
)*/
6. array_shift($arr,$val)
ฟังก์ชั่นนี้จะเอาค่าแรก index ที่ 0 ใน array ออก
$data = array("Donald", "Jim", "Tom");
array_shift($data); // Donald ซึ่งเป็น $data[0] จะถูกถอดออกไป
print_r($data);
/* Output : 
Array
(
[0] => Jim
[1] => Tom
)*/
7. array_unshift($arr, $val)
ฟังก์ชั่นนี้จะเพิ่มค่าลงใน index ที่ 0 ใน array
$data = array("Donald", "Jim", "Tom");
array_unshift($data, "Sarah"); // Sarah ถูกเพิ่มเข้ามาเป็น $data[0]
print_r($data);
/* Output : 
Array
(
[0] => Sarah
[1] => Donald
[2] => Jim
[3] => Tom
)*/
8. each($arr)
ฟังก์ชั่นนี้จะวนนำค่าใน array เข้ามาใน while loop เพื่อแสดง
$data = array("hero" => "Holmes", "villain" => "Moriarty");
while (list($key, $value) = each($data)) {
echo "$key: $value \n";
}
/* Output : 
hero: Holmes 
villain: Moriarty*/
9. sort($arr)
ฟังก์ชั่นนี้จะเรียงลำดับค่าใน array ตามตัวอักษร
$data = array("g", "t", "a", "s");
sort($data); // เรียงลำดับ a-z
print_r($data);
/* Output : 
Array
(
[0] => a
[1] => g
[2] => s
[3] => t
)*/
10. array_flip($arr)
ฟังก์ชั่นนี้ใช้สลับ key กับ value
$data = array("a" => "apple", "b" => "ball");
print_r(array_flip($data)); // สลับค่ากัน
/* Output : 
Array
(
[apple] => a
[ball] => b
)*/
11. array_reverse($arr)
ฟังก์ชั่นนี้ใช้ย้อนกลับค่าใน array (เช่นต้องการเรียงลำดับจากมากไปน้อย)
$data = array(10, 20, 25, 60);
print_r(array_reverse($data)); // เรียงจากหลังไปหน้า 
/* Output : 
Array
(
[0] => 60
[1] => 25
[2] => 20
[3] => 10
)*/
12. array_merge($arr)
ฟังก์ชั่นนี้ใช้ผสานหรือรวม array เข้าด้วยกัน
$data1 = array("cat", "goat");
$data2 = array("dog", "cow");
print_r(array_merge($data1, $data2)); // รวม 2 อาร์เรย์เข้าด้วยกัน
/* Output : 
Array
(
[0] => cat
[1] => goat
[2] => dog
[3] => cow
)*/
13. array_rand($arr)
ฟังก์ชั่นนี้ใช้สุ่มเลือกค่าใน array
$data = array("white", "black", "red");
echo "Today's color is " . $data[array_rand($data)]; //สุ่มค่า
/* Output : 
Today's color is red*/
14. array_search($search, $arr)
ฟังก์ชั่นนี้ใช้ค้นหาค่าใน array ถ้าพบจะถูกส่งค่ากลับไป
$data = array("blue" => "#0000cc", "black" => "#000000", "green" => "#00ff00");
echo "Found " . array_search("#0000cc", $data); // ค้นหา
/* Output : 
Found blue*/
15. array_slice($arr, $offset, $length)
ฟังก์ชั่นนี้ใช้แบ่งกลุ่ม array
$data = array("vanilla", "strawberry", "mango", "peaches");
print_r(array_slice($data, 1, 2)); // แบ่งแยกค่า
/* Output : 
Array
(
[0] => strawberry
[1] => mango
)*/
16. array_unique($data)
ฟังก์ชั่นนี้ช่่วยในการเอาค่าที่ซ้ำกันใน array ออกไป
$data = array(1,1,4,6,7,4);
print_r(array_unique($data)); // เอาค่าซ้ำออก (1,4)
/* Output : 
Array
(
[0] => 1
[3] => 6
[4] => 7
[5] => 4
)*/
17. array_walk($arr, $func)
ฟังก์ชั่นนี้ช่่วยในการส่งฟังก์ชั่นที่ต้องการเข้าไปกระทำในทุกค่าใน array
function reduceBy10(&$val, $key) {
$val -= $val * 0.1;
}

$data = array(10,20,30,40);
array_walk($data, 'reduceBy10'); // ส่งฟังก์ชั่น reduceBy10 เข้าไปกระทำกับทุก elements ใน array
print_r($data);
/* Output : 
Array
(
[0] => 9
[1] => 18
[2] => 27
[3] => 36
)*/

แปลจาก : http://www.techrepublic.com/article/17-useful-functions-for-manipulating-arrays-in-php/5792851

วันอาทิตย์ที่ 16 ธันวาคม พ.ศ. 2555

แก้ปัญหาภาษาไทยใน Line in Ubuntu ( Linux )


       
          เนื่องจากผมได้เล่นโปรแกรม Line เป็นโปรแกรมแชทที่ฮิตมาซักพักนึงแล้วล่ะ แต่ปกติผมใช้ Linux แต่ Line บนตัว Linux มันไม่มีมีแต่ของ Windows ซึ่งเป็นไฟล์ .exe ผมจึงเอามาลงบน Linux ผ่านโปรแกรม Wine
          จากนั้นก็เกิดปัญหาขึ้นคือ อ่านภาษาไทยไม่ได้ แต่พอดีพี่ที่รู้จักได้ทำวิธีแก้ไว้แล้วผมจึงยืมมาเขียนเป็นบล๊อกนะ อิอิ ขั้นตอนก็มีดังนี้ครับ


1. ไป Copy ฟอนต์ Tahoma.ttf  จาก Windows ไปไว้ใน c:\windows\fonts บน Wine Folder



2. เข้าใน Wine ที่ c:\Program Files\Naver\LINE\res\skin\basic\css\ หาไฟล์ common.css



3. Search หาคำว่า font-family จะเจอ font ชื่อเป็นภาษาจีน แก้ให้เป็น font-family:'Tahoma'; ให้หมดทั้งไฟล์



4. ปิดแล้วเปิดใหม่


จบแล้วครับแค่นี้ Line บน Linux ของท่านก็จะใช้ภาษาไทยได้แล้ว...

Download : Line
Special Thank : X-c0d3-D3ViL

แก้ปัญหา line บน linux ที่ line อัพเดทเวอร์ชั่นใหม่นะ เข้าไปที่ common.css แล้วลบ unicode-range:....; พวกนี้ออกให้หมด

วันจันทร์ที่ 26 พฤศจิกายน พ.ศ. 2555

Simple MD5 Brute Force from Dic.txt [ Python ]


#!usr/bin/python
import hashlib,sys

f = open("dic.txt","r")
for line in f:
 md5 = hashlib.md5()
 md5.update(line.strip())
 if sys.argv[1] == md5.hexdigest(): 
  print '%s = %s' % (sys.argv[1],line.strip())
f.close()
วิธีใช้
$ python md5.py <md5encode>

วันอังคารที่ 28 สิงหาคม พ.ศ. 2555

แนะนำโครงสร้างไดเรกเทอรี่ของ Linux




/

/ เรียกว่า root partition ไฟล์และไดเรกเทอรี่ทั้งหมดจะเริ่มต้นจาก root partition สิทธิ์ในการเขียนภายในไดเรกเทอรี่นี้ใช้ได้กับผู้ใช้ root เท่านั้น

/bin

ไดเรกเทอรี่นี้มีไฟล์ไบนารี่อยู่ คำสั่ง linux ที่ใช้ใน user เพียงคนเดียวจะเจอในไดเรกเทอรี่นี้ นอกจากนี้ยังมีคำสั่งที่ผู้ใช้ทั้งหมดใช้ด้วยเช่นคำสั่ง ls, ping, cp

/sbin

คล้ายกับ /bin นอกจากนี้จะมีไฟล์ไบนารี่อยุู่เช่นเดียวกับ /bin แต่คำสั่งในไดเรกเทอรี่นี้ จะถูกใช้โดยผู้ดูแลระบบ มีวัตถุประสงค์เพื่อบำรังรักษาระบบเช่นคำสั่ง iptables, reboot, fdisk

/etc

เป็นไดเรกเทอรี่ที่เก็บไฟล์ที่ไว้กำหนดค่า ตั้งค่าโปรแกรมทั้งหมด โดยที่ Shell scripts จำเป็นต้องมีโปรแกรมที่จะเริ่มหรือหยุด scripts นั้นๆ ตัวอย่างเช่น /etc/resolv.conf, /etc/logrotate.conf

/dev

ประกอบด้วยแฟ้มอุปกรณ์ใน linux รวมถึงอุปกรณ์ USB หรืออุปกรณ์อื่นๆที่มีการเชื่อมต่อกับเครื่องคอมพิวเตอร์ ตัวอย่างเช่น /dev/usbmon0

/proc

ข้อมูลทั้งหมดที่ process ของระบบจะเกิดขึ้นภายใน /proc เป็นแฟ้มที่มีข้อมูลเกี่ยวกับ process การทำงาน ยกตัวอย่างเช่น /proc เป็นไดเรกเทอรี่ที่เก็บข้อมูลของ process มีข้อมูลเกี่ยวกับทรัพยากรของระบบ /proc/uptime เป็นหนึ่งในไดเรกเทอรี่ในนี้

/var

var หมายถึงไฟล์ที่เปลี่ยนแปลงค่าได้ ไฟล์เหล่านั้นจะถูกเก็บไว้ในไดเรกทอรีนี้ที่มีการปรับเปลี่ยนตลอด บางไฟล์ที่อยู่ในที่นี่เป็น /var/log (log ไฟล์ระบบ) /var/lib (แฟ้มแพคเกจ), /var/mail (อีเมล), /var/spool (คิวการพิมพ์), / var/tmp (แฟ้มชั่วคราว)

/tmp

ตัวระบบเองจะสร้างไฟล์ชั่วคราวที่ผู้ใช้ใช้งานเก็บไว้ในนี้ ไฟล์ที่สำคัญไม่ควรเก็บไว้ในนี้เพราะไฟล์ใน /tmp จะถูกลบออกทุกครั้งหลังปิดเครื่อง

/usr

/usr ไฟล์ต่างๆของผู้ใช้จะถูกเก็บไว้ในนี้ หรือโปรแกรมที่ผู้ใช้ลงก็จะถูกเก็บไว้ในนี้เช่นกัน

/home

ไฟล์ส่วนตัวของผู้ใช้ทุกคนจะถูกเก็บไว้ใน home ไดเรกเทอรี่ภายใต้ชื่อของผู้ใช้

/boot

ไดเรกเทอรี่นี้เก็บไฟล์ที่จำเป็นและสำคัญใช้ในการ boot ระบบ ในขณะที่ boot ระบบจะเข้าไปหาไฟล์ใน /boot ซึ้งมีไม่กี่ไฟล์ที่จะอยู่ในไดเรกเทอรี่นี้

/lib

ไฟล์ไบนารี่ที่อยู่ใน /bin และ /sbin จะได้รับการสนับสนุนโดยไฟล์ที่อยู่ใน /lib เป็นที่เก็บแพคเกจไฟล์

/opt

เป็นไดเรกเทอรี่ที่ใช้เก็บ add-on ที่ใช้งาน จะถูกติดตั้งใน /opt หรือไดเรกเทอรี่ย่อย

/mnt

เป็นไดเรกเทอรี่ mount มันเป็นที่เก็บไฟล์ mount ชั่วคราว เป็นที่ที่ admin สามารถ mount ไฟล์ได้ชั่วคราว

/media

/media ทำหน้าที่เป็นจุดเชื่อมต่อชั่วคราวสำหรับอุปกรณ์ที่เชื่อมต่อประเภท Removable Drive ไดร์ฟที่ถอดออกได้ ไดร์ฟที่ถอดออกได้ทั้งหมดจะอยู่ในไดเรกเทอรี่นี้ ตัวอย่างเช่น /media/cdrom หรือ /media/floppy

/srv

srv หมายถึงบริการ ข้อมูลทั้งหมดที่เกี่ยวข้องกับการใช้บริการสำหรับเซิฟเวอร์จะถูกบันทึกไว้ที่ไดเรกเทอรี่นี้

วันอาทิตย์ที่ 26 สิงหาคม พ.ศ. 2555

Safely remove hardware on Ubuntu with Ejecter.




          เนื่องจากผมมีปัญหากับการถอดไดร์ฟ External HDD ออกบน Ubuntu แล้วทำให้เครื่องค้าง เลยหาโปรแกรมที่ช่วยถอดไดร์ฟ วันนี้เลยจะมาแนะนำโปรแกรมสำหรับถอดไดร์ฟออกอย่างปลอดภัยคือ Ejecter (application to unmount easily and safely external devices) นั่นเอง ถ้ามีโปรแกรมที่รันอยู่บน external devices แล้วเราต้องการถอดออกมันจะเตือนดังรูป..



          วิธีติดตั้งก็ง่ายมากๆ เข้า Ubuntu Software Center แล้วพิมพ์ ejecter แล้วเลือกเลยครับ จากนั้นกด Install เลยครับ พอลงเสร็จก็ restart เครื่องซักครั้ง เท่านั้นก็เสร็จครับ...

Source : https://launchpad.net/ejecter/

วันศุกร์ที่ 17 สิงหาคม พ.ศ. 2555

Search String in Files on Directory and Subdirectory [ Perl ]




use File::Find;

print "\n\n\t### Search String in Files on Directory and Subdirectory By ICheer_No0M ###\n\n";
print 'Path File : ';
chomp($path=<stdin>);
print 'Search Keyword : ';
chomp($string=<stdin>);
$keyword  = AddSlashes($string);
find(\&file_names, $path);
sub file_names {
 if($_ =~ /\.php$/){
  $file = $File::Find::name;
  open (MYFILE, $file);
  $line = 1;
   while (<MYFILE>) {
   $content .= $_;
   if($content=~/$keyword/){
     print "\nFound : $string\n";
    print "On Line : $line\n";
    print "On File : $file\n";
   }
  $line += 1;
  $content = "";
  }
  close (MYFILE);
 }
}
print "\n\n\t### Finding $string on $path Complete... ###\n\n";

sub AddSlashes {
    $text = $_[0];
    $text =~ s/\\/\\\\/g;
    $text =~ s/\$/\\\$/g;
    $text =~ s/\'/\\'/g;
    $text =~ s/\"/\\\"/g;
    $text =~ s/\[/\\[/g;
    $text =~ s/\]/\\\]/g;
    $text =~ s/\(/\\(/g;
    $text =~ s/\)/\\\)/g;
    $text =~ s/\\0/\\\\0/g;
    return $text;
}

เจอบักก็แก้เอานะครับ ตอนแรกจะไม่ปล่อย เขียนลวกๆ เอาไว้ใช้เอง เก๋ๆ เลียนแบบ grep #กะไว้ใช้ใน windows ด้วย
$ find /var/www/exploit -name "*.php" -exec grep -l "base64" {} \;

วันพฤหัสบดีที่ 16 สิงหาคม พ.ศ. 2555

MobileCartly 1.0 Remote File Upload Vulnerability



ไฟล์ logo-upload-process.php น่าจะเขียนผิดตรง $_SERVER['DOCUMENT_ROOT'] . "/appcode/ <-- ต้องแก้จาก 
$_SERVER['DOCUMENT_ROOT'] . "/appcode/images/logo/" . $_FILES["logo-upload"]["name"]);
ไปเป็น
"../images/logo/" . $_FILES["logo-upload"]["name"]);
ถึงจะใช้งานไฟล์ logo-upload.php ได้ #MobileCartly


# Exploit Title: MobileCartly 1.0 Remote File Upload Vulnerability
# Google Dork: -
# Date: 14/08/2012
# Exploit Author: ICheer_No0M
# Vendor Homepage: http://icheernoom.blogspot.com/
# Software Link: http://mobilecartly.com/mobilecartly.zip
# Version: 1.0
# Tested on: Ubuntu 10.10 + PHP 5.3.3
#
#
# 1. Vuln Code : /images/uploadprocess.php
#
#   /*$zip = new ZipArchive; 
#   $zip->open($_FILES['uploadedfile']['tmp_name']); 
#   $zip->extractTo('productimages/'); 
#   $zip->close(); */
#
#  You can upload shell.php on /images/upload.php 
#  Find your shell on /images/productimages/shell.php
#
#
# 2. Vuln Code : /includes/logo-upload-process.php
#
# /*if (($_FILES["logo-upload"]["type"] == "image/gif") 
# || ($_FILES["logo-upload"]["type"] == "image/jpeg") 
# || ($_FILES["logo-upload"]["type"] == "image/pjpeg")
# && ($_FILES["logo-upload"]["size"] < 20000))*/
#
# You can upload shell on /includes/upload-logo.php and edit header values.
# Find your shell on /images/logo/shell.php
#
#

http://www.exploit-db.com/exploits/20539/

วันจันทร์ที่ 23 กรกฎาคม พ.ศ. 2555

การสร้าง Template ใน Dreamweaver CS5


การสร้าง Template ใน Dreamweaver CS5 โดยเป็น Template ที่ดาวน์โหลดมาครับ