(bWAPP)XSS - Reflected (JSON)
Level - Low
- 입력 값은 JSON 형식으로 넘어가는 듯 함
<script>
var JSONResponseString = '{"movies":[{"response":"HINT: our master really loves Marvel movies :)"}]}';
// var JSONResponse = eval ("(" + JSONResponseString + ")");
var JSONResponse = JSON.parse(JSONResponseString);
document.getElementById("result").innerHTML=JSONResponse.movies[0].response;
</script>
- 코드를 보게되면, JSONResposeString 변수에 저장되어 있는 값(JSON)을 불러와 JSONResponse 변수에 담는다.
- 이후 result라는 id를 가진 요소에 innerHTML을 사용하여 JSONResponse 변수의 movies키 값의 0번째 데이터를 가져오고 있다.
Reflected 보다는 DOM Based에 가까워 보이며, 우선 입력값을 주어 코드가 어떤 형식으로 변환되는지 확인 했다.
<script>
var JSONResponseString = '{"movies":[{"response":"a??? Sorry, we don't have that movie :("}]}';
// var JSONResponse = eval ("(" + JSONResponseString + ")");
var JSONResponse = JSON.parse(JSONResponseString);
document.getElementById("result").innerHTML=JSONResponse.movies[0].response;
</script>
- response 키 값에 대응 되는 데이터 부분이 역시 바뀌는 걸 알 수 있다.
- <script> 태그 문에서 작동하므로 해당 태그를 강제적으로 닫고 다른 <script> 태그를 생성하여 XSS 진행이 가능하다.
</script><script>alert(1)</script>
Level - Medium & High
- Medium Level에서는 잘못된 보안 대책을 구현하여 문제가 된다.
- addslashes 함수를 사용한 것으로 확인되며,
- 해당 함수는 특수 문자 앞에 “/” 백슬래쉬를 추가하여 해당 특수 문자를 이스케이프 처리를 위한 함수이다.
- 하지만 이 때 포함되는 특수 문자는 따옴표(’), 쌍따옴표(”), 백슬래쉬(/). null문자 가 포함되어
- XSS 공격에 사용되는 <> 와 같은 특수문자는 필터링되지 않는다.
- High Level에서는 htmlsepcialchars 함수를 사용하여, 각각의 특수문자에 대한 HTML 엔터티 인코딩을 통한 필터링을 적용하여, XSS 에 대한 대응이 이루어지고 있다.
Leave a comment