PortSwigger의 Academy - CSRF 문제입니다.
CSRF Attack
사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를
특정 웹사이트에 요청하게 하는 공격을 말한다.
사용자가 신뢰하는 사이트에서 발생하는 공격 기법이라는 점에서
XSS(Cross Site Scripts)기법과는 대조적인
공격이라고 할 수 있다.
간략하게 CSRF에 대해 알아봤으니 문제 예제를 이용해
더 자세히 알아보자
아까 위 문제의 사진을 해석하면
본 사이트의 이메일 변경 기능의 취약점이 CSRF 라는 사실을 알 수 있으며
우리는 이메일 변경 기능에 HTML코드를 작성해 삽입해야만
해킹을 완료할 수 있다
먼저 취약점을 분석하기 위해 사이트로 직접 들어가보자
Exploit은 웹 해킹쪽에서는 취약점을 뜻한다고 보면 된다
즉 Exploit server는 취약점 서버고
그곳으로 공격 코드를 삽입해야한다
먼저 문제에서 얻은 계정 carlos/montoya 로 로그인 해서
Email를 변경할 수 있는 기능을 사용해보도록 하자.
아니나 다를까 지급받은 사용자 계정으로 로그인 하자
Change email 항목이 활성화 되었다 이를 이용하여 Email를
변경하기 위해 Burp Suite를 사용하자
프록시 설정을 해준다음 Burp Suite 에서 프록시를 잡아보자
Burp Suite에서 잡고 확인해보면 Change Email 항목에서
Email정보를 'email' 값으로 전송하며
제일 중요한 'POST' 방식으로 전송한다는 것을 알 수 있다.
여기서 POST란?
웹상 헤더를 받음에 있어 GET/POST의 두가지 방식이 존재하는데
URL 상에 데이터가 그대로 전송되는 GET방식
https://example.com/?value=1234
#example 사이트에 value에 1234를 담아 전송 (GET방식)
데이터 형식으로 Html 헤더의 <body> 태그에 담아서 전송하는 방식이
POST 방식이다.
위 사이트에서 POST 방식으로 데이터를 전송했다는 건
우리가 <body>태그에 데이터 값을 담아 전송해줘야 한다는 것이고
email 이라는 value를 이용해 코드를 짜면 된다
가자 취약점 서버로
취약점 서버로 들어오니 Head 에는 Request 헤더가 존재하고
Body에는 "Hello, world!"라는 메시지가 있다
자 이제 Body에 공격 코드를 작성해보자
<form method="POST" action="URL">
<input type="hidden" name="VALUE_NAME" value="hakersID@attack.com">
</form>
<script>
document.forms[0].submit();
</script>
Form 태그의 method 속성을 "Post" 로 설정해주고
action에는 Url 값을 넣어준다 사이트/email/change-email 형식이 되어야 한다
name에는 변경할 값의 이름을 넣어주는데 아까
Burp Suite에서 얻은 email이라는 값을 넣어주고 value 에는
변경할 email을 넣어주면 된다.
그리고 Store 해주면 문제가 해결되었다는 메시지가 뜨며
풀이가 완료된다.
댓글