티스토리 뷰




이번 포스팅은 webhacking.kr 워게임 사이트 Challenge 16번 문제를 풀어보도록 하겠습니다.

Challenge를 풀어가는 순서는 번호 순이 아닌 점수 분배가 낮은 문제들부터 풀어나가고 있습니다.


Challenge 16번을 푼 환경은 Windows 10, Internet Explorer 11을 사용하였습니다. 이 문제의 경우 Internet Explorer 환경을 사용하길 권장합니다.


이번 포스팅의 Challenge 16번 문제는 아래 접근 방법과 기초 개념을 필요로 합니다.


1. HTML/PHP 코드 이해

2. ASCII 코드 이해



이제 Challenge 16번을 본격적으로 풀어보도록 하겠습니다.



16번 문제 사이트로 입장하면 보이는 화면입니다.


문제 페이지에는 큰 별 하나와 작은별들이 존재합니다.



먼저 문제 페이지의 소스 코드를 보겠습니다.



페이지 코드에는 mv() 함수와 kk() 함수를 볼 수 있습니다.


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
<body bgcolor=black onload=kk(1,1) onkeypress=mv(event.keyCode)>
    #onload 핸들러를 사용해 페이지 로드 시 kk() 함수 호출 -> 1,1 위치에 별 생성
    #onkeypress 핸들러를 사용해 사용자가 키보드 누를 때 mv() 함수 호출
 
function mv(cd)
{
kk(star.style.posLeft-50,star.style.posTop-50);
    #posLeft, posTop은 개체의 좌표값을 반환, 그에 각각 50을 뺀 값을 kk()의 x값과 y값으로 설정한다는 것
if(cd==100) star.style.posLeft=star.style.posLeft+50;
if(cd==97) star.style.posLeft=star.style.posLeft-50;
if(cd==119) star.style.posTop=star.style.posTop-50;
if(cd==115) star.style.posTop=star.style.posTop+50;
    #입력된 cd 값에 따라 개체의 좌표값을 변경 -> 별을 움직임
if(cd==124) location.href=String.fromCharCode(cd);
    #location.href를 통해 String.fromCharCode(cd) 로 이동
}
 
function kk(x,y)
{
rndc=Math.floor(Math.random()*9000000);
    #rndc 변수에 Math.floor(Math.random()*9000000) 값 지정
    #Math.floor는 소수값을 버리는 역할 -> 정수만 출력
    #Math.random은 난수 생성 역할, 9000000은 최대값 의미
document.body.innerHTML+="<font color=#"+rndc+" id=aa style=position:relative;left:"+x+";top:"+y+" onmouseover=this.innerHTML=''>*</font>";
    #onmouseover을 이용해 *을 지움
}
cs


이 코드 중에서 중점적으로 봐야할 곳은 mv() 함수입니다.


if 코드를 보시면 입력된 값에 따라 별이 움직이거나 페이지가 이동되는 것을 알 수 있습니다.


입력받는 cd 값과 비교하는 숫자는 ascii 코드로 아래 사진을 보시면 됩니다.


(이재욱님이 만든 ASCII Table)


cd 값과 비교할 숫자 100, 97, 119, 115, 124는 ascii table에서 d, a, w, s, |(기호)에 해당됩니다.



위 사진은 해당 문자만을 쉽게 보기 위한 표입니다.


이 기호를 제외한 알파벳 문자를 입력해보면 아래 사진과 같이 큰 별이 움직이는 것을 확인할 수 있습니다.

(Internet Explorer 사용을 권장드렸던 이유가 키를 눌렀을 때 Chrome의 경우 움직임이 없기에 권장드렸습니다.)




코드상의 마지막 124에 해당한 | 를 입력하면 페이지 이동이 발생하는 것을 알 수 있는데, 해당 기호를 입력하면 아래처럼 페이지가 이동되고, 패스워드를 확인할 수 있습니다.



해당 패스워드를 webhacking.kr 의 Auth 페이지에서 인증을 받아줍니다.



16번 문제에서 받은 패스워드 값을 Auth 페이지에서 인증을 받으면 정답이 인정되게 됩니다.



Challenge 페이지로 돌아가면 16번 문제의 Score 100을 획득하였음을 확인할 수 있습니다.




여기까지 봐주셔서 감사합니다.


다음 포스팅에서 봐요 :)

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함