旁注保护跨站脚本恳求拐骗(CSRF)[菜鸟入门]
本文“旁注保护跨站脚本恳求拐骗(CSRF)[菜鸟入门]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
CSRF(Cross-site Request Forgery,跨站恳求拐骗 )在过去的n年(n>2)一向都火,在bh/defcon/owasp等会议上多次探究CSRF的攻防.前段时间PLAYHACK.net上发表了一个总结性的:Preventing CSRF,但是CSRF是很难完好避免的,下面我的一些Bypass Preventing(旁注) CSRF的本领:
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:
JavaScript代码
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:
JavaScript代码
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;
}
}
得到hash后,假如本来app里用的'Request变量'那么我们可以直接通过xml.load等get提交我们构造的变量,假如是post我们可以通过LoadVars等提交:
JavaScript代码
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? :)
以上是“旁注保护跨站脚本恳求拐骗(CSRF)[菜鸟入门]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |