[Web]LIT CTF 07/2021
Last updated
Was this helpful?
Last updated
Was this helpful?
Inspect to get flag
flag{l00k5_l1k3_y0u_f1n4lly_l3t_1t_g0}
Bài này điêu toa cực, cần-trôn U lên để Ctr+F được 2 part của flag, part còn lại tìm không ra, ngồi xem hết assets không có. Ngồi click hết href thì alert ra part 3 =))))
flag{1_l1k3_90s_w3bs1t3s_d351gns}
Xem header của response
Url ở trường Refresh là dẫn đến flag.
flag{th1s_is_b4d_pr4ct1c3_app4ar3nt1y}
Kéo source về đọc thấy rằng ở server có 3 eventName lắng nghe:
login
: Nhận teamName và password, check và xử lý chuỗi rất kỹ, response kết quả True/False
register
: Tương tự với login
và kết quả đăng ký hợp lệ lưu vào acounts[]
.
reqName
: Nhận id
và trả về tên của Team (teamName) không có kiểm tra (xác thực) gì cả.
Theo description thì flag là 1 teamName. Vậy đây là nơi mình có thể khai thác.
Tên team ta cần tìm có id
được gen ngẫu nhiên theo công thức Math.floor(Math.random() * 1000)
.
Như vậy id
nằm trong khoảng từ 0->999, ta có thể brute force attack =)))
Về phía client, sau khi đăng ký/đăng nhập thành công thì chuyển sang endpoint /contest
. Ở endpoint này có đoạn script:
Tóm tắt:
socket.emit("reqName",id)
để reuqest tên Team bằng id
.
socket.on("reqNameRes",(res)=>{$("#teamName").text(res);});
để luôn nhận response và in ra element có id #teamName.
Ban đầu mình hơi bối rối việc tạo script brute force hay brute force như nào với burpsuite. Và mình tự cảm thấy mình ngu xuẩn =))) Ơ sao không dùng chính javascript, cụ thể là console của webpage này để thực hiện luôn (được include hết thư viên, được gợi ý hết cách dùng).
Copy code này paste vào console luôn, kết quả nhận được:
flag{if_y0u_d1d_not_brut3force_ids_plea5e_c0ntact_codetiger}
Kéo source đọc thì đánh giá đây là dạng sqli union.
Lúc đầu bypass filter làm mình confused =)) Nhưng mình test trên local thành công không dùng ký tự bị filter:
PAYLOAD: ' UNION SELECT redacted FROM redacted WHERE redacted LIKE '
Giờ việc mình cần làm là bypass bằng các ký tự đã url encode:
Sau khi submit thì res 500 error =)))))) mình ngỡ ngàng bật ngửa. Mình ngây thơ quá, redacted
chỉ là cái tên thay thế để mình test trên local :( hic trầm kẻm 5s.
Vậy nên mình phải tìm chính xác tên table và column cái đã, PAYLOAD: '%09UNION%09SELECT%09sql%09FROM%09sqlite_master%09WHERE%09type%09LIKE%09'
.
Biết table và column thì inject lấy flag.
PAYLOAD: '%09UNION%09SELECT%09flag_column%09FROM%09flag_is_in_here%09WHERE%09flag_column%09LIKE%09'
flag{c0d3tig3r_g0t_gm_p3rf0rm4nc3_on_a_div_1_0rz}