之前写2022年度总结的时候,有提到要给大家分享漏洞挖掘技巧。这里简单分享一些思路,更多的内容需要大家举一反三。
文章准备昨晚写的,昨天晚上出去唱歌,回来太晚了,耽搁了。昨天是我工作的last day,心里还是有点难受的。我想了想,人生大抵如此。在短暂的生命中,认识不同的人,和他们相识到相知,再到离别。 以此循环,以此交替。循环往复,周而复始。幸好现在还是有一些朋友在身边,幸福有时候还挺简单的,有工作,有朋友,有肉吃。
言归正传,聊点正经的。
安全测试
信息收集真的说了好多年了,公众号/安全资讯网站上经常说,而且github上隔三差五就会出几个信息收集的工具。信息收集可以说是web漏洞挖掘中最重要的阶段。现在很多单位面试,都可能会问如何对一个厂商进行全面的信息收集,看看你对信息收集的理解,我觉得这个就很好。
以信息收集为核心,是没有错的。说到信息收集,网上文字提到最多的就是对子域名的信息收集
那么我们在做漏洞挖掘的时候,常常会使用网上的优秀的信息收集工具进行资产收集,有耐心的同学,还会对ip段进行信息收集,进行C段的扫描等。怎么评定资产收集工具的好坏呢?我们常常通过查看github star数,README介绍或是文章中的工具科普,去了解一款工具,是否是不错的资产收集工具。比如说在挖国内项目的时候,我一般会使用OneForAll进行资产收集。
因为挖掘的目标的多样性,所以扫描结果也总是不同的。有些目标,工具扫描出来的结果就很多,有些目标,工具扫描出来的结果就很少,甚至几乎没有结果。有时候还挺"束手无策"的,不知道如何下手。跑完资产,我会访问子域名一个个打开看,全程我会开着burpsuite,我会勾选所有选项,我不会错过任何网站信息,包括图片信息,也是我需要了解的。
我会去看网站的业务功能点,我会随便翻一翻点一点,然后查看burpsuite历史记录:
这个阶段,我想用一个词描述它,那就是了解阶段:
我不会测试漏洞,我会简单看下这个网站是做什么的?这个why对我很重要。我好对这个网站进行分类,我会记录他们。
下一步简单了解了网站是什么类型的网站后,我会通过查看Burpsuite历史记录,了解它的接口形式,如果能通过观察数据包,能发现他的网站组成结构,那是再好不过了。
那么怎么了解你的网站是使用了什么技术开发应用的呢?方法有很多,我会通过植入一些脏数据或缺省,有些网站如果没有做统一的错误处理,它会暴露一些程序的应用信息,如json报错错误,它可能是fastjson的,也有可能是jackson的,但是大概率它是jackson。这时候我们该怎么做?对于不熟悉jackson反序列化的朋友,我强烈建议你维护个wordlist,为jackson vulnerability wordlist。从各大文章/github中检索所有jackson的漏洞利用的payload,把他们引入Fuzz,跑一下,万一成了呢?万一他有反序列化漏洞呢?
很多朋友有个疑惑,我Fuzz了,怎么知道它有没有漏洞呢?那么我们需要了解这个漏洞的特征,触发特征是什么?
一般来说常见的有两种,也是很好用的两种。1.response中直接回显的 2.dnslog中有回显的
我们只要在Fuzz阶段,观察和搜索response中是否有我们的特征信息,或者刷新dnslog,查看是否有dnslog信息返回,以此来判断是否存在漏洞。
这种Fuzz很好用。在很多地方你都可以使用他们。优势在哪里?
1.无需懂原理你也能挖到漏洞
2.迅速检测漏洞是否存在
3.无需太多的思考
Fuzz的劣势也很明显,因为不懂jackson反序列化漏洞原理,导致看到报错信息,就会尝试反序列化Fuzz,会比较盲目,会浪费很多时间在Fuzz上,结果往往是不如意的。所以最好的Fuzz建立在懂漏洞原理的情况下,实现更精准的判断。总体上来说,这种劣势,在安全测试中,影响不会很大,占比不会很高。
对于大多数的网站来说,了解他们的网站业务往往不会很难,不需要花太多的时间,那么下一个阶段就是熟悉->详细功能点安全测试
迅速熟悉网站后,就要开始对网站上的各个功能点做安全测试。对于新手来说,挖越权就好了,看到功能点,就开两个账号,尝试新增数据,删除数据,修改数据和查询数据,抓包这些功能点,修改其中的唯一性id。循环这个动作,坚持这样做,不说挖到高危,一定能挖到漏洞,还迅速提升了逻辑挖掘的实战能力。
后面经过大量的实战后,可能会发现修改数据的时候,可能有多个唯一性的id。在修改数据查询数据的时候,发现根本不存在唯一性id等问题,那么又需要新的方法去做安全测试。不过我说的这些情况,往往不会很多见。
测试完功能后,运气好,可能会挖到1-2个逻辑漏洞,运气不好,可能一个都没挖到。那么如果你挖的是src,大多数人大概率是运气不好的,往往一个漏洞都没挖到,发现测试了一下午,一无所获,还不如打游戏呢。
在这个阶段,大多数人就放弃测试越权了,觉得浪费时间了。我想说持续这个动作,持续1周-2周,我希望你坚持下来,很枯燥,但是按照我的经验来看,只要走量的话,只要能触碰到足够多的功能点,你一定能挖到漏洞。
我懂越权,为什么我还会挖不到越权? 被什么困住了?
大多数人觉得测试越权,需要花活tips,我个人觉得大多数时候测试越权就是修改参数没别的东西。总体原因有两个。
1.你测试功能点,心太粗了,覆盖面不够,就是你的功能点覆盖面不足
2.你触发不到更多的功能点,被困住了
对于1的情况,有一些缓解方案。
(1)寻找多级分类的标签页,就要找那种小众的功能点,最好是点了n个页面触发到的功能点,寻找那种"枯井暗沟"的功能点,之前挖谷歌,就挖了一个核心业务的越权,就是从多级目录下的一个不起眼的按钮处挖到的越权漏洞。
有时候我们看到复杂的业务逻辑,看到非常多的功能点,我们不要害怕测试,他们虽然测试很累,但是大概率会有所收获,不会"白跑一趟"。
对于2的情况,个人觉得是最痛苦的。大多数困住我们的不是我们不会测试越权漏洞,抓包修改参数即可,多简单啊,困住我们的是其他。比如说打开资产子域名,都是登录框,打开子域名,都是404,403,502页面。我差的是越权吗?我差的是触发功能点!那种感觉就像浑身的力气,一拳打在棉花上一般。
为了触发更多的功能点,这时候我会对404,403页面进行目录Fuzz,对登录框的地方,我会尝试爆破,不厌其烦的看着js文件,拼接路径。我会继续信息收集。我想到了老外常说的一句话,这边我贴一下:
Never rely on a single tool for recon as you may miss out your targets. 翻译过来就是不要依赖单一的侦查工具,因为你可能会错过你的目标。
为了触发更多的功能点,可以说我们做了非常多的前置工作。可见触发到功能点是多么的重要。我甚至可以说,现在的web安全测试,很大程度上是面向功能点的安全测试,对功能点的web安全测试,在整个安全测试中,占比很大。
xss有话说:
在挖一些大厂的时候,发现简单的输入输出xss都变少了。变少是正常的,反射xss检测逻辑相对简单,大部分白帽子都有反射xss检测工具。再加上现在的web的快速发展,大厂简单的反射xss会变得很少。
所以我这里建议大家去学习学习PostMessage xss漏洞挖掘,国外白帽子,挖xss的,都在往PostMessage xss倾斜,我的博客有写过PostMessage xss学习案例。感兴趣的,可以看看学习下。
存储xss: 存储xss其实很好挖,真的。只要你能触发到足够多的功能点,存储xss,就有挖到的可能。我这边测试存储xss,最喜欢用的payload为:
我的经验告诉我,如果有图片显示,那么大概率这里可能有存储xss,这个方法也可以测试反射xss,但是对于反射xss来说,这个绝不是最好的探测payload。这里说明这个payload,是再次强调了在漏洞挖掘中,特征测试方法,是非常重要的tips。 img这个payload是基于响应的,我这边的测试经验告诉我很好用。
它真的没漏洞吗?
在测试一些项目或者目标的时候,发现凭自己的技术,很难发现漏洞了,如何破局?
1.资产监控 子域名/端口
对资产目标进行24小时/48小时一次的资产检查,对新资产进行告警
资产监控是很有用的,他可以发现新资产。现有资产没发现安全漏洞,很大概率是因为业务变动太小了,新的子域名,代表新的业务变动,这时候去测试,大概率会有安全漏洞。
2.新功能点
监控新业务更新的页面,第一时间发现新功能点
很多网站,不以子域名上线标志为新业务上线,新业务的上线依赖于request path,这时候就要监控更新动态的地方,然后再访问对应的网站页面,去进行功能点安全测试
。。。。。
js里面的小秘密:
看不到后端代码的今天,我们唯一可以看到的就是前端,javascript代码,我们要好好珍惜,利用它们,一些基于js的tips:
前端是我们挖洞的伙伴,它可以变成我们手上最锋利的刀。
一些困扰?
身边好几个做安全服务的,平时工作也是挖漏洞的,说挖自己公司的项目,说常常挖到漏洞。但是一去挖偏赏金猎人的项目,就束手无策。我该怎么办?
我相信这个问题,绝对困扰了绝大多数的安全服务工程师。很多时候,我们想去挣点外快,发现自己工作中用到的那一套,不适用于众测/src目标。
针对这种情况,我想说具体问题具体分析。
1.熟悉当下的工作环境,了解你做的大部分项目是什么类型的。你做安服期间,做了什么项目?这些项目有什么特征?
2.把安全服务的项目和众测/src目标进行对比,寻找他们的不同点,寻找出难点在哪里,寻找出问题点在哪里。
3.对于问题点,能解决掉,我们就尽量解决掉。对于难点,我们可以对外寻求帮助,和其他同行朋友沟通交流。
4.寻找志同道合的朋友,一起挖洞,投入时间,坚持下去,我觉得是很重要的。
5.完善你的wordlist
。。。。。。
读懂自己:
对于做漏洞挖掘的,应该知道自己需要什么,读懂自己的需求,是抱着什么目的去挖漏洞的。
1.对于短期学习漏洞挖掘,想快速挖到漏洞的同学。这些人是想快速获取金钱变现的。
对于web漏洞挖掘。就我个人而言,我能挖到漏洞,但是我自己很难快速挖到漏洞,还是需要了解网站业务。但是我知道其他人可以快速挖到漏洞,而且这种人不少,还很多。
想要快速挖到漏洞,那么你一定要提高你的认知。比如说你有一个别人都不太知道的漏洞挖掘思路,如针对特定功能点的测试思路,这种思路一使用,是大概率爆漏洞的。漏洞挖掘中很核心核心的一点就是思路,想赢,还是需要奇招。我说一个奇招,过去几年被频繁使用的,如科学记数法dos攻击。这些tricks,我都叫他奇招。奇招难点在哪里?
(1)思路是很难获取到的,一般漏洞的难点在于思路,web漏洞挖掘,大多数没有技术难点。
(2)思路是无价的,如黄金一般。
(3)提高逻辑思维能力,了解深入网站业务。
(4)加入一些知名安全团队,和他们讨论交流,交流是web安全漏洞挖掘技术提高的手段之一!
(5)不要停止学习,所有的tricks,都能追根到原理。多做代码审计,不限语言。尤其是逻辑类的代码审计,多看案例。
。。。。。
2.对于准备长期做漏洞挖掘的,就要把战线拉长,而不是在意短期得失。应做好,做全信息收集,同时日常要学习代码,阅读代码,打好基础等。对于可重复性的手工操作,要尽可能的半自动化,解放双手,减轻自身压力。同时日常还要刻意训练自己的观察力,细心和耐心。
漏洞挖掘目标选择:
如果你是为了学习漏洞挖掘,那么选择什么目标都可以,但是如果你是来赚钱的,那么你还是要尽可能的选择软柿子。
为什么我们做漏洞挖掘,总是要学习很多web开发知识?还要学习加解密技术等,学习很多知识,他们往往很杂。
真相很残酷,一般测试金融类的网站,app多多少少会有些加密,一些核心网站,还会有其他防护,他们不是针对安全的,他们有时候是为了防爬虫,风控等。这些目标很显然不是软柿子,在目标受限的情况下,要不是迫不得已,没人愿意测试他们。
所以你想快速赚钱的,不管是长线还是短线的。你要尽可能选择功能点多,且目标范围大的厂商。国内我推荐挖阿里和腾讯,他们资产目标范围大,资产更新频繁,并且功能点多。其他的src也可以,只要符合目标范围大,并且功能点多的特征,理论上你都可以尝试尝试。
如果可以安于现状的赚钱,我相信大多数人都是躺着安于现状。随着web的快速发展,很多目标项目,就是一个app,或者一个网站,让你测试api,再踢着我们屁股,逼迫我们成长。我觉得这也不一定是一件坏事。如果无法避开,那么我们就坦然接受他们,去解决问题,可以抱怨,但是最终还是要解决他们。解决它们的成就感比获取赏金更快乐!友情提醒: 不要过度沉迷于难项目,大多情况下他们没漏洞,而且会严重打击你的自信心。因为很有可能你会和软柿子失之交臂,除非你是抱着学习的态度,不为了金钱!所以有力气的时候,要注意发力点,格外重要。
关于怎么评估软柿子,选择目标难度大小问题,可参考我的2022年度总结。