Tìm kiếm bài viết

Lỗ hổng File upload trong thiết kế website

09.11.2020

5.0/5 (1 Reviews)

Lỗ hổng File upload trong thiết kế website, nguy hiểm ai cũng cần phải biết, nhận diện và phòng tránh.

    Giới thiệu

    Khỏi dài dòng, trong bài viết này mình sẽ giới thiệu rủi do về bảo mật đối với upload file. Chẳng hạn với chức năng upload avatar, thông thường user sẽ upload file ảnh lên server, okay, sẽ không có vấn đề gì cả nếu nó thực sự là một file ảnh, nhưng chiện zề sẽ xảy ra nếu như validate chỉ chạy ở phía frontend mà backend thì lại k kiểm tra chặt ?

    Lỗ hổng File upload trong thiết kế website

    Attacker có thể lợi dụng sơ hở này và tiến hành inject mã độc.

    Cách thức hoạt động

    Chức năng upload file là mục tiêu yêu thích của hackers vì nó cho phép lượng lớn dữ liệu và ghi vào disk. Điều này cho kẻ tấn công cơ hội smuggle mã độc lên server của bạn. Nếu chúng có thể tìm và thực thi đoạn mã độc đó, chúng có thể 'do something' với hệ thống thân yêu của bạn)

    Cùng xem nó hoạt động như thế nào nhé 

    Nhân vật quen thuộc trong của mình là Mal lần này sẽ demo cách hoạt động của lỗ hổng này. Hắn vào trang chỉnh sửa profile và tiến hành nghịch chức năng upload avatar

    Đầu tiên, file đã upload không hề được đổi đuôi file trong quá trình xử lý, file name xuất hiện trên URL của ảnh profile khi nó published. Thứ hai, đã kiểm tra file-type ở JS, nhưng Mal không bỏ cuộc, hắn viết thử một đoạn script gọi tới hack.php:

    <?php
      if(isset($_REQUEST['cmd'])) {
        $cmd = ($_REQUEST['cmd']);
        system($cmd);
      } else {
        echo "What is your bidding?";
      }
    ?>
    

    Khi mà web shell thực thi bởi PHP, nó sẽ chạy bất kỳ command nào được truyền qua tham số cmd. Hắn tắt JS ở phía trình duyệt và upload file hack.php lên với chức năng upload avatar - vốn không phải để upload thứ gì khác ngoài ảnh) . Và yep, JS bị tắt, kiểm tra đuôi file đã bị loại bỏ.

    Bây giờ ảnh đại diện của hắn sẽ trông như thế này:

    Đó là bởi vì nó không thể hiện được file không phải là ảnh, do hắn đã upload file hack.php thay vì ảnh mà) Chắc có lẽ đoạn script đã tồn tại trên server ha)

    Hắn lấy URL được truyền trên thẻ img của avatar và dán lên trình duyệt:

    Ờm, file hack.php của hắn kia rồi, bạn cũng thấy đoạn text What is your bidding? đã xuất hiện, như vậy là file hack.php đã chạy theo ý hắn.

    Giờ truyền thêm param vào URL thì chúng cũng sẽ được thực thi, thêm param vào đường dẫn ...1a2fe/hack.php?cmd=locate+my.cnf (locate my.cnf) để tìm đường dẫn đến file config database ha. trình duyệt trả ra nội dung như sau :/etc/mysql/my.cnf. Tương tự, bây giờ truyền thử lệnh cat /etc/mysql/my.cnf ha:

    Đọc sương sương thì cũng hiểu sơ sơ đấy nhờ, nội dung khá nhạy cảm, không dành cho trẻ em và phụ nữ có thai hoặc đang cho con bú ) Thông tin quan trọng về database bị lộ.

    Phòng chống

    Nhìn chung thì đây là lỗi cũng khá dễ khai thác, cũng có hại, và cũng thường gặp, dễ để kẻ tấn công có thể inject mã độc vào ứng dụng của bạn. Mọi thứ được người dùng gửi lên đều cần phải xem xét kỹ lưỡng, đảm bảo an toàn, nếu không kẻ tấn công có thể nhúng bất kỳ loại mã độc nào lên hệ thống. Có một vài cách bảo vệ sau đây hy vọng sẽ hữu ích cho bạn:

    1. Cách ly các file được upload.
    2. Chắc chắn rằng file không thể execute.
    3. Sửa lại tên file khi upload.
    4. validate file formats và extensions.
    5. validate content-type header.
    6. Sử dụng quét virus.
    7. Kiểm tra file size.
    8. Sanitize filename.
    9. Xử lý kỹ với file nén.

    Tổng kết

    Bài viết được chia sẻ và bổ sung lại từ nhiều nguồn trên internet, mong bạn đọc gói ý thêm, cùng chia sẻ những kiến thức hay đến mọi người.

    CÓ THỂ BẠN QUAN TÂM

    Bài Viết Cùng Chuyên Mục

    XEM THÊM
    thumbnail

    Kubernetes bài 6 - Vận hành k8s Day-Two Operations và Quản trị bằng GitOps

    22.05.2026

    Khi cụm Kubernetes của bạn đã được bảo mật cấu hình, tối ưu tài nguyên và thiết lập tự phục hồi, câu hỏi đặt ra là làm sao để duy trì sự ổn định đó trong nhiều năm tiếp theo mà không bị phụ thuộc

    thumbnail

    Kubernetes bài 5 - bảo mật Cloud Native và chuẩn DevSecOps cho K8s

    22.05.2026

    Việc siết chặt an ninh (Hardening) không phải là cấu hình một vài thông số rồi bỏ đó, mà là một tư duy phòng thủ chiều sâu.

    thumbnail

    Kubernetes bài 4 - Tối ưu Resource Auto-Healing và Scale Zero-Downtime

    22.05.2026

    Bài viết này sẽ đi sâu vào các cơ chế ở tầng Kernel giúp hệ thống tự phục hồi, chống lại các đợt tấn công cạn kiệt tài nguyên và cập nhật phiên bản mới mà người dùng không hề hay biết.

    thumbnail

    Kubernetes bài 3 - Bảo mật cấu hình k8s và config Security trên Production

    22.05.2026

    Kubernetes giải quyết bài toán này bằng hai đối tượng chuyên biệt nhưng nếu không hiểu rõ bản chất bảo mật ở tầng dưới, bạn đang tự tay dâng toàn bộ chìa khóa hệ thống cho hacker.

    thumbnail

    Kubernetes bài 2 - Mạng lưới k8s và luồng Traffic ở Packet Level

    22.05.2026

    Pod không chỉ là một container: Rất nhiều người nhầm lẫn Pod 1-1 với Container. Thực chất, Pod là đơn vị triển khai nhỏ nhất, có thể chứa một hoặc nhiều container

    Mục lục bài viết