CSRF
Cross-Site Request Forgery의 약자로 사이트 간 요청 위조 공격으로 사용자가 자신의 의지와는 무관하게 공격자가 원하는 행위를 수행한다. 사이트간 요청 위조는 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 것이다.
low level
우선 비밀번호를 123으로 변경해보겠다.
요청을 보면 GET형식으로 새로운 비밀번호와 확인 문자열이 노출되는 것을 알 수 있다.
이는 CSRF에 취약하다는것을 의미하며 이것을 통해 url로 배포하는 작업을 해보면
csrf 폴더의 index.php파일안에 a태그를 이용하여 url을 집어 넣었다.
"클릭하면 아이패드 공짜!" 클릭할 시
비밀번호가 바뀌는것을 알 수 있다.
medium level
medium 레벨에서는 마지막으로 요청된 페이지가 어디에서 왔는지 검사하는 레퍼러가 추가 되었다
stripos() 함수를 이용한 단순한 문자열 비교기 때문에 레퍼러 헤더에 서버 이름 문자열이 포함되기만 해도 통과할 수 있다.
stripos() 함수로 검사하고 있는 문자열은 $_SERVER['SERVER_NAME'] 변수로 서버가 동작하는 호스트를 의미한다.
실습하는 환정이 DVWA가 설치된 환경과 동일하면 localhost로 출력될 것이다.
stripos()함수의 취약점으로는 특별한 정규식 지정자가 없기 떄문에 해당 문자열이 어느곳에 위치하든 상관없이 존재하기만 하면 필터링에 일치한다고 판단한다.그러므로 서버이름이 호스트 부분이 아니라 파일 이름에 포함되어 있어도 해당 로직을 통과할 수 있다.
http://127.0.0.1/DVWA-master/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change
low에서 실습한 url에는 이미 호스트 부분에 서버 이름이 들어가있으므로 medium 단계에서도 비밀번호가 바뀌는것이 정상적인데
정상적으로 바뀌지 않는 것을 알 수 있다.
이는 2021 1월 기준으로 다른 사이트로 이동하면 레퍼러 정보가 잘리는 strict-orgin-when-cross-origin 정책이 적용됐기 때문이다. 예를 들어 실습 url을 눌러도 사이트가 이동되면서 레퍼러 정보에는 http://127.0.0.1만 담기게 된다. 이를 해제 하기 위해서는 html에서 <a>태그 속성에 referrerpolicy="unsafe-url" 속성을 추가해주면 레퍼러 정보가 필터링 되지 않고 그대로 전달 된다.
'Web > DVWA 실습' 카테고리의 다른 글
DVWA - Insecure CAPTCHA (low,medium) 실습 (0) | 2022.10.30 |
---|---|
DVWA - File Upload (low,medium) 실습 (0) | 2022.10.30 |
DVWA - File Inclusion (low,medium) 실습 (0) | 2022.10.30 |
DVWA - Command Injection(low,medium) 실습 (0) | 2022.10.30 |
DVWA-Brute Force(low, medium) 실습 (2) | 2022.10.30 |