카테고리 없음

CSRF 실습과 사례 분석

minpo 2024. 11. 3. 06:44

sop가 생기고 이를 우회하기 위해서 csrf 공격이 많이 발생하였다.

 

하지만 현재, csrf token 및 samesite가 lax로 디폴트가 되면서 CSRF 공격은 owsap top 10에서 제외되었다.

 

일단 csrf 토큰이 있는 경우 같은 도메인 내에서의 CSRF의 공격이 힘들어질 수 있으며, samesite의 경우 GET 요청을 제외하고, POST 요청 등에서 cros origin일 경우 쿠키값을 제외시키고 요청을 보냅니다.

 

 

CSRF 토큰에 대해서 구체적으로 설명하면, 아이디 변경 page가 존재한다고 가정합니다. 아이디 변경 page에 접속하면 접속한 사람의 세션에 랜덤한 CSRF 토큰값을 넣습니다. 이후, 페이지를 랜더링 할때 input의 hidden으로 csrf 토큰 값을 value로 설정합니다. 아이디 변경요청이 들어올 경우, 세션에 있는 CSRF 토큰과 input hidden value로 들어온 CSRF 토큰값을 비교하여, 이것이 정상적인 요청인지 확인합니다.

 

그렇기 공격이 성공하기 위해서 CSRF 토큰이 없거나, 토큰값을 유출할 수 있어야 합니다(CSS injection) 등등 .. 또한, html이 인젝션 되는 환경이어야 합니다. 

 

** GET 요청의 경우 CSRF에 취약한 경우가 많긴 하지만, 대체적으로 비밀번호 변경, 아이디 변경등은 post 요청인 경우가 많습니다. **

 

 

일단 GET 요청의 CSRF의 요청의 경우 img 태그를 이용하고, POST 요청의 경우 form 태그를 이용할 수 있습니다.

 

다음과 같은 요청을 보내어 글을 쓸 때,

<body onload="document.forms[0].submit()">
<form method="post" enctype="multipart/form-data" action="http://127.0.0.1/action.php">
  <input type="hidden" value="hello csrf" name="title">
<input type="hidden" value="1234" name="password">
<input type="hidden" value="abcef" name="content">
<input type="hidden" value="write" name="mode">
<input type="submit" >
</form>
</body>