XSS/XSS

XSS 블랙 리스트 기반 필터링 우회(javascript:,정규화)

ragdo11 2024. 6. 24. 01:51

Dreamhack 사이트에 정말 좋고 많은 강의가 다수 있으므로 굉장히 추천한다. 본 게시글도 그 곳에서 참조함!

 

javascript: 스키마

javascript: 스키마는 URL 로드 시 자바스크립트 코드를 실행할 수 있도록 해준다.

URL을 속성 값으로 받는 a 태그나 iframe 태그가 대표적이라고 한다!

 

a 태그는 하이퍼링크를 걸어주는 태그이다. a 태그를 이용해 javascript: 스키마를 url 위치에 사용하여 위와 같이 alert 코드를 실행시킬 수 있다.

 

iframe 태그는 웹 페이지 안에 다른 웹 페이지를 삽입할 수 있게 해주는 기능을 가지고 있다. iframe의 height와 width를 전부 0으로 설정해서 일부러 보이지 않게끔(잘 보면 보이긴 함. 화살표 쪽!) 설정한 후 src 속성을 이용해 javascript: 스키마를 삽입하여 alert를 실행한 모습이다.

 

이렇게 공격에 활용할 수 있는 가능성이 크다보니 대부분이 이러한 키워드를 사용하지 못하게끔 필터링을 하는데 이럴 때 정규화 과정을 통해 우회해볼 수 있다고 한다.

 

정규화(Normalization)

정규화는 동일한 리소스를 나타내는 서로 다른 URL들을 통일된 형태로 변환하는 과정이라고 한다.

이 과정에서 특수문자들이 제거되고 스키마의 대소문자가 통일된다고 한다.

이에 대한 자세한 설명은 RFC 3986에 나와 있으니까 참고 바람!

 

일부 문자들을 HTML Entity Encoding 처리하여 필터링을 우회하는 방법이다.

엔티티화된 문자들이 다시 일반 문자로 변하면서 스크립트가 제대로 동작한다. 다만 내가 만든 홈페이지의 경우인지 특수 문자를 제대로 제거하지 않는 모습을 보여줘서 일반 문자만 엔티티 처리를 해주었다.