hack

Xin chào mọi người.
Mình xin lỗi vì Up bài này chậm 1 ngày vì tính chất công việc của mình.
Hôm này mình sẽ đăng bài về WriteUp White Box, thật sự cũng chẳng có gì khó cả, bởi vì White box nó sẽ cho ta đọc được Source Code của máy chủ, để ta có thể biết vị trí nào có lỗi, vì vậy hôm nay mình sẽ phân tích code giúp các bạn nhận diện được. Có lẽ mình sẽ không đủ giỏi, nhưng mình muốn chia sẻ với mọi người những thứ mình biết về WEB CTF.

Đây cũng chỉ là WEB CTF dành Cho newbie, bởi vì nó tổng hợp khá nhiều cái bài từ năm ngoái và năm nay, mình đã từng tham gia giải đấu cũ, nó là Apocalypse 2024 của WEB CTF Hack The Box.

Bài này theo giải cũ thì nó khá là easy dành cho newbie, mình cũng là newbie mà thôi, mình không dài dòng nữa, xin phép bắt đầu!

WriteUp TimeKORP

Trước tiên ta sẽ tải Source Code của nó về, và pass là Hack The Box.
Tiếp đó có thể tuỳ vào các bạn đó là mở file như nào, Visual_Studio_Code, SublineText. Mình có sẵn Visual_Studio_Code vì vậy mình sẽ dùng nó.
Sau đó ta sẽ đọc về phần build Docker, bởi vì chúng ta không biết nó là lỗi gì vì vậy cần đọc Build Docker và Docker Fileđể ví dụ nó là File Path Tranversal thì chúng ta biết được cụ thể Flag sẽ nằm ở đâu.

Chúng ta có thể thấy về sơ bộ thì nó vẫn giống với cách Build bình thường mà thôi, không có gì để xem cả chúng ta sẽ sang phần tiếp theo.

Tiếp theo là phần Router, ở đây chỉ là setting các thứ ở BackEnd để máy chủ vận hành như là Bộ điều khiển ( Controller ). Sau khi đọc mình thấy rằng nó cũng không có lỗi bảo mật nào cả, nó khá bình thường. Chúng ta sang phần tiếp theo.

Ở phần này chúng ta có thể thấy đó là TimeModel.php Sau khi đọc nó mình thấy rằng Function được Public nghĩa là chúng ta có thể thấy hoặc sử dụng ở phía bên ngoài, tiếp đó hãy đọc phần dưới, chúng ta sẽ thấy rằng, Command = ‘Date’ và đi kèm với Format nghĩa là date được Format ở phía bên ngoài WebSite CTF mà chúng ta có thể thấy được bởi vì Function Public nghĩa là công khai cái Function đấy. Theo như kinh nghiệm mình từng thực tập cho Cty quốc tế thì họ không bao giờ đề Command sẽ = Date, bởi vì Command là lệnh và nếu chúng ta ở bên ngoài thêm 1 cái gì đó nó sẽ được thực thi, và Bằng Date nghĩa là dựa trên Date đã máy chủ được Format chúng ta có thể thực thi lệnh từ xa vì vậy theo mình suy đoán nó là Prototype Pollution ( Ô Nhiễm Nguyên Mẫu ) hoặc là OS Command Injection ( Tiêm Lệnh Hệ Điều Hành ) . Chúng ta sẽ đi tới phần tiếp theo.

Mình phát hiện 1 điều rằng, tại sao Index.php lại add Controller vào đây, thường nếu làm như vậy sẽ tạo thành 1 Location Vulnerability ( Vị trí có lỗ hổng ) có thể bị Exploitaion ( Khai Thác) okay thì phần ở Router bạn có thể thấy rằng nó được tạo mới với yêu cầu GET với Location là / sau đó lại có thêm TimeController@index, ở đây mình xin phép không phân tích bởi vì quá basic cho những bạn đọc được code.

Tiếp theo đây là phần mọi người sẽ cảm giác hứng thú 1 chút đó là code ở giao diện bên ngoài, chúng ta có thể thấy rằng ở phần ”What’s the time?” và “What the date?” Ở 2 vị trí này nó có những Parameter Format và Value của nó được Format .
Haha, vậy mình đã đoán đúng rằng nó là 1 trong 2 lỗi, vì vậy sau khi thấy chuỗi Format mình đã chắc chắn nó là OS Command Injection. Bởi vì để cấu tạo lỗi Ô Nhiễm Nguyên Mẫu, thường sẽ là các CVE của các File JS ( JavaScript ) được thêm vào Sever và không update thành ra nó là Old Version nên sẽ xuất hiện các CVE , còn ở đây command = date + format và ở phía dưới nó có thêm $time = exec($this -> command). Nghĩa là trên date đã được format chúng ta có thể thực thi lệnh bởi vì exec là viết tắt của Execution.

Chúng ta có thể thấy rằng file được đặt tên giống tệp file được thêm vào Index.php là TimeController.php. Bạn có thể thấy nó được Format và dưới yêu cầu ( Request ) GET và ở sau là chuỗi được Format, sau đó được đẩy sang TimeModel.
Tiếp đó là từ Router sang View và tiếp tục từ Index sang time, và getTime. Nó sẽ lấy thời gian của bên người thiết lập Sever và ghi lên trên máy chủ. Okay thì bây giờ đã xác định được Vulnerability vì vậy chúng ta sẽ tiến hành Testing xem có chính xác hay không.

Hãy chọn mục Spawn Docker để máy chủ vận hành, sau đỏ khởi động Burp để tiến hành kiểm tra, bấm vào IP và Port để nó tự copy sau đó paste vào Browser.

Chúng ta có thể thấy đây là Time, okay chúng ta sẽ chuyển sang mục What’s the date? bởi vì như phân tích ở phần đấy chúng ta sẽ thực thi được lỗi OS Command Injection.

Okay mình đã chuyển sang và bạn có thể thấy trên parameter nó khá giống với Source Code mình cho bạn xem. Chúng ta sẽ thử xem nhé.
Đối với kinh nghiệm của mình thì trên url nó thay vì dùng ” ; ” chúng ta sẽ dùng là || Và ở bên trong sẽ là 2 dấu đóng ngoặc: ” để Command không bị thoát ra ngoài dính liền với Strings Format gây ra lỗi không thể thực thi.

Trong Format bạn có thể thấy nó là date. Mình sẽ chuyển nó sang Repeater cho việc gửi các Yêu cầu ( Request ) .

Chúng ta thêm ” và thêm || và kèm đó là Echo để xác định xem nó có thể thực thi hay không.

Các bạn thấy rằng mình đã dùng lệnh Echo nhưng nó không hề thành công và mình sử dụng Encode URL để cho Format date và Command của mình. Nó tránh xảy ra xung đột, không thể sử vận hành Command. Vì vậy mình sẽ sửa đổi 1 chút ở phần dưới .

Tiếp theo đây chúng ta sẽ test thử bằng Command ” ls” .

Dưới đây mình chỉ thêm 1 dấu ‘ và | để ngăn cách Value ở phía trước ngăn chặn không bị dính với nhau gây ra xung đột, nó khá giống với bài mình, từng đăng về phân tích Code của Hacker lỏ và Web này cũng khá dảk. Chính nó 1 cách thức tấn công OS Command Injection ở cấp độ đầu vào.

Mình sẽ thêm dấu # nhưng sẽ chuyển đổi thành Encode URL %23 , nó là kết thúc của 1 Command để tránh Command của mình send đến sever bị thoát ra ngoài làm xung đột.

Nếu dùng Command ” ls” được thì chúng ta sẽ get flag thật nhanh để tránh mất thời gian của mọi người.

Okay và End thôi.

Mình có 1 Trick dành cho các bạn không giỏi về code. Đó là vào phần Target của Burp sau đó bấm vào chọn máy chủ, tiếp đó là chuột phải và chọn phần Actively Scan This Host. Nó Automatic Scanning và thử tất cả các kiểu attack đã được có sẵn trong burp pro. Hãy chờ 1 khoảng thời gian, sau đó nó sẽ báo rằng có lỗi OS Command Injection mà không cần đọc Source Code. Đây là 1 mẹo!
Mình không khuyến khích điều đó, bởi vì nó không giúp bạn hiểu được Source Code Vulnerabilities!

Cảm ơn mọi người đã xem về bài WriteUp của mình.
Mọi người có thể góp ý kiến của mình ở phần bình luận, mình sẽ lắng nghe và sửa đổi nó. Cảm ơn đã đọc!

– Bài viết chỉ mang tính chất giáo dục, hiểu về Source Code Vulnerability nghiêm cấm sử dụng kĩ thuật tấn công dưới mọi hình thức đối với các máy chủ không được uỷ quyền pháp lí, chúng tôi không chịu trách nhiệm về hành vi bạn gây ra dưới mọi hình thức!!!

Trong tương lai gần mình sẽ thi và lấy Chứng nhận của Hack The Box là CPTS và CWEE.

NOTE: tối nay sẽ có bài WriteUp về Black Box, mình thường sẽ chơi Black Box, và theo như các giải đấu thì nó sẽ chẳng có 1 tí thông tin nào cả, vì vậy điều chúng ta cần làm là thu thập thông tin ( Gathering Information ).

User Avatar

TheWindGhost

Leave a Reply

Your email address will not be published. Required fields are marked *