Bypass Preventing CSRF
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的更多相关文章
- Preventing CSRF in Java web apps---reference
reference from:http://ricardozuasti.com/2012/preventing-csrf-in-java-web-apps/ Cross-site request fo ...
- Preventing CSRF With Ajax
https://stackoverflow.com/a/24394578/3782855 You don't need the ValidationHttpRequestWrapper solutio ...
- CSRF——攻击与防御
CSRF——攻击与防御 author: lake2 0x01 什么是CSRF攻击 CSRF是Cross Site Request Forgery的缩写(也缩写为XSRF),直译过来就是跨站请求伪造的意 ...
- 转-CSRF——攻击与防御
0x01 什么是CSRF攻击 CSRF是Cross Site Request Forgery的缩写(也缩写为XSRF),直译过来就是跨站请求伪造的意思,也就是在用户会话下对某个CGI做一些GET/PO ...
- 保护ASP.NET 应用免受 CSRF 攻击
CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/ ...
- 漏洞科普:对于XSS和CSRF你究竟了解多少
转自:http://www.freebuf.com/articles/web/39234.html 随着Web2.0.社交网络.微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广 ...
- CSRF(跨站请求伪造)攻击方式
一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSR ...
- 如何防止ASP.NET网站遭受CSRF的攻击
转载地址: http://www.cnblogs.com/shanyou/p/5038794.html?hmsr=toutiao.io&utm_medium=toutiao.io&ut ...
- MVC 应用免受 CSRF攻击
保护ASP.NET 应用免受 CSRF 攻击 CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack ...
随机推荐
- jquery之音乐均衡器
制作这个音乐均衡器需要一个equalizer插件(插件我已经上传),下面介绍一下网页的BGM的相关属性: hidden="true"表示隐藏播放,即不显示播放器的外观,若要想显示, ...
- android64位机子兼容32位.so库文件
http://blog.csdn.net/vhawk/article/details/49964475 猴子在调用高德地图的时候,遇到一个操作系统兼容问题,异常堆栈说是找不到so库文件,猴子就不懂了, ...
- asp.net连接oracle的问题及方法总结
.net连oracle数据库的两个方法介绍1. 安装oracle客户端,连接oracle 需要在客户端%oracle_client_home%network/admin/配置tnsnames.ora, ...
- ubuntu 更新软件源
ubuntu 更新软件源 修改文件sources.list 位于/etc/apt/sources.list,并备份原文件为sources.list.bak deb http://mirrors.163 ...
- vJine 第三波 之 Lua 来袭 vJine.Lua
vJine.Lua vJine.Lua是Lua语言的C#封装库,可实现通过C#直接运行Lua脚本并与Lua脚本交互的功能. 1. 授权: MPL2.0 相关资源: nuget:(https://www ...
- windows下配置Apache2.4一些改变
下载地址: http://www.apachelounge.com/download/http://www.apachehaus.com/cgi-bin/download.plx Apache更新到2 ...
- 使用AngularJS构建大型Web应用
AngularJS是由Google创建的一种JS框架,使用它可以扩展应用程序中的HTML词汇,从而在web应用程序中使用HTML声明动态内容.在该团队工作的软件工程师Brian Ford近日撰写了一篇 ...
- 服务器发布WebService返回DataTable
初始化Datatable时,需要为Datatable命名.否则在客户端使用时,会报“datatable不能序列化...”导致表格无法从服务器端读取到. 例如: 服务器端: DataTable dt = ...
- 抓包分析TCP的三次握手和四次分手
一:三次握手 三次的握手的过程是: 1.由发起方HostA向被叫方HostB发出请求报文段,此时首部中的同步位SYN=1,同时选择一个序列号seq=x.TCP规定,SYN报文(即SYN=1的报文段)不 ...
- Mysql slave 同步错误解决
涉及知识点 mysql 主从同步 ,参考: MySQL数据库设置主从同步 mysqlbin log查看, 参考:MySQL的binlog日志 解决slave报错, 参考: Backup stopped ...