XSS

웹 애플리케이션을 대상으로 한 모의해킹에서 가장 흔히 마주치는 취약점 중 하나가 바로 **Cross-Site Scripting (XSS)**이다. XSS는 외부에서 악의적인 스크립트를 웹 페이지에 주입하여 이용자의 브라우저에서 해당 스크립트를 실행하도록 만드는 공격 기법이다. 공격자는 이를 통해 세션 쿠키 탈취, Cross-Site Request Forgery (CSRF), 악성 코드 배포 등 다양한 피해를 유발할 수 있으며, 방어 기법이 여럿 존재하는 만큼 이를 우회하는 방식도 많이 나온다.


취약점 분석

취약점 분석: 임의 태그 삽입

이용자가 입력할 수 있는 필드에 임의의 태그를 삽입해보는 것은 XSS 취약점을 탐지하기 위한 첫 번째 단계이다. 그 이유는 문자의 스타일이 바뀌면 “태그가 삽입된다”라는 개념 증명이 가능해지며, 이런 태그는 Web Application Firewall (WAF)에 탐지될 가능성이 적기 때문이다. 이처럼 HTML 태그 삽입이 가능한 것으로 확인된 필드에 대해서 XSS 페이로드를 입력해봄으로써 취약점이 발생하는지 검증할 수 있다. 따라서 먼저 게시글 등록 기능에서 임의 태그 삽입이 가능한지 테스트해보자.

게시글 등록

게시글을 작성하기 위해서 먼저 회원가입을 진행한다. 이렇게 입력 필드가 많은 부분에서도 반드시 의심을 해봐야 한다. 이용자가 입력한 닉네임에 XSS 페이로드가 삽입된다면, 곧바로 Stored XSS가 발생하기 때문이다.

7a703ebd7827bffd13c6b95ca05f6a623bfacb5b1834dcd390639623f352a06a.png

그러나 별다른 취약점은 발견되지 않아, /posts 엔드포인트로 이동하여, 게시글 작성을 위해서 아래 사진처럼 우측 빨간 네모박스의 Write 버튼을 눌러준다.

그러면 아래 사진과 같이 제목, 내용, 비밀번호를 입력할 수 있는 페이지가 나온다.

706075fcfd1b47531c22be52f3f428472e42043850d5ad29fe350d7063d8cd40.png

어떤 HTTP 요청 패킷이 보내지는지 확인하기 위해 브라우저에서 F12 키를 눌러 개발자 도구(DevTools)를 열어주고, 아래 사진과 같이 [Network] 탭을 열어둔다.

c7cca56716add73484218374e3462207294949eb47d3b71e3e3bf8ba5e45c309.png

아래의 사진과 같이 제목과 내용에 문자열을 굵게 해주는 <b> 태그를 사용해 각각 <b>Title</b>, <b>Content</b>를 입력한 뒤, Submit 버튼을 누른다.

8b19eb1943b667e4d22513b90ff1afaa8900635f4815f0555a4f408e789a6565.png

[Network] 탭을 보면, 아래 사진과 같이 /post/create 엔드포인트로 POST 요청이 간 모습을 볼 수 있다.

096ce56435c24740819975ccb8edeaa619f6de0caab60ce0425256ac969d46f7.png

아래 사진처럼 게시글이 작성되었지만, 입력한 값이 볼드체로 나타나지 않고, 단순 문자열로 인식된 모습을 볼 수 있다. 따라서 이 부분에서 <> 같은 문자를 서버 쪽에서 HTML 엔티티로 변환하는 과정을 수행할 것이라고 추측할 수 있다.