csrf攻击软件,预防csrf攻击
作者:hacker | 分类:破解 | 浏览:157 | 日期:2023年02月03日目录:
- 1、CSRF(跨站请求伪造)
- 2、什么是csrf攻击?
- 3、CSRF(跨域请求伪造)
- 4、BurpSuit之CSRF检测
- 5、CSRF实例
CSRF(跨站请求伪造)
2021-11-24
跨站点请求伪造(Cross—Site Request Forgery)csrf攻击软件,伪装来自受信任用户csrf攻击软件的请求来利用受信任csrf攻击软件的网站。简单来说CSRF就是获取凭证伪造身份去做事。
详细点说csrf攻击软件:假如A网站中存在CSRF漏洞csrf攻击软件,攻击者构造一个利用的POC,发送给受害者(在浏览器中处于登陆状态),让受害者点击POC,导致受害者在A网站上的的资料被修改或者钱财被转移。
所有用户进行操作的位置都可能存在CSRF,修改信息、密码、头像。
1.利用浏览器中缓存的cookie
2.没有一次型的token验证
1.修改受害者的一些资料、转账或者改密码
2.如果获取到应用程序中的管理员cookie,攻击者完全可以控制应用的所有数据和功能
1.资源包含
资源包含是在大多数介绍CSRF概念的演示或基础课程中可能看到的类型。这种类型归结为控制HTML标签(例如image、audio、video、object、script等)所包含的资源的攻击者。如果攻击者能够影响URL被加载的话,包含远程资源的任何标签都可以完成攻击。
2.基于表单
通常在正确使用安全的请求方式时看到。攻击者创建一个想要受害者提交的表单; 其包含一个JavaScript片段,强制受害者的浏览器提交。
3.XMLHttpRequest
基于XHR的CSRF通常由于SOP而以XSS有效载荷的形式出现。没有跨域资源共享策略 (Cross-Origin Resource Sharing, CORS),XHR仅限于攻击者托管自己的有效载荷的原始请求。
通过CSRF-token或者验证码来检测用户提交
验证 Referer/Content-Type
对于用户修改删除等操作更好都使用POST操作
避免全站通用的Cookie,严格设置Cookie的域
1.跨账户使用令牌
2.替换相同的长度
3.从请求中删除csrf token
4.解码CSRF token
5.通过HTML提取CSRF token
6.只使用token的静态部分
参考链接:
什么是csrf攻击?
CSRF攻击是通过强制用户登录到攻击者控制的账户来策划的。为了达到这一目的,黑客使用他们的凭证向网站伪造一个状态改变请求,并将表单提交到受害者的浏览器。服务器对浏览器请求进行身份验证,并将用户登录到攻击者的账户。当受害者向攻击者的账户提交正在登录的敏感信息时,攻击者可以利用这些信息执行一些不必要的操作,包括身份盗窃。
CSRF(跨域请求伪造)
跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
你这可以这么理解CSRF攻击: 攻击者盗用了你的身份,以你的名义发送恶意请求。 CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。
从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:
登录受信任网站A,并在本地生成Cookie。
在不登出A的情况下,访问危险网站B。
看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:
1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。
2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。
3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。
1.提交验证码
在表单中增加一个随机的数字或字母验证码,通过强制用户和应用进行交互,来有效地遏制CSRF攻击。
2.Referer Check(referer:标志请求来源)
检查如果是非正常页面过来的请求,则极有可能是CSRF攻击。
3.token验证
在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有
token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
token需要足够随机
敏感的操作应该使用POST,而不是GET,以form表单的形式提交,可以避免token泄露。
4. 在 HTTP 头中自定义属性并验证
这种 *** 也是使用 token 并进行验证,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种 *** 在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。
csrf过滤器:
referer检查如果是非正常页面过来的请求,则极有可能是CSRF攻击。
自定义请求头“supporter”,根据 *** 、邮箱、日期、特殊字符、base64前台加密,后台过滤器解析。
BurpSuit之CSRF检测
抓包
在history中找到相应的请求
伪造请求
右击选中的链接,选择Engagement tools---Generate CSRF Pos选项,如下图所示:
修改提交的参数
在弹出的对话框中,修改需要提交的参数,然后生成攻击脚本,再复制url在浏览器中测试,具体步骤如下图所示:
在浏览器中测试
将上一步复制的URL粘贴到浏览器中,点击request按钮,如下图所示:
检查请求是否成功
如果请求成功,则存在CSRF漏洞。
CSRF实例
CSRF攻击的主要目的是让用户在不知情的情况下攻击自己已登录的一个系统,类似于钓鱼。如用户当前已经登录了邮箱,或bbs,同时用户又在使用另外一个,已经被你控制的站点,我们姑且叫它钓鱼网站。这个网站上面可能因为某个图片吸引你,你去点击一下,此时可能就会触发一个js的点击事件,构造一个bbs发帖的请求,去往你的bbs发帖,由于当前你的浏览器状态已经是登陆状态,所以session登陆cookie信息都会跟正常的请求一样,纯天然的利用当前的登陆状态,让用户在不知情的情况下,帮你发帖或干其他事情。
一句话就是我们利用CSRF攻击就是借用用户的身份去执行用户的操作
先看一个例子(白帽子讲web安全),一个删除搜狐博客的例子,利用CSRF删除搜狐博客。
正常情况下,登陆搜狐博客后,只需请求这个url,就能把编号156713012的博客文章删除
我们尝试利用CSRF漏洞,删除编号为“156714243”的博客文章。这篇文章标题“test1”.
攻击者首先在自己的域构造一个页面:
其内容;
使用了一个img标签,其地址指向了删除博客文章的链接。
攻击者诱使目标用户,也就是博客主人“test1test”访问这个页面:
该用户会看到一张无法显示的图片,也就是img标签创造的图片,但无法显示,然后回头看搜狐博客:
发现原来存在的标题为‘’test1”的文章,已被删除。
这个删除博客攻击文章的请求,是攻击者伪造的,所以这种攻击就叫做“跨站点请求伪造”。
下面仿照以上做一个实例,这里利用自己的简单留言板实施一次CSRF攻击
前面我们已经讲过了,CSRF攻击是在用户登录状态下,利用用户身份执行操作,这里就用到了cookie,当用户正在访问留言板时,诱导用户去点开攻击者伪造的一个网页(有删除留言的指令),用户点开之后便带着原来的留言板cookie去执行删除留言这条指令,当用户返回之后发现原来留言信息没了。
这是登录界面,输入用户名进去后
看一下用户的cookie吧
当然这里是自己的cookie,已经能看到了。
可以看到是post请求以表单的形式提交到delete.php,执行删除操作找到表单提交的name="ids",也就是ids=1时,我们可以删除id=1的留言,因为是POST请求,不能用标签的src属性,所以需要构建一个POST请求。
攻击者在自己的服务器中建立一个HTML文件csrf.html,用 *** 自动提交POST请求的form表单
这个只是本地测试,现在删除第三条留言,这个时候只要诱导用户去访问 就会删除该留言,至于用什么 *** ,需要攻击者去精心构造了,只要想象力丰富,就能发挥CSRF强大的破坏力。
当用户在登录留言板状态下去访问该网页,,,,
原来的留言没了
这就是基本的CSRF攻击。。