Web 모의해킹

웹보안) CSRF (Cross - Site Request Forgery)

5_jinseok12 2018. 3. 23. 15:48
728x90

CSRF란?

Cross - Site Request Forgery  : 교차 사이트 요청 위조 라고 할 수 있다

특정 사용자를 대상으로 하지 않고 불특정 다수를 대상으로 로그인된 사용자가

자신의 의지와는 무관하게 공격자가 의도한 행위(수정,삭제,등록,송금 등)를 하게 만드는 공격기법.

CSRF는 기본적으로 XSS (Cross Site Script) 공격과 매우 유사하다.

XSS 공격의 발전된(변종된) 형태로 보기도 한다.

둘의 차이점은 XSS 공격은 악성 스크립트가 클라이언트에서 실행되는 반면에

CSRF 공격은 사용자가 악성 스크립트를 서버에 요청한다는 차이가 있다,

 

즉 XSS는 script를 이용한 공격을 할 수 있고 CSRF는 HTML을 이용한 공격이라고 할 수 있다.

 

일반적으로 CSRF 공격이 성공하려면 수정, 삭제, 등록하는 과정에서 사용자를 구분하는

인숫값이 존재하지 않아야 한다.

특정 사용자를 구분하는 인수가 있으면 한 사용자에게만 적용되거나 인증과정을 통해

CSRF 공격을 막을 수 있기 때문이다.

 

공격 방식은 GET 방식과 POST 방식이 있다.

 

[그림 1] 임의의(TEST) 계정 생성

 

우선 해당 페이지에서 임의의 계정을 생성했을때 Level 5권한이 있음을 알 수 있다.

이제 임의의 계정 권한을 바꾸기 위해 소스코드를 확인한다.

 

 

 

[그림 2] Source Code 확인

 

해당 소스코드를 통해 현재 페이지에 대한 정보를 알아낼 수 있다

exec 는 view_member 라는 변수로 지정되어 있다.

그뿐만 아니라 page_num는 Value=1, group_no 는 Value=1, movelevel 등의 정보를 확인할 수 있다.

 

 

 

[그림 3] Level 5일때 최고 관리자로 지정되어 있음을 확인

 

modify를 클릭하여 수정화면에 들어가보자.

위에 사진을 보면 현재 페이지의 Level 5로 설정되어 있는 테스트 계정인 "jinseok"

Grant Level인 최고관리자로 지정되어 있음을 알 수 있다.

이제 해당 페이지의 소스코드를 확인해보자

각각의 페이지마다 실행시키는 기능이 다 다르기 때문에 소스코드 또한, 다 다르므로

페이지에 대한 정보를 얻으려면 해당 페이지마다 소스코드를 확인해줘야 한다.

 

 

 

[그림 4] 수정화면(modify)의 소스코드 화면

 

수정화면에서의 소스코드를 확인해보자.

상당히 많은 정보들을 얻을 수 있다.

폼에 대한 정보로부터 exec = view_member 를 exec2=modify_member_ok의 이름을 가진것을 확인.

Level의 기능에 대한 변수이름은 level 이다.

변수들의 이름을 알았으니 이제 value를 통해 값을 변경하면 권한이 바뀌는 것을 확인할 수 있다.

 

관리자의 기능을 관리하는 변수 이름은 is_admin임을 확인할 수 있다,

is_admin의 value 값이 3일땐 일반관리자
is_admin의 value 값이 2일땐 그룹관리자

is_admin의 value 값이 1일땐 최고관리자

위에 is_admin의 value 값을 변경하면 일반관리자가 그룹관리자, 최고관리자가 될 수 있다.

 

 

 

GET 방식

 

[그림 5] GET 방식을 통한 정보 수정

 

이제 각 기능들의 변수이름을 알았으니 GET 방식을 통해 기능들을 바꿔본다.

GET방식은 해당 페이지의 URL을 통해 변수의 값을 변경하여 접근할 수 있다.

GET방식으로 입력할땐 위에 input 방식의 내용들을 입력하고 원하는 값으로 수정하면 된다. 

변수가 끝날땐 &를 붙여서 이어준다. [그림 5]를 참고하면 된다.

 

 

 

[그림 6] Movelevel 값을 변경

Get 방식을 통해 movelevel=1 로 설정된 값을  movelevel=2 로 변경하였다.

그랬더니 Level 2로 수정된 것을 확인할 수 있다.

 

 

POST 방식

 

[그림 7] POST 방식

GET 방식과 마찬가지로 소스코드에서 input에 대한 정보를 가져온다,

 

 

 

[그림 8] 콘솔창을 통한 입력

웹 페이지에서 f12를 눌러서  콘솔창에 위의 사진과 같이 입력하면 된다

입력할때 주의사항은 document.writr(" ") 안에는 엔터가 들어가선 안된다. 즉 한줄로 쭉 나열해서 입력해야 한다

제대로 작동된다면 왼쪽과 같은 제출이 나타날 것이다.

제출을 클릭하면 내가 지정했던 값으로 바뀌는 것을 확인할 수 있다

대응방안

CSRF 공격은 XSS 공격에 기반하고 있으므로 XSS 방어 방법과 동일한 방법으로 기본적인 CSRF에 대해 대응이 가능하다.

 

1.  스크립트 필터링

2.  중요 페이지 요청 시 재인증 요청

3.  사용자 Form / URL 에 의한 요청시 토큰을 추가 / 검증

반응형

'Web 모의해킹' 카테고리의 다른 글

Webhaking.kr에서 회원가입  (0) 2019.05.13
XSS (Cross Site Scripting)  (2) 2018.03.24
웹보안) DataBase 와 PHP  (0) 2018.03.09
웹보안) 데이터베이스 개념 및 연동  (0) 2018.03.08
웹보안) 사용자 인증  (0) 2018.03.08