Rick’s Website 2 BKSEC Writeup
Part 1: Mò path :)
Phiên bản 2 chắc chắn sẽ lợi hại hơn phiên bản trước rồi, khi vào site chúng ta không còn trang login như trước nữa, kể cả trang robots.txt
cũng không ><
Sau khi xem gợi ý 1 ta chắc chắn phải mò path site, sử dụng gobuster cùng với 7749 cái wordlists thì ta cũng tìm được 1 chiếc path có vẻ “vô dụng” là .git
Part 2: Discover .git
Sau khi bung nén file tải về
Phân tích
Cái gì mình không biết thì mình tra Google, sau khi tìm hiểu sơ lược về Git^[1], ở đây cụm từ “object database” kích thích chúng ta có thể sẽ exploit được vài thứ gì đó từ folder này
Tiếp tục tìm hiểu về
.git objects
^[2] ta biết được trong đó có các thư mục là info
, pack
và các thư mục có 2 chữ cái khác, mỗi thư mục này có 1 file có tên nếu ghép với tên thư mục trên sẽ được hash
Ví dụ: Ở thư mục 3d
bên trong là file tên là 0d3b034e747cfa6f3fba9846c3462aca808c33
ghép hai cái lại thành hash 3d0d3b034e747cfa6f3fba9846c3462aca808c33
Read contents
Sử dụng lệnh git cat-file -p <mã hash>
để đọc nội dụng file
Có vẻ đây là file Python của Flask (gần như là nắm được thóp rồi hehe), ném sang Visual nhìn cho đẹp, ta tìm được cái này :))
Vâng vậy là đã bắt được con path chuẩn không thể chỉnh hơn, vào xem nó có gì nào
Part 3: Đập phá Site :)
Quào! Trang đăng nhập quen thuộc đây rồi ><
Tiếp tục đọc Source code thì mình biết được, site dùng phương thức GET với username=password=admin
(site.com/MIFM-3d23d-fdsFM?username=admin&password=admin) thử đăng nhập xem nhò
Bump…
Ôi không vẫn là “Welcome guest” chết tiệc kìa … ><
Phân tích Source code
Kiểm tra lại điều kiện từ Source code ta phát hiện
Nôm na là địa chỉ remote phải bằng đúng địa chỉ local, sử dụng Burp để Fake IP trên Header thì đã bị thất bại :)
Fake IP liệu có khả thi??
Theo mình được biết thì remore_addr
của Flask không thể bypass bằng mấy cái header này được, có chăng cách spoof cũng sẽ rất phức tạp, mình chuyển sang hướng tiếp theo
Nửa đêm nếu đói thì hãy ăn bánh quy(づ ̄3 ̄)づ╭🍪~
Check Cookies và decode Base64 của session
ta thu được:
Phải chăng thêm {"rick":true}
vào rồi Encode lại là xong? Nồ nô không được đou, không tin thì thử xem, vì sao không được các bạn xem tại đây
Vậy là 2 cách đều không được :(
Như vậy cách duy nhất là quay trở lại file
.git
, lấy Gmail tác giả, 1 là blame, 2 là dùng mỹ nam kế để tác giả thương tình cap màn hình flag cho >< Nhưng mà mình cũng có giá của mình chứ, tiếp tục nào (❁´◡`❁)
Quay lại trang Wjbu kia, thì đối chiếu với Source Code, chắc chắn sau khi Submit nó sẽ thực hiện hàm này, đại khái là nó sẽ in cái link mình nhập thành PDF, nhưng không phải link nào cũng được .-.
Thứ nhất nó phải có “www.youtube.com” và không được có những từ trong Blacklist (local,spoof,.0,.1)
, nhưng do hàm in PDF được thực hiện bởi Server nên mình có thể tìm cách inject link đăng nhập vào, từ đó có thể tìm cách bypass remote_addr
It’s time to destroy :)
Bây giờ ta dùng tinyurl.com để tạo một link chuyển hướng cho: localhost:5000/MIFM-3d23d-fdsFM?username=admin&password=admin
OK giờ ném vào link kia submit là tinyurl.com/tvadeptrai/?www.youtube.com là thỏa mãn hết điều kiện để in PDF
Dành cho các bạn chưa hiểu tại sao lại là localhost:5000, thì đây, or 0.0.0.0 chắc cũng được :)
Và …
Flag: BKSEC{h0w_c4n_y0u_f1nd_m3}