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
로 복호화 된다면 Padding
은 True
가 될것이고 &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