Mô tả của đề :
-PDFify is an internal document generation service. You give it a URL, it fetches the page and renders a PDF preview.
-The flag is on the server. Find it.
-Its a web service so on port 80

- Đầu tiên ta có thể thấy được rằng trang web cho ta 1 form post url Chức năng là fetch cái url đó rồi render ra pdf preview
- trong html có 1 hint là : internal metrics service available on port 3000 (localhost only)
=> Ta có thể có hướng đi là sử dụng cơ chế của web này là fetch để có thể thực thi được các dịch vụ của localhost
Bước đầu : ta sẽ thử request đến http://example.com xem nó trả về gì

Nhìn vào ảnh ta có thể thấy được backend có resolve hostname sang IP
ta có hướng đi tiếp theo là hướng theo lỗ hổng SSRF (Server-Side Request Forgery)
Bước 2 : ta sẽ request thẳng vào localhost

kết quả cho thấy IP localhost bị chặn -> ta thử vài biến thể như http://2130706433:3000/ và http://0x7f000001:3000/ -> kết quả đều cho thấy là bị chặn hết
Bước 3: ta sẽ kiểm tra bypass bằng redirect
Ta sẽ thử url là : https://httpbin.org/redirect-to?url=http://127.0.0.1:3000/

Kết quả vẫn bị chặn và debug show 2 IP của httpbin và localhost
-> Ta sẽ không thực hiện request vào localhost bằng url nữa mà ta sẽ để cho PDF renderer fetch localhost
Bước 4: ta sẽ thử theo form là https://httpbin.org/base64/<base64_html>
Cụ thể ta sẽ mã hóa đoạn html sau <html><body><h1>CERFETEST</h1></body></html> rồi gửi thử

->Trả về nội dung giải mã từ base64
Bước 5 (bước cuối cùng): ta sẽ mã hóa đoạn html sau :
<html>
<body style="margin:0">
<iframe src="http://127.0.0.1:3000/" width="1200" height="2000" style="border:0"></iframe>
</body>
</html>
Rồi gửi request

-> Ta có thể thấy được có file flag.txt -> sẽ đổi url trong đoạn mã html thêm flag.txt
<html>
<body style="margin:0">
<iframe src="http://127.0.0.1:3000/flag.txt" width="1200" height="2000" style="border:0"></iframe>
</body>
</html>
Rồi gửi đi ta nhận được flag là : RAM{dns_r3b1nd_t0ctou_D1u4le_A_R3cord}
Hướng đi chính bài này của mình là :
- Xác định target nội bộ từ comment: localhost:3000
- Test direct SSRF: thất bại
3.Test redirect SSRF: thất bại
4.Tách riêng 2 pha:
-validate input URL
-render fetched HTML
5.Kiểm tra xem mình có kiểm soát được HTML external không
6.Dùng HTML external để buộc renderer fetch localhost
7.Từ directory listing đọc ra flag.txt