TeamH4C

[빡공팟 5기] W7 : XSS Filtering Bypass Write-up

이유갬 2022. 11. 6. 23:51

[ 문제 풀이 ]

- 총 3개의 메뉴를 가지고 있는 초기 화면입니다.

- vuln(xss) page 에 들어가보니 이미지가 있습니다.

- URL 을 확인해보니 img 태그가 있습니다.

 

- img 태그와 onerror 속성을 작성해보았더니 onerror 가 동작하지 않음을 볼 수 있습니다. 아마, onerror 가 필터링되지 않았을까 예상해봅니다.

- memo= 의 파라미터가 그대로 텍스트로 출력되는 것을 볼 수 있습니다.

- 태그를 대입해도 그대로 출력됩니다.

- flag 페이지에 들어간 모습입니다.

- 여기에 적절한 태그를 삽입한 URL 을 작성하여 임의의 사용자가 누르면 XSS 가 발동할 것입니다.

- 이제 소스 코드 분석을 해보겠습니다.

- xss_filter() 함수에 text 를 인자로 넣습니다. 그리고 _filter 이 "script", "on", "javascript" 로 구성되어 있습니다.

- 그리고 그 목록을 기반으로 f 가 for 문을 돕니다. 만약 소문자로 되어 있는데 f 가 _filter 목록에 있다면 빈 문자열로 치환하여 text 에 대입합니다.

- 예상대로 필터링이 존재하는데 on 이 들어가있습니다.

- onerror 속성의 이벤트가 발생하지 않는 이유가 여기 있었습니다.

- 여기서 모든 문자를 소문자로 바꾸는 함수를 사용하므로, 대소문자로 우회할 수 없습니다.

- 대신, 필터링에 걸리는 문자는 그냥 삭제하므로 이를 이용하여 우회할 수 있습니다.

- 해당 우회가 가능한지 vuln 페이지에서 확인해보니 정상적으로 동작하는 것을 알 수 있습니다.

- 이제 script 태그로 필터링을 우회하여 URL 을 작성해보겠습니다.

<scripscriptt>locatioonn.href="/memo?memo="+document.cookie;</scripscriptt>

- 위와 같이 작성한다면 script 구문이 쏙 빠져서 스크립트 태그만 남게되고, on 이 쏙 빠져서 온전한 loncation.href 가 됩니다.

- 해당 URL 을 flag 페이지에 제출했습니다.

- good 이라는 팝업창이 뜨고, memo 페이지로 이동했습니다.

- memo 페이지에 플래그가 적혀있는 것을 확인할 수 있습니다.

- 이렇게 필터링을 우회하여 플래그를 획득했습니다!