CSRF는 Cross-site request forgery의 약자로 사이트 간 요청 위조 또는 크로스 사이트 요청 위조를 뜻한다.

XSS( 사이트 간 스크립팅) 을 이용한 공격이 사용자가 특정 웹사이트를 신용하는 점을 이용한 것이라면,

CSRF는 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 것이다.



1. 발생 원인

개별 링크와 폼이 사용자 별로 예측 가능한 토큰을 사용할 때

-> 예측 불가능한 토큰이 있으면 공격자는 요청 메시지를 변조할 수 없고, 예측 가능한 토큰이 있으면 요청 메시지를 변조할 수 있다.

- 인증이나 세션, 쿠키 등 모든 웹사이트에서 인증된 사용자가 보내는 데이터는 정상적인 경로를 통한 파라미터 요청으로 판단

-> 정상적인 요청과 비정상적인 요청을 구분하지 못한다.




2. 공격 과정



3. 공격 영향

1.사용자 계정 생성

2. 중요 데이터 액세스

3. 게시글 내용 변경

4. 관리자 권한 획득

5. 라우터 및 공유기 설정 변경

6. 계정 정보 변경

etc.



4. 공격 방법


공격자가 올린 게시글을 읽었을 때 피해자의 정보가 수정될 수 있도록 하거나 관리자의 권한을 얻도록 스크립트를 작성하는 것이 대표적인 예이다.




비밀번호를 바꾸는 페이지이다.

페이지 소스를 보면 다음과 같다.




html 소스는



새로운 php파일을 만들고 password_new 의 value가 admin이 되도록 바꿔준다. 


<form action="http://~~~~~~~~~~~~" method="GET">

New password:<br />

<input type="password" AUTOCOMPLETE="off" name="password_new" value='admin'><br />

Confirm new password:<br />

<input type="password" AUTOCOMPLETE="off" name="password_conf"><br />

<br />

<input type-"submit" value="change" name="Change">

</form>




아까의 패스워드 변경 페이지에 test값을 넣고 Change를 누르면 비밀번호가 변경된다.




5. 예방 방법

1. 단순히 Session Token만을 이용한 권한 부여를 금지한다.

2. REFERER가 정상적인지 확인한다.

3. XSS 취약점이 없는지 확인한다.

4. GET 방식과 POST방식을 구분해 준다.


'WEB > Web Hacking' 카테고리의 다른 글

Blind SQL Injection (이론편)  (0) 2017.05.14
파일 다운로드 취약점  (0) 2017.05.08
Drive-By-Download(DBD) 공격(이론편)  (0) 2017.04.24
파일업로드 취약점  (0) 2017.04.09
SQL injection  (0) 2017.03.25

+ Recent posts