Tìm hiểu về File Inclusion

Tìm hiểu về File Inclusion

File Inclusion là lỗ hổng cho phép hacker chèn các file mã độc vào đoạn script thực thi của ứng dụng web. Cơ sở của kỹ thuật khai thác này là các hàm chèn file như include(), require(),..(trong PHP) và các hàm tương tự trong các ngôn ngữ lập trình khác. Ví dụ dưới đây minh họa cho lỗ hổng File Inclusion:

if(isset($_GET['page']) && $_GET['page']!=''){
	$page = $_GET['page'];
	include($page);
}

Biến $page chứa tên file được nhập vào từ phía người dùng và nội dung của file được chèn vào source code của trang web bằng hàm include(). Dựa vào cơ chế này, hacker có thể đọc nội dung của file bất kỳ trên server hoặc chèn mã độc từ một URL tại website khác qua biến $page.

Trong ví dụ này, đường link sau có thể đọc được nội dung file hosts của Windows: http://tek.eten.vn/fileinclusion/index.php?page=C:\Windows\System32\drivers\etc\host

Ví dụ file inclusion có thể đọc file hosts của windows

Các bạn có thể thấy tôi chỉnh file hosts để vào được facebook :D . Ok, đây chỉ là ví dụ, trên thực tế, hacker có thể đọc được những file nhạy cảm hơn , hoặc dùng kỹ thuật này để load những file script gây nguy hại cho server của bạn.

Phòng chống

Có hai cách để phòng chống lỗi File Inclusion:

Cách 1: Cấu hình chỉ cho include những file trên cùng server. Phương pháp này chặn được khả năng chèn mã độc từ bên ngoài vào nội dung của trang web. Ví dụ với server Apache, thiết lập các biến sau trong file config:

Register_globals = Off
allow_url_include = Off
allow_url_fopen = Off

Cách 2: Lập trình an toàn: Chỉ cho include các trang chỉ định sẵn

// Mang luu tru cac trang da duoc dinh nghia san
// ngoai nhung trang nay ra deu coi la khong hop le
$pages = array("page1.html", "page2.html",.....);
$page = $_GET["page"];
$flag = false;

// Kiem tra page co trong list ko
for ($i = 0; $i < sizeof ($pages); $i++)
{
if ($page  == $ pages[$i])
{
$flag = true;
break;
}
}
if ($flag) include ("Hacking attempt.");
Khi trích dẫn bài viết từ tek.eten.vn, xin vui lòng ghi rõ nguồn. Chúng tôi sẽ rất cảm ơn bạn!