Giới Thiệu

Command injection là việc lạm dụng hành vi của một ứng dụng để thực thi các lệnh trên hệ điều hành, với cùng quyền hạn mà ứng dụng đó đang chạy. Lỗ hổng này còn được gọi là Remote Code Execution (RCE) vì kẻ tấn công có thể lừa ứng dụng thực thi các payload mà họ cung cấp mà không cần truy cập trực tiếp vào máy.

Phát Hiện Command Injection

Lỗ hổng này tồn tại do các ứng dụng thường sử dụng các hàm trong ngôn ngữ lập trình (như PHP, Python, Node.js) để truyền dữ liệu và thực hiện các lời gọi hệ thống. Ví dụ, một ứng dụng lấy đầu vào từ một trường để tìm kiếm một mục trong tệp.

Kẻ tấn công có thể lạm dụng điều này bằng cách chèn các lệnh của riêng mình để ứng dụng thực thi, thay vì thực hiện hành động dự kiến.

Khai Thác Command Injection

Chúng ta có thể xác định command injection có thể xảy ra hay không dựa vào hành vi của ứng dụng. Các toán tử shell như ;, &, && có thể được sử dụng để kết hợp và thực thi nhiều lệnh.

Có hai loại Command Injection:

LoạiMô tả
BlindKhông có đầu ra trực tiếp từ ứng dụng. Cần phải điều tra hành vi của ứng dụng (ví dụ: độ trễ thời gian với lệnh ping hoặc sleep) để xác định payload có thành công hay không.
VerboseCó phản hồi trực tiếp từ ứng dụng. Ví dụ: kết quả của lệnh whoami được hiển thị trực tiếp trên trang web.

Các Payload Hữu Ích

Hệ điều hànhPayloadMô tả
LinuxwhoamiXem ứng dụng đang chạy dưới quyền user nào.
LinuxlsLiệt kê nội dung thư mục hiện tại.
Linuxping, sleepGây độ trễ để kiểm tra blind command injection.
LinuxncTạo reverse shell để điều khiển máy chủ.
WindowswhoamiXem ứng dụng đang chạy dưới quyền user nào.
WindowsdirLiệt kê nội dung thư mục hiện tại.
Windowsping, timeoutGây độ trễ để kiểm tra blind command injection.

Cách Khắc Phục

  • Hạn chế các hàm nguy hiểm: Các hàm như exec, passthru, system trong PHP rất nguy hiểm nếu không được kiểm tra đầu vào cẩn thận.
  • Sanitize đầu vào: Chỉ định định dạng hoặc loại dữ liệu mà người dùng có thể gửi. Ví dụ, chỉ chấp nhận dữ liệu số hoặc loại bỏ các ký tự đặc biệt như >, &, /.

Bypass Các Bộ Lọc

Các bộ lọc có thể được bypass bằng cách sử dụng các kỹ thuật khác nhau, chẳng hạn như sử dụng giá trị thập lục phân (hex) của một ký tự bị cấm.