728x90
이번 문제는 reflected DOM XSS 취약점이 있고 서버가 요청 데이터를 처리하고 응답 데이터를 반영할 때 발생한다,
우선 reflected 이므로 검색창에 취약점이 있을거라 예상하고 임의값을 넣은 후 요청 데이터와 응답 데이터를 확인했다.
123을 검색했을때 json형태로 응답데이터가 오는 것을 확인할 수 있다.
우리는 저 응답 데이터를 이용해여 alert함수를 호출하면 되는데
serchTerm 키값을 이용하면 될것 같다.
우선 searchTerm값을 닫은 후 alert함수를 입력하기 위해 더블쿼터(")를 입력한 결과
응답값에 \가 붙어있는것이 확인되었다.
\가 앞에 붙을시 더블쿼터(")는 문자열로 처리되어 기능을 잃게 된다.
\만 입력했을때 \앞에는 \가 추가로 붙지 않는 것을 확인할 수 있다.
이러면 취약점이 발생되는데
\"를 입력할시 응답값은 \\"로 돌아오게 된다.
이때 우리가 붙여놓은 \로 인해 더블쿼터(") 앞에 붙은 \가 문자열로 처리되게 된다.
\\" (빨간 부분이 문자열로 인식)
이러면 뒤에 남은 더블쿼터(")의 기능을 잃지 않기 때문에 searchTerm값을 닫아줄 수 있다.
이제 닫는 법을 알았으니 alert함수를 입력하면
문자열로 인식 안되고 정상적으로 나온 것을 볼 수 있다.
하지만 뒤에 남은 "} 부분을 처리해 줘야 되는데 이는 간단하게 주석으로 처리하면 된다.
}을 닫아준 뒤 자바스크립트의 주석(//)으로 뒤에 "} 부분을 주석처리 해주면
alert함수가 호출되는 걸 볼 수 있다.
728x90