CSRF检测的两种方法
方法1:CSRFTester-1.0
使用工具注意事项:
-
run.bat中jdk的目录按当前电脑路径自行更改点击run.bat才可使用
-
关于浏览器进行代理问题须是HTTP的代理,在CSRFTester中才接收的到
-
功能略显不足,在部分测试页面中抓取的表单不能修改参数
这里使用metinfo5.3.1成功进行了工具的使用研究
1.登录metinfo5.3.1的后台创建test用户并使CSRFTester进行监听
2.停止监听,找到对应的请求进行参数修改这里创建了一个fuck用户,然后点击底部Generate HTML
3.可以看到成功创建用户fuck
方法2:bp测试CSRF
1.创建用户bp抓取到提交的表单右键如图发送到CSRF Poc中
2.如图更改参数,生成脚本,浏览器测试
3.中间会生成一个链接复制好到地址栏粘贴打开(注意要在开着bp的代理情况下访问该复制的链接)
出现一个按钮点击提交发送请求
然后在bp中放行成功创建管理员用户root
关于CSRF的防御
-
无效的防御
很多防御方式都没有办法解决CSRF 的问题。@ 使用秘密cookie
请记住,所有cookie,即使是秘密的cookie,也会随着每个请求一起提交。无论最终用户是否被欺骗提交请求,都将提交所有身份验证令牌。身份凭据。@ 仅接受POST请求
可以开发应用程序以仅接受用于执行业务逻辑的POST请求。误解是由于攻击者无法构建恶意链接,因此无法执行CSRF攻击。不幸的是,这种逻辑不正确。有许多方法可以让攻击者欺骗受害者提交伪造的POST请求,例如在隐藏值的攻击者网站中托管的简单表单。此表单可以由JavaScript自动触发,也可以由认为表单会执行其他操作的受害者触发。@ 多步交易
多步交易不足以预防CSRF。只要攻击者可以预测或推断完整的事务的每个步骤,就可以实现CSRF。@ URL重写
这可能被视为一种有用的CSRF预防技术,因为攻击者无法猜测受害者的会话ID。但是,用户的会话ID在URL中公开。所以不建议通过引入另一个安全漏洞来修复一个安全漏洞。@ HTTPS
HTTPS本身无法抵御CSRF。但是,HTTPS应被视为任何预防措施值得信赖的先决条件。 -
有效防御
@ 验证Referer 字段
根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站。比如某银行的转账是通过用户访问[http://172.16.132.161/bank/action.php?username=hacker&money=1000&submit=%E4%BA%A4%E6%98%93]页面完成,用户必须先登录,并且访问,[http://172.16.132.161/bank/index.php],然后通过点击页面上的按钮来触发转账事件。当用户提交请求时,该转账请求的Referer值就会是转账按钮所在页面的URL。而如果攻击者要对银行网站实施CSRF攻击,他只能在自己的网站构造请求,当用户通过攻击者的网站发送请求到银行时,该请求的Referer是指向攻击者的网站。因此,要防御CSRF攻击,银行网站只需要对于每一个转账请求验证其Referer值,如果是以172.16.132.161 的地址或域名,则说明该请求是来自银行网站自己的请求,是合法的。如果Referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求。@ 添加Token 验证
CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,该请求中所有的用户验证信息都存在于Cookie中,因此攻击者可以在不知道这些验证信息的情况下直接利用用户自己的Cookie来通过安全验证。由此可知,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,并且该信息不存在于Cookie之中。鉴于此,系统开发者可以在HTTP请求中以参数的形式加入一个随机产生的token(随机字符串),并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。@ 二次验证
二次验证,就是在转账等关键操作之前提供当前用户的密码或者验证码。二次验证可以有效防御CSRF 攻击。@ 用户养成良好的习惯
对于普通用户来说,都学习并具备网络安全知识以防御网络攻击是不现实的。但若用户养成良好的上网习惯,则能够很大程度上减少CSRF攻击的危害。例如,用户上网时,不要轻易点击网络论坛、聊天室、即时通讯工具或电子邮件中出现的链接或者图片;及时退出长时间不使用的已登录账户,尤其是系统管理员,应尽量在登出系统的情况下点击未知链接和图片。除此之外,用户还需要在连接互联网的计算机上安装合适的安全防护软件,并及时更新软件厂商发布的特征库,以保持安全软件对最新攻击的实时跟踪。