Wargame.kr 포스트는 이해한 내용과 복습을 위한 목적으로 작성되었습니다.
이번 포스트에서는 dun worry about vase 문제에 대한 이해와 풀이를 진행해보도록 하겠습니다.
이번 문제는 사실 살짝 쫄아 있었는데, 생각보다 어렵지 않은 문제였습니다.
|
문제 이해 |
문제에서 바로 Oracle Padding에 대해 알고 있는지 물어보고 있습니다.
이 문제를 보고 바로 걱정했던 건..
오라클 패팅으로 브루트포싱을 어떻게 할까에 대한 고민이었습니다.
일단 걱정은 접어두고 문제를 살펴봤는데,
문제에서 나타난 Session은 L0g1n이라는 세션명으로, 계속해서 바뀌는 것을 볼 수 있었습니다.
아이디와 패스워드는 guest/guest로 변함이 없는데 왜 변하는지 잠시 고민하다 내놓은 뇌피셜은,
CBC 모드로 암호화할 때 사용하는 IV가 계속 달라지는 것이 아닐까 하는 합리적 의심을 해보았습니다.
일단 변하지 않도록 쿠키값만 슬쩍해서 공격을 수행해보도록 했습니다.
|
문제 풀이 |
오라클패팅에 대한 개념을 이해하고, %3D가 두 개가 보이는 것을 확인하고, ID와 PW에 대한 IV가 각각 다르구나로 생각했습니다.
일단 ID값이 5Bytes로 guest이고, PW에 들어간 값도 동일했으니, 암호문인 쿠키값의 길이를 측정해보았습니다.
Base64를 디코딩 후 길이를 재보니 각각 8바이트였습니다.
그렇다면 예상해보면 guest\x03\x03\x03과 같이 패딩이 되어 있을 것이라 생각했습니다.
이후 공격코드를 작성해서 풀이를 진행해보았습니다.
import base64 def bytesBlockXOR(block1, block2, length): resBlock = b'' for idx in range(length): resBlock += bytes([block1[idx] ^ block2[idx]]) return resBlock ID = '1h3ooS1xGJs=' PW = 'G3jfbRJUnj4=' ID_Bytes = base64.b64decode(ID) PW_Bytes = base64.b64decode(PW) ID_IV = bytesBlockXOR(b'guest\x03\x03\x03', ID_Bytes, 8) PW_IV = bytesBlockXOR(b'guest\x03\x03\x03', PW_Bytes, 8) print('[+] ID_IV : ', ID_IV) print('[+] PW_IV : ', PW_IV) ADMIN_ID_ENC= bytesBlockXOR(b'admin\x03\x03\x03', ID_IV, 8) print("[+] ADMIN ID ENCRYPTED : %s" % base64.b64encode(ADMIN_ID_ENC)) # 1h3ooS1xGJs%3DG3jfbRJUnj4%3D # 0AzguzdxGJs= # 0AzguzdxGJs%3DG3jfbRJUnj4%3D
일단은 ID에 대한 암호문은 구했지만 PW에 대한 암호문은 PW를 모르니....
일단 ID 암호문만 바꿔줘보자 했었는데,
ID 만 바꿔줘도 admin으로 풀리더군요.
'WARGAMES > wargame.kr' 카테고리의 다른 글
[Wargame.kr] Level 26 - dll with notepad (0) | 2020.01.16 |
---|---|
[Wargame.kr] Level 25 - QnA (0) | 2019.12.19 |
[Wargame.kr] Level 24 - Crypto Crackme Basic (0) | 2019.06.18 |
[Wargame.kr] Level 23 - dmbs335 (0) | 2019.06.17 |
[Wargame.kr] Level 22 - keypad_crackme (0) | 2019.06.14 |
[Wargame.kr] Level 21 - crack crack crack it (0) | 2019.06.11 |
[Wargame.kr] Level 20 - lonely_guys (0) | 2019.06.11 |
[Wargame.kr] Level 19 - ip log table (0) | 2019.05.17 |