취약점
게시판과 같이 사용자가 입력한 정보가 서버 측 DB에 저장되어 있다가 타 사용자가 해당 정보를 열람할 때
DB에 저장되어 있는 정보를 가져와 화면에 출력하는 방식의 웹 애플리케이션에서 발생하는 취약점으로서,
XSS의 가장 핵심적인 취약점이라고 할 수 있다.
불특정 다수를 대상으로 열람자의 웹브라우저에서 공격 스크립트를 실행할 수 있기 때문에 심각한 위협이 발생한다.
공격자가 XSS를 목적으로 악성 스크립트를 삽입하여 둘 수 있는 위치는 비단 게시판의 글 본문뿐만 아니라 제목, 작성자 이름, 날짜, 첨부파일 이름 등이 모두 가능하며, 또한 게시판 외에도 사용자 프로필의 닉네임, 주소, 전화번호, 등 사용자가 입력이 가능한 모든 데이터에 스크립트가 삽입될 수 있다.
공격 과정
실습
환경 : VMware CentOS 8
172.30.1.56 웹서버
172.30.1.53 해커
◾ test계정으로 악성 스크립트를 작성하여 게시판에 등록합니다!
◾ 해커의 웹서버로 세션 값을 전달하는 스크립트 등록!
◾ 관리자가 글을 열람했고 스크립트는 수행되었습니다!
◾ 관리자의 세션이 잘 들어왔습니다, 로그인해볼까요?
◾ 개발자 모드(F12)로 들어와서 쿠키값을 수정하고 새로고침을 해줍니다
◾ admin으로 로그인이 되었죠?
ID와PW를 모르더라도 세션을 통해 관리자로 로그인에 성공하였습니다!
보안조치
1. 특수문자(< >)를 HTML문자로 치환
2. 필요한 경우 허용 특수문자만 허용하도록 화이트리스트로 운영한다
특수문자(< >)를 HTML문자로 치환
public int write(String bbsTitle, String userID, String bbsContent) {
//특수 문자를 html문자로 치환
bbsTitle = bbsTitle.replace("<","<").replace(">",">");
bbsContent = bbsContent.replace("<","<").replace(">",">");
String SQL = "INSERT INTO BBS VALUES (?,?,?,?,?,?)";
try {
PreparedStatement pstmt = conn.prepareStatement(SQL);
...
} catch (Exception e) {
e.printStackTrace();
}
return -1;
}
마무리
XSS공격이나 CSRF 공격은 스크립트 문을 악용하는 특징을 가지기 때문에, 스크립트에서 < >만 막아줘도 스크립트 공격을 막을 수 있다~
'웹 > 보안 설정' 카테고리의 다른 글
[JSP] 9. 디렉토리 인덱싱 (0) | 2020.12.27 |
---|---|
[JSP] 7.URL 파라미터 조작 (0) | 2020.09.09 |
[JSP] 4.파일 다운로드 (0) | 2020.09.08 |
[JSP] 2.SQL 인젝션 (0) | 2020.09.08 |
[JSP] 보안 개발 가이드 개요 (0) | 2020.09.05 |