Lỗ hổng Command execution

09.11.2020

5.0/5 (1 Reviews)

Là một lập trình viên thiết kế web có tâm thì chúng ta cẩn phải chắc chắc rằng command string được xây dựng một cách chặt chẽ, an toàn không bị lỗi Command execution

    Như mọi người cũng biết thì hiện nay rất nhiều hệ thống web gọi operating system processes thông qua command line, thao tác này sẽ ẩn chứa lỗ hổng về bảo mật, là một lập trình viên thiết kế web có tâm thì chúng ta cẩn phải chắc chắc rằng command stirng được xây dựng một cách chặt chẽ, an toàn. Trong bài viết này mình sẽ giới thiệu cơ bản về lỗ hổng bảo mật này và cách phòng tránh nó.

    Lỗ hổng Command execution

    Nguyên nhân sinh ra lỗ hổng?

    Nhiều hệ thống websites sử dụng command line để đọc files, gửi emails, và thực hiện nhiều thao tác khác. Nếu như hệ thống transforms input "sida" vào shell commands thì ... bạn cần phải quan tâm đến việc lọc input đó trước đã.

    Nếu không lọc input, hacker có thể craft HTTP requests thực hiện command theo yêu cầu của hắn.

    Không nói nhiều, Cùng xem cách nó hoạt động nhé

    Thực hiện tấn công như thế nào?

    Hãy tưởng tượng rằng bạn đang chạy một trang web đơn giản thực hiện việc tìm kiếm, website sẽ thực hiện command tra cứu và hiện thị kết quả ra view.

    Xem qua một chút về đoạn code dưới đây, từ biến $domain chưa được lọc, bạn đã vô tình tạo ra lỗ hổng như mình đã đề cập, nó được biết đến với cái tên là command injection

    <?php
      if (isset($_GET['domain'])) {
        echo '<pre>';
        $domain = $_GET['domain'];
        $lookup = system("nslookup {$domain}");
        echo($lookup);
        echo '</pre>';
      }
    ?>
    

    Lại là Mal, một đực rựa xấu tánh thích nghịch ngợm "hách hủng" cái website yêu quý của bạn, hắn đã cảnh báo trước rằng bạn đang chạy php, và hắn có lợi thế về món này

    Trong khi đang sử dụng chức năng tìm kiếm, hắn đoán domain được đặt vào trong query string với biến $domain, thử search: google.com

    Hắn đoán: IP tìm kiếm thực hiện thông qua một operating system function và gắn tag vào lệnh bổ sung ở cuối.

    Hắn làm một phép thử trên thanh tìm kiếm với nội dung: google.com && echo "HAXXED"

    Như bạn thấy đấy, ngoài nội dung tìm kiếm đơn thuần, lần này hắn có thể thấy được cả output với đoạn echo chèn vào phần tìm kiếm, yep, web của bạn không thích điều này

    Tin xấu là bây giờ hắn đã biết cơ chế để thực thi code trên server ... Bạn có thể thử nó nhé, thêm 1 command vào thanh search với nội dung google.com && cat /etc/passwd

    Output sẽ có thêm đoạn thông tin "nhạy cảm" này ở phía dưới cùng với nội dung được đọc từ server:

    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    

    Đó chỉ là cơ chế hoạt động của lỗ hổng này, bây giờ chúng ta sẽ phải protect nó.

    Ngăn chặn

    Nếu kẻ tấn công có thể thực thi mã tùy ý trên máy chủ của bạn, hệ thống của bạn gần như chắc chắn sẽ bị xâm phạm. Bạn cần hết sức cẩn thận khi thiết kế cách máy chủ web của bạn tương tác với hệ điều hành.

    1. Trước hết cứ phải là espace inputs đã

    Lỗ hổng xảy ra khi input không được lọc cẩn thận các ký tự như: ;, &, |, ` . Hoặc nếu tốt hơn thì bạn có thể dùng regex để lọc.

    2. Hạn chế các command được phép

    Hãy cố gắng xây dựng các shell commands thay vì để người dùng tự nhập. Nếu như phải sử dụng input, hãy thử liệt kê ra các giá trị được phép trong danh sách.

    3. Thực hiện review code kỹ lưỡng

    Kiểm tra việc gọi ra các lỗ hổng sẽ được coi như là một phần review code, hãy chắn chắn rằng team của bạn biết phải bảo vệ nó như thế nào

    4. Chạy với quyền hạn chế

    Đừng quên set quyền cho từng loại user nhé :v phải chắc cú rằng server xử lý, truy cập vào nơi nó cần thoy nha.

    5. Tránh gọi tất cả các lệnh cùng nhau

    ngôn ngữ lập trình hiện đại cho phép bạn đọc các tập tin, gửi email, và thực hiện các chức năng khác trên hệ thống. Sử dụng API bất cứ khi nào có thể, chỉ sử dụng shell khi nào cần thiết, điều này giúp giảm thiểu rủi do và cũng đơn giản hóa codebase của bạn

    Code Samples

    PHP

    Tạo command line trong Php khá phổ biến, dưới đây là 1 số cách để tạo chúng:

       shell_exec "ls -l"
    
       exec "ls -l"
    
       passthru "ls -l"
    
       system "ls -l"
    
       `ls -l`
    
    CÓ THỂ BẠN QUAN TÂM

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

    XEM THÊM
    thumbnail

    LPStack Server: Giải pháp thay thế XAMPP và MAMP năm 2026

    10.03.2026

    Bạn đã chán ngấy XAMPP hay MAMP chậm chạp? Khám phá LPStack Server – Môi trường Local Development siêu nhẹ của người Việt với Auto Vhost, Public Tunnel, chuyển đổi PHP 1-click và quản lý Database Native chuyên nghiệp

    thumbnail

    Hướng Dẫn Tạo Trò Chơi Cờ Caro Nâng Cao bằng HTML

    19.03.2025

    Chào các bạn! Trong bài viết này, chúng ta sẽ cùng nhau xây dựng một trò chơi Cờ Caro đơn giản nhưng có nhiều tính năng thú vị như giới hạn nước đi, pháo hoa khi chiến thắng, chọn chế độ chơi và đếm thời gian.

    thumbnail

    Grok AI: Giới thiệu chi tiết về chatbot của Elon Musk

    04.03.2025

    Grok là một chatbot AI tiên tiến, được phát triển bởi xAI, công ty do Elon Musk sáng lập. Ra mắt lần đầu vào tháng 11/2023, Grok được thiết kế để cạnh tranh với các mô hình AI nổi tiếng như ChatGPT

    thumbnail

    Hướng dẫn tạo Livechat trả lời bằng AI Grok của X

    04.03.2025

    Hướng dẫn kỹ thuật tạo Livechat AI bằng HTML, CSS, JavaScript và PHP Dưới đây là hướng dẫn từng bước để xây dựng một ứng dụng livechat AI đơn giản. Chúng ta sẽ có giao diện frontend (HTML, CSS, JS) và backend (PHP) xử lý tin nhắn.

    thumbnail

    Dịch vụ xử lý mã độc virus cá độ chèn liên kết ẩn trên website

    28.07.2024

    Gần đây nhiều website chính phủ, doanh nghiệp bị các đối tượng SEO mũ đen chèn các liên kết ẩn, chuyển hướng đến các website cá độ, cờ bạc, sex và nhiều nội dung nhạy cảm khác.