babycrypto1
영어로 쓸려 했는데 뭔가 쉽게 안써진다..
test command cipher text가 주어지고,
동일한 aes key를 사용하는, vi를 입력해서 cipher text를 만들 수 있는 거가 있다.
50행에서 토큰은 그대로 사용되기 때문에 앞쪽 블록은 그대로 사용하고 command만 들어가있는 마지막 블록만 생각하면 된다.
마지막 블록을 변화시키면 cipher text의 마지막 블록에만 변화가 생기는데, 이를 이용하여 "show" 가 들어간 암호화된 블록을 만들어 바꿔치면 된다.
마지막 블록을 만들 때 plain text와 xor 하는 것을 vi로 보면, vi는 cipher text N-1번째 블록값이 된다.
plain text 를 "show"로, vi를 cipher text 마지막 블록을 넣어 cipher text 한 블록을 만들어서
처음 주어진 test command cipher text의 마지막 블록과 바꾸어서 넣어주면
복호화 과정에서 앞 블록은 그대로이기 때문에 token은 그대로 복호화가 되고 마지막 블록은 show로 복호화가 이루어 진다.
babycrypto2
1과 다른 점은 COMMAND가 맨 처음 블록으로 이동하였고, encryption 과정이 없다는 것이다.
어차피 cipher text의 앞 블록이 바뀌면 그 다음 블록에도 영향을 주기 때문에 블록 바꿔치기는 안된다.
다만 decryption 과정을 보면, 맨 앞블록은 block cipher decryption 이후에 IV와 xor을 수행한다.
그리고 복호화에 사용할 IV값은 우리가 넣어줄 수 있다. 이 IV 값을 바꿔주어 맨 앞 plaintext가 우리가 원하는 값이 되도록 하면 된다. ciphertext는 그대로 사용할 것이기 때문에, block cipher decryption의 결과값은 고정이다.
원래의 복호화 과정을 생각한다면, IV에는 처음 제공되는 IV값이 들어가며, block cipher decryption의 결과값은 IV xor plaintext(test)이며, 우리가 원하는 plaintext로 만들어주는 IV값은 IV xor plaintext(test) xor plaintext(show) 가 된다.
다만 plaintext(show)를 만들 때 앞의 PREFIX값과 뒤에 token 3byte를 생각해야 한다.
그렇게 해서 IV값을 만들어서 IV + data 복호화 돌려주면 된다.
'CTF Write Up' 카테고리의 다른 글
Securebug.se CTF Loki 2021 write up (0) | 2021.07.19 |
---|---|
Securinets CTF Quals 2021 write up (0) | 2021.03.22 |
Codefest CTF 2021 Write up (0) | 2021.03.20 |
UTCTF 2021 write up (0) | 2021.03.15 |
vishwaCTF 2021 Write up (0) | 2021.03.15 |