티스토리 뷰

반응형

CSRF 공격이란

사용자의 권한으로 공격자가 원하는 행위를 수행하게끔 하는 것이다. 즉 공격자는 서버가 사용자(브라우저)를 식별할 때 사용하는 세션이나 쿠키를 이용하여 사용자인 척하고 서버에 요청을 보내는 것이다. 따라서 서버는 요청이 공격자 또는 사용자로부터 온 것인지 판단하지 못하여 모두 정상적인 응답을 하게 된다.

 

예를 들어 사용자가 A 사이트에 로그인을 하고 공격자가 심어놓은 비밀번호 변경 링크를 클릭하였다고 가정하자. 공격자는 사용자의 세션 혹은 쿠키를 알고 있는 상태에서 비밀번호 변경 링크를 서버에 보낸다. 서버는 요청을 수신하고 공격자가 원하는 패스워드로 사용자의 패스워드를 변경하게 된다.

 

DVWA 사이트를 이용해 사용자의 권한으로 공격자가되어 패스워드를 변경해보자.

DVWA CSRF 실습 페이지

보안 레벨을 Low로 한 결과 현재 비밀번호를 입력하지 않고 단순히 새로운 패스워드만 입력을 한다.

 

 

Change 버튼을 클릭할때의 웹페이지 소스를 먼저 보게되면 Get 메소드를 사용하여 password_new, password_conf, change 3개의 파라미터를 서버측에 전달하는 것으로 파악할 수 있다.

패스워드 변경시 HTML

 

그럼 나머지 숙제는 사용자가 로그인한 상태에서 3가지의 파라미터를 서버에게 보내는 일종의 낚시 URL를 클릭하게 해야한다.

그래서 그럴듯한 내용의 메일로 안눌러 볼 수 없도록 메일내용을 만들어 보았다^^

낚시 메일

사실 메일에 속아 로그인 버튼을 클릭하는 순간 해당 URL3가지의 파라미터가 넘어가게 된다.

<a href="http://IP주소/vulnerabilities/csrf/?password_new=1234&amp;password_conf=1234&amp;Change=Change"

 

로그인 버튼 HTML

 

로그인 버튼을 클릭하면 패스워드가 변경되었다라고 나오고 패스워드 변경은 성공하게 된다.

 

이렇게 패스워드를 바꾸면 사용자의 권한에 따라 공격자는 마음대로 개인정보를 탈취할 수 있게 된다.

이를 막는 방법은 CSRF 토큰을 함께 파라미터로 전달하는 방법을 사용하거나 현재 비밀번호입력, CAPTCHA 사용 등 사용자가 한번 더 입력해야하는 방식이 있을 수 있다.

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함