LAB을 해결하기 위해서는 Reflected XSS 취약점이 존재하는 검색 기능을 찾아 print() 함수를 호출해야 한다. 단, 현재 애플리케이션에는 일반적인 XSS 공격을 차단하는 firewall(WAF)이 작동중이다.

웹 사이트 검색창에 스크립트를 입력하면

허용되지 않는다는 구문이 출력됩니다.

그러나 <body>를 입력하면

정상적으로 출력됩니다.
이것은 곧 <body> 태그가 WAF를 통과했다는 의미로 볼 수 있습니다.
유추해보면, 현재 WAF는 블랙리스트 필터를 통해 XSS 공격을 차단하고 있다고 생각해 볼 수 있습니다.
이 점을 이용하면 허용되는 태그와 허용되는 속성 값을 사용해 print()함수 호출이 가능할 수도 있습니다.
이를 위해 Burpsuite 프로그램을 사용해 Bruteforce attack을 시도해보겠습니다.
Burpsuite를 켜고 Proxy 설정을 합니다. 아래 포스트를 참고하면 Proxy 설정을 할 수 있습니다.
Proxy 탭에서 Intercept on을 클릭하고 사이트의 Search 기능을 실행합니다.

그러면 이렇게 HTTP 요청을 잡아올 수 있는데

여기서 우클릭 > Send to Intruder를 클릭해 Intruder 탭으로 전송합니다.

우측에 존재하는 ADD§버튼을 클릭해 첫 번째 라인 search의 값으로 <§§>를 입력합니다. 이렇게되면 §§ 사이에 지정한 payload가 입력됩니다.

이후 Burpsuite에서 제공하는 XSS cheat sheet 사이트에 접속하여 Copy tags to clipboard 버튼을 클릭해 태그 리스트를 카피합니다.

카피 후 Intruder의 payloads 탭으로 이동 후 payload settings 란에 Paste 버튼을 눌러 태그 목록을 붙여넣기 합니다.


이제 우측 상단에 Start Attack 버튼을 클릭하면 Bruteforce 공격을 시작합니다.


공격 내용을 봤을 때 Status code가 200이거나 Length의 길이가 훨씬 긴 값이 성공한 값 입니다.
여기서는 body와 customtags가 성공했습니다.
이번에는 허용되는 속성을 알아내보도록 하겠습니다.

HTTP 요청에서 search의 값을 <body%20§§=1>로 변경하고

아까 XSS cheat sheet 사이트에서 Copy events to clipboard 버튼으로 속성 값들을 복사해 payload에 입력 후 Start Attack.

성공한 속성들이 많이 있는데 이 중 onresize를 사용하겠습니다. onresize는 HTML 요소의 크기가 변경될 때 발생하는 이벤트입니다. 주로 창 크기를 변경할 때 실행됩니다.

웹 사이트 메인 화면에 Go to exploit server를 클릭.

그러면 특정 서버로 HTTP 요청을 전송할 수 있는 페이지가 열립니다.

밑에 있는 Body 입력 란에
<iframe src="https://자신의_LAB-ID값.web-security-academy.net/?search=%22%3E%3Cbody%20onresize=print()%3E" onload=this.style.width='100px'>
을 입력하고 아래에 있는 Store로 저장 후 Delever exploit to victim을 눌러 공격 전송.

페이지 상단에 있는 URL로 이동해보면

자동으로 Print() 함수가 실행되어 print를 하기 위한 창이 열립니다.
해결 완료.