Month: November 2013

  • วิธีตรวจสอบเว็บไซต์ที่โดน Hack #4

    (ตอนนี้ จะเน้นการตรวจสอบ Joomla เป็นหลักครับ)

    จาก “วิธีตรวจสอบเว็บไซต์ที่โดน Hack #3” ซึ่ง เป็นการตรวจสอบเบื้องต้นว่า มีการบุกรุกผ่านช่องโหว่ต่างๆของ Web Server เข้ามาวาง Backdoor หรือไม่ ซึ่ง ตั้งสมมุติฐานว่า Hacker จะเอาไฟล์ .php มาวางไว้ในไดเรคทอรี่ images/stories เท่านั้น

    แต่ความจริงแล้ว … ไม่ใช่เช่นนั้น

    เพราะ Hacker ต้องคิดต่อไปอีกขั้นหนึ่ง คือ ต้องวางไฟล์ Backdoor ไว้ในที่อื่นๆด้วย รวมถึง พยายามแก้ไขไฟล์ .php ของ Joomla เพื่อไม่ให้ผิดสังเกต และเป็นช่องในการกลับเข้ามาในภายหลัง

    ในบทความนี้ เป็นแนวทางปฏิบัติที่พึงดำเนินการ เพื่อการสืบสวน ค้นหา และทำลาย Backdoor ที่อื่นๆ รวมถึง เสนอแนวทางปฏิบัติ เพื่อผู้ดูแลระบบจะได้ทราบว่า มีไฟล์ใดบ้างที่เปลี่ยนแปลง ในอนาคต

    ภาพรวมขั้นตอนการปฏิบัติ

    1. ทำการตรวจสอบไฟล์ .php ใน images/stories แล้วเก็บเป็น List เอาไว้
    2. ดึงไฟล์ Backdoor ที่พบ มาเก็บไว้ก่อน ด้วยคำสั่ง tar
    3. ค้นหาไฟล์ ที่เกิดขึ้นหรือถูกแก้ไข ในเวลาใกล้เคียงกันกับ Backdoor นั้นๆ แล้วเก็บเป็น List เอาไว้
    4. ดึงไฟล์ ต้องสงสัย มาเก็บไว้ก่อน แล้ว ตรวจสอบ เป็นรายไฟล์
    5. ลบไฟล์ Backdoor จาก List ในข้อ 1.
    6. ลบไฟล์ ต้องสงสัย หลังจากการตรวจสอบในข้อ 4.
    7. ตรวจสอบ Web User คือใคร
    8. ค้นหา Directory ที่ Web User จากข้อ 7. ที่สามารถเขียนได้
    9. ค้นหา Backdoor พื้นฐานเพิ่มเติม

    รายละเอียดการปฏิบัติ

    คำสั่งต่อไปนี้ อยู่บนพื้นฐานที่ว่า
    Document Root ของ Web Server อยู่ใน /var/www/ ของแต่ละผู้ใช้
    ดังนั้น ขอให้ปรับเปลี่ยนตามระบบของท่าน

    1. ทำการตรวจสอบไฟล์ .php ใน images/stories แล้วเก็บเป็น List เอาไว้
    ใช้คำสั่งต่อไปนี้

    find /var/www/ -name "*.php" -type f | grep 'images/stories' > /tmp/backdoor.txt

    2. ดึงไฟล์ Backdoor ที่พบ มาเก็บไว้ก่อน ด้วยคำสั่ง tar เพื่อให้ในการตรวจสอบ และภายหลัง

    cat /tmp/backdoor.txt | xargs tar -cvf /tmp/backdoor.tar

    ลองตรวจสอบว่า คำสั่งดังกล่าว เก็บไฟล์ได้จริงหรือไม่ ด้วยคำสั่งต่อไปนี้

    tar -tvf /tmp/backdoor.tar

    3. ค้นหาไฟล์ ที่เกิดขึ้นหรือถูกแก้ไข ในเวลาใกล้เคียงกันกับ Backdoor นั้นๆ แล้วเก็บเป็น List เอาไว้ ให้สร้างไฟล์ ชื่อ findbackdoor.sh แล้วใส่เนื้อหาตามนี้

    #!/bin/sh
    BD="/tmp/backdoor.txt"
    TMP01="/tmp/otherbackdoor.txt"
    DMROOT="/var/www/"
    for f in $(cat $BD) ; do
        echo ":: $f ::"
        fdate=$(stat $f |grep ^Modify|awk '{print $2}')
        fdate2=$(date +%Y-%m-%d --date="$fdate 1 day")
        find $DMROOT -type f -name "*.php" -newermt $fdate ! -newermt $fdate2  >> $TMP01
        echo "------"
        echo ""
    done

    แล้วใช้คำสั่ง

    sh findbackdoor.sh

    โปรแกรมนี้จะทำการค้นหาไฟล์ ที่ถูก “สร้าง/แก้ไข” ในวันที่ backdoor ที่อยู่ใน images/stories ที่พบ และหลังจากนั้น 1 วัน  และ แสดงผลลัพธ์ไว้ในไฟล์ /tmp/otherbackdoor.txt

    4. ดึงไฟล์ ต้องสงสัย มาเก็บไว้ก่อน แล้ว ตรวจสอบ เป็นรายไฟล์

    cat /tmp/otherbackdoor.txt | xargs tar -cvf /tmp/otherbackdoor.tar

    5. ลบไฟล์ Backdoor จาก List ในข้อ 1.
    ซึ่งอยู่ในไฟล์ /tmp/backdoor.txt ด้วยคำสั่ง

    cat /tmp/backdoor.txt | sudo xargs rm -rf

    6. ลบไฟล์ ต้องสงสัย หลังจากการตรวจสอบในข้อ 4.

    คำเตือน ตรวจสอบไฟล์ที่ปรากฏใน /tmp/otherbackdoor.txt ** ทุกไฟล์ ** เพราะ ไม่ใช่ทุกไฟล์ในนี้ จะเป็น Backdoor หากตรวจสอบแล้ว พบว่า ไม่ใช่ ก็ให้ลบบรรทัดนั้น ทิ้งไป ให้ในไฟล์ /tmp/otherbackdoor.txt เหลือแต่ไฟล์ backdoor จริงๆ

    เมื่อมั่นใจแล้ว ลบด้วยคำสั่ง

    cat /tmp/otherbackdoor.txt | sudo xargs rm -rf

    ให้เก็บไฟล์ /tmp/backdoor.tar และ /tmp/otherbackdoor.tar เอาไว้ เพราะในนั้น จะปรากฏ วัน เวลา และรายละเอียดของไฟล์เอาไว้ เพื่อจะใช้ในการ ตรวจสอบหาต้นตอ และช่องโหว่ของระบบต่อไป

    7. ตรวจสอบ Web User คือใคร
    ตั้งสมมุติฐานว่า ท่านใช้ Apache Web Server ซึ่ง จะมีชื่อ Process ว่า httpd หรือไม่ก็ apache (หากใช้ตัวอื่น กรุณาประยุกต์ให้ถูกต้องด้วย) โดยใช้คำสั่ง

    ps aux|egrep -i '(apache|httpd)' > /tmp/webuser.txt

    ผลที่ได้ ให้ดูใน column แรกของไฟล์ /tmp/webuser.txt โดยทั่วไปแล้ว
    CentOS/Fedora/RedHat จะได้เป็น apache
    Linux/Debian จะได้เป็น www-data
    แต่เคยเจอ บางระบบ ให้ user อื่นเป็นคนทำงาน ดังนั้น ให้ตรวจสอบให้เหมาะสมกับระบบตนเองด้วย

    8. ค้นหา Directory ที่ Web User จากข้อ 7. ที่สามารถเขียนได้
    สมมุติ Web User ที่ได้จากข้อ 7. ชื่อ www-data และ Document Root อยู่ที่ /var/www
    ให้ใช้คำสั่งต่อไป เพื่อตรวจสอบว่า มี Directory ใดบ้าง ที่ Web User ดังกล่าวเขียนได้

    find /var/www -user www-data -perm -u+w -type d > /tmp/webuser-dir.txt

    หากพบว่า มี Directory ในไฟล์ /tmp/webuser-dir.txt ให้ ทำการปิด ไม่ให้ Web User นั้นเขียนได้ หรือ เปลี่ยนเป็นของ User อื่นแทน วิธีการนี้ จะทำให้ Hacker ไม่สามารถกลับมาเขียน Backdoor เพิ่มได้อีก

    9. ค้นหา Backdoor พื้นฐานเพิ่มเติม
    ตรวจสอบอีกครั้ง เผื่อจะมี Backdoor อื่นๆซ่อนอยู่ (วิธีการนี้ เป็นเพียง Backdoor ง่ายๆเท่านั้น แต่ดีกว่าไม่ตรวจสอบอะไร)

    find /var/www -name "*.php" -exec egrep -l "eval.*base64_decode" {} \; > /tmp/knownbackdoor.txt
    

     

    หาก Google Web Master Tools ซึ่งทางศูนย์คอมพิวเตอร์ดูแล แจ้งว่า มี Website ใด ภายใต้ Domain psu.ac.th ถูก Hack ทางศูนย์คอมพิวเตอร์ ขอดำเนินการตามนี้

    1. ปิดการเข้าถึงจากภายนอก มายัง TCP Port 80/443 ยัง IP Address ของ Web Server นั้นๆ
    2. แจ้ง ผู้ที่รับผิดชอบ Domain ของ Website ดังกล่าว
    3. ให้ผู้รับผิดชอบ ดำเนินการ ตามขั้นตอนข้อ 1-9 ข้างต้น และ ส่งผลเป็นไฟล์ดังต่อไปนี้มา
      backdoor.txt
      backdoor.tar
      otherbackdoor.txt
      otherbackdoor.tar
      webuser.txt
      webuser-dir.txt
      knowbackdoor.txt
      มาให้ศูนย์คอมพิวเตอร์ ตรวจสอบ
    4. เมื่อตรวจสอบเสร็จแล้ว ทางศูนย์คอมพิวเตอร์ อาจจะขอให้ตรวจสอบด้วยคำสั่งอื่นๆ เพื่อให้แน่ใจว่า ไม่มี Backdoor อันตรายหลงเหลืออยู่
    5. เมื่อมั่นใจแล้ว ทางผู้ดูแลระบบเครือข่าย จะเปิดให้ ภายนอก เข้ามายัง TCP Port 80/443 ยัง IP Address ดังกล่าวได้เหมือนเดิม

    ขอให้โชคดี

    (ใครเอาไปทำแล้ว ได้ผลอย่างไร ขอความกรุณารายงานผลด้วย ขอบคุณครับ)

  • How to: install Owncloud (Easy method)

    • สำหรับ Ubuntu 12.04 เท่านั้น
    • เปิด terminal
    • พิมพ์คำสั่ง (ไม่ต้องพิมพ์ $)

    $wget -q -O - http://download.opensuse.org/repositories/isv:ownCloud:community/xUbuntu_12.04/Release.key|sudo apt-key add -

    wget -nv https://download.owncloud.org/download/repositories/stable/xUbuntu_12.04/Release.key -O Release.key
    apt-key add - < Release.key
    • ต่อด้วย

    $sudo sh -c "echo 'deb http://download.opensuse.org/repositories/isv:ownCloud:community/xUbuntu_12.04/ /' >> /etc/apt/sources.list.d/owncloud.list"

    sh -c "echo 'deb http://download.owncloud.org/download/repositories/stable/xUbuntu_12.04/ /' >> /etc/apt/sources.list.d/owncloud.list"
    apt-get update
    apt-get install owncloud
    • ปิดท้าย

    $sudo apt-get update
    $sudo apt-get install -y owncloud

    • ต่อด้วยคำสั่ง

    $sudo /etc/init.d/apache2 restart

    • เปิดเว็บ http://localhost/owncloud เพื่อสร้าง user ที่เป็น admin ชื่ออะไรก็ได้ตามสะดวก และตั้งรหัสผ่านให้เรียบร้อย คลิก Advanced เพื่อดูค่าอื่นๆ เช่น โฟลเดอร์ที่ใช้เก็บข้อมูล การตั้งค่าฐานข้อมูลว่าจะใช้อะไร แบบง่ายนี้ขอใช้ sqlite ไปก่อนเพื่อความรวดเร็ว คลิก Finish Setup
    • ระบบจะล็อคอินเป็น user ที่สร้างให้คนแรกโดยอัตโนมัติ
    • ที่เหลือ ... ขอให้สนุกครับ

    ที่มา
    http://software.opensuse.org/download/package?project=isv:ownCloud:community&package=owncloud
    https://download.owncloud.org/download/repositories/stable/owncloud/

  • SQL Server All about DataTime data type

    Function GETDATE() AND SYSTEMDATETIME()

    • GETDATE แสดงข้อมูลระดับ miliseconds
    • SYSDATETIME แสดงข้อมูลระดับ nanoseconds.

    ::select GETDATE() >> “2013-11-14 10:25:24.337”
    ::select SYSDATETIME() >> “2013-11-14 10:26:14.4002569”

    การเปรียบเทียบ DataTime data column จะมีปัญหาให้ปวดหัวทุกที่จะทำอย่างไร ถึงจะสะดวกและ Performance ดีที่สุด ตัวอย่างทางเลือกที่ผมใช้งานครับ Convert ให้เป็น INT ไปเลยครับ ดังตัวอย่างนี้ครับ

    cast(convert(char(8), d.DocCreateDate, 112) as int) between 20130601 and 20131031

    GETDATE สามารบวก ลบ วันได้
    ::select GETDATE() + 10 >> เป็นการดึงวันที่ปัจจุบันแล้วบวกไปอีก 10 วัน
    การประยุกษ์ เช่นต้องการหาข้อมูลที่วันเวลาปัจจุบันเป็นฐานการดึงข้อมูล เป็นการ Filter แบบ Dynamic Filter เช่น select Column between getdate() – 100 and getdate + 100

  • ทำไม PSU Webmail ส่ง email ที่มีไฟล์แนบเป็น Microsoft Word ง่ายๆ ไปให้คนอื่น แล้วเขาไม่ได้รับ

    วันนี้ มีผู้ใช้โทรศัพท์มาสอบถามปัญหา : ทำไมส่ง email ที่มีไฟล์แนบเป็น Microsoft Word ง่ายๆ ไปให้คนอื่น แล้วเขาไม่ได้รับ

    ตรวจสอบเบื้องต้น พบว่าส่งไม่ได้จริงๆ จึง เดินไปดูหน้างาน (คณะทันตะ)

    พบว่า ผู้ใช้ใช้ Firefox ในการใช้งาน PSU Webmail, เมื่อผู้ใช้ Compose จดหมายใหม่ แล้วเลือก Browse เพื่อเลือกไฟล์ นามสกุล .doc แล้วกดปุ่ม Add เพื่อแนบไฟล์ ก็จะได้ผลว่า ระบบมองเป็น text/xml ดังภาพ เป็นผลให้ ระบบกรอง email ทำงานผิดพลาด และไม่ยอมให้ส่ง

    ทดลองเปลี่ยนไฟล์ สร้างไฟล์ใหม่ ปิด Antivirus แล้ว ก็ยังเป็นเหมือนเดิม, เปลี่ยนไป Login ด้วย Account อื่นแล้ว ก็ยังเป็นเหมือนเดิม

    จึงทดลองส่ง email แบบไม่แนบไฟล์ ก็พบว่า ส่งได้

    จากนั้น จึงเอาไฟล์เดียวกัน แต่ใช้งานผ่าน PSU Webmail ด้วย IE แล้วทำการแนบไฟล์แบบเดิม พบว่า ระบบมองเป็น application/msword ถูกต้อง ดังภาพ

    ลองทดสอบกับ Chrome แล้ว ก็ได้ผลถูกต้องเช่นกัน จึงน่าจะเป็นปัญหาอะไรสักอย่างของ Firefox

    จึงลองดูการตั้งค่าต่างๆ พบว่า ใน Firefox ที่เมนู Tools > Options > Application มีการตั้งค่า “เอกสาร Microsoft Word 97-2003” มีอยู่ 3 บรรทัด และบรรทัดสุดท้าย บอกว่า text/xml เปิดด้วย Use XML Editor อยู่

    ซึ่งต่างกับการตั้งค่าใน IE ที่ใช้ Word อยู่ ดังภาพ

    วิธีการแก้ไข: จึงตั้งค่าดังกล่าวเป็น “Use Microsoft Word” เช่นกัน

    แล้วทดสอบใหม่ ปรากฏว่า ส่งได้ถูกต้อง แก้ปัญหาได้

  • ทำไมเวลาที่ส่ง email ผ่าน PSU Webmail แล้วมันเพี้ยนจากเวลาจริง

    วันนี้ มีผู้ใช้แจ้งว่า ส่ง email จาก PSU Webmail เมื่อเวลา 13:12:18แต่ พอเปิดใน INBOX.Sent พบว่า ส่งเมื่อเวลา  02:13:06 จึง เดินไปดูหน้างาน (คณะทันตะ)

     ตรวจสอบเบื้องต้น พบว่า เวลาของเครื่อง ก็ตรง และถูกต้อง แต่ เวลาที่ปรากฏอยู่ด้านซ้ายมือ มันเป็นเวลา 02:22 am ดังภาพ

     ทดลองส่ง email ถึงตัวเอง ก็พบว่า เป็นเวลา ตรงกับเวลาที่ปรากฏด้านซ้ายมือ ของ PSU Webmail แสดงว่า เป็นปัญหาที่การตั้งค่าของผู้ใช้

     จึงไปที่เมนู Options > Personal Information จึงพบว่า Timezone Options ตั้งเป็น America/Boa_Vista ดังภาพ

    ซึ่งเป็นเวลา GMT -4 ส่วนของไทยเราควรจะเป็น Asia/Bangkok ซึ่งเป็น GMT +7 ซึ่ง เวลาห่างกัน = (|-4| + |7| ) = 11 ชั่วโมง ซึ่งก็ตรงกับสิ่งที่เกิดขึ้น คือ เวลา 13:00 ถอยหลังไป 11 ชั่วโมงก็คือ 02:00 นั่นเอง

    การแก้ไข ก็แค่แก้ Timezone เป็น Asia/Bangkok แล้วกดปุ่ม Submit เท่านี้ เวลาก็ตรงตามความเป็นจริงแล้ว

  • วิธีตรวจสอบเว็บไซต์ที่โดน Hack #3

    ต่อจาก “วิธีตรวจสอบเว็บไซต์ที่โดน Hack #1” และ “วิธีตรวจสอบเว็บไซต์ที่โดน Hack #2

    จากการใช้งาน CMS ยอดนิยม อย่าง Joomla อย่างแพร่หลาย ซึ่งเป็นเรื่องง่ายในการพัฒนาเว็บไซต์ เพราะผู้ใช้ สามารถสร้างเนื้อหาได้ง่ายดาย แถมรุ่นใหม่ๆ สร้างแทรกภาพ แทรกวิดีโอได้มากมาย ทำให้เว็บไซต์น่าสนใจ

    แต่สิ่งที่แลกมา คือ ความปลอดภัย เพราะมี Joomla รุ่น 1.5 และใช้เครื่องมือการแก้ไขข้อความ (editor) ที่ชื่อว่า JCE นั้น  (รุ่นต่ำกว่า 2.5) มีช่องโหว่ ซึ่งเรียกรวมๆว่า JCE Exploited

    รายละเอียดของช่องโหว่ สามารถอ่านได้จาก http://www.bugreport.ir/78/exploit.htm

    โดยสรุป วิธีการ Hack ทำเช่นนี้

    1. ตรวจสอบว่า website เป้าหมายมี com_jce หรือไม่
    2. ถ้ามี จะส่งคำสั่ง ผ่านช่องโหว่ทาง URL เข้าไปเพื่อสร้างไฟล์ชื่อ xxxx.gif แล้วเขียนหัวไฟล์ว่า GIF89
    3. จากนั้น ก็ใส่ php code ซึ่งจะใช้เป็น Backdoor เข้าไป
    4. ใช้ช่องโหว่ JCE แก้ไขไฟล์เป็น .php

    เมื่อสามารถเขียนไฟล์ ลงไปได้แล้ว Hacker ก็จะเข้ามาจัดการเครื่องเราในภายหลัง … เช่น เบื้องต้น อาจจะวางไฟล์ 0day.php หรือ อะไรก็แล้วแต่ เพื่อเอาไปอวดเพื่อนๆว่า นี่ๆ ฉัน Hack ได้แล้ว หรือบางคน ก็เข้ามาเปลี่ยนหน้าตาของ Website และเลวร้ายที่สุด คือ สามารถเข้ามาแล้ว เอา Source Code มา Compile บนเครื่องของเรา แล้วยึดเครื่องได้เลย หรืออาจจะเข้ามาใน Network เพื่อ Scan และยิงเครื่องอื่นๆได้เลยทีเดียว

    จาก website ที่อ้างอิงข้างต้น เป็นโค๊ดที่สามารถ นำไปใช้ทดสอบเครื่องในความดูแลของตนเอง แต่ในขณะเดียวกัน ก็จะมี Hacker มือใหม่ หรือที่เรียกว่า Script Kiddie จะลองของ โดยเอา PHP, Perl Script ข้างต้น ไปลอง Hack ดู ซึ่ง … สร้างความเสียหายได้ง่ายๆ

    วิธีการตรวจสอบ ซึ่ง ผู้ดูแล Website พึงตรวจสอบเป็นประจำ

    1. พวก Script Kiddie จะเอาโค๊ดไปใช้ โดยไม่แก้ไขอะไร หรือ แก้ไขเฉพาะให้ Hack ได้ โดยจะลืมแก้ Signature ของ Script ดังภาพ (ส่วนหนึ่งของ Script)

    ดังนั้น จะใน Log File ของ Web Server ก็จะปรากฏข้อความ “BOT for JCE” ด้วย จึงสามารถใช้คำสั่งต่อไปนี้ ค้นหาว่ามีความพยายาม Hack หรือไม่

    grep -i "BOT for JCE" /var/log/httpd/domains/*.log | grep 200

    คำสั่งนี้ จะค้นหาคำว่า  “BOT for JCE” ในที่ที่เก็บ Log File คือ /var/log/httpd/domains/*.log ( ซึ่งแต่ละแห่งใช้ที่เก็บ Log ไม่เหมือนกัน เช่นอาจจะเป็น /var/log/apache2/access.log.* ก็ได้ ขอให้ปรับเปลี่ยนตามความเป็นจริง) และ grep 200 คือ ดูว่า มี Status Code เป็น 200 ซึ่งแปลว่า ติดต่อสำหรับ ดังภาพ

    ถ้าเห็นอย่างนี้บ้าง ก็แสดงว่า เครื่องของเรา มีคนมาเยี่ยมเยียนสำเร็จแล้ว …

    2. ถ้า มีการ Hack สำเร็จ ก็จะวางไฟล์ไว้ โดยพื้นฐาน จะวางไว้ที่ไดเรคทอรี่  images/stories เพราะ Joomla มักจะเปิดให้สามารถ Upload ภาพไปวางได้ เมื่อวางไฟล์ได้แล้ว ก็จะเปลี่ยนนามสกุลจาก .gif เป็น .php  วิธีการค้นหาไฟล์ต้องสงสัย จึงควรหาด้วยคำสั่ง

    find /var/www/ -name "*.php" -type f | grep 'images/stories'

    คำสั่งนี้ จะค้นหาไฟล์ใน /var/www/html ที่มีชื่อเป็น *.php และ ระบุว่า หาเฉพาะชนิดเป็น file (Option -type f) และ เมื่อค้นหาเจอแล้ว ก็จะเลือกเฉพาะที่อยู่ใน ‘images/stories’

    โดยที่ /var/www/html เป็น Web Directory หลัก หรือบางแห่งให้ผู้ใช้ใช้งานได้ใน /home ก็ปรับเปลี่ยนตามความเป็นจริง

    ผลที่ได้ ก็จะเป็นเช่นนี้

    ซึ่งโดยปรกติ ไม่ควรจะมีไฟล์ .php อยู่ใน images/stories ซึ่งเป็นพื้นที่ที่เปิดให้ Upload ไฟล์ภาพเข้ามาได้

    3. หากลองเข้าไปในไฟล์ก็จะพบว่า เป็น Backdoor จริง ตามที่กล่าวไว้ใน “วิธีตรวจสอบเว็บไซต์ที่โดน Hack #2

    ซึ่งจะเห็นได้ว่า ยังมี Back Door ที่สามารถค้นหาในเครื่องด้วยคำสั่ง (ที่เคยบอกไว้แล้ว)

    find ./ -name "*.php" -exec egrep -l "@eval.*base64_decode" {} \;

    (ก็ขอให้ไปทำกันด้วย …)

    4. แต่ก็จะมีแนวทางใหม่ๆ ซึ่งจะค้นหาด้วยคำสั่งเดิมๆไม่เจอ แบบนี้

    ซึ่ง ทำให้การตรวจสอบเป็นไปได้ยากยิ่งขึ้น … แต่หากใส่ใจกันมากขึ้น ก็จะตรวจสอบความผิดปรกติได้

    5. วิธีตรวจสอบว่า บน Web Server ของเรา มีการใช้ com_jce และ Plugin ที่เสี่ยงต่อการโดน hack หรือไม่ ใช้คำสั่งต่อไปนี้

    find /home/ -name "imgmanager.php" -type f |xargs grep '$version ='

    ผลที่ได้

    Picture1

    แนวทางป้องกัน

    1. หากใช้ Joomla ต้อง Upgrade รุ่นให้ทันสมัยเสนอ และติดตามข่าวสาร และปรับปรุงรุ่นของ Component ต่างๆให้ทันสมัยด้วย

    2. Joomla บนระบบที่ใช้งานจริง (Production) ควรจะเป็น Read Only กล่าวคือ Owner ต้องไม่ใช่ Web User เช่น httpd, apache, www-data เป็นต้น ควรจะเป็นของผู้ใช้แต่ละคน เพราะ หากเกิดการโจมตี จะโดนเป็นรายๆไป ไม่กระทบกระเทือนกัน และระมัดระวัง ผู้ใช้บางคนเปลี่ยนสิทธิ์ Permission เองเป็น 777, 757 อะไรทำนองนั้น

    3. เปลี่ยนวิธี แนวการทำงานใหม่ ห้าม ผู้ใช้แก้ไข Production Site ทาง Web Browser โดยเฉพาะ การ Upload ภาพโดยตรงจาก Web Browser เพราะ ถ้าเปิดให้ Upload ภาพได้ แสดงว่า เปิดให้ Web User สามารถเขียนได้ โดย เปลี่ยนไปใช้วิธี Upload ภาพ ผ่านทาง FTP Client เช่น FileZilla แทน วิธีการนี้ ผู้ใช้ยังสามารถแก้ไข Article ได้ตามปรกติ แต่จะไม่สามารถ Upload ภาพได้โดยตรงเท่านั้น

    4. หากจำเป็นจริงๆ ที่จะต้องเปิดให้ ผู้ใช้ และบุคคลทั่วไป Upload ไฟล์ผ่านทาง Web Browser ได้จริงๆ ก็ต้องใช้ .htaccess เพื่อปิดไม่ให้ php, perl และภาษาอื่นๆ สามารถ Execute Script เหล่านั้น ที่อยู่ในไดเรคทอรี่นั้นๆเด็ดขาด

    5. เครื่อง Production ต้องไม่มี Compiler เพราะจากประสบการณ์ เคยเจอมาแล้ว ที่ Hacker ผ่านมาทางช่องโหว่นี้ แล้ว Upload ไฟล์ .c มาวาง ยังดีที่เครื่องนั้นๆ ไม่มี Compiler

    ขอให้โชคดีครับ

    NOTE FOR Windows Server

    > Find specific file type (*.php) in ‘images/stories’

    gci e:\inetpub\vhosts -rec -include “*stories*” | where {$_.psiscontainer} | gci -Filter “*.php”

    > Find Log files in ‘statistics’ folder with name “*.log” which has “BOT for JCE”

    gci e:\inetpub\vhosts -rec -include “statistics” | where {$_.psiscontainer} | gci -rec -filter “*.log” | get-content | select-string -pattern “BOT for JCE”

    > Find imgmanager.php and the version of file

    gci e:\inetpub\vhosts -rec -filter “imgmanager.php” | get-content | select-string -pattern “version = ”

    > Find some known backdoor

    gci e:\inetpub\vhoss -rec -filter “*.php” | get-content | select-string -pattern “@eval.*base64_decode”

  • How to install mathtex.cgi ubuntu 12.04

    1. ติดตั้ง texlive-full , dvipng,  imagemagick
      $sudo apt-get install -y texlive-full dvipng imagemagick
    2. ดาวน์โหลด mathtex.zip
      $wget http://www.forkosh.com/mathtex.zip
    3. สร้างไดเร็คทอรี่ mathtex
      $mkdir mathtex
    4. cd mathtex
    5. unzip ../mathtex.zip
    6. compile mathtex.c ด้วยคำสั่ง
      $cc mathtex.c -DLATEX=\"$(which latex)\" -DDVIPNG=\"$(which dvipng)\"  -o mathtex.cgi
    7. sudo mv mathtex.cgi /usr/lib/cgi-bin
    8. sudo chown :www-data /usr/lib/cgi-bin
    9. sudo chmod g+w /usr/lib/cgi-bin
    10. เพิ่มข้อความต่อไปนี้ในแฟ้ม /etc/apache2/sites-enabled/000-default ภายใน Directive VirtualHost ถ้าใส่ตามนี้คืออนุญาติเครือข่ายภายในมหาวิทยาลัยเท่านั้นเข้าถึงได้
      ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
      <Directory /usr/lib/cgi-bin>
          Options +ExecCGI
          Order deny,allow
          Deny from all
          Allow from 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
      </Directory>
    11. restart apache
      $sudo service apache2 restart
    12. ทดสอบเรียกใช้งานได้ที่ http://yourhostname/cgi-bin/mathtext.cgi?x
    13. texlive เป็นโปรแกรมที่ทดแทน latex ใช้สร้างสมาการทางคณิตศาสตร์
    14. ใน WordPress มีปลั๊กอินชื่อ Youngwhan’s Simple Latex สามารถเรียกใช้ mathtex นี้ได้ทันที โดยปกติจะเซ็ตไว้ให้ใช้ shared host ภายนอกมหาวิทยาลัย
    15. ทดสอบเรียกใช้งาน E=mc^2 ได้ผลเป็น
    16. ตัวอย่างอื่นๆ สำหรับสมการแปลกๆ Example
    17. จบ…. ขอให้สนุกครับ

    ที่มา

    • https://help.ubuntu.com/community/LaTeX
    • http://www.forkosh.com/cgi-bin/weblist.cgi?-t=weblist&-o=php&-f=sources/mimetexquickstartweb.php
  • ลดขนาดไฟล์เมื่อจะทำ export virtual machine ของ virtualbox

    เมื่อจะ export Virtual Machine ใน Oracle VM VirtualBox ควรจะลบไฟล์ที่เกิดจากการใช้งานหรือ การเปลี่ยนแปลงรายการไฟล์ใน VM เช่น การลบไฟล์ หรือ ก๊อปปี้ไฟล์ใหม่ใส่ลงไป เป็นต้น เสร็จแล้วจึงใช้คำสั่ง Export Appliance จะช่วยให้ลดขนาดไฟล์ลงได้ เช่น ไฟล์ VM ชื่อ ubunturouter.ova มีขนาด 4.5GB หลังจากทำคำสั่งนี้ไฟล์มีขนาดลดลงเหลือ 3.4GB อ้อ ลืมบอกไปเป็นเนื้อหาเกี่ยวกับ ubuntu server ครับ

    เมื่อมีการสั่งอัปเดต

    sudo apt-get update
    sudo apt-get dist-upgrade

    เมื่อมีการเปลี่ยนแปลงไฟล์ เช่น

    sudo rm -f psu12-sritrang.tgz

    เมื่อเราคิดว่า VM นี้จะ export ออกไปเป็นไฟล์ .ova ให้คนอื่นเอาไปใช้ ให้ทำคำสั่งเหล่านี้

    sudo apt-get clean
    sudo truncate -s0 /var/log/*.log
    sudo rm /var/log/*gz
    sudo rm /var/log/*/*gz
    dd if=/dev/zero of=tmpfile
    rm -f tmpfile

    Reduce_Export_Oracle_VM_File_Size

    เสร็จแล้วก็ปิดเครื่อง VM

    sudo poweroff

    แล้วจึงทำขั้นตอน export ที่โปรแกรม Oracle VM VirtualBox

    File > Export Appliance…
    Menu_Export_VM

    คิดว่าน่าจะมีประโยชน์กับเพื่อนๆนะครับ

  • vvisit_counterDShelpe rDSvvisit_counter.php: failed to open stream: No such file or directory in /var/www/student-affairs/plugins/system/vvisit_counter/vvisit_counter.php on line 18

    Joomla 3.1.5

    เมื่อวันนี้ตอนเช้าทดลองเปิดหน้าเว็บหน่วยงานภายในคณะดูปรากฏว่าเว็บไม่ปรากฏอะไรเลย  ได้หน้าขาวโล่งๆ ซึ่งผมก็ตกใจครับนึกว่าอะไรจะพังอีก เลยโทรไปสอบถามอาการของผู้ดูแลเว็บ บอกว่าเปิดไม่ได้ตั้งแต่เมื่อวาน  จึง ssh เข้าไปตรวจสอบ /var/www/student-affairs  ตามปกติ permission file ก็เรียบร้อยดีไม่มีไรหาย จากนั้นจึงไปเปิด log ของ apache2 ดู /var/log/apache2/error.log แล้วลอง  tail error.log | grep student-affairs ดูปรากฏว่า เจอ error ดังนี้

    root@Internal-Webhost:/var/log/apache2# tail error.log | grep student-affairs
    [Fri Nov 01 10:00:19 2013] [error] [client 192.168.74.90] PHP Notice:  Use of undefined constant DS – assumed ‘DS’ in /var/www/student-affairs/plugins/system/vvisit_counter/vvisit_counter.php on line 18
    [Fri Nov 01 10:00:19 2013] [error] [client 192.168.74.90] PHP Notice:  Use of undefined constant DS – assumed ‘DS’ in /var/www/student-affairs/plugins/system/vvisit_counter/vvisit_counter.php on line 18
    [Fri Nov 01 10:00:19 2013] [error] [client 192.168.74.90] PHP Warning:  require_once(/var/www/student-affairs/plugins/system/vvisit_counterDShelperDSvvisit_counter.php): failed
    to open stream: No such file or directory in /var/www/student-affairs/plugins/system/vvisit_counter/vvisit_counter.php on line 18
    [Fri Nov 01 10:00:19 2013] [error] [client 192.168.74.90] PHP Fatal error:  require_once(): Failed opening required ‘/var/www/student-affairs/plugins/system/vvisit_counterDShel
    perDSvvisit_counter.php’ (include_path=’.:/usr/share/php:/usr/share/pear’) in /var/www/student-affairs/plugins/system/vvisit_counter/vvisit_counter.php on line 18
    [Fri Nov 01 10:00:21 2013] [error] [client 192.168.74.90] PHP Notice:  Undefined index: th-TH in /var/www/student-affairs/plugins/system/languagefilter/languagefilter.php on line 61
    [Fri Nov 01 10:00:21 2013] [error] [client 192.168.74.90] PHP Notice:  Trying to get property of non-object in /var/www/student-affairs/plugins/system/languagefilter/languagefilter.php on line 61
    [Fri Nov 01 10:00:21 2013] [error] [client 192.168.74.90] PHP Notice:  Use of undefined constant DS – assumed ‘DS’ in /var/www/student-affairs/plugins/system/vvisit_counter/vvisit_counter.php on line 18
    [Fri Nov 01 10:00:21 2013] [error] [client 192.168.74.90] PHP Notice:  Use of undefined constant DS – assumed ‘DS’ in /var/www/student-affairs/plugins/system/vvisit_counter/vvisit_counter.php on line 18
    [Fri Nov 01 10:00:21 2013] [error] [client 192.168.74.90] PHP Warning:  require_once(/var/www/student-affairs/plugins/system/vvisit_counterDShelperDSvvisit_counter.php): failed
    to open stream: No such file or directory in /var/www/student-affairs/plugins/system/vvisit_counter/vvisit_counter.php on line 18
    [Fri Nov 01 10:00:21 2013] [error] [client 192.168.74.90] PHP Fatal error:  require_once(): Failed opening required ‘/var/www/student-affairs/plugins/system/vvisit_counterDShel
    perDSvvisit_counter.php’ (include_path=’.:/usr/share/php:/usr/share/pear’) in /var/www/student-affairs/plugins/system/vvisit_counter/vvisit_counter.php on line 18

    ดูไปดูมาเหมือน ตัว vvisit_counter/vvisit_counter.php ไม่สามารถเปิดหรือหาไฟล์ vvisit_counterDShelperDSvvisit_counter.php  เจอจึงลองไปเปิด google ดูปรากฏว่าเหมือนมันจะมีปัญหาอยู่ ผมจึงทดลองเข้าไป database ของเว็บและไป disable plugin และ mod ดังกล่าว

    vvisit_counterจากนั้นทดลองเปิดหน้าเว็บ จึงสามารถใช้งานได้ตามปกติครับ จบข่าว