본문 바로가기

수업 및 해킹실습

[Linux/Web] XSS, CSRF, SSRF 공격 및 보안

XSS 공격

(준비된 웹과 DB연동 과정 생략)

게시판에서 글을 작성

글 내용은 자바 스크립트를 이용한

네이버로 리다이렉트 되는 게시글

 

게시글에서 링크로 된 복권당첨 글

클릭 시 네이버로 리다이렉트 됨

 

이번엔 글 내용에 이미지 링크 복사하여

글 내용에 자바스크립트로 링크 코드 작성

 

이미지 링크를 걸어 

이미지가 표시되는 게시글을 확인

 

<a> : 웹페이지간 연결을 해줌

(하이퍼 링크를 생성)

 

이미지를 올리고 이미지를 클릭할 때

다른 웹페이지로 연결시켜줌

 

영상 출처 : https://youtube.com/shorts/vfUZKiJufUE?si=7-Y9Y0Zx1gG9ZCYZ

이미지를 클릭시 해당 유튜브

영상으로 리다이렉트가 됨

 

 

해당 동영상의 퍼가기 기능에서

자바스크립트의 코드를 그대로 복사함

 

게시판에 복사한 코드를

그대로 내용에 붙여넣기 해줌

 

영상 출처 : https://youtu.be/_umH1e95eqU?si=ojeFFuRuAzdFfU2f

게시글에 그대로 등록한 코드를 

바탕으로 해당 영상을 찾아 띄우게

되고 영상을 시청할 수 있음

 


 

세션 하이재킹

공격자에서 getcookie.php 생성

이 코드는 사용자로부터 URL 쿼리

파라미터를 통해 전달된 쿠키 값을 저장

 

해커가 게시판에 글을 작성

해당 코드는 쿠키 정보를 공격자의

서버로 전송하는 악성스크립트(XSS)

 

해커가 악성 스크립트로 작성한

글이 게시판에 올라옴

 

hina라는 계정으로 로그인 후 

해커가 작성한 게시글을 접속함

 

공격자에서 해당 hina 계정의 세션

쿠키가 업데이트되는 것을 확인함

 

받아온 hina의 세션 쿠기 값을

해당 웹에서 Storage → cookies

Value에 값을 넣어 변조함

 

쿠키의 value를 바꾸면 

해당 세션 ID가 변경

(사용자의 계정 정보로 인증)

(세션 하이재킹 공격을 발생)

 

로그인 된 계정으로

해당 계정의 비밀번호를 바꿈

  

[쿠키 토큰 세션]

쿠키 : 클라(cookie 요청내용추가)  => 서버(set-cookie 저장소 세션 호출을 저장)   
세션 : 서버에저장 (식별 값에 의한 연결 값 저장), 계정 정보 연결
토큰 : 토큰안에 유저정보가 저장(사용자 정보 암호화), 쿠키/세션방식을 보안하기 위해서 나옴 
header payload와 verify signature의 암호화 방식, type 등 정보가 저장
payload ID/PW와 같은 사용자 정보
verify signature : base64인코딩한 header,payload,secret key를 더하여 서명 

1. 로그인
2. ID 및 PW 계정 정보를 payload에 입력
3. 토큰 유효기간 설정 (JWT) json web token(refresh token)
4. 암호화할 secret key를 사용해 access token 발급
5. 사용자는 access token을 저장하고 인증때마다 헤더에 실어서 보냄
6. 서버는 해당 토큰의 서명 값을 secret key로 복호화 하여 조작여부 유효기간 판단
7. 검증이 완료 되면 payload 디코딩하여 사용자 정보를 가져옴 

장점 : 간편 확장성 뛰어남
단점 : payload 자체에는 base64 디코딩이 가능함 
      길이가 길어져서 인증이 많아질수록 서버의 자원낭비 심해짐

 


 

보안

URL에도 XSS 공격이 실행됨

XSS는 모든 입력 값에 대한 공격이 가능

 

<script> 태그를 찾아 공백으로 교체

사용자가 입력한 악성 스크립트를 제거

 

악성 스크립트 게시글 작성시

<script>태그를 찾아 공백으로 교체하여 

공격이 수행되지 않음

 

하지만 리눅스는 대소문자를 

구별하기 때문에 대문자를 섞어서 작성시

보안이 뚫리는 것을 확인할 수 있음

 

i 플래그를 사용하여 모든

대소문자 조합을 처리함 

 

대소문자 구분 없이 처리하여 

보안이 된 것을 확인할 수 있음

 

<script> 태그를 찾아 필터링했을 때

이를 우회하기 위해 태그 일부를 삽입

 

<scr<script>ipt>에서 <script>는 필터링

하지만 <script> 전체 검사가 아닌

일부만 검사했기 때문에 다시 <script>

태그가 완성되어 뚫리는 것을 확인

 

태그 일부를 삽입해도 모든

< 문자가 포함된 부분을 제거하여

우회하지 못하게 막음

 


 

CSRF

공격자는 개발자 도구에서 

회원정보 페이지가 hidden이

아닌 것을 파악함

 

비밀번호를 1로 바꾸도록 

악성 스크립트를 작성함

대박 로또 당첨을 클릭하게되면

 

해당 계정의 비밀번호가 1로 변경됨

CSRF는 로직이 필요하기 때문에 

서버 구조를 알아야함 (사용 잘안함)

이런 이유로 SSRF가 많이 사용

 


 

SSRF

공격자가 file://127.0.0.1을 이용해 

서버의 내부 시스템에 접근함

보안상 노출되지 않아야 할 자원에 접근

 

구분 CSRF (Cross-Site Request Forgery) SSRF (Server-Side Request Forgery)
목표 사용자 대신 악의적인 요청을 보내는 것 내부 네트워크나 외부 서버에 요청을 보내는 것
공격 주체 사용자에게 악성 요청을 보내도록 유도 서버를 이용해 요청을 보냄
공격 대상 사용자가 인증된 사이트 서버의 외부 또는 내부 시스템
요청 방식 사용자가 로그인한 상태에서 요청을 위조 서버가 보내는 HTTP 요청을 조작
위협 사용자 계정 탈취, 금전적 손실, 서비스 변경 내부 시스템 정보 노출, 원격 서버 공격, 데이터 유출
방어 방법 CSRF 토큰, SameSite 쿠키 설정 등 요청 대상 필터링, 내부 서버 보호 등