- CTF实战:技术、解题与进阶
- ChaMd5安全团队
- 665字
- 2023-08-28 18:13:22
1.3 跨站请求伪造
跨站请求伪造(Cross-Site Request Forgery, CSRF)也被称为one-click attack或者session riding,有时写作XSRF,是一种挟制用户在当前已登录的Web应用程序上执行非本意操作的攻击方法。与XSS相比,XSS利用的是用户对指定网站的信任,CSRF利用的是网站对用户网页浏览器的信任。
现有两个网站A Site、B Site, A Site为用户信任站点,B Site为攻击者构造的恶意站点,如图1-81所示。
图1-81 构造恶意站点
受害用户登录受信任的A站点,A站点会在返回给浏览器的信息中带上已登录的cookie, cookie信息会在浏览器端保存一定的时间(根据服务端设置而定),这里设置了一个cookie“CSRF=this is B COOKIE”模拟用户登录A站点,如图1-82所示。
图1-82 模拟用户登录A站点
登录A站点以后,用户在没有登出(清除A站点的cookie)A站点的情况下,访问恶意站点B。这时B站点会劫持用户向A站点发起请求,而这个请求会带上浏览器端所保存的A站点的cookie,如图1-83所示。
A站点根据请求所带的cookie,判断此请求为受害用户所发送的。因此,A站点会根据受害用户的权限来处理B站点所发起的请求,而这个请求可能以受害用户的身份发送邮件、短信、消息,以及进行转账支付等操作,这样B站点就达到了伪造受害用户请求A站点的目的。这就是CSRF漏洞的攻击方式。
图1-83 查看cookie
由于浏览器同源策略的存在,两个非同源网站直接访问是受限制的。访问非同源网站的资源被称为跨域,CSRF也叫作跨域攻击。
跨域可以使用HTML标签访问,也可以使用JavaScript访问。JavaScript访问非同源网站时,访问请求是可以发送的,但是服务端将响应送回后,客户端的浏览器默认不接受请求。
几种常见的跨域方式如下。
● img标签属性。
● iframe标签属性。
● script标签属性。
● JavaScript方法:Image对象、XML对象、HTTP对象。
● JSONP。
● CORS。