ASCIS 2021

ASCIS 2021

2021, Oct 09    

Hé lô các anh em đã đến với vòng sơ khảo SVATTT 2021, nhân dịp team mình clear thì mình xin chia sẽ wu nha 🥰🥰😘

image.png

ASCIS 2021

CALL ME MAYBE (100 pts)

Problem

Jonathan captured something, while noob was calling his friend. Flag format: FLAG{XXX}

Cipher.txt

1209-852 1209-852 1209-852 1209-852 1477-770 1209-852 1209-852 1209-852 1209-852 1336-941 1336-697 1477-770 1477-770 1477-697 1336-941 1477-697 1477-770 1336-852 1477-697 1477-697 1477-697

Solve:

  • Dễ thấy đây là DTMF Code, vì thế vô link này để decrypt. Xong xuôi ta được 1 dãy số, đó chính xác là dãy mà mình bấm trên con điện thoại 9 nút hồi xưa ba mẹ mình hay xài!!!. Hoặc quăng vô link này nếu mà lười nữa 🙄

FLAG: FLAG{SMS AND DMTF}

~Dễ nhờ~

AES ECB crypto challenge (200 pts)

Problem

I have an oracle to help you solve this. Give me a string (in hexa), I will give you ciphertext of your string concat with our plaintext flag

http://125.235.240.166:20104/

Solve

Nhận xét:

  • Bấm vô link trên, ta được cái này: image.png
  • Sau đó mình thử nhập số “00” thì ra được cái này: image.png
  • Ô kê ngon thế là mình thử nhập 1 block 16 kí tự ‘a’ rồi chuyển sang hex xem sao? Và kết quả trả về như này: image.png
  • Bất ngờ không? He he block size = 16, à đoạn string trả về cho mình đúng như mô tả đã nói: sẽ encode hex input, sau đó ghép lại với plaintext, encrypt qua AES mode ECB rồi trả về cho mình kết quả như màn hình.
  • Về cơ bản mình đi qua khái niệm xíu nha: AES_ECB là mode decrypt theo từng block, như ở đây block size = 16. Vì thế nó sẽ cắt từng 16 chữ cái để đưa vào 1 lô tính toán phức tạp của AES, sau đó trả về từng ciphertext của từng block, block cuối cùng nếu không đủ 16 kí tự sẽ tiến hành padding
  • Vậy nghĩa là: nếu mình đưa vào 15 kí tự ‘a’, server sẽ encrypt block đầu tiên là 15 kí tự ‘a’ của mình + chữ cái đầu của FLAG!!! Nhưng mình làm gì biết đúng hay sai? Thay vào đó, mình đưa 15 kí tự ‘a’ + <1 chữ cái tạm gọi là input> + 15 chữ cái ‘a’. Nghĩa là nếu block đầu của mình (gồm 15 kí tự ‘a’ + input) == block thứ 2 (gồm 15 kí tự ‘a’ + kí tự đầu của FLAG) thì input mình nhập vào là đúng! Tới đây thì bruteforce thôi 😎😎😎
  • Gọi ans = “”, cứ mỗi kí tự đúng mình sẽ lưu vô đây để lúc tìm kí tự tiếp theo, mình sẽ dùng ans + input để tiếp tục brute force. Chi tiết mấy anh em xem ở code sau nha 🦾.

solve.py

import requests

BASE_URL = 'http://125.235.240.166:20104/'

flag = ""
print(len(flag))

for i in range(0, 64):
    for ichar in range(33,127):
        # get 
        r = requests.get(BASE_URL)

        # post
        char = chr(ichar)
        a = "a"*(64-i - 1) + flag + char + "a"*(64-i - 1)
        enc = a.encode().hex()
        data = {'input': enc}

        r = requests.post(BASE_URL + 'encrypt', data=data)
        getback = r.text
        if (getback[:128] == getback[128:256]):
            flag+=char
            print(flag)
            break

  • À quên mất 1 cái nhận xét là cái FLAG này nó dài hơn 32 kí tự =)) Chứng minh đơn giản lắm, cái này cho các anh em tự chứng minh nha nên mình để predict_flag có độ dài 64 cho thừa xíu (thừa còn hơn thiếu mà 🤡). Run chờ hơi lâu xíu

FLAG: ASCIS{AES_ECB_is_the_best_crypto!!!}

Simple For (100 pts)

Find the flag

image.png

Lưu ý: đây không phải crypto, đây không phải crypto

Solve:

  • Do bài này lắm người giải quá nên mình đâm vô đấm nó. Đây là file wireshark bình thường thôi, mình down về mở thử xem sao?

image.png

hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm 😑😑😐😑😑

  • Thôi export object ra thử xem được gì?

image.png image.png image.png image.png

  • 😃
  • File flag kìa anh em, bấm vô: image.png

oke ngu như tao còn làm ra hỏi sao 99% các đội giải được 🤡

FLAG: ASCIS{n3tw0rk_f0r3ns1c_1s_n0t_h4rd}