Digital Dragons CTF 2023 (Qualifying Round)

Digital_Dragons_CTF_2023

CRYPTOGRAPHY WRITEUP

Author:

  • Pham Quoc Trung

Used Language:

  • Python3

Problem Solving:

MD5 Hash Collision

Generate the collision and uncover the two inputs, submit them to reveal the flag. The flag is a unique string that signifies your victory in this conquest.

Note : The flag format is typically CTF{...} where the content inside the curly braces is the solution to the challenge.

https://y2g1twq1.astonchain.com/

Giao diện của challenge là một trang web cho phép người dùng up lên 2 file:

Screenshot 2023-08-09 001106 Theo như mình thấy thì trang web sẽ so sánh 2 mã hash của 2 file mình up lên, nếu chúng giống nhau thì sẽ trả về flag. Vì vậy mình thử up cùng 1 file lên và kết quả trả về như sau:

Screenshot 2023-08-09 001427 Có vẻ không được (đương nhiên là thế rồi :v). Mình thử để xem bài có handle được trường hợp đó không chứ theo như giao diện trang web thì ở đây mã hash được sử dụng là MD5, thứ mà đã xuất hiện collision (xung đột). Nôm na là với hai chuỗi dữ liệu khác nhau, ta lại tạo ra được cùng một giá trị băm MD5. Mình sẽ sử dụng 2 file erase.exehello.exe trong link này để khai thác được lỗ hổng MD5 collision và lấy flag

Screenshot 2023-08-09 002103

Flag: CTF{Md5_h@$h_c0ll15i0n_1z_3zy!!!}

MooMoo

Can you crack this unpredictable secret language used between two drug cartels?

Note : The flag format is typically flag{...} where the content inside the curly braces is the solution to the challenge.

Attachment: MooMoommmoooo_1.txt

Bài này sử dụng một ngôn ngữ khá hay ho mà mình đã từng sử dụng để tạo ra một challenge trong giải HolaCTF 2023. Các bạn có thể xem write-up của mình tại đây. Nôm na thì nó là COW programming language, ngôn ngữ con bò :v. Mình sẽ sử dụng trang web này để decode nó

Screenshot 2023-08-09 002931

Flag: flag{c0ngratulat10ns_y0u_l3arnt_c0w_lang}

Xory

Xory Xory yes pappa, eating FLAG? No papa…

nc 114.119.185.67 1338

Attachment: chal.py

Bài này chỉ đơn giản là sử dụng XOR để mã hóa dữ liệu với KEY được tạo ra thông qua thuật toán random. Nhận thấy form của flag là "flag{", đủ 5 ký tự, mình sẽ XOR cipher với nó và lấy 5-bytes đầu thu được làm KEY xem sao

Và mình ra được flag lun :v Có vẻ đây vẫn là một chal khá basic.

Flag: flag{X0R_15_w34k_1f_y0u_kn0w_KPA}

Trial Challenge - Before Qualifying Round

This code challenges participants to decrypt a given block cipher ciphertext using a specific decryption algorithm.

Participants are required to understand the decryption process, implement the necessary functions, and apply their knowledge of bitwise operations and block ciphers to obtain the original plaintext.

Note : The flag format is typically flag{...} where the content inside the curly braces is the solution to the challenge.

Attachment: BlockCIpher.py

Ở đây, flag bị chia ra thành từng khối 4-bytes, mỗi khối được mã hóa bằng cách XOR khối đó với khối đó dịch phải 16-bits. Vậy phải giải mã như nào đây?

Ở đây, do khối được dịch phải 16-bits mà 1 khối là 32-bits, ta có thể thấy 16-bits đầu của khối ta thu được sẽ là 16-bits cuối của khối ban đầu sau khi dịch phải. Để dễ hình dung thì:

Giả sử: block: 01100111011000010000101100000111 block>>16: 00000000000000000110011101100001 => XOR: 01100111011000010110110001100110

Vậy ta hoàn toàn có thể tạo ra block>>16 từ kết quả và xor nó với kết quả để lấy được block ban đầu nhờ tính đối xứng của XOR. Ghép các khối đó lại, ta sẽ có được flag. Dưới đây là code python cho bài này

Flag: flag{w3lc0me_t0_34sY_CrypT}

© 2023,Pham Quoc Trung. All rights reserved.

Last updated