CSRF在过去的n年(n>2)一直都火,在bh/defcon/owasp等会议上多次探讨CSRF的攻防[具体你可以看看以往的那些pp].前 段时间PLAYHACK.net上发表了一个总结性的pp:Preventing CSRF,然而CSRF是很难彻底防止的,这个也是我说CSRF卑鄙无耻的一个原因,下面我的一些Bypass Preventing CSRF的tips:

0x01.HTTP Referer

其实国内的CSRF攻击由来已久了,比如n年前的各大下载网站防止盗链,n前dvbbs的一个xss利用了csrf提升权限等等.在下载网站防止盗链的过程中很多就使用了通过判断HTTP Referer来限制,但是这样的Prevent很容易就被绕过了.
  
   0x01a.Attack From Inside
很多人都忽律了从site'内部'的攻击.
1.很多的web app都支持link/img等标签,然而通过这些标签访问的url的Referer都是本站的,所以攻击者只要在你的bbs 或者blog等上通过那些标签发一个你构造好的url,然后就是引诱admin了 :)
2.ie有很多特点如:txt/图片等里面的html/js会被执行,当年你可以通过上传你的构造的代码...[注意这里txt里js执行的domain和txt是同一个]
   0x01b.伪造http header
1.客户端脚本:
    a.js
       XMLhttp.setRequestHeader() 但是xmlhttp不可以跨区域[当然你可以利用0x01a.2里的方式上传],所以一般的是要结合xss.
    b.as
     * XML.addRequestHeader()
     * LoadVars.addRequestHeader() as里直接设置Header是有一些限制的,比如 .addRequestHeader("Refere", "AAA"); 这样是不行的.Rapid7在06年发布了一个可以绕过的巧妙方法: .addRequestHeader("Referer:http://anywhere\r\nX-foo", "bar"); 直接放到第1个参数. 这个bug已经被Adobe fix了,但是在htm调用swf时swf可以使用任意后缀,我们同样可以利用类似0x01a.2里的方法一样把swf上传[具体可以参考 《Discuz!/phpwind flash标签的xss》]

2.服务端脚本:
     基本上所有的服务端语言都有发http包的功能,如php的fsockopen(),asp的xmlhttp等等,所以可以通过外面服务端脚本来伪造一个 Referer[其实就是类似于nc] 这个一般只对于单纯的限制Referer而且没有身份验证的[因为你cookie没办法传递],所以这个基本可以YY的.
    
    
0x02.Hidden value

之所以用'Hidden value'做标题,是因为PLAYHACK文中写 '0x03a: Cookies Hashing' 和'0x04: One-Time Tokens'里产生的hash都是通过hidden value来传递.但是我们一样可以通过一些手段得到这个hash.

0x02a.利用xss执行js-xmlhttp在xmlhttp.responseText里得到hash:
    
xmlhttp.open("GET", siteurl+"admincp.php?action=members", false);
xmlhttp.send();
var echo = xmlhttp.responseText;
var reg = /\<input type=\"hidden\" name=\"formhash\" value=\"([\w\d]+)\">/i;
var arr=reg.exec(echo);
var formhash=arr[1];

0x02b.利用as里的xml.onData/LoadVars等得到hash:

import RegExp;
var xml:XML = new XML();
xml.onData = function(s) {
    tb1.text = getFirstMatch(new RegExp("<input type=\"hidden\" name=\"formhash\" id=\"formhash\" value=\"(\\w+)\">", "ig"), s, 1);
}
xml.load(url+"post.htm");
function getFirstMatch(re, s, i) {
    var m = null;
    if ((m = re.exec(s)) != null) {
        return m[i];
    }
}
得到hash后,如果原来app里用的'Request变量'那么我们可以直接通过xml.load等get提交我们构造的变量,如果是post我们可以通过LoadVars等提交:

var _l3 = new LoadVars();  
        
_l3.decode(unescape("formhash="+hash));
_l3.send(url, "", "POST");

但是需要加载crossdomain.xml[而且只可以提交到crossdomain.xml里设置的domain].如果没有 crossdomain.xml或者crossdomain.xml里设置不符合我们的要求,我们可以把crossdomain.xml改为任意后缀然后 通过System.security.loadPolicyFile()来加载.

0x03.CAPTCHA Image

也就是我们经常看到的图片验证码,如果抛开用户感觉等不谈,就安全上应该是比较安全的防止crsf的方法,目前还没有什么通用的破解方法,现在有很多通过分析图片格式来得到验证码的,但是这些都是基于gui的,没办法利用到crsf上来.

要突破CAPTCHA Image只有具体问题具体分析了,通过分析原代码找到app的一些逻辑错误/算法问题来想办法绕过.比如有的图片验证码是根据cookie来计算判断 的,那么我可以通过xss得到cookie来'算'出这个验证码,又如验证码保存到session没有清空,可以暴力这个验证码[详细见lake2的文 章:轻轻绕过你的验证码]等等.

小结:
   在上面的文字里,其实主要介绍的一个思路是通过http的请求来伪造提交的数据,然后通过分析这个数据得到你要的东西.按这个思路你可以不须拘泥于js/as等脚本,还有很多脚本/语言可以实现如java/jvm? :)
  
[最后,感谢那些和我一起交流探讨的人们.]

参考:

0.Preventing CSRF:http://www.playhack.net/view.php?id=31
1.XMLHttp参考手册:http://suwei.nanshapo.com/tech/webdev/ajax/xmlhttp/
2.Flash Lite 2.x ActionScript 语言参考: http://livedocs.adobe.com/flashlite/2_cn/main/wwhelp/wwhimpl/js/html/wwhelp.htm
3.HTTP Header Injection Vulnerabilities in the Flash Player Plugin:http://www.rapid7.com/advisories/R7-0026.jsp
4.Discuz!/phpwind flash标签的xss :http://superhei.blogbus.com/logs/11792433.html
5.Request变量与csrf :http://superhei.blogbus.com/logs/11412189.html
6.轻轻绕过你的验证码 :http://blog.csdn.net/lake2/archive/2006/09/15/1224897.aspx

Bypass Preventing CSRF相关推荐

  1. CSRF——攻击与防御

    CSRF--攻击与防御 author: lake2 0x01 什么是CSRF攻击 CSRF是Cross Site Request Forgery的缩写(也缩写为XSRF),直译过来就是跨站请求伪造的意 ...

  2. Using XSS to bypass CSRF protection

    Using XSS to bypass CSRF protection <?php // Autor: Nytro // Contact: nytro_rst@yahoo.com // Tran ...

  3. 浅谈CSRF攻击方式

    一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSR ...

  4. 保护ASP.NET 应用免受 CSRF 攻击

    CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/ ...

  5. 浅谈 CSRF 攻击方式

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨 ...

  6. 国外程序员收集整理的PHP资源大全

    ziadoz 在 Github 发起维护的一个 PHP 资源列表,内容包括:库.框架.模板.安全.代码分析.日志.第三方库.配置工具.Web 工具.书籍.电子书.经典博文等等. 依赖管理 依赖和包管理 ...

  7. 2018-2019-2 网络对抗技术 20165230 Exp9 :Web安全基础

    目录 实验目的 实验内容 Webgoat前期准备 出现的问题 (一)SQL注入攻击 命令注入:Command Injection 数字型注入:Numeric SQL Injection 日志欺骗:Lo ...

  8. [NOTE] WebGoat v8.2.2学习笔记

    [NOTE] WebGoat v8.2.2学习笔记 文章目录 [NOTE] WebGoat v8.2.2学习笔记 前言 CIA 常见编码形式 OpenSSL使用 docker安全 SQL安全 SQLi ...

  9. 国外PHP学习网站书籍资料汇总

    这篇文章汇总了全面多样的PHP学习资源,包括书籍.网站.文章等,帮助你提高PHP开发能力,巩固PHP知识.结合上一篇<重磅资料!Github上的PHP资源汇总大全>,一定可以让你的PHP技 ...

最新文章

  1. Java NIO系列教程(十二) Java NIO与IO
  2. svn教程----TortoiseSVN客户端
  3. Openlayers中实现地图上添加一条红色直线
  4. Java-什么是面向对象
  5. pyvex 的正确安装方式
  6. python pprint_python读写文件(七)
  7. 你百分之九十九的问题都是因为懒
  8. Atitit。如何实现dip, di ,ioc  ,Service Locator的区别于联系
  9. 父与子编程之旅第十章pygame下载+安装+pip更新
  10. 计算机应用c 简历,计算机应用专业的简历模板
  11. 使用Aria2+AriaNG+FileManager来进行离线BT下载及在线播放
  12. 分布式数据库cobar
  13. 图书信息管理系统(MVC设计模式)
  14. RTC电池供电时二极管选择注意
  15. 深访杨超越杯编程大赛发起人 还原硬核粉丝追星全过程
  16. 网络工程项目报价单应该怎么写?记住这6个步骤准没错!
  17. Windows下截图快捷键
  18. Java eclipse控制台按任意键返回主菜单 控制台清屏
  19. 中国现代书画家——张士高、崔世年、姚子华等
  20. 微电子电路——反相器网表详解

热门文章

  1. multisim三态门74LS245
  2. 【教程】腾讯云智服客服系统快速上手指南
  3. java中注解component_Spring注解之@Component详细解析
  4. 学会用API函数读出内存数据
  5. 失恋了,开始写博客吧
  6. 论文学习——一种基于关键点的SAX改进算法
  7. 百度天天快照知识宝典
  8. E-R模型转换为关系模型
  9. 用技术让女朋友不生气——基于SpringBoot的情侣礼物分发平台
  10. 联想服务器接显示器不显,帮您win10系统联想笔记本接显示器不显示的恢复教程...