Hôm nay mình xin chia sẻ với các bạn lập trình, bảo mật một trong những lỗ hổng tới từ việc cấu hình sai php. trong php trên máy chủ đặc biệt là share hosting thì 2 tính năng mặc định sẽ tắt là allow_url_fopen, và allow_url_include tuy nhiên vì một số lý do nào đó mà nó được kích hoạt nên thì nó sẽ mang theo một số nguy cơ bảo mật nghiêm trọng. Trong bài viết này mình sẽ nói chi tiết về cách lỗ hổng liên quan tới vấn đề này.
Bài viết này cũng bắt nguồn từ việc một số lập trình viên đã không nhận thức đúng và đầy đủ bảo mật khi lập trình web dẫn tới một số lỗ hổng bảo mật nghiêm trọng cho hệ thống.
Đầu tiên mình sẽ kích hoạt 2 phần mở rộng này của php lên trên hosting của mình
Để cho chắc mình test thử với file info.
Như các bạn thấy tôi đã bật nó nên thành công bây giờ tôi sẽ khai thác nó. tôi sẽ dùng một doạn code mà rất nhiều lập trình viên sẽ mắc phải khi xử lý truy vấn GET
Tôi sẽ tạo một file tên 1.txt với nội dung admin để test thử.
Nó có thể đọc được file và chúng ta xem file index này quyền gì nào?
Nó quyền 644 hoàn toàn không có vấn đề gì về quyền file hay thư mục tuy nhiên nó đang tìm ẩn nguy cơ lỗi chúng ta sẽ tìm hiểu chút về PHP cụ thể ở đây là include trong php
Trong lập trình PHP có lệnh là include, require, require_once, include_once cho phép file hiện tại gọi đến một file khác. Tùy thuộc vào mức độ bảo mật của server, kẻ tấn công có thể include file trên chính máy chủ đó (include local) hay include đến một file ở máy khác (include remote). Mục đích của kẻ tấn công là chạy được các hàm hệ thống và thu thập các thông tin nhạy cảm của hệ thống
Như trong trường hợp cụ thể này tôi dùng include để đọc file password của hệ thống. Tôi tạo 1 file và chạy include như sau
File này các bạn thấy nó hoàn toàn bình thường đúng không nào cho tới khi tôi dùng kỹ thuật LFI ( LFI – Local file include ) với dot slat..... (../../../../)
Như vậy tôi đã có thể đọc được tham số hệ thống dựa vào file trên qua đây tôi hoàn toàn có thể đọc được hết những thứ có trên vps này bao gồm luôn cả việc chiếm tài khoản quản trị của máy chủ.
Bây giờ tôi thử lên shell với đoạn code này như sau:
Bạn hoàn toàn có thể kiểm được một file shell đâu đó trên github và chạy trên victim
Như vậy các bạn có thể thấy với một file bình thường nhưng nó đã cho phép hacker can thiệp hệ thống dịch vụ của bạn.
Từ trên bạn có thể thấy việc dùng allow_url_fopen và allow_url_include thực chất là lợi bất cập hại khi bạn kích hoạt nó lên thì bạn hoàn toàn có thể biến một file hết sức bình thường thành một cửa hậu cho hacker. hoặc hacker cũng lợi dụng điều này để gài các backdooor mà các công cụ scan phải bó tay thậm chí bạn có ngồi đọc lại hết code cũng không biết mã độc ở đâu để mà vá. đây là một lỗ hổng nghiêm trọng tiềm tàng. theo mình thì bạn tuyệt đối không được sửa dụng cả 2 phần mở rộng này của php để được đảm bảo về mặt an ninh.
Lưu ý về bảo mật:
1: Kiểm tra và chắc chắn bạn không dùng allow_url_fopen, và allow_url_include
2: đối với các code bạn dùng theo kiểu include để get nội dung nào đó từ file khác hoặc đọc biến nào đó thì hãy cài đặt basedir cho php.ini như sau:
thay đường dẫn thành thư mục của bạn. Tuy nhiên với điều này bạn cần lưu ý thêm là cần chuyển file cấu hình kết nối database của bạn ra chỗ khác thư mục trên để không bị đọc được nhé. Hoặc tốt nhất bạn hãy quy định code sẽ được đọc trong thư mục nào, file nào luôn với PHP thì sẽ khỏe nhất.
3: Đơn giản nhất là các bạn hãy dùng đường dẫn tuyệt đối thay vì tương đối như vậy
Không có nhận xét nào:
Đăng nhận xét