CSRF原理、分类详解

举报
黑色地带(崛起) 发表于 2023/02/16 15:32:02 2023/02/16
【摘要】 CSRF原理、分类详解

CSRF原理、分类详解

目录

 

CSRF

一、简介:

二、CSRF与XSS的区别:

XSS

CSRF

三、原理:

四、基本流程:

五、危害:

六、分类:

站外攻击:

站内攻击:

七、举例:

Get提交方法:

Post提交方法:

未进行CSRF-token验证

位置:

原理:

cookie中的token:

FLASH CSRF

属性:

Json劫持

简介:

获取数据的方式:

利用过程:

 编辑

今天学会一个词,失之毫厘谬以千里 


CSRF

一、简介:

CSRF(Cross-site Request Forgery)跨站请求伪造(或者缩写为XSRF),也被称为"One Click Attack"或"Session Riding"(曾被列为互联网 20 大安全隐患之一),是一种借助社工对网站身份的恶意利用。

不大流行,但如果被成功利用,危害更大。


1、在跨站点请求伪造(CSRF)攻击中,攻击者只需创建一个看似无害的网站,致使用户的浏览器直接向易受攻击的应用程序提交一个请求,执行某种有利于攻击者的无意操作。同源策略并不阻止一个网站向另一个域提出请求,但它确实阻止提出请求的网站处理跨域请求的响应,正常情况下,CSRF攻击只是一种“单向“ 攻击。

2、所以在纯粹的CSRF攻击中, 要想实施如XSS蠕虫中的多阶段操作,从响应中读取数据并将其合并到随后的请求中, 将很难实现

3、请求易于受到CSRF攻击可能有:请求执行特权操作、仅仅依靠HTTPcookie来追踪会话、攻击者可以确定执行操作所需的所有参数等。

4、针对这些特点表现出的缺陷, 攻击者可以构建一个Web页面,向易受攻击的应用程序提出一个跨域请求, 在其中包含执行特权操作所需的所有步骤。攻击将所有请求参数放入隐藏表单字段中, 并包含一段用于自动提交表单的脚本,用户的浏览器提交此表单时, 将自动添加用户的目标域的cookie,并且应用程序会正常处理生成的请求。如果管理用户登录到易受攻击的应用程序,并访问攻击者的包含此表单的Web页面,该请求将在管理员的会话中处理,攻击者的账户因此得以创建

5、应用程序确认站外图像方面的漏洞称为 "检查时间,使用时间” 漏洞。因为某个数据在一个时间确认,却在另一个时间使用,导致攻击者能够在这两个时间的间隔内修改该数据的值


二、CSRF与XSS的区别:

XSS

通过盗取网站内的已有的用户的身份,然后再执行相关操作

CSRF

通过伪装(伪造、更改状态的请求)用户身份(即盗用身份),通过服务器身份认证后,然后发送恶意请求(服务器会认为请求是合法的),但是服务器给出响应肯定是给真实的那个用户,


三、原理:

在浏览器中cookie在一段时间内是不会过期(不关闭或者退出浏览器),再次访问都会默认登录,这个应该都有体验。如果在cookie存在期间,通过构造csrf脚本或包含csrf脚本的链接发送给用户,得到信息后,再伪造成用户身份,执行相关操作


四、基本流程:

用户在某网站A进行登录-------->身份验证成功,返回cookie给用户---------->攻击者构建一个网站F,诱使用户使用同一浏览器进入(前提:未退出网站A,一般都会有默认浏览器)------------->网站F收到用户请求后,返回恶意代码给用户,强制他访问网站A---------->用户浏览器在网站A上执行相关操作(以已经持有的cookie)



五、危害:

比如发消息、盗号、转账……等没有没有需要再次验证身份的基本操作。

再要验证身份的话,那就再社工……(搭建一个一模一样的网站……)




六、分类:

站外攻击:

因为考虑到用户体验感,就不会将用户限制的死死的,一定会开放一部分功能供使用,攻击者在站外构造脚本伪造请求,用户在攻击者构造的网站中触发伪造请求时,强制用户客户端就会发起请求(一般是在同一浏览器,而且某一用户登录上的未退出的网站)



站内攻击:

如果开发人员滥用$_REQUEST 类变量,以Post提交的数据表单,也支持Get传参。攻击者把预测的请求参数上传到站内贴子或留言的图片链接里,当用户浏览了含有请求参数的页面就强制发出这些请求。


编辑



七、举例:

Get提交方法:

在你精心构造网页的事件里面,添加一些要求用户执行相关请求行为的链接

<a href="转款URL">砍一刀立赚200块</a>

这个标签把,也可以在其他里面,就是看哪里点击概率大

<img src="URL">

……



<meta charset='utf-8'>

<img src='./1.jpg'><br />

<img src='URL/bank/action.php?

username=xxx&money=10000&submit=%E4%BA%A4%E6%98%93'

alt='砍一刀赚200,这不冲'>


<meta>:可提供有关页面的元信息,位于头部。在 HTML 中,没有结束标签。  在 XHTML 中,必须被正确地关闭。

charset:编码

username、money:都是可能的参数名

alt:替代文本


Post提交方法:

post提交,一般都是提交到服务器的一些重要的东西

也可以在构造的网页里面有一个让别人容易相信的表单等post提交方法(不涉及很多私密东西)

用户提交post请求后,然后触发post伪造请求用户自己登录过的网站服务器,执行……


<meta charset='utf-8'>

<form name='csrf' action='URL/bank/action.php' method='post'>

<input type='hidden' name='xxxx' value='xxxx'>

<input type='hidden' name='money' value='10000'>

</form>

<script>document.csrf.submit()</script>

<img src="./1.jpg" ><br />


</form>:创建供用户输入的 HTML 表单

document:每个载入浏览器的 HTML 文档都会成为 Document 对象。Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问



未进行CSRF-token验证

位置:

cookie、 form表单、 URL参数

原理:

当用post提交数据的时候,django会去检查是否有一个csrf的随机字符串,如果没有就会报错


cookie中的token:

cookie一般不会附带HttpOnly属性,因为如果服务器自己要想再在cookie里面提取东西就不行了

因为CSRF-toke是限制CSRF,所以我们就要通过一定方法拿到CSRF-toke,问题就解决了

所以我们需要结合其他手段进行获取,例如xss等





FLASH CSRF

属性:

AllowScriptAccess:控制Flash与HTML页面的通信(设置不当导致XSS)

AllowNetworking:控制Flash与外部网络的通信(设置不当导致CSRF)





Json劫持

简介:

又称“JSON Hijacking”(与CSRF类似),Json劫持是为了达到获取敏感数据的目的,而CSRF类似于钓鱼(愿者上钩)

简而言之,就是对数据进行窃取,转向发给自己


获取数据的方式:

xmlhttp:

{"username":"……","password":"……"}

script:

userinfo={"username":"……","password":"……"}


利用过程:

第一步:寻找网站对象,使用AJAX(一般为JSON传输数据)作为前端脚本

第二步:诱导用户进入钓鱼网站

第三步:劫持钓鱼网站中用户的数据



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。