(악의적인 행위의 책임은 사용자 본인에게 있습니다.)
CSRF 공격이란 Cross Site Request Forgery의 약자로 사이트 간 요청 위조라고 부른다.
어떤 사용자에게 피싱을 해서 사용자 모르게 패스워드를 변경하는데 사용한다.
피싱이란 사회공학기법중 하나로 이메일이나 게시판을 이용하여 사람들을 속이는 기법이다.
CSRF 공격은 두가지의 전제 조건을 가진다.
첫번째는 일반 사용자가 해당 웹 페이지에 로그인이 되어있어야 하고,
두번째는 사용자가 피싱을 당하여야 된다는 것이다.
로그인이 되어 있어야 하는 이유는 세션id값을 같게 만들기 위해서이다.
다음의 그림은 CSRF의 코드 및 예제입니다.
위 그림과 같이 변경할 비밀번호에 normal이라고 적고 버프스위트로 확인해보면 다음 그림과 같습니다
get요청이 전달되었고 password_new와 password_conf의 파라미터와 Change파라미터가 전달되었다.
다른웹사이트에서 링크를 눌러 이 요청이 전달된다면 패스워드가 변경 될 수 있다.
하지만 여기에서 필요조건은 사용자의 세션이 유지되어야 한다는 것이다. 세션 쿠키의 값이 같아야
같은 사용자로 보고 비밀번호를 변경할 수 있기 때문이다.
이 코드는 ajax를 이용하여 url와 파라미터를 똑같이 구성을 한것이다. 코드를 보면 패스워드를 hacker로
변경하고 있으며 <body>태그의 Click 링크를 눌렀을 때 poc()함수가 실행되도록 했다.
이다음으로는 해당 url로 들어갈 수 있는 피싱메일을 작성해서 보낸 뒤 사용자가 읽으면 된다
여기서 Click을 눌렀을 때는 위의 코드를 통해 사용자의 비밀번호가 hacker로 바뀌게 된다
왼쪽은 피싱을 통한 url을 접근했을 경우의 요청이며 오른쪽은 정상적으로 사용자가 비밀번호를 변경했을 때의 상황이다.
Referer헤더는 현재의 요청이 어디서 시작되었는지 알려주는 헤더인데 이것이 다른 것을 확인할 수 있다.
왼쪽과 같은 경우에는 해커가 운영하는 서버로 접근을 하지만 오른쪽과 같은 경우에는 정상적인 곳에서 시작되었음을 알 수 있다.
하지만 위의 코드처럼 Referer헤더를 검사하는 부분이 있다면 이전의 방법이 막히게 된다.
이렇게 된다면 해당 스크립트를 해커 사이트가 아닌 웹서버 자체에서 실행이 된다면 Referer헤더를
검사하는 루틴을 우회할 수 있다.
또 다른 취약점 중 하나는 위에서 eregi 함수를 사용하는데 이 함수는 앞의 문자열이 뒤의 문자열에 포함되는지
확인하는 함수이다. 이 경우에 서버주소만 같게 만들어 준다면 충분히 우회가 가능하다.
예를들면 스크립트 파일의 이름을 cert_localhost.html 과 같은파일로 공격을 하게된다면 검사루틴이 우회가 가능하다.
'WebHacking' 카테고리의 다른 글
File Inclusion 공격 (0) | 2018.07.31 |
---|---|
BeEF 사용법 (0) | 2018.07.29 |
Stored XSS 공격 (0) | 2018.07.29 |
Reflected XSS 공격 (0) | 2018.07.29 |
Command Injection (0) | 2018.07.28 |