Hi all, ngày 28/07/2018 vừa qua ĐH Duy Tân có tổ chức cuộc thi CTF vòng loại. Sau 18h căng thẳng team mình kết thúc ở vị trí thứ 7 (Bảng xếp hạng Việt Nam) và sau đây là WU của mình về các bài mà mình làm được.
- XOR
Ban đầu thì mình khá là rối nên là mình quyết định custom lại 1 xíu rồi print ra cho dễ hiểu
Và đây là kết quả:
Lúc này thì dễ hình dung hơn rồi, sắp xếp lại ta thấy:
Flag: 0 1 2 3 4 5 6 7 8 9
XOR
Key: 9 8 7 6 5 4 3 2 1 0
Ta có format flag: ISITDTU{ (8 char) => brute 2 char để có key => lấy key decrypt và check lại ta có flag
Here's my script: solve_xor.py
Nhìn qua bài này thì thấy close prime quá rõ rồi, nhưng mà tận 4 prime @_@
Không sao cả, fermat 1 phát ra được 2 prime ta đoán được là p*p3 và p1*p2.
Bây giờ tìm được 1 thằng p bất kỳ là factor được hết, mình sẽ chọn p1*p2 ( vì vẫn là close prime )
Cách tìm:
p2 > p1*10
<=> p2**2 > p1*p2*10
<=> p2> sqrt(p1*p2*10)
từ đó ta có p2 bằng cách tìm num = next_prime(sqrt(p1*p2*10)+i) (i chạy) + xét p1p2 % num == 0.
sau khi có p2 thì có p1, p3 = next_prime(p2*10) => p
có 4 prime => flag
Here's my script: solve.sage
3. Love CryptoGraphy
Đầu tiên ta tìm index của 'ISITDTU{' trong message dựa vào c[i] == c[i+2] && c[i+3] == c[i+5] => index 36
Nhận thấy S(83 acsii) T(84 acsii) U(85 acsii), dựa vào đó ta sẽ tìm được m,c,n
Tìm m:
c(T) - C(S) = 1110321085421447768275945874294757311370451552696385093861149689L > 0 và T > S (acsii) và C(T) - C(S) = m % n
=> m = 1110321085421447768275945874294757311370451552696385093861149689L
tìm n:
c(U) - c(T) = -1204876429695607233906200723727474340332744346831302520996263862L < 0 và U > T (acsii) và C(U) - C(T) = m % n
=> n = m - (c(U) - c(T)) = 2315197515117055002182146598022231651703195899527687614857413551L
tìm c:
sau khi có m,n thì ta tìm được c dễ dàng:
c(S) = (83*m + c) % n
=> k*n + c(S) - 83*m = c
brute k => c = 1449370084268958114154753941529504723862204623391963277996853964L
sau khi có m,c,n ta có flag:
Here's my script: solve.py
4. AES_CNV
challenge: link
Encryption steps:
- XOR mỗi block với secret
- AES_ECB
- XOR md5(block trước) (nếu là block đầu thì XOR với IV)
- base64
Decryption steps thì ngược lại
Bài này thì mình làm khá là nhanh, 5p đọc code, 5p viết script. Bài này khá giống bài CNS Service (AceBear Contest 2018). Bài này chỉ thêm 1 phần là trước khi enc AES_ECB thì xor từng block với secret.
Nếu server decrypt ra plain "Give me the flag" thì có flag
May mắn thay là Give me the flag nằm ở block 1 nên là encryption chỉ là XOR (XOR secret XOR iv) nên là 5p đọc 5p viết script =)))
Here's my script:
Kết: Đây là lần đầu mình vượt qua được vòng loại 1 kỳ CTF, và chắc chắn là mình sẽ đi Đà Nẵng để du lịch là chính =))). Thanks for reading.