查看原文
其他

一些BAT的XSS实例(二)

px1624 威努特工控安全 2021-07-06

很多朋友私信我,想看XSS绕过实例分析,所以我选了10个BAT的XSS实例来聊聊构造和绕过思路。以下为10道题目(弹框1就算成功,大部分的题都是一题多解,尽量给出多种思路,或者最短的解法。)


http://px1624.sinaapp.com/test/xsstest1/

http://px1624.sinaapp.com/test/xsstest2/

http://px1624.sinaapp.com/test/xsstest3/

http://px1624.sinaapp.com/test/xsstest4/

http://px1624.sinaapp.com/test/xsstest5/

http://px1624.sinaapp.com/test/xsstest6/

http://px1624.sinaapp.com/test/xsstest7/

http://px1624.sinaapp.com/test/xsstest8/

http://px1624.sinaapp.com/test/xsstest9/

http://px1624.sinaapp.com/test/xsstest10/


有兴趣的朋友,可以先不看文章,自己尝试的做一做题目,有答案的话可以发到我的邮箱 px1624@qq.com 并附上自己的ID。



前面推送的《一些BAT的XSS实例(一)》,主要讲了1~3题的思路,下面来看下后面其他的题。


◇1、先看第四题

这个题属于第三题的升级,蛮多人就卡到这里过不去了。具体代码如下:
 


可以看到,直接把这里提到的所有运算符都给过滤掉了。

https://www.w3school.com.cn/js/js_operators.asp

那么这个时候运算符全部被过滤了,又应该怎么进行构造,从而绕过限制呢?

我们还是以解题者的角度去看吧,首先肯定是先看源码。

 
和第三题一样,第一步还是猜参数,很容易得出参数是px,如下图

 
然后经过一番测试发现,所有的运算符都被过滤掉了,只要出现运算符,直接就会返回error

 
所以这里我们需要想别的办法,然后可能会想到注释,把多余的部分注释掉就行了,不过这里直接过滤掉了斜线(也就是除号运算符/),所以这个是行不通的,而且由于是同步输出,即使没过滤斜线,这个思路也是很难构造出来的。

那么我们就要思考,这个同步输出的问题,这个特性的话,只能是去找一些前后闭合都一样的去构造,首先立刻就想到了单引号和双引号,这样就可以把中间部分作为字符串去解析了。
 


像上面这样的思路,这样的话就很容易构造了,但是在js中单引号和双引号这样的字符串中间是不能换行的,如果要换行就必须在行末尾进行转义,如下。

 
但是这里的环境,显然行末尾是不可能写入反斜线的。其实为了避免解题的人绕路,我这里故意给代码中写入了单引号和双引号,这样即便是代码写在了一行,这个思路也是行不通的,因为中间的引号没法进行转义。

这里其实给的暗示,是让解题者去往模板字符串去联想,具体参考下面的链接

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/template_strings

模板字符串中间是可以包含换行的,所以构造就很简单了,只需要用模板字符串将中间变为字符串解析,然后再进行一定的构造就可以了。

那么按照这个思路,我们先写入一个模板字符串进去。
 

如上图,先用单引号闭合掉前面的单引号,分号隔开,再写入模板字符串,这样的话就可以很直观的看到,只需要构造后面22222222位置的语法正确就可以了。

由于这个位置后面有 ')} 所以只需要构造闭合即可。方法有很多种,这里随便给出一种,这里是把alert(1)作为$函数的参数去执行的。

再给出目前最短的gainover的解法。【13个字符】
 

然后此题w8ay和Huuuuu还给出了另一个思路的解法。那就是直接用in去进行构造,如下:
 


查了下资料才知道,原来in也是一个运算符,之前的 

https://www.w3school.com.cn/js/js_operators.asp 不给力,没有覆盖到。

可以参考这里

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference
 


所以这个题,也可以用ininstanceof,这些知识在我出题的时候,我自己也是不知道的。
 


虽然说用这个的话控制台会报错,因为放在这里使用的话,数据类型是错误的。但是语法结构是没问题的,而且由于解析顺序,并不会影响alert(1)的执行。


2 下面来看看第五题

首先还是看下源码
 


这里我设计一个考点(坑点),也就是这个页面直接访问会跳转。如果没太注意的话,就会直接跳转到php页面,然后没发现这个html页面的话,解题者后续所有的测试将都会在php页面去测试,那么这个题不管怎么测试都是徒劳。

因为php页面的代码其实很简单,就是一个类似jsonp的页面而已。这个考点(坑点)据说考住(坑掉)了蛮多人。

 
页面中调用了index.js 主要是用来获取url参数用的。


然后可以看到,htm页面的源码里有个document.write写入script标签的操作,这里可以利用这两个参数去改变script标签中src的值,所以我们只需要找到一个路径,可以用参数控制并调用,其中含有alert(1)的文件即可。

再去看这个php文件,这样就有了上述需要的文件了。


思路梳理通了,所以就很容易有答案了,只需要按照代码中的传参逻辑,去拼接出文件路径就可以了。

 


这个考点其实以前“心伤的瘦子”写过专栏,不过可能很多人没细看,或者没看懂。

那些年我们一起学XSS - 12. Dom Xss进阶 [路径con]
https://cloud.tencent.com/developer/article/1541071

◇ 3 下面来看看第六题
 


首先还是有和第五题一样的跳转的点,看似和第五题差不多,参数由2个变成了1个,去掉了第五题路径中的问号字符。然后参数做了次URL解码操作。看着貌似和第五题没啥区别,那么试试先?就会发现这个题设计的没有那么简单的。

首先还是和第五题类似的思路,构造下路径,然后把可以执行js代码的php文件放进去就可以了。

然后这里没有问号,那就去放个问号进去吧,放进去后发现不行,会直接跳转。断点调试可以看到,参数居然直接变成空字符串了。
 


然后想的肯定是不允许问号,那就用%3f编码下,然后当你一番构造后去验证,会发现还是不行,百分号没了。

 
那就挺懵了,一番调试后,感觉明明没问题啊,为什么会跳转?真是BUG啊~

一番郁闷后,应该会去看源码。
 


看了源码后发现,原来是把问号给过滤掉了,为了防止url编码绕过,这里%号也给过滤掉了。后面的代码的作用就是,对参数进行了校验,如果不符合条件就会返回空,所以就会跳转到php页面了。

那么这个情况我们应该怎么样去构造绕过呢?如果这是你遇到的实例,可能你会觉得这里的防御没问题,所以也就放弃了,那么你将会错过一个XSS漏洞。

具体细节,关注公众号等待后面的精彩解析吧。


尾 巴

目前最新情况是,大部分的人做出来了1~3题,然后卡到第4题这里,还有蛮多人做出来了1~5题,卡到了第6题。其实卡住了的话,是可以跳着去做其他题的,因为整体来看,第6题应该是最难的了。

ID:gainover 解出了全部10题。并且是目前唯一解出第6题的人,以及第4题给出了目前最短payload的解法(13个字符)。

ID:香草  解出了1~4题,以及7~10题。并且给出了通杀9和10的payload。

ID:p1g3、zeddy、Huuuuu 、w8ay 解出了1~5题。p1g3、zeddy、Huuuuu 还做出来了7~8题,但是三人的第8题给的答案,都不能过xss filter。

ID:w8ay、Huuuuu第4题给出了不同于其他人的解法。

ID:zeddy第7题给出了不同于其他人的构造思路。

其他已经做出未被提及的,可以将自己的答案和ID发我qq邮箱:px1624.qq.com



威努特简介

北京威努特技术有限公司(以下简称“威努特”), 是国内工控网络安全领军企业、全球六家荣获国际自动化协会安全合规学会ISASecure CRT Tool认证企业之一和亚太地区唯一国际自动化学会(ISA)全球网络安全联盟(GCA)创始成员。

威努特作为国家高新技术企业,以创新的“白环境”整体解决方案为核心,自主研发了全系列工控网络安全专用产品,拥有52项发明专利、50项软件著作权、52项原创漏洞证明等核心知识产权。积极牵头和参与工控网络安全领域国家、行业标准制定,受邀出色完成新中国70周年庆典、中共十九大、全国两会等重大活动的网络安保任务,被授予“国家重大活动网络安保技术支持单位”,得到了中央网信办、公安部、工信部等国家政府部门的高度认可。迄今已成功为电力、轨道交通、石油石化、军工、烟草、市政、智能制造、冶金等国家重要行业1000多家工业企业提供了全面有效的安全保障。

威努特始终以“专注工控,捍卫安全”为使命,致力于为我国关键信息基础设施网络空间安全保驾护航!

渠道合作咨询   张先生 18201311186

稿件合作   微信:Luo_xiaoran



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存