Hướng dẫn upload shell php - tải lên php vỏ
Show 1.Giới thiệuTrong thực tế chúng ta bắt gặp rất nhiều trang web cho phép chúng ta upload file từ máy lên. Đơn giản như upoad hình nền làm avatar hoặc gửi file video các thứ. Tuy nhiên nếu chúng ta không đảm bảo file upload lên được kiểm soát chặt chẽ, hacker rất có thể sẽ sử dụng các shell giả mạo dưới dạng file ảnh nhằm thực thi mã và chiếm quyền điều khiển. Bài viết này sẽ chỉ cho bạn 1 vài cách khai thác cơ bản khi đầu vào kiểm soát chưa được chặt chẽ. Vậy let's go. 2.Các cách khai tháca. Khai thác cơ bảnĐầu tiên cũng là đơn giản nhất. Đó là trang web tin tưởng hoàn toàn vào người dùng và không có bất kỳ biện pháp bảo vệ nào. Ta sẽ code 1 trang web đơn giản nhằm upload file như sau: Phần code php khi không có sự kiểm soát đầu vào sẽ có dạng: Giao diện trang web sẽ cho ta 1 chỗ để upload file: Sau khi upload thì file được lưu vào địa chỉ ./uploads/file_name. Ta sẽ thử gửi lên 1 ảnh 1 bất kỳ là test.jpg. Sau khi gửi lên thành công, ta có thể vào ./uploads/test.jpg để xem trực tiếp ảnh: Như vậy là upload thành công.Bây giờ ta sẽ thử up shell php lên, ở đây mình sử dụng tool pony shell để up: Sau khi upload và chạy ./uploads/shell.php thì đã vào được bảng terminal, tại đây ta có thể khai thác để chạy lệnh linux, từ đó lấy được thông tin: b.Bypass MMI-TypeTiếp đến các trang web có thể giới hạn định dạng file, gọi là MMI file extension. Ta sẽ thêm 1 đoạn code như sau vào trang trước: Đoạn code trên sẽ sử dụng Đến đây ta sẽ sử dụng burpsuite để khai thác. Bắt request bằng burpsuite ta được: Do file ta up lên là file php nên tại phần header sẽ có dạng Vậy là upload thành công. c. Bypass getimagesize()Hàm getimagesize () sẽ đọc 1 lượng byte ban đầu nhất định nhằm xác định xem về định dạng file, chiều rộng cũng như chiều cao của file. Đoạn code sẽ được thêm như sau: Để bypass thì ta sẽ chỉnh sửa phần đầu của file php để hàm check sẽ nghĩ là file ảnh. Hoặc ta chỉ cần thêm đoạn Vậy là upload thành công. Khá tiếc là cái pony shell sử dụng cách này lại không chạy được, Bạn có thể sử dụng các shell khác như mini shell hoặc r57 shell đều được. d. Bypass pathinfo()Hàm pathinfo() sẽ lấy thông tin về đường dẫn truyền vào: Extension sẽ được check bởi đoạn sau dấu chấm cuối cùng. Ví dụ shell.php.jpg thì hàm pathinfo() sẽ check đây là 1 file jpg. Tuy nhiên nếu ta để như thế thì khi truyền url đoạn chứa shell vào sẽ không chạy được. Đến đây ta có 1 cách để khai thác. Đó là sử dụng null byte %00, hiểu đơn giản thì ta sẽ để file dạng e. Một vài cách khai thác khác
3.Cách khắc phục
Up file lên sẽ được: Như vậy thì dù kẻ tấn công có vượt qua và up shell lên được thì vẫn không thể thực thi được lệnh do đã bị đổi định dạng sang file ảnh. All rights reserved |