인공지능 개발일지

[Xss-game]Level 1~6번 Writeup 본문

보안/해킹 워게임

[Xss-game]Level 1~6번 Writeup

Prcnsi 2021. 5. 21. 03:03
728x90

안녕하세요! 오늘은 해킹 동아리 과제로 풀었던 Xss-game의 풀이를 정리하겠습니다.

 

저는 사실 워게임이 있는지도 몰랐는데 동아리 회장님 덕에 알게 되었습니다.

개인적으로 그냥 알림창으로만 보였던 것을 직접 띄울 수 있어 재밌었습니다.

 

그리고 xss_game시리즈 전체가 alert가 많이 쓰이더군요

얼른 웹 언어도 공부해야겠다 느꼈습니다.

이상 바로 풀이 가겠습니다!

 

Level -1

아래는level1의 과제이다. 읽어보면 alert()창을 띄우라고 한다. alert()는 자바스크립트 내장함수이다.괄호 안에 띄우고 싶은 것을 입력하면 그대 로 출력해준다.예를 들어 2021은 alert(2021)으로 말이다.

초기화면

xss game le의 초기화면이다. 코드에는 주석으로 구절마다 설명되어 있어 생략했다. 간단하게 입력 프롬프트에 스크립트 코드로 입력해주면 된다. 이때 script 태그와 alert()를 사용한다. 여는태그와 닫는태그 사이에 alert(2021)을 프롬프트창에 입력해주면 풀린다.

Level1

 

 

Level -2

 

아래는 level2의 초기화면이다.

Level2 초기화면

Level1은 로그인 페이지에 팝업을 띄우는 것이었다면 Level2는 게시판 형식의 페이지에 팝업을 띄우는 것이다. 1과 마찬가지로 프롬프트에 <script>alert(2021)<script>를 입력해 보았으나 팝업 창은 뜨지 않았다.

코드를 봐도 반복문으로 입력 받은 숫자의 수만큼 반복문을 실행한다는 것 외에는 특별한 것이 없어 보인다.따라서 힌트를 봤다.

힌트

2번 힌트에서 script 태그는 먹히지 않는다고 한다. 그리고 onerror을 사용하라고 한다.onerror는 이름 그대로 오류시 수 행하는 구문인데 일부러 오류를 만들어 우리가 원하는 팝업창을 띄우 도록 하겠다.먼저 없는 파일을 이미지 태그로 지정해주고 바로 뒤에 onerror로 alert를 아래와 같이 수행시키면 풀린다.

<img src="@" onerror="alert('hi')";

Level2

 

 

 

Level -3

 

다음문제는 입력창이 아닌 url을 건드리라고 한다. Level3은 개인적으로 좀 어려웠다.

Level3_초기화면

소스코드에 choseTab이라는 이미지 1,2,3을 선택하는 것으로 보이는 함수가 있다 이때 이미지 1,2,3을 클릭해보면 url창의 #뒤의 숫자가 변하는 것으로 보 아 숫자가 위치한 자리에 스크립트를 작성해야 함을 알 수 있다. url의 변수 자리에 전에 썼던 공백문자를 포함한 onerror문을 써보니 풀렸다. ‘%09onerror=alert(2021)%09'

Level3_Clear

 

 

Level -4

 

Level4는 좀 흥미롭다. 타이머 프로그램 같은데 하단에 입령창에 숫자를 초단위로 입력하면 그 시간이 지난뒤 알람창을 띄워주는 페이지다. 이때 입력된 숫자는 url에서 timer=5로 나타나는 것을 보니 GET방식을 사용했고 timer이 입력 매개변수라고 추측할 수 있다.

Level4

코드를 확인해보면 추측이 맞다. 코드를 더 확인해보면 onload변수에 우리가 입력한 값을 저장한다

Level4 코드

그러면 Sql injection에서 썼던 방법대로 ?변수=값; 형식에 이번에 배운 alert()를 합쳐서 아래와 같이 ?timer=1’);alert(‘warn 을 붙이면 alert문도 스크립트에 포함되어 실행된다. 그런데 이때 세미콜론은 특수문자여서 %3B로 인코딩한 코드를 입력해주면 풀린다.

Level4_clear

 

 

Level -5

 

이 문제 또한 팝업 창을 띄우는 문제다.

Level5

초기화면이다. Level이 올라갈수록 클릭할 걸 더 주나보다. Url에서 클릭할 때마다 뭐가 바뀌는지 봤다.

Level5-2
Level5-3

Frame/뒤에만 보니까 대충 동작원리가 초기화면-next-confirm이다. 보니까 Enter email:창에 뭘 입력하든 마지막 사진처럼 url에 전달값이 표시되지 않고 confirm이 뜨는 것을 보니 get방식은 아닌가 보다. 눈에 띄는 부분인 두 번째 사진에서 next가 변수일 것으로 추청된다. 왜냐하면 보통 ?변수=~~형식이기 때문이다. 그리고 코드를 보면 next가 링크태그로 걸려 있고 next가 변수이다. 따라서 alert()를 이용해서 next로 값을 전달해주니까 풀렸다. 코드:next=alert(21);

Level5 코드
Level5 clear

 

 

Level -6

 

이 문제도 alert()창을 띄워야한다.바로 힌트를 봤다.

Level6 힌트

#뒷 부분이 url에 미치는 영향을 보라고 한다. 그러면 data를 url #뒷 부분에 적어주면 되는데, 혹시나 싶어서 바로 alert()를 써봤다.

Level6-2

될리가 없다. 보니까 데이터를 url표현으로 바꿔줘야 한다. 따라서 아래와 같이 바꾸면 풀린다. data:txt/javascript,alert(21);

Level6 clear
All_clear

 

728x90

'보안 > 해킹 워게임' 카테고리의 다른 글

[Wehacking.kr] old 24번 Writeup  (0) 2021.05.24
[Wehacking.kr] old 23번 Writeup  (0) 2021.05.23
[Wehacking.kr] old 18번 Writeup  (0) 2021.05.22
[Wehacking.kr] old 41번 Writeup  (0) 2021.05.18
[Wehacking.kr]old 25번 Writeup  (1) 2021.05.17