# B, Command injection ![image](https://hackmd.io/_uploads/H1-UYx34lx.png) ## 1*, What is OS command injection? (Tiêm lệnh hệ điều hành là gì?) | **Mục** | **Nội dung chi tiết** | | --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | **Tên lỗ hổng** | OS Command Injection (Shell Injection) | | **Định nghĩa** | Lỗ hổng cho phép kẻ tấn công **chèn và thực thi lệnh hệ điều hành** trên máy chủ ứng dụng | | **Hậu quả** | - Toàn quyền truy cập ứng dụng và dữ liệu <br> - Tấn công mở rộng vào hệ thống khác (pivot attack) | | **Ví dụ URL** | `https://insecure-website.com/stockStatus?productID=381&storeID=29` | | **Câu lệnh gốc hệ thống chạy** | `stockreport.pl 381 29` | | **Payload độc hại được chèn** | `& echo aiwefwlguh &` | | **Lệnh sau khi bị chèn** | `stockreport.pl & echo aiwefwlguh & 29` | | **Ý nghĩa từng phần của kết quả** | - `stockreport.pl` không có tham số → lỗi <br> - `echo aiwefwlguh` thực thi và hiển thị ra <br> - `29` bị coi là lệnh và gây lỗi | | **Ký tự quan trọng** | `&` hoặc `;` dùng để **phân tách lệnh** trong shell | | **Tác dụng của dấu `&` cuối** | Giúp **tách biệt lệnh chèn khỏi phần sau**, tránh lỗi cú pháp khi thực thi | | **Cách phòng tránh (tóm tắt)** | - Kiểm tra và lọc đầu vào người dùng <br> - Tránh dùng trực tiếp tham số người dùng trong lệnh shell | | **Mục tiêu của attacker** | - Thử chèn lệnh để kiểm tra <br> - Nếu thành công → tiến hành khai thác sâu hơn (chiếm quyền, đánh cắp dữ liệu, v.v.) | ### Lab #1, OS command injection, simple case (Tiêm lệnh hệ điều hành, trường hợp đơn giản) ``1. PHÂN TÍCH ĐỀ BÀI:`` - "Phòng thí nghiệm 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." - Có lỗ hổng `OS Command Injection` (tiêm lệnh shell). - Lỗ hổng này nằm ở chức năng `kiểm tra hàng tồn kho` của 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." - Server chạy một dòng lệnh shell có chứa: - `productId` (ID sản phẩm) - `storeId` (ID cửa hàng) - "Để giải bài tập 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." - Bạn phải làm sao đó để server thực thi lệnh `whoami`. - Sau đó, bạn phải nhìn thấy kết quả của `whoami` trong phản hồi. ``2. Thử nghiệm injection:`` - Chèn vào `productId`: ```SQL productId=1|whoami&storeId=1 ``` - Phản hồi: ```SQL whoami: extra operand '1' Try 'whoami --help' for more information. /home/peter-vTyBcC/stockreport.sh: line 5: $2: unbound variable ``` - Kết luận: - `whoami` bị hiểu là một phần tham số, gây lỗi - ``$2`` bị thiếu → `script` không chạy đúng - ``❌ Injection thất bại tại productId`` ![image](https://hackmd.io/_uploads/r1nIo7pVxe.png) - Chèn vào `storeId`: ```SQL productId=1&storeId=1|whoami ``` - Phản hồi: ```SQL HTTP/2 200 OK Content-Type: text/plain peter-ig0Ylf ``` Kết luận: - `whoami` được thực thi thành công - In ra `user` hiện tại là `peter-ig0Ylf` - ``✅ Injection thành công`` ![Screenshot 2025-06-28 153247](https://hackmd.io/_uploads/H19Hh7TNlg.png) - 🧠 Phân biệt rõ 2 khái niệm: | Kiểu người dùng | Ví dụ | Giải thích | | ----------------------------------------- | ---------------------------------------- | --------------------------------------------------------- | | 👨‍💻 **User hệ điều hành (system user)** | `peter`, `www-data`, `ubuntu`, `appuser` | Dùng để chạy ứng dụng, script, xử lý kỹ thuật trên server | | 👥 **User web (người dùng ứng dụng)** | `alice@gmail.com`, `user123` | Là người đăng ký tài khoản, đăng nhập dùng chức năng web | - 🔍 Một user như peter thường dùng để: - Chạy `backend web` (PHP, Python, Node.js, Java...) - Thực hiện `cron job` (tác vụ lặp định kỳ) - Quản lý `file, log, cấu hình app` - Tránh chạy bằng `root` cho an toàn (theo nguyên tắc phân quyền) - 🔍 Phân tích chi tiết: | Thành quả đạt được | Ý nghĩa | | ----------------------------------------------------- | ----------------------------------------------- | | ✅ Thực thi được lệnh hệ điều hành (ví dụ: `whoami`) | ✅ Khai thác được lỗ hổng OS Command Injection | | ✅ Nhận được kết quả từ server | ✅ Có đường truyền dữ liệu 2 chiều (gửi và nhận) | | ✅ Biết được user hệ thống là `peter` | ✅ Bắt đầu hiểu môi trường bên trong server | | ✅ Có thể chạy tiếp lệnh khác (vd: `ls`, `cat`, `pwd`) | ✅ Khả năng leo thang, dò file, chiếm quyền... | ### Lab #2, Blind OS command injection with output redirection (Tiêm lệnh OS mù với chuyển hướng đầu ra) ``1. PHÂN TÍCH ĐỀ BÀI:`` | Mục | Nội dung | | --------------------- | ---------------------------------------------------- | | 💥 Lỗ hổng | Blind OS Command Injection trong chức năng feedback | | 📥 Dữ liệu người dùng | Được đưa vào shell command (vd: email, message) | | 🙈 Không thấy kết quả | Phản hồi không hiển thị output lệnh (`whoami`) | | 🛠 Hướng khai thác | Ghi kết quả vào file bằng `>` (output redirection) | | 📁 Thư mục ghi được | `/var/www/images/` | | 🌐 Truy cập kết quả | Qua URL ảnh: `/image?filename=output.txt` | | 🎯 Mục tiêu | Chạy `whoami`, ghi vào file, và truy cập đọc kết quả | ``2. BẮT ĐẦU LÀM BÀI:`` | **Bước** | **Mô tả** | **Chi tiết thực hiện** | | -------- | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **1** | Truy cập form feedback | Vào lab [🔗 link lab](https://0ac1008b0480b787818b5d5700eb004a.web-security-academy.net) → nhấn **Submit feedback** | | **2** | Nhập dữ liệu bình thường | Điền vào các trường:<br>• Name: `phong`<br>• Email: `abc@phong.com`<br>• Subject: `test`<br>• Message: `test` | | **3** | Chặn request bằng Burp Suite | Mở Burp → Bật **Proxy > Intercept ON** → Gửi form và **bắt request POST /feedback/submit** | | **4** | Chèn payload OS command injection | Trong request, thay dòng:<br>`email=abc@phong.com`<br>bằng:<br>`email=abc@phong.com%3Bwhoami%3E%2Fvar%2Fwww%2Fimages%2Fdola%3B`<br>(Lệnh: `whoami > /var/www/images/dola` đã **URL-encoded**) | | **5** | Forward request | Nhấn **Forward** → Response trả về `200 OK` hoặc `{}` là thành công | | **6** | Kiểm tra file kết quả | Mở trình duyệt hoặc Repeater truy cập:<br>`https://<lab-host>/image?filename=dola` | | **7** | Xem nội dung trả về | Nếu ra trang trắng:<br>• Chuột phải → **View Page Source**<br>• Hoặc dùng **Burp Repeater** để thấy nội dung | | **8** | Xác nhận kết quả | Nếu nội dung là `peter`, `www-data`, hoặc tên user hệ thống → ✅ **Lệnh `whoami` đã chạy thành công** | | **9** | Kiểm tra tính chính xác | Truy cập thử file chưa tồn tại (ví dụ: `/image?filename=123`) → thấy lỗi `"No such file"`<br>→ Chứng minh file `dola` là **do bạn tạo ra** | | **10** | Lab được đánh dấu "Solved" | Khi server xác nhận bạn đã truy xuất đúng kết quả của lệnh → **Lab hoàn thành** | ![Screenshot 2025-06-28 174147](https://hackmd.io/_uploads/Bkvgq8BHgg.png) ### Lab #3, Blind OS command injection with out-of-band interaction (Tiêm lệnh OS mù với tương tác ngoài băng tần)