Bộ lọc PHP LFI

Une faille de type Local File Include (LFI) bao gồm việc bao gồm một fichier local thành partir d'une entrée utilisateur. Những điều chắc chắn về việc ceci permet d'accesser à des fichiers non situé dans le webroot voire d'executer du code

PHP

Trình bao bọc PHP

Il y a plusieurs “Wrappers” en PHP qui peuvent être utilisés pour mininger des LFI

  • Trình bao bọc mong đợi của PHP (déactivé par défaut)

target.php?page=expect://ls

POST /target.php?page=php:/input&cmd=ls
[..]
Content-Length: 44


  • PHP php. //bộ lọc (permet d'inclure un fichier et l'encoder en base64. Hướng dẫn sử dụng mã PHP

vuln.php?page=php://filter/convert.base64-encode/resource=/etc/passwd

  • PHP php. // bộ lọc sans base64

vuln.php?page=php://filter/resource=/etc/passwd

  • PHP ZIP Wrapper LFI (với điều kiện tải lên phần chứa zip của payload). Le zip sera decompressé dans shell. php

vuln.php?page=zip://path/to/file.zip%23shell.php

Linux

Quelques fichiers utiles à inclure

  • /etc/passwd. người dùng cục bộ
  • /proc/self/cmdline. cho biết dòng lệnh đã được sử dụng để khởi chạy dịch vụ

thợ lặn

Il est có thể bao gồm một số fichiers qui peuvent contenir des entrées utilisers si on veut thực thi mã (ví dụ:. Tác nhân người dùng, v.v. )

Bao gồm tệp cục bộ (LFI) là một lỗ hổng web cho phép tin tặc độc hại truy cập, xem và/hoặc bao gồm các tệp nằm trong hệ thống tệp của máy chủ web trong thư mục gốc của tài liệu


Mức độ nghiêm trọng.
Bộ lọc PHP LFI
Bộ lọc PHP LFI
Bộ lọc PHP LFI
Tỷ lệ nghiêm trọng.
Bộ lọc PHP LFI
hiếm khi được phát hiện.
Bộ lọc PHP LFI
Bộ lọc PHP LFI
chỉ xuất hiện trong phần mềm liên quan đến web Tác động kỹ thuật. truy cập vào thông tin nhạy cảm Hậu quả trường hợp xấu nhất. thực thi mã từ xa Khắc phục nhanh. không sử dụng tên tệp từ đầu vào của người dùng

Bao gồm tệp cục bộ hoạt động như thế nào?

Khi viết các ứng dụng web, các nhà phát triển thường cần truy cập các tệp phía máy chủ bổ sung nằm trong thư mục ứng dụng hoặc thư mục con của nó. Ví dụ: các nhà phát triển có thể muốn bao gồm các tệp cấu hình và mô-đun ứng dụng hoặc để truy cập và hiển thị các tệp do người dùng tải lên, chẳng hạn như tệp hình ảnh hoặc văn bản

Để truy cập các tệp không tĩnh, nhà phát triển thường chuyển tên tệp qua tham số đầu vào của người dùng. Ví dụ: nếu ứng dụng hiển thị hình ảnh do người dùng tải lên, tác giả của ứng dụng có thể quyết định cho phép đặt tên tùy ý cho những hình ảnh này. Trong trường hợp các ngôn ngữ kịch bản như PHP, các nhà phát triển cũng có thể cần thêm động các tệp chứa mã nguồn

Lỗ hổng bao gồm tệp cục bộ xảy ra khi người dùng độc hại có thể bao gồm tên tệp hoặc đường dẫn tùy ý trong đầu vào của người dùng. Ví dụ: nếu một ứng dụng được thiết kế để hiển thị một hình ảnh tùy ý dựa trên tham số URL, nhưng kẻ tấn công có thể sử dụng chức năng này để hiển thị mã nguồn ứng dụng, thì ứng dụng đó có lỗ hổng LFI. Lưu ý rằng nếu kẻ tấn công có thể bao gồm một tệp độc hại từ một vị trí từ xa, thì chúng ta đang nói về lỗ hổng bao gồm tệp từ xa (RFI)

Bao gồm tệp cục bộ so với. duyệt thư mục

Các lỗ hổng bao gồm tệp cục bộ thường bị nhầm lẫn với truyền tải thư mục (path traversal), tương tự nhưng không đồng nghĩa

  • LFI có nghĩa là kẻ tấn công có thể bao gồm các tệp mã nguồn hoặc xem các tệp nằm trong thư mục gốc của tài liệu và các thư mục con của nó, nhưng điều đó không có nghĩa là kẻ tấn công có thể tiếp cận bên ngoài thư mục gốc của tài liệu
  • Truyền tải thư mục có nghĩa là kẻ tấn công có thể truy cập các tệp nằm bên ngoài thư mục gốc của tài liệu, chẳng hạn như tệp nhật ký hoặc tệp passwd và cuộc tấn công không liên quan đến việc chạy bất kỳ mã độc hại nào

Hai lỗ hổng này thường bị nhầm lẫn vì chúng thường xảy ra cùng nhau và có cùng nguyên nhân gốc rễ. nhà phát triển cho phép chuyển đường dẫn đến các tệp cục bộ như một phần của đầu vào của người dùng (CWE-73)

ghi chú. Một số định nghĩa coi việc bao gồm tệp cục bộ bị giới hạn trong các trường hợp tệp được bao gồm chứa mã nguồn và cũng được thực thi. Ví dụ: trong chỉ mục CWE, định nghĩa bao gồm tệp cục bộ là CWE-98. Kiểm soát tên tệp không đúng cách cho câu lệnh bao gồm/yêu cầu trong chương trình PHP

Ví dụ về các cuộc tấn công bao gồm tệp cục bộ

Dưới đây là các ví dụ về mã PHP có lỗ hổng bao gồm tệp cục bộ, cũng như các vectơ tấn công LFI khác nhau trên các ứng dụng bao gồm mã này

LFI dẫn đến tiết lộ thông tin nhạy cảm

Nhà phát triển ứng dụng PHP muốn người dùng có thể đọc các bài thơ được lưu trữ trong tệp văn bản trên máy chủ web. Những bài thơ này được ghi vào các tệp văn bản, được tải lên bởi những người dùng khác và được lưu trữ trong một thư mục thơ tương đối. Sau đó, các bài thơ được hiển thị trong trình duyệt web như một phần của trang HTML. Sau đây là một đoạn mã từ các bài thơ/hiển thị. tập tin php


    $file = $_GET["file"];
    $handle = fopen($file, 'r');
    $poem = fread($handle, 1);
    fclose($handle);
    echo $poem;
?>

Như bạn có thể thấy, tên tệp được lấy trực tiếp từ tiêu đề yêu cầu HTTP. Do đó, bạn có thể truy cập và hiển thị một bài thơ có tên là bài thơ. txt bằng URL sau

http://victim.example/my_app/display.php?file=poem.txt

Vectơ tấn công

Kẻ tấn công lạm dụng tập lệnh này bằng cách thao túng yêu cầu GET bằng tải trọng sau

http://victim.example/my_app/display.php?file=../config/database.php

Màn hình hiển thị. tập lệnh php điều hướng lên thư mục gốc của tài liệu rồi xuống thư mục con /config/. Ở đó, nó bao gồm tệp cấu hình cơ sở dữ liệu cơ sở dữ liệu. php, chứa tên người dùng và mật khẩu được sử dụng để kết nối với cơ sở dữ liệu. Dữ liệu bị lộ dưới dạng một phần của mã HTML và kẻ tấn công chỉ cần kiểm tra mã nguồn của trang để tìm hiểu cách truy cập trực tiếp vào cơ sở dữ liệu

LFI dẫn đến kịch bản chéo trang

Những kẻ tấn công cũng có thể sử dụng mã ở trên để nâng cấp cuộc tấn công lên tập lệnh chéo trang được lưu trữ (XSS)

Vectơ tấn công

Trước tiên, kẻ tấn công sử dụng chức năng tải lên tệp thơ để tải "bài thơ" sau đây dưới dạng tệp văn bản có tên là thơ42. txt

________số 8

Sau đó, kẻ tấn công gửi yêu cầu đưa bài thơ vào

http://victim.example/my_app/display.php?file=poem42.txt

Vì nội dung của bài thơ được dự định sẽ được hiển thị trực tiếp như một phần của mã HTML, mã trang hiện bao gồm một lỗ hổng tập lệnh chéo trang được lưu trữ. Kẻ tấn công có thể gửi liên kết này tới bất kỳ số lượng nạn nhân nào và bất kỳ ai mở nó sẽ nhận cookie phiên của họ được gửi đến kẻ tấn công do kẻ tấn công kiểm soát. trang web ví dụ

LFI dẫn đến thực thi mã từ xa

Nhà phát triển của cùng một ứng dụng PHP cũng muốn có thể bao gồm các mô-đun một cách linh hoạt. Sau đây là một đoạn mã từ chỉ mục. tập tin php

POST /target.php?page=php:/input&cmd=ls
[..]
Content-Length: 44


0

Một lần nữa, tên tệp được lấy trực tiếp từ yêu cầu GET HTTP. Do đó, bạn có thể bao gồm mô-đun chào mừng. php như sau

POST /target.php?page=php:/input&cmd=ls
[..]
Content-Length: 44


1

Vectơ tấn công

Đầu tiên, kẻ tấn công sử dụng chức năng tải lên bài thơ để tải lên bài thơ42. txt, chứa mã nguồn PHP của pentest Monkey Reverse Shell

Sau đó, kẻ tấn công thao túng yêu cầu GET để lập chỉ mục. php để bao gồm bài thơ thay vì một mô-đun

POST /target.php?page=php:/input&cmd=ls
[..]
Content-Length: 44


2

Do đó, ứng dụng chạy mã của trình bao ngược (thực thi mã từ xa), cấp cho kẻ tấn công quyền truy cập từ xa vào dòng lệnh của máy chủ

Hậu quả tiềm ẩn của một cuộc tấn công bao gồm tập tin cục bộ

Như bạn có thể thấy từ các ví dụ trên, các lỗ hổng bao gồm tệp cục bộ có thể gây ra nhiều hậu quả, tùy thuộc vào chức năng của ứng dụng dễ bị tấn công. Dưới đây là một số ví dụ

  • Nếu ứng dụng hiển thị hình ảnh tùy ý, nó có thể được sử dụng để hiển thị thông tin nhạy cảm như mã nguồn hoặc tệp cấu hình
  • Nếu ứng dụng cho phép bạn tải xuống các tệp tùy ý, chẳng hạn như tệp PDF, thì ứng dụng đó có thể được sử dụng để tải xuống thông tin nhạy cảm như mã nguồn hoặc tệp cấu hình
  • Nếu ứng dụng bao gồm nội dung tệp tùy ý như một phần của trang HTML, nó có thể được sử dụng để khai thác lỗ hổng tập lệnh chéo trang
  • Nếu ứng dụng tự động bao gồm các tệp mã nguồn tùy ý và kẻ tấn công có thể tải lên hoặc thay đổi tệp, thì nó có thể được sử dụng để chuyển sang thực thi mã từ xa

Ví dụ về các lỗ hổng bao gồm tệp cục bộ nổi tiếng

  • Bản hack Trình tìm bạn bè dành cho người lớn năm 2016. Những kẻ tấn công đã sử dụng lỗ hổng LFI để xâm phạm 412 triệu tài khoản, làm lộ e-mail, mật khẩu cũng như dữ liệu bí mật như sở thích tình dục và tình trạng hôn nhân. Công ty đã được cảnh báo về lỗ hổng trước đó nhưng không khắc phục ngay
  • Thời tiết 2012. hack chính phủ. Những kẻ tấn công đã sử dụng LFI và truyền tải thư mục để thu thập thông tin nhạy cảm từ máy chủ dịch vụ thời tiết quốc gia
  • Lỗ hổng TimThumb 2011. Lỗ hổng LFI trong tập lệnh bổ trợ WordPress đã được sử dụng để xâm phạm hơn 1. 2 triệu trang web chỉ trong năm 2011. Mặc dù thực tế là addon dễ bị tấn công này đã bị loại bỏ vào năm 2014, nhưng các nhà phát triển vẫn đang sử dụng nó

Làm cách nào để phát hiện các lỗ hổng bao gồm tệp cục bộ?

Cách tốt nhất để phát hiện các lỗ hổng bao gồm tệp cục bộ phụ thuộc vào việc chúng đã được biết hay chưa

  • Nếu bạn chỉ sử dụng phần mềm thương mại hoặc nguồn mở và không phát triển phần mềm của riêng mình, thì bạn có thể thấy đủ để xác định phiên bản chính xác của hệ thống hoặc ứng dụng mà bạn đang sử dụng. Nếu phiên bản được xác định dễ bị bao gồm tệp cục bộ, bạn có thể cho rằng bạn dễ bị lỗ hổng bao gồm tệp cục bộ đó. Bạn có thể xác định phiên bản theo cách thủ công hoặc sử dụng công cụ bảo mật phù hợp, chẳng hạn như phần mềm phân tích thành phần phần mềm (SCA) trong trường hợp ứng dụng web hoặc trình quét mạng trong trường hợp ứng dụng và hệ thống nối mạng
  • Nếu bạn phát triển phần mềm của riêng mình hoặc muốn tìm các lỗ hổng bao gồm tệp cục bộ không xác định (zero-days) trong các ứng dụng đã biết, bạn phải có khả năng khai thác thành công lỗ hổng bao gồm tệp cục bộ để chắc chắn rằng nó tồn tại. Trong những trường hợp như vậy, bạn cần thực hiện kiểm tra thâm nhập thủ công với sự trợ giúp của nhà nghiên cứu bảo mật hoặc người kiểm tra thâm nhập hoặc sử dụng công cụ kiểm tra bảo mật ứng dụng (máy quét lỗ hổng web) có thể tự động khai thác lỗ hổng. Ví dụ về các công cụ như vậy là Invicti và Acunetix của Invicti. Chúng tôi khuyên bạn nên sử dụng phương pháp này ngay cả đối với các lỗ hổng đã biết

Làm cách nào để ngăn chặn các lỗ hổng bao gồm tệp cục bộ trong các ứng dụng web?

Có một số phương pháp cho phép bạn ngăn chặn các lỗ hổng bao gồm tệp cục bộ trong mã của mình

  1. Hoàn toàn tránh chuyển tên tệp trong đầu vào của người dùng. Điều này không chỉ bao gồm đầu vào trực tiếp của người dùng mà còn bao gồm cả các nguồn dữ liệu khác mà kẻ tấn công có thể thao túng, chẳng hạn như cookie
  2. Nếu ứng dụng của bạn yêu cầu bạn sử dụng tên tệp từ đầu vào của người dùng và không có cách nào khác, hãy tạo danh sách trắng các tệp an toàn
  3. Nếu bạn không thể tạo danh sách cho phép vì bạn sử dụng tên tệp tùy ý (ví dụ: nếu người dùng tải tệp lên), hãy lưu trữ tên tệp trong cơ sở dữ liệu và sử dụng số nhận dạng hàng trong bảng khi người dùng nhập. Bạn cũng có thể sử dụng ánh xạ URL để xác định các tệp không có nguy cơ bao gồm tệp cục bộ

Các phương pháp trên có sẵn trong mọi ngôn ngữ lập trình và do đó mọi nhà phát triển có thể dễ dàng ngăn chặn các lỗ hổng bao gồm tệp cục bộ bằng cách sử dụng các kỹ thuật mã hóa an toàn. Không có lý do gì để đưa tệp cục bộ vào mã của bạn

ghi chú. Không dựa vào danh sách đen, mã hóa hoặc các phương pháp xác thực/khử trùng đầu vào, chẳng hạn như lọc để ngăn việc đưa vào tệp cục bộ. Ví dụ: đừng cố giới hạn hoặc thực thi các phần mở rộng tệp hoặc chặn các chuỗi ký tự đặc biệt vì đây là biện pháp bảo vệ duy nhất của bạn khỏi LFI. Những kẻ tấn công có thể vượt qua các bộ lọc như vậy bằng cách sử dụng một số phương pháp khác nhau như mã hóa URL và các trình bao bọc như php. //lọc

Làm cách nào để giảm thiểu các cuộc tấn công bao gồm tệp cục bộ?

Các phương pháp giảm thiểu các cuộc tấn công bao gồm tệp cục bộ sẽ khác nhau tùy thuộc vào loại phần mềm

  • Trong trường hợp các ứng dụng web tùy chỉnh, bạn có thể giảm thiểu các cuộc tấn công bao gồm tệp cục bộ bằng cách chạy ứng dụng web của mình trong một môi trường hạn chế, điều này rất phổ biến đối với các API web. Ví dụ: thay vì chạy tất cả các ứng dụng của bạn trên một máy chủ Linux với Apache, bạn có thể chạy từng ứng dụng trong một bộ chứa Docker riêng biệt. Điều này sẽ giới hạn số lượng tệp mà kẻ tấn công có thể truy cập – chúng sẽ không thể truy cập các ứng dụng khác trong cùng thư mục gốc của web
  • Trong trường hợp tệp cục bộ đã biết có chứa trong phần mềm của bên thứ ba, chẳng hạn như phần mềm quản trị cho bộ định tuyến phần cứng và tường lửa, bạn phải kiểm tra các tư vấn bảo mật mới nhất để tìm cách khắc phục và cập nhật lên phiên bản không dễ bị tổn thương

Trong trường hợp bao gồm tệp cục bộ zero-day trong phần mềm của bên thứ ba, bạn có thể áp dụng các quy tắc WAF (tường lửa ứng dụng web) tạm thời để giảm thiểu. Tuy nhiên, điều này chỉ làm cho việc bao gồm tệp cục bộ khó khai thác hơn và không loại bỏ được sự cố

Các câu hỏi thường gặp

Bao gồm tệp cục bộ (LFI) là gì?

Bao gồm tệp cục bộ (LFI) là một lỗ hổng web cho phép tin tặc độc hại truy cập, xem và/hoặc bao gồm các tệp nằm trong hệ thống tệp của máy chủ web trong thư mục gốc của tài liệu. Nó tương tự như bao gồm tập tin từ xa

 

Đọc về bao gồm tập tin từ xa (RFI)

LFI nguy hiểm như thế nào?

Các lỗ hổng bao gồm tệp cục bộ có thể gây ra nhiều hậu quả, tùy thuộc vào chức năng của ứng dụng dễ bị tấn công và thậm chí có thể dẫn đến sự xâm phạm toàn bộ hệ thống. Chúng thường xuất hiện cùng với các lỗ hổng duyệt thư mục

 

Tìm hiểu về duyệt thư mục

Làm thế nào để tránh LFI?

Để tránh LFI và nhiều lỗ hổng khác, hãy làm theo thói quen lập trình an toàn và không bao giờ tin vào thông tin đầu vào của người dùng. Nếu bạn cần bao gồm các tệp cục bộ, hãy sử dụng danh sách trắng các tên và vị trí tệp được phép