Reflected 방식이 공격자가 공격 대상자에게 스크립트가 포함된 URL 을 노출시키는 방식이라면, Stored 방식은 웹 페이지에 스크립트를 삽입하여 공격자가 접근했을 때 스크립트가 수행되는 방식이다.
bee-box 환경에서 실습해보자.
Level - low, medium
게시판의 입력창에 스크립트 문을 입력하면 아래와 같이 페이지에 스크립트 실행 결과가 출력되는 것을 확인할 수 있다.
이를 이용할 수 있는 공격 시나리오는 다음과 같다.
1. 게시판에 공격자의 서버로 클라이언트의 쿠키값을 보내는 스크립트를 포함한 글 작성
2. 클라이언트가 해당 글에 접근 시, 공격자의 서버로 클라이언트 쿠키 값 전송
3. 공격자가 쿠키를 이용하여 해당 클라이언트로 로그인
4. 악위적 행위 수행
Level - high
스크립트 문의 실행결과가 아닌 태그 내용이 그대로 저장되기 때문에 공격이 불가능하다.
소스코드 분석
level 이 medium 일 경우, xss_check_4() 함수에서 리턴받은 값을 글의 내용으로 출력해주고 있다.
xss_check_4() 에서는 addslashes() 를 이용하여 데이터를 필터링하고 있다. 만약 공격자가 자신의 서버로 값을 전송하는 스크립트를 작성할 경우, 서버의 주소를 큰따옴표(")를 통해 작성해야 한다. 이 때 addslashes() 함수의 필터링에 걸릴 수 있다.
level 이 high 일 경우, xss_check_3() 함수에서 리턴받은 값을 글의 내용으로 출력해주고 있다.
xss_check_3() 에서는 htmlspecialchars() 를 이용하여 데이터를 필터링하고 있다. 때문에 <> 가 < 와 > 로 변환되어 문자 그대로 출력되게 된다.
대응 방안
htmlspecialchars() 함수 사용
'웹 취약점(bee-box)' 카테고리의 다른 글
Broken Authentication - CAPTCHA Bypassing (0) | 2020.04.14 |
---|---|
XSS - Stored(Change Secret) (0) | 2020.04.13 |
XSS - Reflected(User-Agent) (0) | 2020.04.13 |
XSS - Reflected(Referer) (0) | 2020.04.10 |
XSS - Reflected(Login Form) (0) | 2020.04.10 |