본문 바로가기
3. 웹 애플리케이션 취약점 진단/비박스를 활용한 웹 애플리케이션 취약점 진단

[비박스를 활용한 웹 취약점 진단] 7-8.크로스 사이트 스크립팅 [Reflected XSS-HREF]

by Robert8478 2023. 12. 13.

a 태그(anchor)는 문서에서 다른 문서로 이동하는 하이퍼텍스트 기능을 제공한다. a 태그의 옵션은 href,title,target 등이 있다. onClick, onmouseover 등의 이벤트 속성을 사용해서 하이퍼링크로 다른 페이지로 이동할 때에 다양한 방법을 제공한다.

[난이도 하]

이번 페이지는 href-1 페이지에서 처음에 계정을 입력 받으면 href-2 페이지로 넘어가서 영화 목록을 테이블표로 출력하며, Vote 버튼을 클릭하면 href-3으로 넘어와서 vote한 영화 제목을 출력해준다. URL 주소창을 보면 GET 방식으로 인한 변수 노출을 확인할 수 있다.

href-2 페이지에서 개발자 도구를 활용하여 Vote 버튼 부분을 확인하면 a 태그의 href 옵션을 사용해서 href-3으로 세가지의 변수와 함께 연결하는 것을 볼 수 있다. name이 a 인것으로 보아 href-1 페이지에서 입력한 계정명이 name 변수로 들어가는 것 같으니 스크립트 코드는 name 변수에 입력하면 될 것 같다.

그런데 그냥 스크립트 코드만 넣으니 문법오류가 나서인지 스크립트 코드에 대한 적용이 안된것 같다.
개발자 도구를 확인하니 href 안에 태그로 적용되기 때문에 <> 구문으로 인해 문법 에러가 생긴것이다.

</script><script>alert(document.cookie)</script> 구문을 사용했더니 세션값이 노출되었으며 알림창 확인을 누르면
문법 에러가 생긴 나머지 코드부분이 유출되었다. 이번에는 다른 이벤트 옵션을 통해서도 시도해보자.

0 onmouseover=alert(document.cookie) a 구문을 넣어주면 Vote에 마우스를 대었을때 세션값을 노출시키게 설정된다.
0 과 a 는 변수의 입력 값으로 들어가면서 문법 오류를 막아주기 위해 넣어준 것이다.
이번에는 이 코드를 사용해 다른 악성 페이지로 이동시킬 수도 있다. 이번 예제에서는 다른 문제 페이지로 이동시켰다.

0 onmouseover=alert(document.location="http://192.168.56.102/bWAPP/htmli_get.php") a 구문을 href-1 페이지에 넣어주고 요청한 뒤 Vote에 마우스를 갖다대면 옮겨질 주소에 대한 alert 알림이 한번 나온다.

알림창을 클릭했더니 강제로 htmli_get.php 페이지로 이동되었다.

[난이도 중,상]

난이도 중에서는 위와 같은 코드를 넣어도 XSS가 이루어지지 않았다.

</script><script>alert(document.cookie)</script> 구문을 넣어도 마찬가지였다. php 코드를 확인해보자.

코드를 확인해 보니 난이도 중과 상은 hpp라는 함수를 호출하며 이 함수는 urlencode 함수로 필터링을 하고 있었다.
Urlencode 함수는 특수문자들을 URL 인코딩하는 함수로써, URL 인코딩은 % 아스키코드로 인코딩된다.
그렇기 때문에 스크립트 코드에 사용하는 (, ), ' 등 특수문자가 인코딩되어서 스크립트 구문이 실행되지 않는 것이다.
이는 민감한 정보를 다루는 페이지에서 하이퍼 링크를 보호하기 위한 방법이다.