TeamH4C

[빡공팟 5기] W5 : DVWA 실습 - CSRF

이유갬 2022. 10. 23. 02:19

[CSRF 취약점의 정의]

XSS 와 혼동하기 쉬운데 (일단 필자가 가끔 혼동함)

XSS 는 사용자의 요청을 변조하는 것이라면 CSRF 는 웹 브라우저의 요청을 변조하는 것이다.

일단 이 공격은 사용자가 해당 링크를 눌러야 성립이 된다.

인증된 사용자가 링크를 누르면 쿠키를 함께 전송하여 의도하지 않은 행위를 하게 된다.

 

[실습 내용]

admin 의 비밀번호를 바꿔보자.


[초기 화면]

- 새로운 비밀번호를 입력하고 새로 입력한 비밀번호를 확인하는 창이다.

- 해당 칸에 입력을 다 하고 버튼을 누르면 비밀번호가 변경된다.

- 이런식으로 변경이 완료된다.

- 참고로 이 기능에서 입력받는 곳에서도 문제가 있다.

- 현재 로그인 된 계정의 비밀번호를 다시 한번 묻지 않는 것이다! 그렇다면 로그인이 된 상태에서 해당 인증 정보를 이용한다는 말이 되는 것이다.

- 소스 코드를 살펴 보자!

[View Source]

- 옆 부분이 살짝 잘렸는데 눈 여겨 보야할 부분은 아니다.

- 내가 생각하기에 중요한 부분은 이 부분이다.

- 결국 CSRF 는 인증된 사용자가 링크를 누르게 유도하는 것이다. -> 그리고 인증된 사용자의 쿠키를 함께 전송하여 브라우저가 요청한 것 마냥 의도하지 않은 행위를 발생시킨다.

- 이를 이용하여 어떤 의도하지 않은 행위를 발생시킬 수 있을까 고민해보았다.

- dvwaCurrentUser() -> 이게 사용자의 쿠키 정보를 이용하는 부분인 것 같다.

- 소스코드를 다시 보면 비밀 번호 변경을 GET 메소드를 이용하는 것을 볼 수 있다.

- 이는 URL 에 그대로 보이게 된다.

- 한번 URL 에서 수정해보았다.

- 그리고 로그아웃 후 admin 을 password 로 로그인해보니 로그인에 성공했다.

- 그렇다면 URL 을 이용하여 비밀번호를 변경할 수 있으므로 원하는 비밀번호를 셋팅해놓고 URL 을 클릭하게 한다면 의도치 않은 행위를 발생시킬 수 있다.

- 따라서, 사용자가 해당 링크를 누르게 하여 사용자가 설정하지 않은 비밀번호로 변경이 가능하다. -> 이를 이용하여 피싱 메일을 만들어 보았다.

- 메일에서 HTML 태그를 사용할 수 있으므로 password_new 와 password_conf 에 변경 되길 원하는 비밀번호를 URL 에 포함시키는 것이다.

- 해당 링크를 눌러보았다.

- 링크를 눌렀더니 비밀번호가 변경됐다는 메시지가 떠있다.

- 로그아웃을 하고 다시 로그인해봤는데 원래 비밀번호로 로그인 되지 않는다.

- 피싱 메일에 사용한 비밀번호를 재입력해보았다.

- 로그인에 성공했다!

- 사용자는 본인이 비밀번호를 변경하지 않았는데도 링크를 눌렀더니 의도하지 않은 비밀번호 변경이 실행되었다.

- 이렇게 CSRF 실습을 완료했다!