7번째로 푼 문제이다~!

이 문제는 굉장히 흥미로웠다.!



(WTF_CODE 문제)



아래는 문제 페이지다.




(문제페이지)



여기서 소스코드를 다운받아서 열어보면



(소스코드)



...
?

띠용 아무것도 안보인다.

아하! 이게 헥스에디터로 봐야하나? HxD로 열어주니



(소스코드)



모스부호인가??
모스부호면 패스해야하나.. 싶었는데 ws 확장자가 뭔지 궁금해서
검색해보니 문제의 의도를 쉽게 알 수 있었다.
바로 화이트스페이스 라는 기괴한 프로그래밍 언어를 소개하는 문제인거 같았다.




(화이트스페이스)



아..! 이문제를 풀면서 이런 프로그래밍 언어도 있구나!
진짜 재밌는 언어네 라고 웃으면서 알아보았던 문제이다.

이제 재밌게 내용을 봤으면 풀어야할 시간...!

공백과 탭과 개행문자를 일일이 해석해야하는건가?.. 떨려왔지만
convert해주는 사이트를 발견해서..(감사합니다.)
행복했다.




(변환 사이트)



이 사이트에서 변환안해도 바로 실행시킬 수도 있었는데
실행시키니 창이 하나떴다.



(문제 해결)



신기했던 문제이다.


'WarGame > 500 Project' 카테고리의 다른 글

(9/500) Wargame.kr - md5_compare  (0) 2017.04.13
(8/500) Wargame.kr - fly me to the moon  (0) 2017.04.13
(6/500) Wargame.kr - flee button  (0) 2017.04.11
(5/500) Wargame.kr - QR Code Puzzle  (0) 2017.04.11
(4/500) CodeShell.kr - dummy 64  (0) 2017.04.10


6번째로 푼 문제이다!
사실 이 사이트를 시작하려고 한 이유가 처음 이사이트에 들어와서 아무문제를 클릭한 문제 중 이 문제였는데 엄청 재밌어 보여서 가입하고 풀기 시작했다.!

자바스크립트 우회인줄 알았지만 생각외로 간단하게 풀렸다. :)



(flee button 문제)



문제 시작전 ' 난 저걸 잡을수없어요!' 라고 귀여운?멘트가 나온다.



(문제 스타트)




(문제 페이지)



문제 페이지를 보면 클릭미가 나오고 마우스를 가져가 클릭하려고 해도 저 버튼이
막 날라댕긴다... 클릭을 못한다 ㅜㅜ

관리자 도구를 열어서 확인해보니.. 헉...
스크립트가 난독화 되어있다. 풀면 쉽게 풀 수 있을 듯 보였지만 그보다 내 눈에 가장 먼저 들어온 것은...



(소스코드)



위 빨간색 표시이다..!
클릭미를 누르면 key변수에 ca3e를 담아서 전송한다??

그건 나도 할 수 있는데??
실제로 해보니



(문제 해결)



flag가 실제로 나왔다..!ㅎㅎ

나의 호기심을 자극했던 문제



'WarGame > 500 Project' 카테고리의 다른 글

(8/500) Wargame.kr - fly me to the moon  (0) 2017.04.13
(7/500) Wargame.kr - WTF_CODE  (0) 2017.04.12
(5/500) Wargame.kr - QR Code Puzzle  (0) 2017.04.11
(4/500) CodeShell.kr - dummy 64  (0) 2017.04.10
(3/500) Solve Me - Winter Sleep  (0) 2017.04.06


5번째 푼 문제이다!

QR Code Puzzle이라는 재밌는 이름의 문제이다.



(QR Code Puzzle 문제)



문제 페이지는 다음과 같다.



(문제 페이지)



퍼즐을 클릭하면 실제 옛날에 많이 가지고 놀던 퍼즐처럼 조각이 움직인다.
요리 조리 움직여서 QR 코드를 완성하는건가?.. 싶었지만

개발자 도구에 들어가서 확인해보니 QR코드 원본 이미지가 따로있었다.! (물론 원본 이미지가 있을거란 생각을 하긴했었다.)



(발견)



이 사진을 열어보면



(QR코드 등장)



나는 폰으로 QR코드를 입력하였다.. ㅎㅎ



(폰으로 확인한 모습)



flag가 나온다!


'WarGame > 500 Project' 카테고리의 다른 글

(7/500) Wargame.kr - WTF_CODE  (0) 2017.04.12
(6/500) Wargame.kr - flee button  (0) 2017.04.11
(4/500) CodeShell.kr - dummy 64  (0) 2017.04.10
(3/500) Solve Me - Winter Sleep  (0) 2017.04.06
(2/500) Solve Me - Bad Compare  (0) 2017.04.06


4번째 풀이 문제이다!
Solveme는 몇일을 고민하게 했지만 다른문제로 실력을 더 쌓은 뒤 풀기로 기약하고..!
(내 스스로 500문제를 풀어내는것이 목표이기 때문에!)

CodeShell 이란 사이트! 이 사이트는 회원가입하는 것부터 문제가 있었지만
음.. 문제로 치기에는 양심이..! 
정식 문제로 500문제를 채울것이다!

첫 문제로 dummy64!
웹 문제이다. 포너블 문제 등은 지금 시스템 공부가 어느정도 되면 어서어서 해보고 싶다.!!



(dummy64)


문제 페이지 이다.



(문제 코드)



문제 코드를 보니! 예전에 다른 비슷한 문제를 푼 기억이 난다.
이 문제는 역으로 계산해서 flag를 찾아야 하는 것이다.!
우선 출력되는 것을 확인해보자!



(flag)



코드에 따르면 이 값은 역순으로 되어있다. 차근차근 하나씩 역으로 올라가면서 풀어주면 쉽겠구나! 생각이 들었다.

파이썬을 이용했다.



(문자열 뒤집기)



얻은 값을 Base 64로 인코딩!



(Base64 인코딩)



인코딩 후 이제 이 값이 encode 함수에 의해 처리되었으므로 
return 부분을 살펴보면 base64로 디코딩되서 bin2hex니까 나는 반대로
hex2bin 해준 후 base64로 인코딩하면 원래 data가 나온다.


(원래 data)




이제 이 data들을 XOR 연산을 해주는데
XOR 연산의 특징이 기억났다.
바로 
A ^ B = C
A ^ C = B
라는 것! 가물가물해서 다시 확인해보았다. ㅎㅎ



(14 ^ 2 = 12)


(12 ^ 2 = 14)




맞는걸 확인 할 수 있다!

값을 보면 길이가 2보다 작으면 자세히는 뭔지 모르겠지만 안되는것 같다.!
즉 2개씩 끊어서 해석해주면 된다.

2개씩 끊어서 역으로 아스키코드값을 구해낸다.



(아스키 코드)




이 값을 문자로 치환해주니 
flag가 바로 나왔다 :)


(문제 해결)




문제 해결!

'WarGame > 500 Project' 카테고리의 다른 글

(6/500) Wargame.kr - flee button  (0) 2017.04.11
(5/500) Wargame.kr - QR Code Puzzle  (0) 2017.04.11
(3/500) Solve Me - Winter Sleep  (0) 2017.04.06
(2/500) Solve Me - Bad Compare  (0) 2017.04.06
(1/500) Solve Me - Warm up  (0) 2017.04.06



3번째로 풀이할 문제이다.

Solve me 의 Winter Sleep 문제이다.
이 문제를 풀면서 느낀것이 문제이름 잘지었네~ 라는 생각이 들었다. :)



(Winter Sleep)



아래는 문제 페이지이다.



(문제 페이지)



코드를 보면 단순하다. time이라는 변수에 값을 넣어 get방식으로 전달하면 된다.

그 값이 특정값 이상 이하이어야하고
그 값동안 sleep 한 후 flag를 보여준다.
음 그렇군! 초를 계산해볼까?

php online interpreter를 이용하여 계산하였다.



(sleep 할 시간 계산)



오? 간단한데? 저 값을 보내주었다.





(7776000 값 전달)




...






...


...


음? 기네?
초단위니까 몇분기다려야되는거지?






(시간 단위)



시간단위로 2160...
2160 시간.. 날짜로는 90일..
뭔가 잘못되어가는 기분이 들었다.

그럼 최소 시간으로 잡아보자! 라는 생각으로 계산해보았지만...



(최소)





(최소 시간)




(최소 60일)




이쯤 되니 아! 60일 정도 자고 일어나면 되겠다 라는 생각이 들었다.

말도 안되는 소리같고..
이쯤되서 별것들에 눈길을 주었다.
is_numeric 함수
error_reporting 함수

게다가 왜 sleep 앞에 int로 형변환을 해주었을까?
구지? is_numeric으로 숫자인지 검사해놓고서는..




(의심 대상)



오류 리포팅을 하지 않겠다? 라는 의미로 저 구문이 있었다.

sleep 에서 에러를 유발시켜서 sleep을 패스시키고 flag를 확인하는 건가?

그렇기 위해서는 우선 is_numeric을 우회할 수 있어야 했다.

그래서 php.net 공식 홈페이지에서 is_numeric을 찾아보았다.



(is_numeric)




여기서 눈에 딱 들어온건 바로
e
지수표현도 is_numeric에서 true로 판단한다는 것이었다.

이때 아하!
하고 모든것이 퍼즐처럼 맞춰졌다.

바로 그렇기 때문에 sleep 앞에 int로 형변환해주었고
e 지수표현으로 소수로 넘겨주어 int로 바뀌면 소수점들은 날라가니까 
기다릴만한 시간이 되는 거였다.

그리하야
time에 5.184e6  을 넘겨주고 flag를 얻을 수 있었다.




(문제 해결)



(문제 해결)


'WarGame > 500 Project' 카테고리의 다른 글

(6/500) Wargame.kr - flee button  (0) 2017.04.11
(5/500) Wargame.kr - QR Code Puzzle  (0) 2017.04.11
(4/500) CodeShell.kr - dummy 64  (0) 2017.04.10
(2/500) Solve Me - Bad Compare  (0) 2017.04.06
(1/500) Solve Me - Warm up  (0) 2017.04.06



2번째 문제!
생각보다 난관이었다...(밤늦게 풀어서 그럴수있지만)



(Bad Compare 문제)



아래는 문제 화면이다.




(문제 페이지)



answer 값을 찾아서 get방식으로 전달해주면 된다.





(answer 값 찾기)



굉장히 헤멨었다..
이유는 전에 풀었던 워게임 문제에서 이런 비슷한게 있었던거 같은데
자리수만 맞춰주면 됬기 때문이다. 그래서 10글자의 아무값이나 넣어보기도하고
특수기호도 너보고 url 인코딩도 해보다가
php 비교 연산자의 취약점을 찾아보다가 (게다가 문제에서는 === 연산자를 사용한다.)
answer에 적혀있는 값을 찾아내야겠다는 생각으로 바뀌었다.

분명 저기서 나오는게 깨져 나오는 것일것이라고 생각하고
버스슈트를 켰다.

그리고 돌아오는 응답 내용을 열어보았다.



(응답 내용)



열어보니 여기도 깨져 보였다. 
그래서 Hex로 열어보았더니 값이 보인다!




(등장한 값)



신나서 이 값을 복사하여 답을 전송했다.




(거의 정답)



우롱... 앤서...

이게아닌가..
이번에는 Hex에 나온 값을 %붙여서 (url인코딩해서) 보내기로 했다.
그게 아무래도 더 정확하게 보낼 수 있을 것 같았다.




(answer)



정답!!
:)
flag가 보인다.

전에 풀었던 기억에 메달렸다면 아마 더 오래 헤맸을듯 하다.!




(문제 해결)


'WarGame > 500 Project' 카테고리의 다른 글

(6/500) Wargame.kr - flee button  (0) 2017.04.11
(5/500) Wargame.kr - QR Code Puzzle  (0) 2017.04.11
(4/500) CodeShell.kr - dummy 64  (0) 2017.04.10
(3/500) Solve Me - Winter Sleep  (0) 2017.04.06
(1/500) Solve Me - Warm up  (0) 2017.04.06


오늘부터 500 프로젝트에 들어간다.
딱 500문제를 풀어서 정리하는 것이다!

이제 이 카테고리에 차근차근 500문제까지 쌓아보겠다!

처음 올리는 문제는 Solve Me 사이트의 문제이다.
Warm up 부터 시작하였다.




(Warm up 문제)



아래는 문제 화면이다.



(문제 화면)



문제 화면을 보니 위에 알 수 없는 코드?가 보이고 
아래에는 소스코드가 보인다.
소스코드에는 flag를 base64로 인코딩해서 출력해주고 있는 것을 보여준다.
이렇게 말을 안해도 사실
맨 뒤에 = 가 보이면 base64일까? 라는 의심부터 들긴했다.

즉 위에 보이는 값을 디코딩해주면?




(flag 디코딩)


flag의 값을 알 수 있다.

이 값을 처음에 어디다 적는지 몰라서...
flag 변수에 넣어서 get방식으로도 보냈었다..




(잘못된 정답 제출)



알고보니.
메인 페이지에 flag를 적는 칸이 있다 :)



(정답 입력)



이 칸에 입력하면 정답인지 확인 할 수 있다.



(문제 해결)


'WarGame > 500 Project' 카테고리의 다른 글

(6/500) Wargame.kr - flee button  (0) 2017.04.11
(5/500) Wargame.kr - QR Code Puzzle  (0) 2017.04.11
(4/500) CodeShell.kr - dummy 64  (0) 2017.04.10
(3/500) Solve Me - Winter Sleep  (0) 2017.04.06
(2/500) Solve Me - Bad Compare  (0) 2017.04.06



@6번문제
이 사이트 XSS문제들 중 마지막 문제이다.
조금 많이 찾아보고 공부하던 계기가 되었던 문제이다.




(문제 화면)



먼저 페이지가 어떻게 동작하는지 확인해보는게 우선이다.
url 주소를 보니 # 뒤에 있는 경로가 화면에 보이는 것을 확인할 수 있다.



(문제 페이지)



코드를 살펴보니 url을 입력받는데, 여기서 url을 #뒤에 있는 부분을 따로 받아서
아래와 같은 코드에 붙여주어 출력해주고 있는 것을 확인 할 수 있다.



(문제 페이지 코드)



예를들어 #뒤에 abc 라고 입력하면
페이지 화면에 abc가 나올 것이다.



(동작 확인)



abc에서 가져오고 있다 이런 말로 # 뒤에 있는 경로에서 스크립트를 가져와 실행하고 있는 것을 알 수 있다.
문제 힌트를 확인해 보겠다.



(문제 힌트)



문제 힌트를 보니 스크립트 파일을 직접 서버에 올리고 그 경로를 적어주어 해결할 수 없다면 google.com/jsapi?~~~ 페이지를 이용하라고 나와있다.
이 문제를 해결하기 위해 서버까지 올리는건 부담스러우므로 다른 방법을 이용해보자.

찾아본 방법 중 Data Url Scheme라는 방법이 있었다.
데이터를 url 표현으로 바꾸어 주는 것이다.
사용 방법은 data:[자료타입], [데이터] 이렇게 들어간다.
우리는 javascript를 이용할 것이므로 자료타입은 text/javascript 이다.
예를들어 test 라는 문자로 테스트해보자.



(테스트)



test라는 데이터를 표현한 것이다.

스크립트 alert를 표현하면



(script 표현)



위와 같이 된다.
이 데이터를 # 뒤에 붙여주기만 하면 된다.




(스크립트 데이터 전달)





(문제 해결)



이렇게 되면 페이지에서 스크립트가 실행되고 문제를 해결할 수 있다.

문제에서 준 힌트를 살펴보면 스크립트는 아래와 같다.



(스크립트)


callback에 foo라는 값이 전달되어 foo 라는 함수가 스크립트 아래에서 실행되고 있는 것을 확인해 볼 수 있다.
예를들어 내가 abc라고 입력을 하면



(abc 입력)



abc() 라는 함수가 실행된다.

이를 이용해보면 callback에 alert라고 입력을 하게되면


(alert() 함수 실행)



alert() 함수가 실행된다.

이 소스스크립트를 이용하면 위 경로의 주소를 복사해서 #뒤 경로로 적어주면 된다.
http://는 필터링 하고있으므로 Http:// 이렇게 대소문자를 섞어 써주면 필터링을 못하게 되어있으므로 우회할 수 있다.



(문제 해결)




6번문제 까지 모두 푸니 마지막으로 아래와 같이 축하(?)의 페이지가 뜬다.


(축하의 페이지)

'WarGame > XSS Game' 카테고리의 다른 글

XSS GAME - level 5  (0) 2017.04.03
XSS GAME - level4  (1) 2017.04.01
XSS GAME - level3  (0) 2017.03.31
XSS GAME - level2  (0) 2017.03.31
XSS GAME - level1  (0) 2017.02.15



@5번 문제

DOM에 스크립트를 삽입하지 않고 XSS 공격을 하는 문제이다.



(문제 화면)



여기서 Sign up 을 클릭해보면
아래와 같이 나온다.




(Sign up 화면)



여기서 URL을 잘 보면 next라는 변수에 confirm이라는 값이 들어가 있는 것을 확인 할 수 있다.
이따 코드를 보면서 이 부분이 어떤 역할을 하는지 확인 할 필요가 있다.
우선 이 페이지가 어떻게 동작하는지 확인해보자 이메일을 적고 Next를 눌러준다.



(Next 눌러준 화면)



그 다음 페이지 화면으로 시간이 조금 있으면 다시 원래 페이지로 돌아간다.
코드로 signup 페이지를 확인해본다.



(signup 페이지 코드)



코드를 보면 우리가 클릭하는 Next 버튼이 링크 태그로 걸려있는 것을 확인 할 수 있다.
또 링크 주소가 next 변수의 값으로 전달되고 있는 것을 확인 할 수 있다!
즉, 우리가 next변수 값으로 스크립트를 전달해 줄 수 있으면 된다.

그렇다면 URL로 스크립트를 전달하는 방법은?



(스크립트)



위와같이 주소창에 javascript: 입력 후 스크립트 코드를 입력해주면


(스크립트 동작)



스크립트가 동작한다.

우리는 이것을 이용하여 문제를 해결할 것이다.
next변수에 javascript:alert('attack'); 값을 전달하여 링크 주소를 세팅한다.





(링크 주소 세팅)



그 후 Next 버튼을 클릭해주면 스크립트가 실행되고
문제를 풀 수 있다.




(문제 해결)






'WarGame > XSS Game' 카테고리의 다른 글

XSS GAME - level 6  (1) 2017.04.03
XSS GAME - level4  (1) 2017.04.01
XSS GAME - level3  (0) 2017.03.31
XSS GAME - level2  (0) 2017.03.31
XSS GAME - level1  (0) 2017.02.15




@ 4번 문제

인젝션 처럼 값을 조작해서 스크립트를 실행하게 하는 문제였다.




(문제 화면)



버튼을 클릭하면 타이머가 동작한다.



(타이머 동작)



3초가 지나고 다시 돌아온다.
잘보면 URL에 timer변수로 3이라는 값이 전달되고 있는것이 보인다.

GET방식으로 변수가 넘어가고있는데 코드를 보면 확인 할 수 있다.




(페이지 코드)



코드를 보면 GET방식으로 timer 변수가 넘어간다.
그래서 URL에 timer=3으로 입력하고 전달해도




(타이머 동작)



타이머가 동작한다.

이제 타이머 페이지의 코드를 보겠다.



(타이머 페이지 코드)



여기서 이미지 태그를 보면 바로 눈치챌수 있다.
바로 onload 부분에 우리가 입력한 timer 값이 들어가게 되니 여기를 잘 조작해서 입력하면
스크립트가 실행되게 할 수 있는 것이다.
{{ timer }} 이렇게가 변수로 입력이 되므로
timer=1');alert('attack
이라고 값을 전달하게 되면
onclick="startTimer('1');alert('attack');" 이렇게 완성되어 스크립트 코드가 실행 될 것이다.



(인젝션)



하지만 동작하지 않았다..
실행된 초 앞에 {{timer}} 값을 보면 1') 까지만 들어갔는데..
; (세미콜론)부터가 입력되지 않은것이다.

문제는 ; (세미콜론)을 URL 인코딩 해서 보내줘야한다. 세미콜론 퍼센트 앤퍼센드 등등
가끔 URL인코딩으로 보내줘야할 때가 있다.
; -> %3B로 바꿔서 입력해주니 아래와 같이
;(세미콜론)으로 잘 전달이 되어 우리가 원하는 {{ timer }} 값이 되었다.



(문제 해결)



그리고 스크립트 코드가 실행되었다.
문제 해결!



'WarGame > XSS Game' 카테고리의 다른 글

XSS GAME - level 6  (1) 2017.04.03
XSS GAME - level 5  (0) 2017.04.03
XSS GAME - level3  (0) 2017.03.31
XSS GAME - level2  (0) 2017.03.31
XSS GAME - level1  (0) 2017.02.15

+ Recent posts