White Security
[wargame.kr] dun worry about the vase 문제풀이 본문
wargame.kr 사이트의 27번째 문제입니다.
패딩 오라클 취약점을 알고 계신가요?
다소 생소할 수 있는 padding oracle 취약점에 대해 다루는 문제입니다.
php의 mcrypt 모듈로 생성가능한 암호문인데 자세한 내용은
https://laughfool.tistory.com/31
위 링크의 문서를 참고하면 좋을 것 같습니다.
페이지에 미리 입력된 그대로
로그인하면 위와 같은 메시지를 확인할 수 있습니다.
admin 계정으로 로그인하면 풀리는 문제인 것 같네요.
guest로 로그인 시에
설정되는 쿠키값이 눈에 띕니다.
URI 디코딩 과정을 거치면 위와 같이 변하는데
두 개의 '=' 문자로 보아
두 부분으로 쪼개진 base64 암호문으로 보입니다.
복호화를 거치면 각 8바이트 값을 띄고 있습니다.
여기서 a, b는 각각
Initialization Vector, Block #1
영역인데요.
로그인 된 계정명이 guest 였다는 것을 생각해 보면
Block #1의 상위 5바이트가 guest가 아닐까 추론해 볼 수 있습니다.
그리고 3바이트가 남았으니
모두 0x030303 으로 채워질 것으로 보입니다.
import base64 iv_encoded = 'ir5E8jqqJaQ=' data_encoded = 'I9WEH7Nr14E=' iv = base64.b64decode(iv_encoded) data = base64.b64decode(data_encoded) data_expected = b'guest\x03\x03\x03' data_target = b'admin\x03\x03\x03' interm = [ iv[i] ^ data_expected[i] for i in range(8) ] changed_iv = [ interm[i] ^ data_target[i] for i in range(8) ] print(base64.b64encode(bytes(changed_iv)))
Intermediary 값을 구하여
데이터를 guest\03\03\03에서 admin\03\03\03로 변경하면
admin으로 로그인이 가능합니다.
'Wargame Writeups > wargame.kr' 카테고리의 다른 글
[wargame.kr] jff3_magic 문제풀이 (0) | 2019.01.27 |
---|---|
[wargame.kr] login with crypto! but.. 문제풀이 (0) | 2019.01.25 |
[wargame.kr] QnA 문제풀이 (0) | 2019.01.24 |
[wargame.kr] dmbs335 문제풀이 (0) | 2019.01.24 |
[wargame.kr] lonely guys 문제풀이 (0) | 2019.01.23 |
Comments