DICECTF AND WHO KNOWS
Hế lô mn, dạo này mình lười quá không muốn ghi blog xíu nào :v Dạo này mình cũng hơi đần nữa, sú vãi
WEB1:web/dicedicegoose
Bài này mình không đi sâu vào, chủ yếu là đọc codejs thôi :v Muốn win thì player và goose sẽ có Ox và Oy trùng nhau
Và score phải bằng 9 nữa
Chú ý vào đây, isAdmin là 1 object -> giá trị user chúng ta có thể điều khiển được -> Chà, nghe có mùi prototype pollution ở đâu đây nhỉ <(")
Và nhận flag thôi, btw co the dung toString, constructor cung duoc
Player cứ trừ Oy và goose trừ Ox là được
Challenge ở client side, mình điều dễ dàng điều khiển được mấy cái tọa độ đấy. Cứ history.push([<tọa_do_player,toa_do_goose>]) trên console thế là đc :v Lười làm lại mấy bài ko code quá ;v
Web2:funnylogin
Okay lần này thì bài này mình có source :v Tự build local cho dễ làm :v
Xem sơ qua cấu trúc thư mục nhé :V
Lướt qua một chút, tại endpoint /api/login, flag chỉ đưa cho chúng ta nếu, tồn tại user[id] và isAdmin[user] phải trả về True. Dễ dàng có thể nhận ra nó user và pass ko sanitize nên có thể trigger được sqli :c
Hmm, user tận 100,000 người lận, challenge ko yêu cầu brute nên mình sẽ phải tìm cách khác
Chú ý vào đây, isAdmin là 1 object -> giá trị user chúng ta có thể điều khiển được -> Chà, nghe có mùi prototype pollution ở đâu đây nhỉ <(")
:3 Bây giờ việc chúng ta chỉ cần là inject một user với tên là __proto__ và pass sẽ trả về bất kì user nào cũng được.
user:__proto__
pass: ' or id ='1
câu query sẽ là
SELECT id FROM users WHERE username ='__proto__' AND password = '' or id ='1';
Và nhận flag thôi, btw co the dung toString, constructor cung duoc
Nhận xét
Đăng nhận xét