Bài viết này sẽ giải thích việc file cục bộ là gì và cách chúng ta có thể sử dụng nó để khai thác máy tính. Bạn có thể sử dụng kiến thức này để giải quyết thử thách số 14 của Christmas Advent of Cyber!
Cách khai thác lỗ hổng Local File Inclusion
Một số ứng dụng web sẽ chứa nội dung của các file và tải nó lên trang web. Hoặc ứng dụng có thể đưa nó vào tài liệu và phân tích cú pháp nó như một phần của ngôn ngữ lập trình
Ví dụ: nếu một ứng dụng web có đường dẫn sau:
https://example.com/?include_file=file1.php
Đường dẫn này sẽ lấy nội dung từ file1.php và hiển thị nó lên web. Nếu một ứng dụng không thiết lập danh sách trắng những tệp nào có thể được tải lên và truy cập qua đường dẫn, thì người dùng có thể yêu cầu tệp /etc/shadow, hiển thị tất cả người dùng đã mã hóa trên hệ thống đang chạy ứng dụng web.
Khi ứng dụng web chứa một file, nó sẽ đọc file đó với quyền của người dùng đang chạy máy chủ web. Ví dụ: nếu người dùng joe chạy máy chủ web, nó sẽ đọc tệp có quyền của joe, nếu chạy dưới dạng root, nó sẽ có quyền của người dùng root. Bạn nên tính trước trường hợp này khi tạo file, trước tiên hãy thử tạo một tệp mà bạn biết máy chủ web có quyền đọc (chẳng hạn như robots.txt nếu máy chủ web có tệp đó), để xem liệu nó có dễ bị khai thác theo kiểu này hay không.
Với lỗ hổng Local File Inclusion, bạn có thể thử và xem các tệp sau để hỗ trợ bạn quản lý máy chủ.
- /etc/shadow – Xem mật khẩu đã mã hóa của tất cả người dùng trên hệ thống
- server.js hoặc index.js – Nếu ứng dụng được viết bằng NodeJS, đây là những tên tệp phổ biến chứa code chính của ứng dụng – thông tin đăng nhập API có thể bị lộ.
- /etc/hosts – Chứa thông tin máy chủ web đang giao tiếp với các thiết bị nào khác trên mạng.
- /uploads/evil.php – Nếu bạn tải web shell của riêng mình lên máy chủ web, thì bạn có thể thực thi nó bằng lỗ hổng này.
Mẹo để hoàn thành thử thách
Một số máy chủ web sẽ coi mọi dấu gạch chéo (/) là đường dẫn vào trang mới, nhưng nếu chúng ta muốn khai thác một file như /etc/shadow thì sao?
https://example.com/notes/?include=/etc/shadow
Máy chủ sẽ nghĩ rằng nó sẽ truy cập /notes/include/etc/shadow. Vậy nên bạn không thể thêm dấu gạch chéo trong URL vì máy chủ web sẽ nghĩ rằng nó đang truy cập đến một thư mục khác.
Giải pháp là sử dụng mã hóa URL. Mã hóa URL thay thế các ký tự ASCII không an toàn bằng ‘%’ theo sau là hai chữ số thập lục phân. Dấu gạch chéo (/) có thể được mã hóa URL là %2F. Do đó chúng ta có thể thay đổi đường dẫn thành:
https://example.com/notes/?include=%2Fetc%2Fshadow
Yêu cầu mới này sẽ truy cập vào /notes/ và sau đó chuyển đổi %2F thành dấu gạch chéo. Vậy là xong rồi đó.
https://meyerweb.com/eric/tools/dencoder/ – Đây là một trình giải mã và mã hóa URL hữu ích mà bạn có thể sử dụng.
Ngoài ra, bạn có thể xem cách giải bài shodan.io trên TryHackMe tại đây.
0 Comments