Hướng dẫn php filter lfi - bộ lọc php lfi

Local File Inclusion là một lỗ hổng cực kì nguy hiểm giúp hacker có thể đọc các file nhạy cảm trên server.đọc các file nhạy cảm trên server.

Đặc biệt, nếu biết cách khai thác, hacker có thể RCE (Remote Code Execution) dễ dàng thông qua một vài phương pháp phổ biến. RCE (Remote Code Execution) dễ dàng thông qua một vài phương pháp phổ biến.

Khoan đã, trong bài viết này mình sẽ hướng dẫn bạn khai thác LFI (Local File Inclusion) ở mức cơ bản và bypass một số cơ chế bảo vệ.

Tất nhiên phần RCE mình sẽ để ở một bài viết khác, nói chung phải vững cơ bản t rước khi học nâng cao nhé!

Nào, còn chần chừ gì nữa, bạn đang rất nóng lòng nhỉ?? Let’s go!

NOTE: Nếu hình ảnh quá nhỏ để xem, hãy nhấp chuột phải vào ảnh -> Open image in new tab 🙂 Nếu hình ảnh quá nhỏ để xem, hãy nhấp chuột phải vào ảnh -> Open image in new tab 🙂

# Chuẩn bị những gì?

Tất nhiên là phần này là cần thiết rồi, chúng ta cần phải chuẩn bị một số vật liệu cần thiết trước khi bắt tay vào hack chứ nhỉ?

Dưới đây là những thứ cần thiết trong bài học của ngày hôm nay:

  • Phần mềm ảo hóa: Bài lab này mình sẽ dùng Virtualbox, bạn có thể download nó tại đây. Bài lab này mình sẽ dùng Virtualbox, bạn có thể download nó tại đây.
  • Máy Hacker (Kali Linux): Hacking mà thiếu Kali Linux thì quả là không thể tin được. Download tại đâynhé! Hacking mà thiếu Kali Linux thì quả là không thể tin được. Download tại đâynhé!
  • DVWA: Chúng ta sẽ cài DVWA trên máy Kali luôn cho nhẹ và dễ thực hành. Làm theo Video cài đặt bên dưới.Chúng ta sẽ cài DVWA trên máy Kali luôn cho nhẹ và dễ thực hành. Làm theo Video cài đặt bên dưới.

Ok, bấy nhiêu là đủ cho bài học của ngày hôm nay rồi đấy. Các bạn tải về rồi tiến hành cài đặt nhé, nó cũng không quá khó đâu.

Nói thì có vẻ hơi khó hiểu một chút, các bạn quan sát hình ảnh bên dưới nhé!

Hướng dẫn php filter lfi - bộ lọc php lfi

Ví dụ, bên trên là một URL khi bạn muốn xem một file ảnh có tên là cat.jpg. Với người bình thường thì nhìn rất normal, nhưng với hacker chúng ta thì không.cat.jpg. Với người bình thường thì nhìn rất normal, nhưng với hacker chúng ta thì không.

Vậy nếu mình không muốn xem ảnh mà muốn xem file khác thì sao? Đơn giản chỉ cần thay cat.jpg bằng đường dẫn của file cần xem là xong, quá dễ nhỉ?? cat.jpg bằng đường dẫn của file cần xem là xong, quá dễ nhỉ??

Nếu chúng ta có thể xem file mà chúng ta muốn thì Website dính lỗi File Inclusion, haha. Bạn đã hiểu chưa???? có thể xem file mà chúng ta muốn thì Website dính lỗi File Inclusion, haha. Bạn đã hiểu chưa????

Lỗi này xảy ra đó là vấn đề dữ liệu đầu vào của người dùng không được lọc kĩ lưỡng, gây ra ảnh hưởng rất lớn đến Server.dữ liệu đầu vào của người dùng không được lọc kĩ lưỡng, gây ra ảnh hưởng rất lớn đến Server.

Các hàm PHP thường xảy ra lỗi này là include, require, include_once, require_once.include, require, include_once, require_once.

Một ví dụ đơn giản như sau về code PHP dính LFI (Local File Inclusion)

Hướng dẫn php filter lfi - bộ lọc php lfi

Hàm include() lấy tất cả text trong file đã chỉ định và show chúng ra trên Website. Còn các hàm khác thì bạn tự tìm hiểu nhé!include() lấy tất cả text trong file đã chỉ định và show chúng ra trên Website. Còn các hàm khác thì bạn tự tìm hiểu nhé!

Và ngoài việc đọc các file nhạy cảm trên Server, chúng ta còn có thể dùng lỗi LFI để RCE (Thực thi mã từ xa – Remote Code Execution).RCE (Thực thi mã từ xa – Remote Code Execution).

# Path Traversal

Đây là phần cực kì quan trọng, bạn cần phải hiểu nó để có thể khai thác Local File Inclusion hiệu quả. Nói chung thì nó không quá khó đâu. Dùng Kali Linux để thực hành luôn cho dễ nhé!

Hướng dẫn php filter lfi - bộ lọc php lfi
Vầy cho dễ nhớ:

  • ../ là lùi lại một thư mục là lùi lại một thư mục
  • ../../ là lùi lại hai thư mục là lùi lại hai thư mục
  • ../../../ là lùi lại ba thư mục là lùi lại ba thư mục

Đừng lo nếu không hiểu thì đến phần thực hành mình sẽ giải thích rất dễ hiểu.

#1 Bắt đầu với Low

Chúng ta sẽ bắt đầu khai thác File Inclusion ở mức độ dễ trước (Low) rồi từ từ nâng cấp độ lên cho dễ hiểu các bạn nhé!

Chọn DVWA Security -> chọn Low và Submit là xong. Sau đó chọn phần File Inclusion để bắt đầu thực hành nào. DVWA Security -> chọn Low Submit là xong. Sau đó chọn phần File Inclusion để bắt đầu thực hành nào.

Hướng dẫn php filter lfi - bộ lọc php lfi

Trước khi chúng ta bắt đầu khai thác File Inclusion, hãy đọc source code trước, mình sẽ giải thích cho các bạn nguyên nhân xảy ra lỗi này là gì.File Inclusion, hãy đọc source code trước, mình sẽ giải thích cho các bạn nguyên nhân xảy ra lỗi này là gì.

Chọn File Inclusion  -> View SourceView Source

Hướng dẫn php filter lfi - bộ lọc php lfi

Chọn xong thì nó sẽ hiện ra phần source dẫn đến lỗi File Inclusion, code PHP này cũng dễ dàng để hiểu thôi.

Hướng dẫn php filter lfi - bộ lọc php lfi

Để mình giải thích cho các bạn đoạn code PHP này. 

Server sẽ lấy dữ liệu từ người dùng ($_GET) thông qua biến page. Nhìn URL bên dưới bạn sẽ hiểu.$_GET) thông qua biến page. Nhìn URL bên dưới bạn sẽ hiểu.

Hướng dẫn php filter lfi - bộ lọc php lfi

Bạn có thể thấy biến page lấy dữ liệu từ người dùng (ở đây là file file1.php), sau đó nó sẽ thực thi file này, quá đơn giản haha. page lấy dữ liệu từ người dùng (ở đây là file file1.php), sau đó nó sẽ thực thi file này, quá đơn giản haha. 

Lỗi xảy ra khi chúng ta có thể tận dụng biến page để đọc các file nhạy cảm trên Server. page để đọc các file nhạy cảm trên Server. 

Server hiện tại đang dùng là Linux, dưới đây là list file nhạy cảm bạn có thể đọc:

  • /etc/passwd: Thông tin các user trên Server: Thông tin các user trên Server
  • /etc/shadow: Thông tin về password của các user trên Server: Thông tin về password của các user trên Server
  • /proc/version: Thông tin về Version của Linux Kernel: Thông tin về Version của Linux Kernel
  • /root/.ssh/id_rsa: Thông tin private SSH keys của root (dùng để truy kết nối SSH không cần password): Thông tin private SSH keys của root (dùng để truy kết nối SSH không cần password)
  • /var/log/apache2/access.log: Thông tin các request trên Apache Server (có thể dùng để Reverse Shell): Thông tin các request trên Apache Server (có thể dùng để Reverse Shell)

Ok, giờ chúng ta sẽ tận dụng lỗi này để bắt đầu đọc file /etc/passwd xem coi có hiệu quả không? Let’s go! /etc/passwd xem coi có hiệu quả không? Let’s go!

Hướng dẫn php filter lfi - bộ lọc php lfi

Wow, chúng ta đã đọc được file /etc/passwd trên Server nhưng có vẻ hơi khó nhìn một chút, một thủ thuật nhỏ dành cho bạn là hãy xem Source code để nhìn dễ hơn./etc/passwd trên Server nhưng có vẻ hơi khó nhìn một chút, một thủ thuật nhỏ dành cho bạn là hãy xem Source code để nhìn dễ hơn.

Hướng dẫn php filter lfi - bộ lọc php lfi

Chúng ta có thể dùng Path Traversal để đọc /etc/passwd nữa nhé, nhìn bên dưới sẽ hiểu. Path Traversal để đọc /etc/passwd nữa nhé, nhìn bên dưới sẽ hiểu.

Hướng dẫn php filter lfi - bộ lọc php lfi

Mình sẽ giải thích tại sao chúng ta lại dùng ../../../../../../etc/passwd../../../../../../etc/passwd

Hướng dẫn php filter lfi - bộ lọc php lfi

Ok, giờ thì dễ nhìn hơn rất nhiều rồi nhỉ, kết quả của việc khai thác là chúng ta có thể đọc được file trên Server. Bạn có thể áp dụng để đọc một số file khác mà mình đã note bên trên.

Thực hành đọc thử rồi bạn sẽ biết nhé! Đôi lúc sẽ có một số file chúng ta không đọc được vì Permission Denied (Không có quyền truy cập).Permission Denied (Không có quyền truy cập).

Điển hình là khi ta đọc file /etc/shadow/etc/shadow

Hướng dẫn php filter lfi - bộ lọc php lfi

Ok, giờ bạn có thể tận dụng lỗi này để bắt đầu đọc một số file khác trong quyền hạn cho phép 🙂 Thực hành đọc thử là biết ngay mà hihi.

# Remote File Inclusion

Local file Inclusion có thể giúp chúng ta đọc file trên Server, đây chỉ là một dạng lỗi File Inclusion. Còn một dạng khác gọi là Remote File Inclusion.Remote File Inclusion.

Điều kiện để xả ra lỗi RFI là allow_url_fopen = Onallow_url_fopen = On

Nhìn hình bên dưới bạn sẽ hiểu.

Hướng dẫn php filter lfi - bộ lọc php lfi
Mở Google Search luôn mới ghê

Hướng dẫn php filter lfi - bộ lọc php lfi

Qua 2 ví dụ bên trên chắc bạn cũng hiểu về Remote File Inclusion rồi nhỉ?? Điều gì xảy khi lỗi bị tận dụng đọc file trên Server của Hacker, cũng khá thú vị nhỉ????đọc file trên Server của Hacker, cũng khá thú vị nhỉ????

#2 Tiếp tục với Medium

Theo kinh nghiệm ngâm cú của mình thì các bạn cứ học từ từ, không việc gì phải gấp cả, chúng ta học từ basic, nắm vững thì học những cái cao hơn sễ đơn giản rất nhiều.

Thôi, giờ hãy chỉnh DVWA Security lên mức Medium và bắt đầu đọc Source code của File Inclusion nhé!Medium và bắt đầu đọc Source code của File Inclusion nhé!

Hướng dẫn php filter lfi - bộ lọc php lfi

Đoạn code ở level Medium có về không dễ dàng cho lắm nhỉ haha??? Giờ thì cùng mình phân tích nào:

  • Dòng đầu vẫn là lấy dữ liệu từ người dùng ($_GET) thông qua biến page$_GET) thông qua biến page
  • 2 hàm str_replace() sẽ thay thế http://, https://, ../, ..\\ thành “” (mất tiêu) trong chuỗi mà chúng ta nhập vàostr_replace() sẽ thay thế http://, https://, ../, ..\\ thành “” (mất tiêu) trong chuỗi mà chúng ta nhập vào

Nghĩa là 

  • http://google.com thành google.comgoogle.com thành google.com
  • https://google.com thành google.comgoogle.com thành google.com
  • ../etc/passwd thành etc/passwdetc/passwd thành etc/passwd
  • ..\\etc/passwd thành etc/passwdetc/passwd thành etc/passwd

Thử một cái là hiểu ngay!

Hướng dẫn php filter lfi - bộ lọc php lfi

Hướng dẫn php filter lfi - bộ lọc php lfi

Nếu dùng cách khai thác cũ thì chúng ta sẽ bị bắt ngay. Ở mức Medium Server đã dùng một số cơ chế lọc mà mình vừa phân tích ở trên.

Do đó, phần này, chúng cần phải dùng một số kĩ thuật để bypass. bypass.

Hướng dẫn php filter lfi - bộ lọc php lfi

Nếu nó xóa https://, http:// của chúng ta thì chúng ta chỉ cần đổi một kí tự thành in hoa là xong. Ví dụ Https://, htTps://, httP://,… https://, http:// của chúng ta thì chúng ta chỉ cần đổi một kí tự thành in hoa là xong. Ví dụ Https://, htTps://, httP://,…

Hướng dẫn php filter lfi - bộ lọc php lfi

Bạn có thể thấy mình dùng ..././..././..././..././..././..././etc/passwd ..././..././..././..././..././..././etc/passwd

Server sẽ xóa chuỗi của chúng ta (máy cái tô đỏ sẽ bị xóa), nó sẽ thành ../../../../../../etc/passwd. Vậy là đọc được file /etc/passwd rồi 🙂../../../../../../etc/passwd. Vậy là đọc được file /etc/passwd rồi 🙂

Hướng dẫn php filter lfi - bộ lọc php lfi

Vận dụng đầu óc một chút để suy nghĩ ra những cách bypasss khác nhé!

Ok, giờ thì chúng ta có thể bypass level Medium để đọc file rồi đây, thú vị không????bypass level Medium để đọc file rồi đây, thú vị không????

#3 Level High

Chỉnh level lên High rồi bắt đầu thực hành nào các bạn. Bắt đầu xem Source Code đầu tiên để xem nó dùng cái gì để defend nào. High rồi bắt đầu thực hành nào các bạn. Bắt đầu xem Source Code đầu tiên để xem nó dùng cái gì để defend nào.

Hướng dẫn php filter lfi - bộ lọc php lfi

Nhìn source cũng hơi cay cay đấy các bạn. Cùng mình phân tích nào:

– Dòng đầu tiên vẫn là lấy tham số thông qua biến page từ người dùng

– Hàm if có 2 điều kiện:

  • chuỗi ta nhập vào không được bắt đầu bằng từ “file” (hàm fnmatch()) “file” (hàm fnmatch())
  • không bao gồm “include.php“include.php

Nếu 2 điều kiện đó thõa mãn thì ta sẽ nhận được một thông báo ERROR: File not found!ERROR: File not found!

Hướng dẫn php filter lfi - bộ lọc php lfi

Hướng dẫn php filter lfi - bộ lọc php lfi

Thực tế, dùng bypass ở level Medium sẽ không có tác dụng trong trường hợp này. Và để bypass thì chỉ cần dùng thủ thuật đơn giản thôi.

Hướng dẫn php filter lfi - bộ lọc php lfi

Đó là một số cách bypass các level trong DVWA khi ta gặp lỗi Local File Inclusion. Nhưng thực tế, khá ít Server dùng các cơ chế lọc như vậy.

Phân này, chúng ta đã biết cơ bản lỗi Local File Inclusion nói riêng hay File Inclusion nói chung, phần dưới, mình sẽ hướng dẫn thêm các cách bypass thực tế nhất.

# Đọc data file .php 🙂

Quay lại và tùy chỉnh DVWA ở mức Medium, chúng ta sẽ bắt đầu thực hành.Medium, chúng ta sẽ bắt đầu thực hành.

PHP Filter

Thông thường khi khai thác LFI, chúng ta không thể đọc được các file .php vì đơn giản nó sẽ thực thi thay vì cho chúng ta đọc. .php vì đơn giản nó sẽ thực thi thay vì cho chúng ta đọc.

Điều đó sẽ được khắc phục với PHP Filter, thông qua các hàm này, chúng ta có thể đọc nội dung của các file .php trên Server..php trên Server.

Nhưng một chú ý là chúng ta chỉ có thể đọc các file này dưới dạng Base64 hoặc ROT13. Base64 hoặc ROT13.

# Base64

Mình sẽ tiến hành đọc file include.php thông qua PHP Filter dưới dạng base64 cho bạn dễ hình dung. include.php thông qua PHP Filter dưới dạng base64 cho bạn dễ hình dung.

Payload của chúng ta có dạng: http://127.0.0.1/DVWA/vulnerabilities/fi/?page=php://filter/convert.base64-encode/resource=include.php http://127.0.0.1/DVWA/vulnerabilities/fi/?page=php://filter/convert.base64-encode/resource=include.php

Hướng dẫn php filter lfi - bộ lọc php lfi

Sau khi tiến hành decode base64, chúng ta sẽ nhận được đoạn code của file include.php include.php

Hướng dẫn php filter lfi - bộ lọc php lfi

# ROT13

Ok, giờ mình sẽ đọc code của file include.php dưới dạng ROT13 nhé!include.php dưới dạng ROT13 nhé!

Payload của chúng ta có dạng: http://127.0.0.1/DVWA/vulnerabilities/fi/?page=php://filter/read=string.rot13/resource=include.phphttp://127.0.0.1/DVWA/vulnerabilities/fi/?page=php://filter/read=string.rot13/resource=include.php

Hướng dẫn php filter lfi - bộ lọc php lfi

Hướng dẫn php filter lfi - bộ lọc php lfi
Decode ROT13 ra code include.phpinclude.php

Giờ bạn hoàn toàn có thể dùng thủ thuật đó để đọc các file .php thông qua lỗi Local File Inclusion, cảm nghĩ của bạn lúc này thế nào????.php thông qua lỗi Local File Inclusion, cảm nghĩ của bạn lúc này thế nào????

Ok, bên trên là những gì mà bạn cần phải biết về lỗi Local File Inclusion, hi vọng bài viết sẽ gúp bạn nâng cao level.

  • Có thể bạn thích bài viết:Khai thác LFI để Reverse Shell bằng Log Poisoning Khai thác LFI để Reverse Shell bằng Log Poisoning