이런 형태의 xss 코드를 보신적이 있나요? 최근에 이 XSS 페이로드로 트윗에서 의견을 좀 나눴었는데, 그 내용 정리해서 포스팅해봅니다.
|
|
(아 물론 여러 페이로드 정리된 사이트에 존재하는 공격코드입니다.
working??
결론부터 이야기드리면, 실행되지 않는 페이로드입니다.
가장 애매했던게, 유효하단 사람들이 있는 상태에서 저만 이게 안되는건가 싶어 여러가지 환경에서 테스트해봤는데요, 구형 브라우저(Netscpe ≤4 , 여러가지 아주 구형 브라우저에서만 동작합니다.
물론 이 페이로드가 현재도 유효했다면, 어마어마하게 파생된 XSS 코드가 만들어졌을테고, 정말 총체적 난국이였을 것 같습니다. (비슷한 사례로 style 관련 페이로드들이 있죠)
Javascript Entity Syntax
동작하진 않지만, 원리가 무엇인지 알아보기나 합시다. 여기서 HTML 속성에 &{} 형태로 구문을 넣는것을 Javascript Entity라고 부릅니다. (되게 범용적인 이름이네요…ㅋㅋ)
아무튼간에, 이를 이용해서 구형 브라우저에선 아래와 같이 어떤 속성이던 스크립트 구문을 넣을 수 있었습니다.
Regular HTML value:
|
|
JavaScript entity value:
|
|
물론 이 방식이 개발상 이점을 많이 가져왔을겁니다. 지금은 저런걸 처리하기 위해 해당 Object의 id, class 등을 찾아서 처리해줘야하기 떄문에 코드가 좀 늫어났겠죠. 다만 지금은 코드의 간결성이 중요한 시대는 아니기 때문에(옛날에는 적은수의 코드가 멋이였다면, 지금은 예쁘게 잘 짠 코드가 중요한 코드라고 보이네요) 뭐 크게 상관 없겠지만요.
JavaScript, the Definitive Guide에는 Javascript in Nonstandard Context 부분에 명시되어 있습니다.
|
|
어찌되었던 현재의 웹 환경에선 우회 기법으로 사용할 수 없는 XSS 코드입니다.
Conclusion
우선은 동작하지 않는 XSS 페이로드이기 떄문에 없다고 생각하시는게 좋을 것 같습니다만, 간혹 예외적인 케이스가 나타날수도 있습니다.
구형 브라우저의 엔진을 사용하는 잘 알려지지 않은 브라우저나 특정 환경에서 트리거될수도 있어서 알고는 있어야할 것 같습니다.
Reference
http://www.javascriptkit.com/javatutors/entity2.shtml https://docstore.mik.ua/orelly/webprog/jscript/ch12_02.htm