ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CSRF 실습2 (CSRF 토큰 인증 우회)
    IT/웹 해킹 2024. 1. 24. 16:13

    [이 블로그는 해킹 공부하면서 가볍게 정리용으로 기록 및 내 생각을 끄적여 두기 위한 블로그(라 쓰고 일기라 읽는)이다.]

     

    • 목차
    1. CTF 문제 및 시나리오
    2. 실습

    1. CTF 문제 및 시나리오

     

     

    이번 문제는 CSRF 토큰이 추가되어 토큰 인증 방식을 우회하여 관리자의 비밀번호를 바꾸게 하는 CSRF 공격을 할 것이다. 지난 번과 마찬가지로 POST 방식을 사용하여 코드를 만들 것이고 XSS 취약점이 있는 게시판에 저장하여 게시물 링크를 보낼 계획이다.

     

    2. 실습

    1) 마이페이지에서 변경할 새로운 비밀번호를 넣고 Update 버튼을 누른다.

     

    2) 회원 정보 수정에 성공했다는 알림 창이 뜨면서 이번엔 로그인 페이지가 아닌 로그인 된 상태의 메인페이지(index.php) 로 이동하게 된다. 

     

     

    3) 프록시에서 패킷을 확인해보니 그대로 session=true 인증이 있고 여기에 csrf_token 이라는 인증 단계가 추가된 것을 볼 수 있다.

    처음 mypage에 접근시 response에서 랜덤한 값의 csrf토큰을 생성하고 update 버튼을 눌러 비밀번호를 변경 시도하면 requset에서 파라미터 값으로 request에서 받았던 값 그대로 붙여 요청하게 된다.

    

     

    4) reponse의 input 태그에 토큰을 생성한 것을 확인하고 개발자 도구의 콘솔창에서 혹시나 하고 확인해보니 HTML 객체에 토큰값이 생성된 것을 볼 수 있다.

    그럼 여기서 토큰을 가져올 방법을 생각해보자... 지난 번 DOM 객체에 접근했을 때 썼던 자바스크립트의 getElementsByName 함수를 사용하면 될 것 같다. 

     

    5) XSS 취약점이 있는 게시판 글쓰기에 CSRF 공격을 위한 스크립트를 작성하기

     

    -코드 설명-

    • iframe 태그로 마이페이지 주소를 넣어준다. (처음 접근시 생성되는 토큰값을 위함)
    • 자바스크립트 코드에서 onload 를 이용하여 iframe이 실행 됐을 때 함수가 실행되게 끔 해준다. 
    • contentDocument로 frame_1 문서의 내용을 변수 a 에 담아준다.
    • 다시 csrf_token의 객체name의 값을 csrftoken이라는 변수에 담아준다.
    • document.write로 iframe을 또 띄워 update.php 로 이동하는 form 태그를 작성해준다. (이때 괄호 안의 내용은 띄어쓰기나 엔터키를 쓰면 안 된다.)
    • 사용자가 모르게 form 태그 문서를 넘길 수 있게 submit 함수를 사용하여 마무리한다.

    6) 게시물의 URL을 복사하여 링크를 관리자에게 보낸다.

     

    7) 관리자의 비밀번호가 바뀐 지 로그인 확인

    플래그 획득!

Designed by Tistory.