生命不息,挖洞不止
本期我们特邀开源聚合网络安全17级秋季班
来自山大商务代号Screw的学员
给大家讲解一波CVE漏洞的挖掘
(作为一名白帽黑客,大家懂得)
我们的宗旨是在实战中感受网络安全的魅力
话不多说,直接进入主题
0x01 前言
前一段时间,听见某位大佬挖出了一波CVE甚是眼红。不管洞垃圾与否有个CVE编号还是很有逼格的。这次的文章适用于找工作简历需要丰富的或者和我一样混个CVE编号玩玩尝尝鲜。废话不多说开始搞事情。
0x02 CVE介绍
CVE 的英文全称是“Common Vulnerabilities & Exposures”公共漏洞和暴露。CVE就好像是一个字典表,为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。使用一个共同的名字,可以帮助用户在各自独立的各种漏洞 数据库中和漏洞评估工具中共享数据,虽然这些工具很难整合在一起。这样就使得CVE成为了安全信息共享的“关键字”。如果在一个漏洞报告中指明的一个漏洞,如果有CVE名称,你就可以快速地在任何其它CVE兼容的数据库中找到相应修补的信息,解决安全问题。
0x03 找CVE的方式
1.找CNA厂商挖取漏洞
http://cve.mitre.org/cve/request_id.html#cna_participants (都是知名厂商,挖取漏洞较困难)
2.找MITRE来提交漏洞
到了今天咱们的主角,大家注意一下Scope,也就是不在CNA列表中但的确存在漏洞的项目可以往这提交。这无疑将咱们的难度几何式降低,看到这里是不是大家感觉CVE已经向你在招手。
0x04 找目标
目标去哪找——一些网上的开源CMS。一个一个在百度找的话比较困难。直接在GitHub上搜CMS来寻找目标。
7W+的搜索结果,总有一个适合你。
0x05 选择什么语言
我们看到git上搜到的cms语言,有java、php、C#、python 、Ruby.该选哪一种开始呢?
1. 从环境快速搭建的角度
首先得想到的是php,直接下载PHPStudy,5分钟就可以搞事情了。而且php是相对来说,是一个比较好入手的语言,白盒起来也相对轻松。还有毕竟都是开源项目也有很多人在维护所以在相对安全的情况下,更换下一个目标也相对较快。
2.从自己熟悉的语言去选择
比如你熟悉java那就选择一个java的CMS,虽然环境搭起来比较坑,又是开发的IDE,有需要web服务器,jdk环境。或者Maven依赖等总之环境就会浪费的大量的时间。但是好处就是,毕竟自己熟悉的语言,找漏洞黑盒配合白盒相对轻松。(毕竟是自己熟悉的语言,跪着也要审完)
0x06 选择什么样的洞
首先选择是CSRF,选择这个漏洞的原因有两点。
1.CSRF存在与用户交互,开发者感觉这种漏洞不会产生什么大的危害,且利用较困难所以不太会注意这个问题。况且2017年CSRF已经退出了OWASP TOP10。
2.CSRF需要全局的去添加token,如果考虑的不全面。当你点开两个页面时,在第二个页面进行请求时没有问题,但是当你再次在第一个页面发起一个请求时,发现提示Token是非法的。
3.至于referer的防护,绕过的方法很多,所以referer方法不实用。
至于常规的sql注入,一般开源项目都会做预编译参数化查询。相对较少。
XSS也是会做一些常规的防护,实体编码、正则替换等。可以尝试构造payload绕过,但很耗精力,这就是我为什么说首先选在CSRF的原因。
0x07实战搞事情
选择一个自己看着比较顺眼的CMS开始下载,一般直接下载的话贼拉慢,建议大家科学上网去下。搭建就不说了phpstudy集成环境。妈妈再也不用担心我下的CMS跑不起来了。
网站搭好了,下一步的目标就是直奔后台。因为一般前端在未登录的情况下只有查的功能。咱们的目标是增删改。
CSRF找的就是敏感操作,所以咱们先看看添加用户功能
看到有添加功能时,先别着急的直接黑盒测试。先看看有没有防护
查看源码,搜索token字段,如果搜到了就已经证明凉了一半。看看等不能绕过(下一段,我会说一些常规的绕过方法关于token的),或者寻找其他的敏感功能点看是否有防护。因为业务的复杂度,大多数cms不会做全局的token校验。
这个站在添加用户时,做了token防护,无法绕过。所以我把目标放在了删除用户处。问题就处在了删除用户处,虽然以post的形式提交了token字段,但是服务器端没有对其做任何检验,所以。。。
因为这个东西比较敏感,我就不公布细节了。
0x08 绕token的方法有两种:
1.只有存在xss的情况下,使用ajax来跨域获取DOM节点中的Token字段,来进行构造。
2.Token是固定的,是根据某个用户id做了单向hash获得的,所以这个直接就可以提前去构造。
3.只是有token,并没有去使用,也就是传说中的摆设。
0x09 提交漏洞
1.https://cveform.mitre.org/ 提交地址
2.需要准备一个自己的博客或者直接在项目的issues中将漏洞细节说明清楚,因为在提交时字数有限,需要你提交一个url来说明漏洞细节。
3.提交时因为全是英文,所以建议使用chrome浏览器来提交,因为有个神奇的全文翻译的功能。另外再配一个有道在线翻译,因为你交付的内容也必须全英文。
申请CVE漏洞编号
申请表中会要求填写漏洞类型、产品厂商、受影响产品或代码及版本、厂商是否已确认该漏洞、攻击类型、影响类型、受影响组件、攻击方法或利用方法、CVE描述建议等。
0x10 等待回信
提交之后,对方会自动回复一封邮件大概是非常感谢你提交的漏洞,我很将会持续跟踪这个漏洞。
如果一天内就找到了两个及以上,提交漏洞后将不会再自动回复你。大概1天左右你将会收到一封邮件里带着多个CVE编号。
0x11 总结
到此CVE编号就混到手了。如果有能力的话,还是建议挖CNA类表中大厂的漏洞,比较有价值。如果找工作或者只是混一个编号玩玩的话,那就直接搞起来吧。