浅谈CSRF漏洞原理
什么是CSRF
跨站请求伪造(Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
CSRF和XSS的区别
- xss利用站点内的信任用户,盗取cookie。
- csrf通过伪装成受信任用户请求受信任网站
CSRF漏洞原理
一个用户正常访问登陆一个网站(A)之后,用户会存下A的cookie。当用户未退出网站并在同一浏览器中去访问恶意网站(B)。B发出向A的请求,浏览器接收到这个请求之后,会带上A的cookie去请求A。A不知道这是B的恶意请求,会根据用户的cookie信息和权限处理这个请求,这样就导致B的恶意请求被执行。
利用目标用户的合法身份,以目标用户的名义执行某些非法的操作。
eg.
假设去登陆一个网站
登陆成功之后,我们这个用户拥有更改密码的权限。
更改密码
这就是浏览正常网站的操作流程。
修改密码的链接 http://localhost//testinfo/update.php?user=aaa&passwd=456
构造恶意链接 http://localhost//testinfo/update.php?user=aaa&passwd=123456
然后我们在去访问这个恶意链接
代码示例
1 |
|
CSRF利用条件
- 用户已经登陆
- 用户访问对应url
漏洞利用的一些技巧
- 链接利用
- img标签利用
- iframe利用
- css-background利用
iframe标签内容将在页面加载过程中自动进行加载,src指向的位置就是页面请求的地址。
注意:iframe加载会出现白框,可以设置iframe的style->display:none,来不显示iframe加载内容。
可以利用css中background样式中的url来加载远程机器上的内容,从而对url中的内容发送http请求。
eg.
1 | body{ |
PSOT型CSRF可以设置表单用于提交,使用hidden属性来隐藏。
1 | <input type="hidden" name="user" value="123456"> |
CSRF防御措施
- 二次验证(js验证)取决于用户,不建议使用
- http referer头
- 设置token
- http自定义头
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 暮余笙のBlog!
评论