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ại | Mô tả |
---|---|
Blind | Khô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. |
Verbose | Có 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ành | Payload | Mô tả |
---|---|---|
Linux | whoami | Xem ứng dụng đang chạy dưới quyền user nào. |
Linux | ls | Liệt kê nội dung thư mục hiện tại. |
Linux | ping , sleep | Gây độ trễ để kiểm tra blind command injection. |
Linux | nc | Tạo reverse shell để điều khiển máy chủ. |
Windows | whoami | Xem ứng dụng đang chạy dưới quyền user nào. |
Windows | dir | Liệt kê nội dung thư mục hiện tại. |
Windows | ping , timeout | Gâ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.