FavoriteLoading
1

浅谈csrf

概念

CSRF概念:

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

常见特性:

依靠用户标识危害网站

利用网站对用户标识的信任

欺骗用户的浏览器发送HTTP请求给目标站点

另外可以通过IMG标签会触发一个GET请求,可以利用它来实现CSRF攻击。

浏览器的同源策略:

同源指的是三个相同:

  • 协议相同
  • 域名相同
  • 端口相同

举例:

http://www.abc.com/1.html 协议是HTTP,域名是www.abc.com,端口是80,它的同源:
http://www.abc.com/lz/2.html(同源)
http://www.12.com/2.html(不同源,域名不同)
http://www.abc.com:8080/index.html(不同源,端口不同)
ftp://www.abc.com(不同源,协议不同)

同源目的:

保护用户信息安全,防止恶意的网站窃取数据。

例如,网站A的cookie,受到同源策略保护就不会被网站站B的恶意代码运行,因为不同源。

跨域请求的方法:

为什么要存在跨域?因为有同源策略,限制了同网站的二级域名等引用同一身份认证,避免了用户重复登陆的情况。

常见的请求方法:

1.jsonp

JsonP依赖于服务器端实现,我们在请求服务器资源之后,服务器可以返回一段js代码交由客户端执行, 在这段代码中附上客户端请求的信息。

比如客户端请求的url为 b.com/someResource?callback=someFunc, 服务器可以返回 someFunc({name: “someName”}) 交由客户端执行。

2.代理

比如我的前端服务器域名是 a.com, 我在js中想要访问 b.com的资源,我们可以在a.com中提供一个代理的api,比如 a.com/proxy, 这个接口的作用就是转发请求。 我们可以在payload中指定这个请求相关的信息, 比如真实资源的url,请求的方法,header和参数等。

3.CORS

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器发出AJAX请求。

CORS需要浏览器和服务器同时支持。整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

原理

同源

完成CSRF攻击的条件

1.利用用户访问,受信任的站点,登陆状态,本地含有基础认证信息
2.伪造正常用户请求,然后登陆状态,在用户不知道的情况下成功请求

挖掘漏洞注意点:

1.是否有token保护,token的不可猜测性
2.验证了refer字段,确定网站的来源,来自可信任的网站
3.是否存在跨域
<img src="http://www.baidu.com">
<img>标签不存在跨域

一般触发点:
修改个人资料,发信息,修改密码等

防御点:
比如说修改密码处,添加一个用户知道的信息验证,有本人发起,并非第三方伪造。

实例

Bwapp之csrf改你密码

是否有验证referer,一般在burpsuit->repeater重放测试

在挖掘漏洞中,注意参数中有没有token,csrf等参数,来判断是否存在csrf漏洞

xss for csrf
已知含有csrf漏洞,当把找到另一个xss漏洞的时候,配合xss+csrf
xss为存储型,构造payload,当用户触发xss时并触发了csrf漏洞,造成了蠕虫的效果。

参考文章:
浏览器同源政策及其规避方法
http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html

玩转CSRF之挖洞实例分享
https://www.ohlinge.cn/web/web_csrf.html

 

 

subtitle: “不要想的太复杂,用心即可。”
author: “sodme”