Unicode escape sequence
자바스크립트는 Unicode escape sequence를 지원한다고 한다. 우선 escape sequence에 대해 간략하게 알아보면 백슬래시 뒤에 문자나 숫자 조합이 오는 것을 말한다. 그러니 unicode escape sequence는 유니코드까지 나타낼 수 있는 escape sequence라고 보면 될 것 같다. 자바스크립트는 유니코드 문자를 일반 문자로 변환해주어 이를 필터링된 문자열을 우회하는데 사용할 수 있다.
문자 l을 유니코드 문자로 사용해주었고 자바스크립트가 이를 처리해주면서 alert가 정상적으로 작동한다.
Computed member access
computed member access는 객체의 특정 속성에 접근할 때 속성 이름을 동적으로 계산하는 기능이라고 한다.
위와 같이 loc+ation 형태로 작성을 했지만 동적으로 계산되어 최종적으로는 document.location이 되어 아래와 같이 현재 문서에 대한 url 정보가 출력된다.
위와 같이 활용 가능!
window 구문이 필터링 당한 경우 self, this를 대신하여 window 처럼 활용도 가능하다.
self 역시 동일함.
되게 재밌는 내용이 있는데 자바스크립트의 언어적 특성을 활용하면 [ , ] , ( , ) , ! , + 이 6개의 문자로도 모든 동작을 수행할 수 있다고 한다.
? 이게뭐람
헐 진짜 되네 아래 사이트에서 원하는 구문을 변환해서 위와 같이 사용해볼 수 있다. 다만 구문의 길이가 엄--청나게 길어짐 주의!
JSFuck - Write any JavaScript with 6 Characters: []()!+
jsfuck.com
Template Literals
문자열을 사용할 때 필요한 ', "가 필터링되어 있을 때 사용할 수 있는 방법이다. 템플릿 리터럴은 내장된 표현식을 허용하는 문자열 리터럴이며 여러 줄로 이루어진 문자열과 문자를 보관하기 위한 기능으로 이용할 수 있다고 한다.
백틱(`)을 이용해 선언할 수 있으며 내장된 ${} 표현식을 이용해 다른 변수나 식을 사용할 수 있다.
RegExp 객체
만약 백틱까지 필터링 중이라면 RegExp 객체를 이용해 문자열을 만들 수 있다.
/hello/ 형태로 객체를 생성하고 객체의 패턴 부분을 가져옴으로써 문자열을 만들 수 있다.
.source는 객체의 원문을 가져오는 것 같고, [](빈 문자열)를 더해주면 객체를 생성할 때 사용한 슬래시까지 포함하여 가져오는 듯 했다.
String.fromCharCode 함수
이건 그래도 사용해봤던 함수이다. 이 함수는 유니코드의 범위 중 파라미터로 전달된 수에 해당하는 문자를 반환한다.
'XSS > XSS' 카테고리의 다른 글
a 태그 자동 실행 기법(tabindex/onfocusin) (0) | 2024.11.16 |
---|---|
XSS 필터링 우회 3 (0) | 2024.06.29 |
XSS 블랙 리스트 기반 필터링 우회(javascript:,정규화) (0) | 2024.06.24 |
XSS event handler (0) | 2024.06.23 |
DOM based XSS (0) | 2024.06.21 |