티스토리 뷰
이번 포스팅은 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을 획득하였음을 확인할 수 있습니다.
여기까지 봐주셔서 감사합니다.
다음 포스팅에서 봐요 :)
'Challenge > webhacking.kr' 카테고리의 다른 글
[webhacking.kr] Challenge 17번 문제 (0) | 2018.09.10 |
---|---|
[webhacking.kr] Challenge 15번 문제 (0) | 2018.09.05 |
[webhacking.kr] Challenge 14번 문제 (1) | 2018.09.05 |
[webhacking.kr] Challenge 6번 문제 (1) | 2018.09.04 |
[webhacking.kr] Challenge 4번 문제 (3) | 2018.08.22 |
- Total
- Today
- Yesterday
- ubuntu 18.04 LTS
- C 언어
- 백준 알고리즘
- tistory blog
- python 코딩
- 웹해킹
- 우분투
- c
- Google Adsense
- python
- webhacking
- webhacking.kr
- 우분투 18.04
- 구글 애드센스 후기
- Git Bash
- 구글 애드센스
- 구글 애드센스 승인
- 승인 후기
- ubuntu
- 구글 애드센스 설치
- GIT
- Ubuntu 18.04
- 백준 코딩
- Python 언어
- C 코딩
- Oldzombie
- github
- 백준
- 구글
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |