이번 LAB에서는 애플리케이션이 입력값에 대해 HTML인코딩을 수행할 때 이를 우회하는 방법을 배웁니다.
blog 검색 기능에 취약점이 존재하며 꺽쇠 기호(<,>)는 HTML 인코딩이 수행된다. 이 LAB을 해결하기 위해서는 HTML 속성을 사용해 alert() 함수를 호출해야한다.
우선 이전 단계에서 사용했던 <script>alert('test');</script> 코드를 입력해보겠습니다.

이전과 다르게 코드가 작동하지 않습니다.

코드를 보면 문자열로 해석되어 입력된 것을 볼 수 있습니다.

그런데 입력값이 출력되는 부분이 검색창 상단뿐만 아니라 검색창의 Value 값으로도 출력이 되고 있습니다.
그렇다면 꺽쇠 기호(<,>)는 인코딩이 수행되기 때문에 JS코드를 실행시키는 HTML 속성을 사용해보겠습니다.
💡 JS 코드를 실행시키는 HTML 속성들
- onmouseover : 마우스가 요소 위로 올라갈 때 실행
- onmouseout : 마우스가 요소 밖으로 이동할 때 실행
- onmousemove : 마우스가 요소 위에서 움직이는 동안 실행
위 속성들을 사용하면 꺽쇠기호(<,>) 없이도 JS 코드를 사용할 수 있습니다.
코드에 입력되었을 때 형태를 보면
value="<script>alert('test');</script>"
value 속성의 값으로 양쪽에 ""로 덮여있습니다. 이를 벗어나기 위해onmouseover 앞에 따옴표(")를 붙여 앞선 따옴표(")를 닫고 onmouseover 속성을 주입하겠습니다.
"onmouseover="alert('test');

검색창 상단엔 다음과 같이 출력되며

소스코드에는 value의 값은 존재하지 않고 onmouseover 속성이 추가된 것을 확인할 수 있습니다.
이제 검색창에 마우스를 갖다대면

경고창이 나타나며 LAB이 클리어됩니다.