문제 설명을 보면 자바스크립트 게임이고, 시스템을 우회하여 클리어 할 수 있냐고 물어보는 것 같다.

 

문제 페이지를 보면 어떤 게임을 할 수 있는 것 같다.

게임을 플레이 해 보면 31337점을 얻어야 게임을 클리어 할 수 있을 것 같다.

 

소스코드를 보면 다음과 같이 난독화된 자바스크립트 코드를 확인할 수 있다.

https://beautifier.io/ 라는 사이트에서 자바스크립트 코드의 난독화를 해제할 수 있다.

코드를 잘 살펴보다 보면 다음과 같이 score 값을 조작할 수 있는 부분을 발견할 수 있게 된다.

저기에 BTunnelGame['getScore']() 를 지우고 목표 점수인 31337으로 수정한후

전체 코드를 웹 페이지의 콘솔창에 입력한 후 게임을 실행하면 게임오버시 플래그를 얻을 수 있다.

 

 

알게된 점 : 자바스크립트 코드 난독화를 해제하는 사이트

'Security & Hacking > Wargame' 카테고리의 다른 글

[Wargame.kr] DB is really GOOD  (0) 2019.09.02
[Wargame.kr] md5 password  (0) 2019.08.29
[Wargame.kr] WTF_CODE  (0) 2019.08.27
[Wargame.kr] login filtering  (0) 2019.08.25
[Wargame.kr] QR CODE PUZZLE  (0) 2019.08.25

문제 설명을 보면 이 프로그래밍 언어를 읽을 수 있냐고 물어본다.

 

문제에 들어가면 소스코드를 얻을 수 있다.

이 파일 확장자의 ws를 검색해 보았더니 whitespace 라는 프로그래밍 언어의 확장자라고 한다.

whitespace 언어는 2003년 만우절에 발표된 언어로 이 언어에서는 공백, 탭, 개행문자만이 의미를 가진다고 한다.

이 파일을 notepad로 열어보면 공백문자만이 존재하는것을 볼 수 있다.

이 파일의 내용을 복사하여 온라인 Decode 툴을 이용하면 flag를 얻을 수 있다

온라인 디코더는 https://vii5ard.github.io/whitespace/ 사이트를 이용했다.

 

알게된 점: whitespace 언어의 존재와 이 언어가 어떤 언어인지

'Security & Hacking > Wargame' 카테고리의 다른 글

[Wargame.kr] md5 password  (0) 2019.08.29
[Wargame.kr] fly me to the moon  (0) 2019.08.27
[Wargame.kr] login filtering  (0) 2019.08.25
[Wargame.kr] QR CODE PUZZLE  (0) 2019.08.25
[Wargame.kr] flee button  (0) 2019.08.25


문제를 보면 pat 라는 변수에 정규식을 저장하고 있다.

정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다.


그리고 그 밑에줄의 코드를 보면 preg_match() 라는 함수를 사용하고 있는데, 이 함수는 php에서 문자열을 매칭시키는 기능을 한다.

그래서 이 코드를 해석해보면 pat의 값을 val에 GET형식으로 매칭시켜주면 Password를 출력해 주는 것 같다.


다음은 PHP 정규식을 설명한 표 이다. (출처 : https://iam777.tistory.com/m/306)

이 표를 보고 정규식을 해석해보면 1에서 3 사이의 숫자 1개, a에서 f사이의 알파벳 5개, 그리고 \t는 tab를 의미하는데, url 인코딩 하면 %09 이다.

따라서 1aaaaa_.*ip주소.*%09p%09a%09s%09s/가 나온다.


이 변수를 val 파라미터 값으로 넘겨주면 문제가 해결된다.




'Security & Hacking > Wargame' 카테고리의 다른 글

[webhacking.kr] Challenge12  (0) 2019.06.06
[webhacking.kr] Challenge 15  (0) 2019.03.08
[webhacking.kr] Challenge 10  (0) 2019.03.06
[webhacking.kr] Challenge 3  (0) 2019.02.21
[webhacking.kr] Challenge 6  (0) 2019.02.18


10번 문제에 처음 들어가면 볼 수 있는 화면이다.

회색공간의 O에 커서를 가져가면 순간적으로 yOu라고 바뀌는 것을 볼 수 있다.


이 부분의 소스코드를 확인해 보면 다음과 같은 코드가 있다.

코드를 읽어보니 posLeft가 800이 되면 ?go 라는 페이지로 이동하게 되고(if(this.style.posLeft==800)this.href='?go='+this.style.posLeft"),

한번 클릭을 할 때 마다 posLeft가 1씩 증가한다. (onclick="this.style.posLeft+=1)

또한 현재 값은 0이다.


그러나 클릭을 아무리 많이 해도 화면상의 변화가 보이지 않는다.

구글링을 통해 확인해 봤더니 이 문제는 internet explorer 브라우저에서 적용된다고 한다....ㅠ


ie브라우저에서 문제를 다시 확인해보면 여러번 클릭했을 때 다음과 같이 'O' 글자가 이동하는 것을 볼 수 있다.

이것을 800번 누르면 문제가 해결되는것 같은데 800번 누르기는 매우 힘들기 때문에 한 번 클릭씨 800이 증가하게 소스코드를 수정해 주었다.


다음과 같이 800으로 변경하고 한번 클릭하게 되면 left 값이 800이 되어 문제가 해결된다.





'Security & Hacking > Wargame' 카테고리의 다른 글

[webhacking.kr] Challenge 15  (0) 2019.03.08
[webhacking.kr] Challenge 11  (0) 2019.03.07
[webhacking.kr] Challenge 3  (0) 2019.02.21
[webhacking.kr] Challenge 6  (0) 2019.02.18
[SuNiNaTaS] Forensic 31  (0) 2019.02.11

문제를 보면 퍼즐이 있는데 로직 퍼즐 인것 같다.

로직은 숫자만큼 비어있는 칸을 색칠하는 규칙을 가진 형태의 퍼즐이다.

빈 칸을 클릭해보면 검은색으로 칠해진다.

이 퍼즐을 풀어보면 다음과 같은 모양이 나온다.


밑에 gogo 버튼을 누르면 이름을 입력하는 칸이 나온다.

이 칸에 admin이라고 입력하고 write를 누르면 

이런 내용이 나왔다.

여기의 answer값을 인증시켜 보니 답은 아니였다.

다시 name 칸으로 돌아가 소스를 확인해 보니 입력 받는 곳의 코드는 이렇게 되 있었다.


value의 값을 참으로 해주기 위해 위 코드에 or 1 을 추가해 보았다.

1을 입력하고 write를 클릭하니 no hack 라고 나왔다.

or 이라는 문자열을 필터링하는 것 같다.


or과 같은 뜻을 가진 기호인 ||를 사용하여 코드를 수정해 보자.


수정 후 1을 입력하면 다음과 같은 내용이 나오고 answer값을 인증하면 문제가 해결된다.












'Security & Hacking > Wargame' 카테고리의 다른 글

[webhacking.kr] Challenge 11  (0) 2019.03.07
[webhacking.kr] Challenge 10  (0) 2019.03.06
[webhacking.kr] Challenge 6  (0) 2019.02.18
[SuNiNaTaS] Forensic 31  (0) 2019.02.11
[SuNiNaTaS] Forensic 30  (0) 2019.02.10

문제를 다운 받아보면 zip파일이 다운로드 되는데, 이 zip파일에는 암호가 걸려져 있어서 압축을 해제할 수 없다.

파일의 구조를 보기 위해 HxD로 열어보면 

파일 시그니처 시작점으로 부터 offset 06, 07번의 값이 09 08 로 되어 있는데 이는 암호화 된 zip 파일을 의미한다고 한다.

이 파일의 09 08 이라는 값을 모두 기본값인 00 00 으로 바꾸고 저장을 해 준다.

저장을 하고 압축을 풀면 3개의 파일이 나오는 데 

이중 zip파일을 다시 압축 해제하여 메모장에 있는 key값을 base64로 디코딩 하면 key 값을 얻을 수 있다.

dGE1dHlfSDR6M2xudXRfY29mZmVl -> ta5ty_H4z3lnut_coffee









'Security & Hacking > Wargame' 카테고리의 다른 글

[SuNiNaTaS] Forensic 30  (0) 2019.02.10
[SuNiNaTaS] Forensic 29  (0) 2019.02.09
[SuNiNaTaS] Forensic 26  (0) 2019.01.27
[SuNiNaTaS] Forensic 21  (0) 2019.01.24
[SuNiNaTaS] Forensic 19  (0) 2019.01.22

소스 코드를 보면

script에 indexOf()라는 함수를 사용한다. 그리고 바로 밑 줄을 보면 이 함수 값의 *30을 한 값을 저 텍스트 박스에 넣으면 되는것 같다.

indexOf() 함수는 괄호 안에 있는 문자열의 위치의 값을 반환한다.

".kr"이라는 문자열이 있는 곳은 이 페이지의 url 주소 이다.

이 페이지의 url 주소는 http://webhacking.kr/challenge/javascript/js1.html 이므로

.kr의 위치는 첫 위치를 0부터 세기 때문에 17번째에 있다.

17 * 30 = 510 이므로 510을 넣어보면 


260100이라는 password값을 알려준다. 


이 패스워드 값을 AUTH에 넣어주면 문제가 해결된다!



'Security & Hacking > Wargame' 카테고리의 다른 글

[SuNiNaTaS] Forensic 15  (0) 2019.01.19
[SuNiNaTaS] Forensic 14  (0) 2019.01.13
[webhacking.kr] Challenge 4  (0) 2018.12.28
[webhacking.kr] Challenge1  (0) 2018.12.12
[webhacking.kr] Challenge 5  (0) 2018.11.24

1번 문제의 소스코드를 보면 아래 부분에 위와 같은 부분이 있다. 


if문의 밑에 두줄을 해석해보면 COOKIE의 user_lv값이 6이상이면 COOKIE값이 1이 되고,

COOKIE의 user_lv 값이 5보다 크다면 문제가 해결되는것 같다.


크롬 확장 프로그램인 EditThisCookie를 실행해보면, 값에 초기 화면과 같은 값인 1이 있다.

이 값에 5보다 크며 6보다 작은 값을넣어주면 문제가 해결된다. 

Success!


'Security & Hacking > Wargame' 카테고리의 다른 글

[SuNiNaTaS] Forensic 15  (0) 2019.01.19
[SuNiNaTaS] Forensic 14  (0) 2019.01.13
[webhacking.kr] Challenge 4  (0) 2018.12.28
[webhacking.kr] Challenge 14  (0) 2018.12.14
[webhacking.kr] Challenge 5  (0) 2018.11.24

+ Recent posts