Cross-Site Request Forgery(CSRF) 는 공격자가 서버에서 실행되는 악의적인 스크립트/파일을 업로드하면, 사용자가 이를 실행하면 공격자 대신 웹 서버에게 악의적인 요청을 전송하는 취약점이다. CSRF 를 통해 패스워드 힌트를 변경해보자.
bee-box 환경에서 실습해보자!
Level - low
패스워드 힌트 변경 요청을 burf suite 로 잡은 뒤, 위와 같이 url 을 복사한다. post 방식으로 데이터를 보내고 있어 아래의 Body 부분도 같이 복사해준다.
복사한 내용을 위와 같이 게시판에 img 태그를 이용하여 글을 작성해준다. 해당 글은 height 과 width 를 0 으로 설정했기 때문에 내용이 보이지 않는다.
글을 열람한 뒤, 패스워드 힌트를 조회해보면 위와 같이 pw-is-123 으로 변경된 것을 볼 수 있다.
Level - medium, high
token 값을 받아와 같이 전달하고 있다. 때문에 CSRF 공격이 불가능하다.
소스코드 분석
medium, high level 에서는 랜덤함수와 sha1 해시를 이용해 토큰 값을 만든다.
패스워드 힌트 변경 요청 때, 이 토큰 값을 hidden 값으로 같이 넘기고 있다.
토큰 값이 없거나 유효한 토큰 값이 아니라면 패스워드 힌트를 변경할 수 없다. 때문에 패스워드 힌트 변경 페이지에서만 패스워드 힌트를 변경할 수 있다.
대응 방안
1. 추측이 불가능한 별도의 토큰 값으로 인증 수행
2. Referer 검증
'웹 취약점(bee-box)' 카테고리의 다른 글
XML External Entitiy Attack (XEE) (0) | 2020.05.11 |
---|---|
CSRF (Transfer Amount) (0) | 2020.05.11 |
CSRF (Change Password) (0) | 2020.05.11 |
Broken Authentication - Password Attack (0) | 2020.04.16 |
Broken Authentication - Forgotten Function (0) | 2020.04.14 |