[ 문제 풀이 ]
- 총 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 페이지에 플래그가 적혀있는 것을 확인할 수 있습니다.
- 이렇게 필터링을 우회하여 플래그를 획득했습니다!
'TeamH4C' 카테고리의 다른 글
[빡공팟 5기] W7 : Relative Path Overwrite Write-up (0) | 2022.11.06 |
---|---|
[빡공팟 5기] W7 : CSP Bypass Write-up (0) | 2022.11.06 |
[빡공팟 5기] W6 : DVWA 실습 - 라이트업 링크 모음 (0) | 2022.10.30 |
[빡공팟 5기] W6 : DVWA 실습 - JavaScript (medium) (0) | 2022.10.30 |
[빡공팟 5기] W6 : DVWA 실습 - Content Security Policy (CSP) Bypass (medium) (0) | 2022.10.30 |