https://play.picoctf.org/practice/challenge/200?category=1&page=1
HTML과 CSS 소스에는 크게 중요한 내용이 없다고 판단하였다.
JS 소스 코드를 보자.
(async()=>{
await new Promise((e=>window.addEventListener("load", e))),
document.querySelector("form").addEventListener("submit", (e=>{
e.preventDefault();
const r = {
u: "input[name=username]",
p: "input[name=password]"
}
, t = {};
for (const e in r)
t[e] = btoa(document.querySelector(r[e]).value).replace(/=/g, "");
return "YWRtaW4" !== t.u ? alert("Incorrect Username") : "cGljb0NURns1M3J2M3JfNTNydjNyXzUzcnYzcl81M3J2M3JfNTNydjNyfQ" !== t.p ? alert("Incorrect Password") : void alert(`Correct Password! Your flag is ${atob(t.p)}.`)
}
))
}
)();
username은 YWRtaW4와,
password는 cGljb0NURns1M3J2M3JfNTNydjNyXzUzcnYzcl81M3J2M3JfNTNydjNyfQ와 같아야 한다.
위 두 문장이 답의 근거가 될텐데 btoa()를 통해 인코딩 되어있다.
따라서 나는 atob()를 통해 해당 문장들을 디코딩 해주었다.
console을 이용하여 작성해주었다.
picoCTF{53rv3r_53rv3r_53rv3r_53rv3r_53rv3r}