Challenge Description

Đáp án có dạng: HutechCtf{Cau_tra_loi}

Link: http://finallweb5.epizy.com/

web444

Thử thách có độ khó cao nhất trong nhóm Web Security. Ta nhấn Ctrl + U để view source của nó.

web441

Sau khi nhìn qua source của nó, ta cũng không tìm được manh mối nào gợi mở hướng đi tiếp theo.

Quay trở lại trang web chính của câu hỏi, ta đọc gợi ý:

Không có ai chào đón bạn ở thử thách này, làm cách nào để người khác chào đón bạn ở đây?

Vậy ta thử chặn bắt ở ngay quá trình truy cập trang web đề bài này để xem nó trả về những gì. Công cụ hỗ trợ trong việc này tôi dùng là Burp Suite. Ở trình duyệt Chrome, tôi cấu hình Proxy để nó đi qua Burp Suite trước khi gửi lên web server cũng như ngược lại.

Truy cập chrome://settings/ và tìm tới mục Advanced để truy cập tiếp tới Open proxy setttings.

web442

web443

Cửa sổ mới Internet Properties mở ra, chọn thẻ Connections và bấm vào nút LAN Settings.

web445

Thêm cửa sổ mới hiện ra, đánh dấu chọn vào mục Use a proxy server for your LAN (These settings will not apply to dial-up or VPN connections) và điền vào thông số giống như hình.

web446

Ở chương trình Burp Suite, chọn vào thẻ Proxy và chọn tiếp Options. Sau đó, ở mục Proxy Listeners, bấm Add và thêm vào thông số giống với như vừa cấu hình ở Internet Options.

web447

Sau khi cấu hình xong, bạn quay qua thẻ Intercept của Proxy và bấm vào nút Intercept is on để bắt đầu.

web448

Và sau khi thử truy cập lại trang web đề bài, ta thấy ở thẻ Intercept của Burp Suite đã chặn được luồng dữ liệu. Trong luồng dữ liệu ta thấy có biến welcome=no. Kết hợp với câu gợi ý của đề bài, ta thử đổi giá trị no thành yestắt Intercept is on để luồng dữ liệu được gửi đi tiếp.

Và lúc này, ta thấy trang web trả về một liên kết mới. Thử truy cập vào để xem có gì.

web450

Lại tiếp tục một trang mới yêu cầu nhập mật khẩu. Ở đây cho kèm cả view source code php xử lý nên ta bấm vào xem tiếp.

web451

Đoạn code này ràng buộc các điều kiện để dữ liệu nhập vào đảm bảo đúng với quy định. Ta phân tích một xíu về đoạn code này, bởi tôi viết loạt bài này để dành cho người mới chơi CTF có cái nhìn tổng quan về cách suy luận khi chơi CTF là như thế nào.

Đây là đoạn code PHP, kiểm tra những dữ liệu người dùng nhập vào để so sánh thỏa điều kiện sẽ cho xuất ra biến giá trị $flag lấy từ file flag.php đã được include ở đầu trang.

die(‘<font color=”Green”><b>’.$flag); sẽ xuất ra flag lấy từ include(‘flag.php’);

Ta quan sát, cả đoạn code kiểm tra xem trường input có name là ‘password’ có tồn tại không.

if (isset ($_GET[‘password’])) {

…..

}

Tiếp tục, nó kiểm tra xem đầu vào người dùng gõ có phải là dữ liệu số hay không, bằng cách dùng hàm ereg() của PHP. Các dữ kiện để siết chặt đầu vào gọi là pattern (“^[a-zA-Z0-9]+$”). Khi lập trình, việc này sử dụng khá nhiều với các trang web cho phép người dùng nhập dữ liệu lên, gọi là regular expression.

Tiếp tục, câu lệnh kiểm tra sử dụng hàm strpos() để kiểm tra xem dữ kiện nhập lên có chuỗi “@_@” không. Ta để ý điều kiện của nó, “!== FALSE” thì tức là TRUE rồi. Nếu thỏa mãn điều kiện trong chuỗi số ta nhập lên có chứa “@_@” thì sẽ trả về flag cho ta.

Kết hợp với điều kiện ở trên, ta kết luận: chuỗi nhập lên phải bắt đầu bằng số, có chứa (tồn tại) trong đó chuỗi “@_@” thì sẽ đúng điều kiện trả về flag.

Còn nếu sai, thì xuất ra thông báo:

echo ‘<font color=”red”>Mật khẩu không hợp lệ<br>’;

Như vậy, ta thử nhập một chuỗi bất kỳ:

123@_@ hoặc 123@_@789

Và không ngoài dự đoán, trang web đã trả về kết quả mới.

web452

Ở đây, nếu không muốn tuân thủ theo luật của code kiểm tra đầu vào, thì có thể bypass nó bằng cách sửa đi giá trị ở chỗ name của trường input bằng cách thêm dấu [] để vượt qua kiểm tra đầu vào.

web453

Như vậy, ta đã tiến thêm được một bậc tới con đường lấy flag. Quan sát kết quả mới có được, ta thấy có một đoạn dài các ký hiệu lạ xuất hiện lặp lại. Sau một lúc dò tìm trên mạng, tôi mới biết đây là ngôn ngữ Ook! (Joke esoteric) được tạo bởi David Morgan-Mar. Cái này nó cũng nhảm ngang ngửa Brainfuck (vốn là 1 chuỗi dài các ký tự – và + và . và < và > ).

Ta dùng một trang web hỗ trợ thông dịch nó ra để lấy kết quả.

web454

Kết quả thu được flag:

HutechCtf{ch4ng3_y0ur_l1f3}

VÕ TÌNH THƯƠNG

votinhthuong9@gmail.com