base64 인코딩된 FLAG를 간과
Base64 된 FLAG를 간파합니다.
당신은 CTF에 참여하고 있습니다. flag 형식은 flag{s0m4_fl4g}
입니다.
다음과 같은 데이터를 얻었습니다. 보면 base64임을 알 수 있습니다.
어느 것이 플래그인지 알 수 있습니까?
user: admin, password: YWRtaW5fZGF5bw==
user: root, password: dG9vcg==
user: victim, password: ZmxhZ3tiYXNlNjR9
user: y0d3n, password: eW9kZW55b2RlbnlvZGVueW9kZW4=
user: yoden, password: IGZsYWd7YmFzZTY0fQ==
모두 base64 디코딩하자.
user: admin, password: admin_dayo
user: root, password: toor
user: victim, password: flag{base64}
user: y0d3n, password: yodenyodenyodenyoden
user: yoden, password: Passw0rd!
flag가 밝혀졌습니다. 이와 같이 전부 base64 디코드하면 당연히 알 수 있습니다.
그러나 매우 귀찮고, 양이 많으면 거의 무리입니다. 자동화하면 되지만
이 기사의 목표는 어느 것이 flag인지를 판별할 수 있게 되는 것입니다.
flag 형식이 밝혀지면 어느 것이 flag인지 볼 수 있습니다.
base64 인코딩된 플래그
base64의 몇 가지 예를 살펴 보겠습니다.
flag{test} ==> ZmxhZ3tiYXNlNjR9
flag{hoge} ==> ZmxhZ3tob2dlfQ==
flag{y0d3n} ==> ZmxhZ3t5MGQzbn0=
flag{0123} ==> ZmxhZ3swMTIzfQ==
flag{fl4g_d4y0} ==> ZmxhZ3tmbDRnX2Q0eTB9
base64 이후의 문자열이 모두 ZmxhZ3
로 시작한다는 것을 알았습니까?
이때 flag{
까지의 base64 인코딩은 다음과 같은 상황입니다.

s
의 아래 2bit가 메워져 있지 않기 때문에 s
는 아직 변화할 가능성이 있습니다만, ZmxhZ3
까지는 확정됩니다.ZmxhZ3
로 시작하는 문자열을 base64 디코딩하면 플래그를 얻을 수 있습니다.
이것이 flag 형식이 밝혀지고 flag 만 base64로 인코딩 된 경우 구별되는 방법입니다.
그러나 이 방법은 flag 이전에 문자가 포함된 경우에는 사용할 수 없을 가능성이 있는 문제가 있습니다.
flag 이전에 문자가 포함된 경우
flag{base64} ==> ZmxhZ3tiYXNlNjR9
aflag{base64} ==> YWZsYWd7YmFzZTY0fQ==
abflag{base64} ==> YWJmbGFne2Jhc2U2NH0=
abcflag{base64} ==> YWJjZmxhZ3tiYXNlNjR9
flag 이전의 문자수가 3의 배수일 때는 ZmxhZ3
가 있습니다만, 선두가 아니기 때문에 찾기 어렵습니다.
flag 이전의 문자수가 3의 배수가 아닌 경우, bit가 어긋나 버리기 때문에 완전히 다른 결과가 되어 버렸습니다.
역업으로 해결합니다.

노란 곳이 전후의 문자에 영향을 받지 않는 범위입니다.ZmxhX3
, ZsYWd7
, mbGFne
중 하나가 있어야하므로 검색에서도 찾을 수 있습니다.
3개가 없는 경우는 자동화 코드에서도 쓰고 한쪽 끝에서 base64 디코딩할 수밖에 없을 것 같네요.
flag의 힌트가 쓰여져 있을 뿐인 경우라든지 있을지도.
후기
이 기사 에서 base64에 대해 자세히 설명합니다.
매우 참고로 했습니다.
flag 포맷이 없는 경우, 너무 짧은 경우는 사용할 수 없네요.
flag 이외가 포함된 패턴을 사용한 것은 자신도 아니지만,
「과연」이 되어 주시면 다행입니다.
발상만 해도, 머리의 한쪽 구석에라도 두어 주세요.
덧붙여서 flag{flag{flag{
를 base64 인코딩하면 ZmxhZ3tmbGFne2ZsYWd7
입니다.
조금 전의 3가지
끝까지 읽어 주셔서 감사합니다.
Reference
이 문제에 관하여(base64 인코딩된 FLAG를 간과), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/y0d3n/items/ca3181876bc5ddafd8c1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
user: admin, password: YWRtaW5fZGF5bw==
user: root, password: dG9vcg==
user: victim, password: ZmxhZ3tiYXNlNjR9
user: y0d3n, password: eW9kZW55b2RlbnlvZGVueW9kZW4=
user: yoden, password: IGZsYWd7YmFzZTY0fQ==
user: admin, password: admin_dayo
user: root, password: toor
user: victim, password: flag{base64}
user: y0d3n, password: yodenyodenyodenyoden
user: yoden, password: Passw0rd!
flag{test} ==> ZmxhZ3tiYXNlNjR9
flag{hoge} ==> ZmxhZ3tob2dlfQ==
flag{y0d3n} ==> ZmxhZ3t5MGQzbn0=
flag{0123} ==> ZmxhZ3swMTIzfQ==
flag{fl4g_d4y0} ==> ZmxhZ3tmbDRnX2Q0eTB9
flag{base64} ==> ZmxhZ3tiYXNlNjR9
aflag{base64} ==> YWZsYWd7YmFzZTY0fQ==
abflag{base64} ==> YWJmbGFne2Jhc2U2NH0=
abcflag{base64} ==> YWJjZmxhZ3tiYXNlNjR9
Reference
이 문제에 관하여(base64 인코딩된 FLAG를 간과), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/y0d3n/items/ca3181876bc5ddafd8c1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)