---
# System prepended metadata

title: ' PortSwigger - Command injection'

---

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