CSRF ( Cross Site Request Forgery )
CSRF ( Cross Site Request Forgery ) 란?
CSRF는 사이트 간 요청 위조의 줄임말로, 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점이다.
이 취약점을 악용하면 누군가의 계정으로 돈을 보내 금전적인 이득을 취하거나, 광고성 혹은 유해 게시글을 작성할 수 있고,
관리자의 계정을 탈취하여 사이트에 혼란을 야기할 수 있다.
CSRF 공격 과정
- 사용자는 보안이 취약한 서버에 로그인을 한다.
- 사용자의 세션 정보가 브라우저 쿠키에 저장된다.
- 공격자는 서버에 인증된 브라우저의 사용자가 악성 스크립트 페이지를 누르도록 유도한다.
ex) 악성 스크립트를 게시글에 작성, 메일을 통해 악성 스크립트 전달 등 - 사용자가 악성 스크립트가 작성된 페이지에 접근할 시 쿠키에 저장된 Session Id가 브라우저에 의해
자동적으로 서버에 요청 ( 공격자는 페이지 접근 시 서버에 요청을 보내는 방식을 알아야 함 ) - 서버는 Session Id를 통해 인증된 사용자의 요청이라고 판단 후 처리.
CSRF의 조건
- 사용자가 이미 서버로부터 인증을 받은 상태
- 쿠키 기반으로 서버 세션 정보를 획득 가능 여부
- 공격자는 서버의 API 요청 방법에 대한 사전 지식
[DVWA 실습]
[ LOW ]

Low 레벨의 CSRF 실습 탭이다.
현재 DVWA에 로그인 되어있는 admin 계정의 패스워드를 변경하는 탭이 보인다.

admin 계정의 패스워드를 'password'로 변경해보았다.

URL 주소에 패스워드에 대한 정보가 포함되어있는 것을 확인할 수 있다.

패스워드인 'password'로 로그인을 시도한 결과, 정상적으로 로그인이 되었다.

패스워드를 변경하는 것에 대한 정보가 URL에 포함되어 있기 때문에, 이를 이용하여
사용자의 패스워드를 강제로 변경하도록 할 수 있게 되었다.
그렇기에 다른 사용자의 패스워드를 'yes'로 강제로 변경하도록 URL 주소를 수정하였다.
이제 CSRF 공격을 해보자.

DVWA Stored XSS 탭에 있는 방명록에 패스워드를 변경하게 만드는 코드를 작성하여 게시글을 남긴 뒤,
페이지를 나갔다가 다시 들어와보겠다.

단순히 방명록이 남겨진 페이지에 접속을 했을 뿐인데, CSRF의 패스워드 변경 페이지로 리다이렉트 되고
아래에 패스워드가 변경되었다고 뜨는 모습을 확인할 수 있다.

이후, 처음 변경했던 패스워드인 'password' 로 admin 계정에 로그인을 시도해 본 결과,
패스워드가 틀렸다고 뜨는 모습이다.

패스워드를 'yes' 로 변경하도록 스크립트를 작성했기 때문에, 'yes'로 다시 로그인을 해본다.

정상적으로 로그인이 되는 모습을 확인할 수 있다.
[ Medium ]
문제를 풀이한 방식이 Low 레벨과 동일하여 Low 레벨과의 차이점만 서술하겠다.

Medium 레벨의 CSRF 소스 코드 중 일부만을 발췌하였다.
Server Name과 Referer를 체크하는 코드가 작성되어 있었다.
Referer는 쉽게 말하자면 요청을 보낸 곳이 어디인지에 관한 것이다.이것이 동일한 경우 요청을 처리하기 때문에, 동일한 서버에서의 접근이 아닐 경우요청이 처리되지 않는다는 뜻이다. 때문에, 동일한 서버의 Stored XSS 탭에 존재하는 방명록에스크립트를 작성하여 게시하면, Low 레벨과 동일하게 패스워드가 변경되는 것을 확인할 수 있다.

[ High ]
< 이후 실습 예정 >
'Web-Hacking > DVWA' 카테고리의 다른 글
| [DVWA 실습] SQL Injection (0) | 2024.01.28 |
|---|---|
| [DVWA 실습] DOM based XSS (0) | 2024.01.14 |
| [DVWA 실습] Reflected XSS (0) | 2024.01.12 |
| [DVWA 실습] Stored XSS (0) | 2024.01.12 |