# Lỗ hổng phía máy chủ: Phần 6: OS command injection ## 1. OS command injection là gì? OS command injection - Tiêm lệnh hệ điều hành còn được gọi là tiêm shell. Nó cho phép kẻ tấn công thực thi các lệnh hệ điều hành (OS) trên máy chủ đang chạy ứng dụng và thường xâm phạm hoàn toàn ứng dụng và dữ liệu của ứng dụng. Kẻ tấn công thường có thể lợi dụng lỗ hổng tiêm lệnh hệ điều hành để xâm phạm các phần khác của cơ sở hạ tầng lưu trữ và khai thác các mối quan hệ tin cậy để chuyển hướng cuộc tấn công sang các hệ thống khác trong tổ chức. ## 2. Các lệnh hữu ích Sau khi bạn xác định được lỗ hổng tiêm lệnh hệ điều hành, việc thực hiện một số lệnh ban đầu để có được thông tin về hệ thống là rất hữu ích. Dưới đây là tóm tắt một số lệnh hữu ích trên nền tảng Linux và Windows: | Mục đích của lệnh | Linux | Windows | |------------------------ |-----------|-------------| | Tên người dùng hiện tại |whoami |whoami | | Hệ điều hành |uname -a |ver | | Cấu hình mạng |ifconfig |ipconfig /all| | Kết nối mạng |netstat -an|netstat -an | | Tiến trình đang chạy |ps -ef |tasklist | ## 3. Tiêm lệnh hệ điều hành Trong ví dụ này, ứng dụng mua sắm cho phép người dùng xem liệu một mặt hàng có còn hàng trong một cửa hàng cụ thể hay không. Thông tin này được truy cập thông qua URL: ``` https://insecure-website.com/stockStatus?productID=381&storeID=29 ``` Để cung cấp thông tin về kho, ứng dụng phải truy vấn nhiều hệ thống cũ. Vì lý do lịch sử, chức năng này được triển khai bằng cách gọi lệnh shell với ID sản phẩm và ID cửa hàng làm đối số: ``` stockreport.pl 381 29 ``` Lệnh này đưa ra trạng thái kho của mặt hàng được chỉ định và trả về cho người dùng. Ứng dụng không triển khai bất kỳ biện pháp phòng thủ nào chống lại việc chèn lệnh hệ điều hành, do đó kẻ tấn công có thể gửi dữ liệu đầu vào sau để thực thi lệnh tùy ý: ``` & echo aiwefwlguh & ``` Nếu đầu vào này được gửi trong tham số `productID`, lệnh được ứng dụng thực thi là: ``` stockreport.pl & echo aiwefwlguh & 29 ``` Lệnh `echo` này khiến chuỗi được cung cấp được lặp lại trong đầu ra. Đây là một cách hữu ích để kiểm tra một số loại lệnh tiêm OS. Ký tự `&` này là một dấu phân cách lệnh shell. Trong ví dụ này, nó khiến ba lệnh riêng biệt được thực thi, lần lượt từng lệnh một. Đầu ra trả về cho người dùng là: ``` Error - productID was not provided aiwefwlguh 29: command not found ``` Ba dòng kết quả đầu ra chứng minh rằng: - Lệnh gốc `stockreport.pl` được thực thi mà không có đối số mong đợi, do đó trả về thông báo lỗi. - Lệnh được đưa vào `echo` đã được thực thi và chuỗi được cung cấp sẽ được hiển thị ở đầu ra. - Đối số ban đầu `29` được thực thi như một lệnh, dẫn đến lỗi. Đặt dấu phân cách lệnh bổ sung `&` sau lệnh inject rất hữu ích vì nó tách lệnh inject khỏi bất kỳ lệnh nào theo sau điểm inject. Điều này làm giảm khả năng lệnh inject sẽ không được thực thi. ## Lab: Tiêm lệnh hệ điều hành, trường hợp đơn giản Bài lab này chứa lỗ hổng tiêm lệnh hệ điều hành vào trình kiểm tra kho sản phẩm. Ứng dụng thực thi lệnh shell chứa ID sản phẩm và ID cửa hàng do người dùng cung cấp và trả về đầu ra thô từ lệnh trong phản hồi của lệnh. Để giải bài lab này, hãy thực hiện lệnh `whoami` để xác định tên của người dùng hiện tại. ![Screenshot 2024-11-11 221907](https://hackmd.io/_uploads/rJNYls1Gkg.png) ![Screenshot 2024-11-11 222014](https://hackmd.io/_uploads/HJz6lokfyx.png)