Csrf跨站请求伪造

CSRF跨站请求伪造

CSRF跨站请求伪造

参考

WHY

出现原因,1,开发者low,程序可以利用,2,浏览器对于身份验证处理有问题。

WHAT

攻击者会构造url发送给目标,目标点击后,代码自动执行(冒充目标执行),从而达到目的。比如说建立管理员账号什么的。

HOW

?如何发现csrf漏洞。

首先,为什么要冒充目标来执行 =》因为攻击者不能自己执行

那么,如何冒充目标执行 =》要先了解,服务端是怎样识别不同用户的。

了解了下面的验证方式后,我们知道:如果要冒充用户执行操作,那么服务器必须识别了用户。cookie识别有两种,一种是session,一种是本地cookie。

所以,用冒充用户执行操作,就好比target去餐厅吃饭,attacker点了一大堆美食,吃完以后有餐巾纸优雅的抹抹嘴,说“我跟他是一起的”。然后target买单就懵逼了,怎么花了那么多。

最后,发现csrf漏洞,和如何防止csrf漏洞是分不开的。浏览器需要禁止发送cookie给attacker(第三方),防止假冒请求。网站在进行操作的时候,需要验证码(防止脚本自动化执行,使得操作失败)。使用token验证方式,使用一个随机的token(使得攻击者无法猜到url参数,从而无法构造有效的url)

所以,如果防止csrf的措施没有做好,那么就可能出现csrf漏洞。


有token验证

传统身份验证的方法

HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用。这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下回这个客户端再发送请求时候,还得再验证一下。

解决的方法就是,当用户请求登录的时候,如果没有问题,我们在服务端生成一条记录,这个记录里可以说明一下登录的用户是谁,然后把这条记录的 ID号发送给客户端,客户端收到以后把这个 ID 号存储在 Cookie 里,下次这个用户再向服务端发送请求的时候,可以带着这个Cookie,这样服务端会验证一个这个Cookie里的信息,看看能不能在服务端这里找到对应的记录,如果可以,说明用户已经通过了身份验证,就把用户请求的数据返回给客户端。

上面说的就是 Session,我们需要在服务端存储为登录的用户生成的 Session ,这些 Session 可能会存储在内存,磁盘,或者数据库里。我们可能需要在服务端定期的去清理过期的 Session 。

基于 Token 的身份验证方法

使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:

客户端使用用户名跟密码请求登录

服务端收到请求,去验证用户名与密码

验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端

客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里

客户端每次向服务端请求资源的时候需要带着服务端签发的 Token

服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

?如何利用csrf漏洞。csrf案例剖析

首先要构思一个操作,这个操作是网站上的一个功能,例如转账啦、留言啦等等,只要网站没有用各种手段验证身份。就可以被利用,不过成功不成功就是另一回事了。

对于csrf来说,最关键的就是构造有效的URL了。

一、网站上进行想要的操作,用burp拦截 =》获得提交的参数

二、

攻击方式:

Forms:创建一个form表单。内容为hidden(隐藏),用户不可见(可POST、GET)‍‍

‍‍iFrame:创建一个iframe框架,高宽为0,用户不可见。(可POST、GET)‍‍

‍‍IMG:创建一个IMG标签(只能GET)。‍‍

‍‍XHR:创建一个AJAX请求(可POST、GET)‍‍

‍‍Link:创建一个a标签的超链接(只能GET)