Skip to content

自动化获得微软漏洞赏金的经历

字数
1860 字
阅读时间
8 分钟
更新日期
6/8/2022

时间在2020年,当时使用xray,发现它的的反射型xss扫描很好用,于是想知道原理,好奇探索了下大概的xss扫描规则。xss扫描器成长记 有讲述,

xray会先发送一个随机字符串,根据在html/js中反射的位置构造一个无害的payload,判断payload在标签中的位置,就能判断出是否存在反射xss,后面验证的payload自行去构造就好了。

xray没开源,我就自己写一个了,然后加了一个爬虫,自己爬自己扫,通过爬虫的数据,发现很多地方还有可以优化的地方,又看了一些公开的xss的报告,把很多奇葩条件下的xss扫描规则都加了进去。当时自己的机器都是2H1G的小机器,想提高效率,于是学习用分布式,但是又由此带来了很多第三方的数据库,队列什么的,更加压迫了我机器的性能..做了这么多,成果也很喜人,各大src,微软都有,运气好也获得了微软1000多刀的赏金。

xss扫描器经历

基于语义检查反射xss这部分代码其实早已在w13scan上公开了:https://github.com/w-digital-scanner/w13scan/blob/master/W13SCAN/scanners/PerFile/xss.py

检测流程:

  1. 将参数变为随机数,探测随机数是否回显

image-20220306213320585 2. 判断可否xss,content-type是否是html

image-20220306213406120 3. 再次根据GET,POST,COOKIE进行请求,确定参数的回显位置

  1. 如果语义分析不到回显的位置,可以直接构造一个xss,看是否存在即可

image-20220306213447763 5. 语义分析得到位置,根据不同位置生成不同的payload,并进行二次探测最终确认xss是否存在

不过公开的是第一版的代码,后面我又对代码进行过多次整改,适配了很多种情况。

  • js文本内容转义

    js
    var s1="1\"
  • 回显内容在注释里,可使用换行进行bypass

  • 多个反射点特殊构造bypass

  • 针对大量回显参数进行优化,之前是发现一个回显参数就请求测试一次,但是一个页面如果有大量回显的情况,会发送很多无用包。

  • 如果有多个输出点并且在同一行,js中 反斜杠\未被转义 就能被赋予意义。

    • img
  • 一些可以输出替换的点

    • img

等等..

工程化经历

xss扫描器完毕后,加上爬虫,一个简单的流程图如下

image-20220307221728057

给后端添加bugbounty的目标域名,整个系统就能自己转起来,自动搜索子域名,自动爬虫,自动xss扫描,自动检测更新。

技术栈主要用的是python,现在总结起来的构成有以下,使用到的技术:

域名收集

域名爆破+验证

爬虫

后端:

  • django+mongodb

分布式:

  • celery
  • celery状态监控:flower
  • 消息队列:rabbit MQ

容器化

  • docker

自动发布

  • fabric

进程监控

  • supervisor

demo阶段后端一开始用的是leancloud服务,直接把扫到的数据存里面

image-20220307224903326

后面觉得成果不错,就开始用自己的数据库了。

界面和成果

当时做了简单的界面,填写src的地址等等就可以自动监控,成果也很喜人,基本上很多src的都检测到了。

image-20220307222357680

子域名搜索

image-20220307223400937

漏洞页面

会把xss的类型和测试payload展示,方便知道是哪些方法找到xss的

image-20220307222504596

漏洞详情

把请求包详情展示,包括发送包,因为有时候复现不出来,大概率是和请求头某些参数有关系。

image-20220608223243214

image-20220608223323218

一些成果

image-20220608224025806

微软赏金经历

当时分布式都是用的国内机器,扫国外的很多都超时,所以就选了微软一家,国内访问速度还可以。当时没想很多,就把微软几个官方域名加了进去,让它自己去爆破自己去扫,还是有不少的,重点是一个月全部大更新一次再去扫,都有不一样的东西。

提交漏洞的记录:

image-20220307223452479

找到微软的网站漏洞,提交后它会在每月在线服务致谢中展示(xss也算噢)

image-20220307223637236

它也定义了有赏金的网站,网站在这里会得到赏金。(我发现了好几个微软主战的xss,但都没赏金..)

- www.office.com
- protection.office.com
- onedrive.live.com
- onedrive.com
- portal.azure.com
- manage.windowsazure.com
- azure.microsoft.com/en-us/blog
- portal.office.com
- outlook.office365.com
- outlook.office.com
- outlook.live.com
- outlook.com
- sharepoint.com
- lync.com
- officeapps.live.com
- www.yammer.com
- sway.com
- sway.office.com
- tasks.office.com
- teams.microsoft.com
- asm.skype.com
- msg.skype.com
- skyapi.live.net
- skype.com
- storage.live.com
- apis.live.net
- settings.live.net
- policies.live.net
- join.microsoft.com

后面按部就班的提交给微软咯,有一个域名我当时还不知道有赏金,就当普通的提交了,后面微软给我发来了赏金计划通知。一个xss奖励了1200美刀。

image-20220307223931110

Ps :后面我还想凭着xss冲一冲微软最有价值的研究者,因为平均提交三个漏洞就能进入了,我提交了6个,但是后面发现它的机制是平均报告的volume或分数要超过同比的50%,xss分数少,可能就没过吧。。

为啥不做了

国内当时刷了一圈xss,但赏金都特别小,想刷国外,但就得把系统在国外vps部署一套,分布式的队列也得放到国外,它连国内的队列基本都超时,也觉得xss漏洞还是挺小,还是 反射xss,没有rce来的有成就感。后面做别的事情就忘了继续这个项目了。

现在还想做

还没有用这个技术刷国外的src是个遗憾,现在我也在构思自己的src平台,想把这个重新拾起,并且现在crawlergo也开源了,我可以做更多事情,比如直接在浏览器层面注入js来检测dom-xss等等,把爬虫的数据存下来,可以像google语法那样搜自己想要的东西。现在也可以买一些性能好的服务器,不用像以前2H1G拼命优化算法压榨自己的主机,连起个redis都要纠结好一会。

结尾打个广告,公众号回复知识星球,就可以获得知识星球的加入链接了(收费哦)

星球第四期作业也是以这个为题

image-20220608224357135

最近也重构了Go语言版的XSS扫描器,也发星球了,加上了爬虫,输入url就能自己跑xss了(完成星球第四期作业就奖励源码!)

image-20220608224837392

公众号回复知识星球试试?

撰写

布局切换

调整 VitePress 的布局样式,以适配不同的阅读习惯和屏幕环境。

全部展开
使侧边栏和内容区域占据整个屏幕的全部宽度。
全部展开,但侧边栏宽度可调
侧边栏宽度可调,但内容区域宽度不变,调整后的侧边栏将可以占据整个屏幕的最大宽度。
全部展开,且侧边栏和内容区域宽度均可调
侧边栏宽度可调,但内容区域宽度不变,调整后的侧边栏将可以占据整个屏幕的最大宽度。
原始宽度
原始的 VitePress 默认布局宽度

页面最大宽度

调整 VitePress 布局中页面的宽度,以适配不同的阅读习惯和屏幕环境。

调整页面最大宽度
一个可调整的滑块,用于选择和自定义页面最大宽度。

内容最大宽度

调整 VitePress 布局中内容区域的宽度,以适配不同的阅读习惯和屏幕环境。

调整内容最大宽度
一个可调整的滑块,用于选择和自定义内容最大宽度。

聚光灯

支持在正文中高亮当前鼠标悬停的行和元素,以优化阅读和专注困难的用户的阅读体验。

ON开启
开启聚光灯。
OFF关闭
关闭聚光灯。

聚光灯样式

调整聚光灯的样式。

置于底部
在当前鼠标悬停的元素下方添加一个纯色背景以突出显示当前鼠标悬停的位置。
置于侧边
在当前鼠标悬停的元素旁边添加一条固定的纯色线以突出显示当前鼠标悬停的位置。