파일을 다운받고, 사이트에 접속해보자
음....처음 보는 파일이다. 아마 도커 파일인 듯 하다.
우리가 아는 기본형 사이트가 아니라, 좀 더 특이한 사이트가 나온다. 한번 guest, guest로 로그인을 시도해 보자.
.
.
.
없다고 뜬다....다운로드 받은 파일에서 힌트를 찾아야 될 것 같다.
여기서, id=admin, pw=admin 이라는 게정의 존재를 확인할 수 있다.
admin으로 접속해 보자.
앞서, 문제의 힌트로, 로그인 후 organization을 한번 살펴보라고 나와 있다.
으으으으으으음.....
이것저것 눌러보다가, Settings 창으로 들어갔다.
조금 당황스럽지만 플래그 발견
grafana의 .ini 파일을 보면 확인할 수 있듯이, 기본 설정으 그대로 두면 아무리 기술적으로 보안이 좋더라도 뜷릴 수 있음을 알려주는 문제였다.
그와 별개로 플래그 찾는 방식이 너무 뜬금포였다.
제목 그대로, 날아다니는 글자열을 멈춰서 플래그를 알아내는 문제이다. 일단 파일을 다운받고, 사이트에 들어가 보자.
파일은 빈 파일이다. 진짜 아무것도 의미가 없다는 뜻
사이트에서 플래그를 찾을 수 있는듯하다.
ㅋㅋㅋㅋㅋㅋㅋ
말 그대로 문자들이 날아다닌다.
js 코드를 적절히 짜서, 이 문자들을 알아낼 수 있을듯
const img_files = ["/static/images/10.png", "/static/images/17.png", "/static/images/13.png", "/static/images/7.png","/static/images/16.png", "/static/images/8.png", "/static/images/14.png", "/static/images/2.png", "/static/images/9.png", "/static/images/5.png", "/static/images/11.png", "/static/images/6.png", "/static/images/12.png", "/static/images/3.png", "/static/images/0.png", "/static/images/19.png", "/static/images/4.png", "/static/images/15.png", "/static/images/18.png", "/static/images/1.png"];
var imgs = [];
for (var i = 0; i < img_files.length; i++){
imgs[i] = document.createElement('img');
imgs[i].src = img_files[i];
imgs[i].style.display = 'block';
imgs[i].style.width = '10px';
imgs[i].style.height = '10px';
document.getElementById('box').appendChild(imgs[i]);
}
const max_pos = self.innerWidth;
function anim(elem, pos, dis){
function move() {
pos += dis;
if (pos > max_pos) {
pos = 0;
}
elem.style.transform = `translateX(${pos}px)`;
requestAnimationFrame(move);
}
move();
}
for(var i = 0; i < 20; i++){
anim(imgs[i], 0, Math.random()*60+20);
}
코드를 분석해 보면, 이미지드을 정의하고, 함수를 통해 계속해서 이동하는 애니메이션을 부여했음을 알 수 있다.
for(var i = 0; i < 20; i++){
anim(imgs[i], 0, Math.random()*60+20);
}
이 코드 부분에서, math.random()*60+20은 각 이미지 애니메이션의 속도를 의미하는데, 이 부분을 그냥 1로 바꿔보자.
알아볼 수 있을 정도로 엄청 느려진 것을 확인할 수 있다.
하나하나 조합해서 flag를 찾을 수 있다. (참고로 x, s, o는 소문자, c는 대문자다. 그 외에는 이미지에 있는 문자 그대로 입력하면 된다.)
그 외에도, Sources 창에 들어가서
이미지를 확인할 수 있다.
이걸 여기 있는
순서대로 바꿔주면, flag 값을 찾을 수 있으나 시간도 걸리고 거추장스러워서 첫번째 방법으로 풀었다.