@ 5번문제
스크립트 관련된 문제였다.

난독화되어있는 스크립트에 대한 이해와
스크립트 동작만 할 줄 알면 쉽게 풀수 있는 문제다.



(5번문제)


(문제 화면)



처음에는 인젝션 문제인 줄 알았으나..
소스코드를 보고 잘못된 길에 빠질뻔 했다는 사실을 알았다.






(소스코드)



소스코드를 보면
<script> 태그안에 스크립트 코드가 적혀있는데 도통 무슨말인지 알아먹을 수가 없다.

스크립트 난독화를 이쁘게 정리해주는 사이트의 도움을 받았다.




(정리된 코드)



정리된 코드를 보니
마음이 차분해지고 편안해졌다.

정리된 스크립트 코드를 보니 입력에 대해서 어쩌구 연산을 통해 result를 return하고 있는 모습을 확인 할 수 있었다.

그리고 스크립트에서 정의된 PASS 함수가 어디서 실행되고 있는지 소스코드에서
샅샅이 찾았지만
찾을 수 없었다..
어디에도 없었다. 
그 때 든 생각 중 아래에 힌트가 숫자로 적혀있었는데
이 값을 함수의 입력으로 넣어준 값이 우리가 찾아야하는 결과값이 아닐까하는 
생각에 이르렀다.



(힌트)



바로 관리자 모드를 열어 콘솔에 입력해주었다.
함수 PASS를 바로 입력하니 정의되있지 않은 함수라고 나와서

난독화를 푼 스크립트 코드를 이용해 변수와 함수를 정의해주었다.




(변수, 함수 정의)



그리고 PASS 함수를 힌트를 입력하여 실행하니 코드가 나왔다.






(함수 실행)



그 코드를 입력값에 넣어 체크를 해보니
인증키가 나왔다. :)


(인증키 획득)


'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS : Challenge WEB 8  (0) 2017.03.29
SuNiNaTaS : Challenge WEB 6  (0) 2017.03.28
SuNiNaTaS : Challenge WEB 4  (2) 2017.03.23
SuNiNaTaS : Challenge WEB 3  (0) 2017.03.22
SuNiNaTaS : Challenge WEB 2  (0) 2017.03.22


XSS 취약점을 공부한 후
이 것에 관해 직접 해보고 싶은 마음에
XSS Wargame을 여기저기 찾아본 결과
구글에서 만든 XSS GAME사이트라는 좋은 사이트를 찾게 되었다.

level1 부터 시작해볼것이다 :)

level1의 화면이다.



(문제 1 화면)



아래의 인터넷 창에서 alert()으로 팝업창을 띄우면 된다는 이야기이다.
스크립트코드로 alert() 코드를 띄운다는 것은
마음만 먹으면 악성 코드도 실행 시킬 수 있다는 것으로
분명 위험한 취약점이다.

먼저 아래 화면에서 Search 버튼을 눌러
사용자의 입력값이 어떻게 전달되는지 확인해보았다.



(전달 방식 확인)



확인해보니
url을 통해 전달되는 GET방식으로 전달 되고 있다.
또 화면에 Enter query here...  는 우리가 기본값으로 전달된 값임을 확인 할 수 있는데

더 정확하게 확인하기 위하여 소스코드를 분석해보았다.



(소스코드 분석)



코드를 보니 query라는 변수에 검색 입력값이 들어가고
화면에 뿌려주는 코드에서 query가 들어간것을 확인 할 수 있다.
이렇게 html코드에 들어가는 변수를 직접 사용자가 건들일 수 있다면
위험한 코드이다.
우리는 이부분을 이용하여 공격할 것이다.

query 변수에 들어가는 검색 입력란에
<script> alert("XSS");</script>
코드를 입력 할 것이다.



(XSS 공격)



검색을 하니 XSS 코드가 삽입되었고
팝업창이 떴다.



(공격 성공)



이렇게 level1은 간단히 넘어갈 수 있었다.



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

XSS GAME - level 6  (1) 2017.04.03
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( Cross Site Scripting )
- javascript를 이용한 대표적인 취약점이다.
  스크립트로 작성된 코드는 클라이언트의 웹브라우저에서 실행이 된다.

인터넷 웹 화면이 뜨는 과정은 웹 서버에서 우리 앞의 웹 브라우저로 코드가 날라오고 웹 브라우저는 그 코드를 실행하여 화면에 보여주는 것이다. 이 때 넘어오는 값에 스크립트 코드를 넣는 것이다.
 -> 주 타겟 : 불특정 다수(클라이언트)

ex) 예를 들어 게시판에 아래와 같은 글을 업로드 하는 것이다.
<script>alert("공격성공")</script>
(Enter가 들어가면 안된다.)
-> 공격을 하려면 자바스크립트로 원하는 코드를 만들 수 있어야한다.

스크립트 코드가 실행 되는지 확인하기 위하여 alert() 을 사용하여
코드가 실행 된다면 악의적인 코드가 실행될 가능성이 있다고 판단하여
취약점이라고 간주한다.

우리가 만든 제로보드 게시판에 XSS 공격을 해보겠다.



(스크립트 작성)




(게시판 화면)



게시판에 공격자의 글이 올라온 것을 확인 할 수 있다.

만약 이 글을 클릭한다면



(악성 코드 실행)



공격자가 작성한 스크립트 코드가 실행된다.



(글 화면)



글 내용에는 아무 글도 보이지 않는다.
왜냐하면 스크립트코드로 간주되었기 때문이다.

이런 방식으로 게시판 혹은 서버에 저장해두어 다른 사람들이 열람하여
코드가 실행되게 하는 방식을 Stored XSS 라고 한다.

다른 방법으로는 reflected XSS가 있다.

이 방법은 다음 XSS 취약점을 보면서 확인하겠다.
다음 XSS가 가능한 부분은 많지만
그 중에 회원가입란의 아이디 중복체크하는 페이지다.


(중복 체크 페이지)



이 페이지의 주소를 살펴보면
url을 통해서 값이 전달되고 있는 것을 확인 할 수 있는데
이 변수에 스크립트 코드를 넣어 실행하면
바로 실행이 된다.



(url을 통한 스크립트 코드)





(실행 화면)



실행하게 되면 IE에서
XSS를 발견하여 조치를 취해주었다.

우리는 공격을 확인 할 것이므로 잠시 이 설정을 해제해 주도록 하겠다.



(인터넷 옵션)



인터넷 옵션에서 보안탭을 들어간다.




(사용자 지정 수준 클릭)



사용자 지정 설정 수준에 들어가면
아래 부분에 XSS 필터 사용 항목이 있는데
사용 안 함으로 클릭해 주면 된다.



(사용 안함 클릭)



그런 상태로
아까와의 같은 url로 접속을 하면



(실행 화면)



스크립트 코드가 실행 된것을 확인 할 수 있다.

이 방식이 아까 Stored XSS와 다른 점은
저장되는게 아니라 바로 돌아온다. 입력된 그자리에서 실행된다는 것이다.


<script>alert(" target="_blank">http://100.100.100.129/zboard/check_user_id.php?user_id=<script>alert("xss")</script>
 링크를 활용해서 공격할 수 있다.
바로 이런 방법이 reflected XSS 이다.

이 공격을 더 유용하게 만드는 것은 shorten url 이다.
url을 짧게 만들어준다.



(shorten url)



그렇다면
XSS에 대한 대책은 어떤 것이 있을 까?

<script> 문을 게시 글 이외에
어떤 곳에서도 올리지 못하게 해두어야한다.

제로보드의 코드를 조금 수정해 보겠다.
게시판 글을 쓰는 곳에서 코드를 확인해보니
write_ok.php 파일로 데이터들을 전송하는 것을 확인 할 수 있다.



(보내는 곳 확인)



그렇다면
우리가 손봐야할 파일은
write_ok.php이다.



(write_ok.php 수정)



먼저 게시판 글쓰기의 소스코드를 확인해보면
게시 글이 변수 memo를 통해 넘어오는 것을 확인 할 수 있다.



(게시글 변수)



그러므로 우리는
write_ok.php 파일 맨 앞에
<script> 단어가 있으면 XSS 공격으로 간주하는 코드를 추가할 것이다.



(코드 추가)



코드 추가 후 공격을 해보겠다.



(XSS 공격)




(차단)



차단 된 것을 확인 할 수 있다.

하지만 방어가 있으면 다시 또 다른 공격을 하는 법..

이 코드를 우회할 수 있다면? (아주간단하게..)



(우회? 공격)



아주 간단하게 첫 script 를 대문자로 작성했다.



(우회 XSS 공격)




(공격 성공)



공격이 성공했다..
아주 간단하게 성공됬다.

이는 아까의 코드에서 문자열 검색에서 i를 추가해주면
대소문자 전부 체크해준다.



(코드 수정)



그렇게 되면



(우회 공격)




(차단)



간단한 우회도 차단할 수 있게 된다.

하지만 우회하는 방법은 수없이 많다.
그러므로 시큐어코딩(안전한코딩)이 쉬운 일은 아니다..!



+ Recent posts