Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

White Security

[wargame.kr] dun worry about the vase 문제풀이 본문

Wargame Writeups/wargame.kr

[wargame.kr] dun worry about the vase 문제풀이

POSIX 2019. 1. 25. 14:59

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으로 로그인이 가능합니다.






Comments