# B, Command injection

## 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``

- 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``

- 🧠 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** |

### 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)