CBC★★★★★★

Att3ck the CBC Mode
link

초반에 id를 입력하는것은 똑같지만 ecb처럼 id로 guest&admin=을 입력하게 되면 You cannot use & in id라고 뜨게 된다.

그래서 &admin=1&id=1로 id를 정했다.

id를 한글자로 한 이유는 로그인하게 되면 평문이id=&admin=1&id=1&admin=0로 이루어지므로 딱 24글자가 되기 때문이었다.

이제 로그인을 해보게 되면 다음과 같은 Cookie가 주어진다.

평문 : id=&admin=1&id=1&admin=0
2e80450c80cab06c2d2642c4e548fb25408c5a0d6f808d8a6e47dca737e996f7

잠시 나누어 보면
id=&admi : 2e80450c80cab06c

n=1&id=1 : 2d2642c4e548fb25

&admin=0 : 408c5a0d6f808d8a

Padding : 6e47dca737e996f7

로 이루어 지게 된다.

이 문제를 풀면서의 아이디어는 bit flipping으로 뒤의 Padding값을 만족 시켜주지만 bit flipping으로 인한 복호화 값이 깨지는것을 이용하기로 했다.

&admin=0의 맨뒤의 8a부분을 조작시켜주기로 했다. 이 부분을 조작함으로써 Padding의 맨 뒷비트가\x01로 복호화 된다면 PaddingTrue가 될것이고 &admin=0의 블럭은 암호화된값이 조작되었으므로 정상적인 값이 복호화 되지 않을것이다.

그렇게 해당하는 부분을 Brute Force 해주기로 했다.

import requests

for i in range(0x00, 256):
    cookies = {'auth': '2e80450c80cab06c2d2642c4e548fb25408c5a0d6f808d%02x6e47dca737e996f7' % (i)}
    r = requests.request('GET', 'http://ubuntu32.kaist.ac.kr/recruit2017/cbc.php', cookies=cookies)

    print cookies, r.text
    data = r.text
    if 'error' not in r.text:
        exit()

Cookie : 2e80450c80cab06c2d2642c4e548fb25408c5a0d6f808d836e47dca737e996f7

Flag : GoN{Fl1p_th3_bit!}

results matching ""

    No results matching ""