본문 바로가기
Portswigger/XSS

Portswigger - Reflected XSS into a template literal with angle brackets, single, double quotes, backslash and backticks Unicode-escaped solution

by jh117jh 2023. 10. 10.
728x90

이번 문제는 검색기능에서 태그(<,>)와 싱글 쿼터('), 더블 쿼터("), 백틱(`)이 유니코드로 변환된다.

"'\<>을 입력하면 

 

유니코드로 변환되는걸 볼 수 있다.

 

또한 message 변수는 백틱(`)으로 감싸져 있어 이를 이용하면 alert함수를 호출할 수 있다.

 

이번 문제는 혹시..?하고 넣어봤던 게 정답이어서 문제를 풀고 난 후 방법을 찾았던 문제다.ㅎㅎ

 

우선 백틱에 대해 알아보기전 먼저 알아야 될 것이 템플릿 리터럴이다.

 

탬플릿 리터럴이란?

 

자바스크립트에서 쓰이는 ES6부터 새로 도입된 문자열 표기법이다.

문자열 생성시 따옴표 대신 사용되는 게 백틱(`)이다.

ex) var str_01 = `hello world`;

 

이런 탬플릿 리터럴에 기능이 크게 두가지가 있는데

 

1. 줄바꿈

위에 사진을 보면 줄 바꿈이 자유로운 것을 알 수 있다.

평소 우리가 문자열을 입력할 때 줄 바꿈을 하려면 개행문자(\n)를 사용하여 바꿨어야 했다.

ex) var str_01 = "Hi! \n\t It's me! \n\t\t\t JavaScript! \n So Cool!";

 

2. 표현식

기존에는 + 연산자를 이용해 각각 연결시켜 줬어야 됐다면

위 사진과 같이 변수나 연산을 ${}을 이용해 직접 삽입할 수 있다.

 

여기서 우리가 이용할 것은 2번이다.

 

${} 안에 넣어 사용할 수 있는 것은 변수나 연산뿐 아니라 함수도 가능하다.

정확한 정의는 아니지만 return값 즉, 반환하는 값이 있으면 사용할 수 있다.

 

그럼 문제에서 변수가 백틱(`)으로 선언되어 있으니 그 안에 ${alert(0)}을 넣으면 어떻게 될까?

 

alert함수가 호출되는 걸 볼 수 있다.

728x90