CSRF漏洞小记
实例:2007年Gmail的CSRF漏洞
https://www.davidairey.com/google-Gmail-security-hijack/
#什么是CSRF漏洞
Cross-site Request Forgery
跨站请求伪造
攻击者盗用了你的身份,以你的名义发送恶意请求
CSRF能够做的事情:以你的名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账
#CSRF漏洞利用条件
–(服务器对客户端的信任)用户已获取服务器认证,登陆网站,并在本地生成cookie(已进行网页认证)
–攻击者(或黑客)提供的恶意链接,受害者必须在不登出存在漏洞的网站,同时使用一个浏览器打开(可通过社工的方法)
–网站除了验证cookie,没有特殊验证方法
#CSRF漏洞检测方法
–使用OWASP CSRFTester工具进行检测。它是OWASP推出的CSRF半自动化软件,省去了CSRF最繁琐的过程-------代码构造。 使用代理抓取我们在浏览器中访问过的所有的连接及表单等信息,修改相应的表单等信息,重新提交,如果测试请求成功被网站服务器接受,则说明存在CSRF漏洞。
–使用burpsuite对CSRF漏洞进行检测。 首先抓取认为可能存在CSRF漏洞 的请求数据包,然后查看是否存 在token或referer验证。 如果不存在验证则可能存在CSRF 漏洞,此时可使用burpsuite的 Engagement tools 去生成 CSRF 漏洞的PoC,去验证CSRF 漏洞。
#常见的CSRF攻击类型
–GET类型:
这种类型的CSRF一般是由于程序员安全意识不强造成的。GET类型的CSRF利用非常简单,只需要一个HTTP请求:
<img src=http://wooyun.org/csrf?xx=11 />
在访问含有这个img的页面后,成功向http://wooyun.org/csrf?xx=11发出了一次HTTP请求。所以,如果将该网址替换为存在GET型CSRF的地址,就能完成攻击了。
–POST类型:
这种类型的CSRF危害没有GET型的大,利用起来通常使用的是一个自动提交的表单:
<form action=http://wooyun.org/csrf.php method=POST>
<input type=“test” name=“xx” value=“11” />
</form>
<script> document.forms[0].submit(); </script>
访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作
#XSS与CSRF区别
CSRF:需要用户先登录网站A,获取 cookie
XSS:不需要登录
CSRF:是利用网站A本身的漏洞,去请求网站A的API
XSS:是向网站 A 注入 JS代码,然后执行 JS 里的代码,篡改网站A的内容
#防御CSRF的策略
–验证 HTTP Referer 字段
–在请求地址中添加 token 并验证
–在 HTTP 头中自定义属性并验证