Server side request forgery vulnerabilities (SSRF) 2

trieu.dev.da

Nguyễn Thanh Triều
II. Phân tích và khai thác các lỗ hổng Server-side request forgery
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
image.png

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.
image.png

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

image.png

Chú ý địa chỉ ban đầu được truyền tới hệ thống của trang web: 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
image.png

Đặ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:
image.png

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:
image.png

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
image.png

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

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 hoặc , 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:
1679106328735.png

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.
image.png

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
1679106370315.png

  • Bypass với decimal IP location
1679106379448.png

  • Bypass với rare address
1679106385846.png

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
1679106412045.png

  • Bypass bằng các ký tự đặc biệt
1679106433886.png

// 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
image.png

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 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.
image.png

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

image.png

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:
image.png

image.png

Chúng ta có thể bypass bước ngăn chặn này với rare address hoặc
image.png

image.png

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

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
image.png

  • 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/%61dmin
image.png

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


image.png
 

Đính kèm

Bên trên