Pages

5/22/2011

Use .htaccess file to attack web servers

เพิ่งเจอการโจมตีเวปserver แบบใหม่ด้วยการใช้ .htaccess เขียนโดย
http://www.justanotherhacker.com/2011/05/htaccess-based-attacks.html written by Eldar Marcussen เลยว่าจะเอามาทดลองและเขียนเป็นไทยซะหน่อย

ไอเดียหลักของการโจมตีนี้คือ  การที่ระบบเวปบางตัวอนุญาตให้มีการอัพโหลดไฟล์อะไรขึ้นไปก็ได้ แถมยังไม่เปลี่ยนชื่อไฟล์เป็นอย่างอื่นด้วย
ดังนั้น...  ถ้าเราอัพโหลด .htaccess ขึ้นไปล่ะ?



.htaccess เป็นไฟล์ที่จะถูกอ่านและตีความโดยตัว web server โดยหลักๆในไฟล์นี้ก็จะเป็น directive switches ที่จะบอก web server ว่าจะให้ทำอะไรกับ folder ตัวนี้เป็นพิเศษบ้าง
เช่น อาจจะให้ folder นี้มีการลิสต์ไฟล์ทั้งหมดออกมาให้ผู้ใช้เห็นได้เป็นพิเศษ  ก็อาจจะใช้ .htaccess ใส่ไปเฉพาะ folder นี้ แล้วก็ตั้งให้มีการใช้งานโหมดที่ว่านั่นได้   ซึ่งโดยปกติแล้วก็ไม่น่าจะมีผลอะไร เพราะ...

 1. ไฟล์ .htaccess นี้ไม่สามารถใส่คำสั่งที่เอาไว้ทำงานอะไรลงไปได้ มันเป็นแค่ switch ไว้ตั้งค่าเฉยๆ
 2. ระบบ web server (Apache) มีการตั้งให้ AllowOverride ซึ่งหมายถึงว่า อนุญาตให้ .htaccess ที่โดนใส่ไว้ในfolderย่อยๆนั่นทำงานรึเปล่า  ซึ่งถ้าไม่อนุญาตไว้ที่ต้นfolder (web root) พวก folder ย่อยๆนั่นก็ถึงมีไฟล์ .htaccess ก็จะไม่ถูกอ่าน

แล้วทำไมถึงถูกโจมตีได้?

ก่อนอื่นต้องตัดข้อ 2. ก่อน  เพราะเนื่องจากบางทีระบบ จำเป็นที่จะต้องให้สิทธิ์ folder ย่อย สามารถรัน .htaccess ได้  เช่น ไม่อยากให้ web root(/) มีการโชว์รายชื่อไฟล์ในนั้น  แต่บางfolderย่อยข้างในเช่น  /files ก็อยากให้มีการโชว์ไฟล์   ดังนั้น ก็จะต้องมี .htaccess ใน /files เพื่อใส่ตั้งเปิดสวิตซ์ indexes

พอข้อ 2. เป็นไปได้แล้ว   ก็เหลือข้อ 1. ซึ่งก็เป็นสิ่งที่คนเขียนคิดออกมาได้ฉลาดมาก
ถ้าเข้าไปดูในโค้ด จะเห็นว่า เขาแก้ switch อย่างนึงของระบบ web server  คือบรรทัดนี้

# Make .htaccess file be interpreted as php file. This occur after apache has interpreted
# the apache directoves from the .htaccess file
AddType application/x-httpd-php .htaccess


ซึ่งหมายความว่า  ต่อไปนี้ให้ Apache ตีความว่าไฟล์ที่ลงท้ายด้วย .htaccess ให้ตีความว่าเป็น php file ดังนั้นก็จะให้ไปประมวลผลโดย php

แค่ตรงนี้ละก็จบแล้ว  ก็แค่เขียนโค้ด php สั่งให้รันคำสั่งบน shell โดยรับมาผ่านตัวแปร c  ก็ไม่ใช่เรื่องยากอะไร

ต่อไปก็เป็นว่า ทดลองเล่นละ
ผมเอาโค้ดอัพโหลดไฟล์มาจาก http://www.w3schools.com/PHP/php_file_upload.asp แล้วมาแปลงนิดๆหน่อยๆ


หน้าแรกเลือก upload file ที่ชื่อ .htaccess แล้ว

พออัพโหลดเสร็จ .htaccess เข้าไปอยู่ใน upload/ ด้วยชื่อเดิม
(ป.ล. ไฟล์นี้ไม่ใช่original ดังนั้นขนาดจะไม่เหมือนกับบนเวปไซต์ของต้นฉบับ)

อัพโหลดเสร็จก็จบกัน  เพราะตอนนี้ก็สามารถรันคำสั่งผ่านตัวแปร c ได้ละ 
(ในที่นี้ รัน ls / )

สิ่งที่เป็นไปได้อีกก็คือ แทนที่จะใส่ .htaccess สั้นๆที่สั่งให้รันคำสั่งธรรมดา  อาจจะแปลงเพิ่มโดยใส่ php shell เข้าไปเพื่อความสะดวกในการจัดการไฟล์บน web server ได้ง่ายขึ้น

วิธีป้องกัน 
  1. ก็ควรจะต้องมีการจัดการ AllowOverride ให้ดีขึ้น ต้องดูว่าไม่ควรให้ folder ที่มีไฟล์ที่อาจจะถูกแก้ไขได้ มีสิทธิ์ในการรัน .htaccess
  2. เวลาเขียน script php สำหรับอัพโหลดไฟล์ขึ้นไปบนweb server สมควรที่จะต้องแก้ไขชื่อไฟล์ด้วยเวลาบันทึก  มิเช่นนั้นอาจจะโดนเปลี่ยนเป็นชื่อไฟล์อะไรก็ได้ เช่น .htaccess

No comments:

Post a Comment