ASCIS 2021
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 🥰🥰😘
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:
- Sau đó mình thử nhập số “00” thì ra được cái này:
- Ô 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:
- 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
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?
hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm 😑😑😐😑😑
- Thôi export object ra thử xem được gì?
- 😃
- File flag kìa anh em, bấm vô:
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}