个人公众号文章,我一般就大都是流水账式的记录和叙述了。
首先,说说《一些BAT的XSS实例》里面的那些题的由来,第一题这个我记得是2013年初的某宝的一个漏洞。然后当时我把这个漏洞给某宝报送了,淘宝还给我发了个娃娃套装。当时我还激动的发了个qq的说说状态。
当时我还在工地搬砖,后来2014年转行后,年底给公司培训XSS的时候,我把这个案例放到当时做的PPT里面了。然后2017年换了个公司,公司让培训XSS的时候,我就打算把这个PPT再讲一讲。但是当时由于2016年众所周知的事情,这种某公司的这种案例不太好拿出来讲了,所以我就自己写了个demo环境,也就是《一些BAT的XSS实例》这里面的第一题了。
然后时间不知不觉到了2020年,当时某个安全群里在讨论domxss,然后我就顺手把这个demo案例小题丢过去让他们玩了。结果发现竟然没几个人能搞出来,当然也有人很快就给出了答案,还以一种蔑视的姿态,表示这个有啥意思?然后我又扔出了第二题。
第二题其实是现场设计的一个题,这个也是在2020年初发现某前端框架因此存在XSS漏洞。不过这个问题导致的案例以前很早很早大概2012年吧,也有人发过某讯的实例。然后我就根据漏洞大概又写了个简单的代码,丢过去让玩。结果发现这漏洞,竟然被很多人直接给盲测出来了。然后又是一阵嘲讽,哈哈哈。
所以心里肯定还是不太爽的,于是我又设计了个第三题,第三题也是某讯当年的一个漏洞实例,就是同步输出的问题。其实这个漏洞当年我构造了好久也没搞定,后来还是找别人帮忙的。于是我设计好题目后给他们开始玩了,结果很快就给出了答案,直接用运算符连接构造。
这个方法其实我当年是不知道的,因为那个时候,貌似没有人去这么构造,所以那个时候其实我的构造方法还是相当的复杂的。所以我就想,那我把运算符都给限制了,再搞个第四题,这样是不是除了我的方法,就没有别的方法了吧。结果发出去后,发现大家都用反单引号(模板字符串)去构造了。因为当年还没有ES6标准,所以也就没有这个构造方法,所以我压根就没往这上面想。
经过这4道题的设计,我自己也专门去学习了解了运算符、模板字符串的相关东西,也算收益颇丰。但是丢了4道题,被打脸了4次,这个脸还是有点疼的啊,所以我又给出了个第五题,这个也是某讯的一个实例。其实这个漏洞一直都没人发现,不过现在漏洞已经失效了,因为那个业务倒闭了(-_-||)。然后设计好后,我把题目丢给了二哥让试试,他说你这出的有啥意思,这题应该这么改下,直接把%号给干掉才有意思。然后我还是按照他建议的改了改题目,也就是第六题。不过观察了下感觉貌似这样就没解了吧,提出这个疑问后,他火速的给我丢了个弹窗。
于是我自己试了2天,还是没搞定,问他要了下答案。后来这个题,除了他也没其他人做出来,这个也就是这些题里面最难的了,至于原因为啥,看过《一些BAT的XSS实例(五)》这篇文章的人应该都知道了。
然后这个题本来也就这么六道了,也就是自己和朋友玩玩而已。后面有一天,听说某亭有人在朋友圈丢了个他们扫描器的弹窗,是某东的XSS漏洞。然后我就去试了试,顺便叫了个其他小伙伴。过了一会我们一共找到了四五个。我去说这没啥难度啊,BUT 二哥说他找到了一个比较厉害的,不是我找的那几个点。于是我就去测试他这个点,试了一天没试出来,后来他说这个其实还是蛮难的,给你说下怎么构造吧。然后我看他用的是模板和对象的构造方法,这个思路我还是比较惊奇的。因为虽然我他的用的这些东西我都知道,但是我没想到过还可以这么去构造(也就是说思维跟不上)。
然后我把这个思路好好的捋顺了下,再去又把ES6模板的相关特性学习了一遍。然后再假装自己不知道答案,去重新构造了几遍,结果就是每次都可以成功构造出来了,哈哈,这样就基本上等于已经掌握了这个方法了。
过了大概一两周吧,我打算去把这个某东的XSS实例去设计成题目给大家玩。然后发现这个漏洞被修了,我去问二哥是不是提交了,他说没有。那么就只有两种可能,一种是别人也发现了这个点的漏洞,另一种就是这个漏洞被误伤(修补其他漏洞或者业务更新时候无意修复)了。经过一番排查,我们发现这个漏洞是被误伤了,然后我又试了试前些天找到的几个漏洞,发现都修补了。那就应该是这些漏洞被人上报了,然后他们在修补的时候,把那个漏洞给误伤了。
不过二哥很快又给出了绕过后的弹窗,过了大概几个小时他说香草也绕过了。这我肯定不甘心啊,于是自己去尝试,后来我也绕过了,哈哈哈。然后几个人对了下答案,我把不同的思路分别设计成了第七题到第十题这4个题。
这时候刚好公司让我写几篇技术公众号,我就想着那可以把这10个题分成上中下3篇去写一写。所以我就把十道题发出来让大家都玩玩,然后我着手去码字了。那段时间,又相继有一些人给出了一些其他的思路,我还因此结实了几个玩XSS的年轻人,其中以Huuuuu的精神和水平最佳,后面我又多了一个可以讨论技术的小伙伴了,嘿嘿。
在码字技术文章的时候,我发现内容有点多,3篇写不完啊,所以最终分成了5篇进行了分享。
这事情过了一段时间,有一天Huuuuu给我发了个twitter上别人出的题,然后我们俩搞了蛮久都没搞出来。后来官方公布了答案后,我一看原来是要利用nginx对%2f解析的特性去做,如果不知道这点或者知道但是没想到的话,那么这个题基本就是做不出来的。然后我们俩讨论了下当前答案的构思方法,他也给出了一个自己理解的构造,我看了后说你这个还可以这么精简。然后精简后发现,我们目前的这个答案竟然还是最短的,于是twitter的最短答案就又更新了,哈哈。
感觉这个思路挺有意思,我就将其设计成了11和12题,后面也根据此又写了个《一些BAT的XSS实例(六)》。
过了些天,有人告诉我说我的文章被某亭的公众号转载了(还标榜的原创),我去看了下,其实并不是转载,是有一个小伙伴把我的12个题和文章解析,又进行了更为详细的剖析。我一看,这种精神不就是当年的我么。然后我大概看了下文章,发现写的有明显的问题,然后我就私下加了下他。然后在详细的过了一遍他写的详解文章后,把一些明显的客观理解问题给他纠正了出来。并且希望他有其他途径去进行更正说明下,因为我觉得技术是严谨的,如果有问题再分享的话,本意是好的,但是很容易误导其他人。
比如这种解释,其实有点自己猜测的意思了,但是猜的却是完全错误的,哈哈。相关的客观错误问题还有蛮多,我都一一给他列举了下。
不过我发现了一个比较尴尬的问题,就是那些错误问题至今并没有得到纠正。所以大家还是以我的那6篇《一些BAT的XSS实例》系列的相关文章为准吧。写这篇文章的时候,我还专门去核实了下,的确是没有得到有效的纠正。
然后我发现,这个系列的文章很多人去用来学习了,我还是比较欣慰的。也有平台来联系让发过去,本来是打算发的,反正就复制过去就行了,也不浪费啥时间,还可以分享给更多有需要的人。但是我发现平台编辑器不能直接复制粘贴,图片需要一个个的上传,所以只能暂时作罢了。
后面因为我写了另一个XSS技术文章系列,也就是《强防御下的XSS绕过思路》系列,这个系列本来写三篇。后来追加成了四篇,具体原因在《强防御下的XSS绕过思路(四)》里面也有提到。
然后相关的题目我又写了3道,前两道其实还是比较简单的,在前面的很多文章中也都有提到,结果发现很多人竟然还是不会,而且还看过那些相关文章。第三个题的确是有一定难度的,这个题最终也是除了二哥都没有做出来。
经过这些出题解题的过程,我发现我的XSS水平又进了一步,而且思路又广了一步,还有php的编程水平也稍微提高了些(虽然这块还是很菜),还认识了一些新朋友。
可能有人说,你都在安全圈子这么多年了,你看某某都已经是啥职位了,你还天天在这XSS,你的格局呢?
我想说,其实我也曾经比较羡慕嫉妒这些,尤其是有些技术不如自己但是却有更好的职业发展的人。但是沉下心思考,纠结这些是没有意义的。
人要不忘初心,要忠于自己年轻时候的梦想。不忘初衷,方得始终。
写于2020.12.31