漫谈挖洞

humourkyo 2019-08-31 19:56:42

这里只谈如何发现漏洞,如何快速的发现漏洞。

总有一种感觉,最产生价值的部分就是发现漏洞,就像是猎人在森林里捕猎到一头野味,如何宰杀,烹煮等等,一般都有自己的一套,哪怕自己实在不会也可以请教别人教你怎么做,只是需要花费点时间,就算没有自动化的屠宰、烹饪工具,手工来慢慢的剥皮割肉下锅炖煮,吃到嘴里也只是时间问题。但直接请别人帮你在茫茫的森林里给你猎杀野味,恐怕能答应的人不多,还不如直接让他送你好了。

当然漏洞也是一样的,一般请教别人的也都是找到漏洞之后如何利用的问题,比如,sql注入如何绕过waf,webshell下如何提权,内网环境下如何渗透进目标等等。实在不行搜索引擎,github等一顿搜大多情况也都能解决问题。

而拿着一堆目标直接甩给朋友说:帮我日个站吧,如果每个站不对应价格的话,一般都不会有回应。考虑到现在站实在比较难日,(云waf,CDN,硬防,各种云安全服务器、安全狗、云锁、D盾、护卫神等等)哪怕都标明了价格一般情况也不会有回应。

朋友一般都会想你自己都过了一遍了,好日的站都日下来,不好日的丢给我,我才不浪费时间看呢,甚至连打开都不会打开看一下的。

至于拿着众测或者src的目标让朋友免费帮忙找漏洞更稀有了吧,他要能找到漏洞直接自己提交换取积分京东卡什么的,干嘛还会要给你呢?鉴于现在各大互联网公司都有src,众测公司也是多如牛毛(先知、补天、众安、漏洞盒子、看雪、hackone),那么一般来说发现新的漏洞即是金钱,所以我说最具有价值的就是发现漏洞

直到现在我依然还记得一个类似于皇帝的新衣似的笑话,以前乌云在的时候,有个白帽在zone里面发帖问到,为啥乌云里几万个漏洞,每天也会有新的漏洞发出来,我几乎每一个都能看的懂,也都没有什么高明的技术,都是那些常规的安全漏洞,但是我自己却一个新的漏洞也找不到呢?这就是最关键的地方,为啥呢?

一般人发漏洞都只是直接把注入点发出来,弱口令就直接把账号密码发出来,命令执行就直接把利用的poc发出来。很少有人把自己从最开始的主域名( 例如:*.baidu.com ),到如何找到有漏洞的点,从头到尾一步步写出来的。

也许以前有,发出来之后便被别人嘲笑,靠,原来发现这个漏洞的手法竟然这么低级;哦,太简单了,我只不过懒得去测试这个地方,不然我也能发现等等。以至于现在发现漏洞后别人再问怎么找到的,很多人都直接回答,我用大杀器0day日的。

其实发现漏洞的过程是极其枯燥的(这里特指的是黑盒挖洞,因为大多数情况下是没有源代码给你来慢慢审计的)。

我认为最本质的挖洞手段就是收集足够多而全的漏洞插件或者测试代码payload,把那些你认为只能手工来判断的是否存在漏洞的技巧给自动化,尽可能多的自动化你认为不能自动化的技巧和人工判断。

要多思考哪些漏洞发现技巧暂时还只能用人工判断,为什么只能用人工判断,为什么不能自动化,如何去突破难点实现自动化。一旦越来越多的漏洞发现技巧都能实现自动化了之后再去进行整合,那么只需要在最关键的点让人工去参与判断即可。

我想应该有很多人都知道这一点并且也实现了,但还是会存在差异性,那么这个差异性的来源应该就是测试代码和payload字典没有别人的全,测试过程没有别人耐心,暂时不能实现自动化的测试方法没有耐心地去测试,实现自动化漏扫程序本身的问题(这里的问题就太多了,跟开发者和设计者有直接原因),当然还包括个别高手的奇思妙想,自己挖的或通过各种渠道获得的0day(这种一般都不会放出来的,大家都知道为什么)等等。

其实也正是有这么多的不确定性和差异性才使挖洞具有价值。

然而即使有神器,一次众测下来还是会有很多漏洞你发现不了,别人却能发现。当然也有可能是你的神器不够神,但不论多么厉害的神器也不可能处理所有的问题,除了我们一般人都拿不到的0day和大神的奇淫技巧,我认为还有耐心,细心和创造力。

1、耐心

因为寻找漏洞的过程就是不断失败的过程,失败是常态的,如果你发现了新漏洞你应该感到惊喜,对,就是惊喜,哪怕任何一个找到的新漏洞都应该是惊喜。

你想那么多成千上万条的不同的URL,不同的参数,不同的ip,不同的端口,不同的协议,全部都要过一遍漏洞插件或者payload,还要被现在互联网环境中的各种云waf和安全agent围追堵截,能自动化地扫出一个漏洞就是好运气。

所以我说你要有足够的耐心,能暴力破解的地方全部都要进行暴力破解,不能暴力破解的地方创造条件也要进行暴力破解。

这里举一个例子,一朋友告诉我,在一次渗透业务里找到客户网站一个后台,验证码那里没有不刷新漏洞并且复杂,人识别都费劲,暂时无法自动化识别,他就搜集用户名和密码字典人肉识别验证码,手工输入了100多次,最后成功进入后台,进而getshell,提权进内网。

看到这里大概好多人会说他愚笨或者方法低级,但人家都是能进去,而你就是进不去,我觉得回击他人最好的回答就是我用0day日进去的,就是不告诉你用的什么0day。

当然耐心还包括整理测试代码payload,各种漏洞插件的丰富,爬虫优化,越权类各个功能测试,底层扫描框架优化,cms识别,waf识别,cdn后面真实ip寻找,社工跟目标一切有关的信息并巧妙利用,最新漏洞插件的更新,字典的针对性制作等等。

2、 细心

对于很多新出的漏洞exp,在丰富插件的时候,不能拿来就用,要细心的看代码到底是exp还是poc,发现漏洞的插件不需要getshell和执行命令,只需要发送最少次的请求或者连接能证明存在漏洞即可。

对于神器扫出来的误报漏洞也要细心地分析为什么会误报,sql注入是否是因为搜索导致两次页面不同而报的漏洞,或者是否是waf拦截页面不同导致报的SQL注入,从而进行插件优化。

再举一个例子,在一次众测项目中,有个细心的白帽子发现了一个注入。而这个注入点竟然是目标某个页面中包含的一个js文件里面的一个post请求,他把里面一个ajax的请求的url,参数,数据整合起来进行测试发现了一个SQL注入。

难道说就这么巧,他就刚好查看到了有漏洞的页面的js代码,又刚好看到一个post请求,整合完丢给sqlmap一跑就测出了注入?反正我是不信的,漏洞发现过程肯定是极其艰苦的。

最有可能的一个版本就是,他业余做了很多工作,写出了一个自动化程序,自动分析目标每一个页面包含的每一个js文件,并把里面的所有http请求整理组合去重,并自动化的丢给sqlmapapi进行sql注入进行批量检测。并且之前好多次众测他这个程序都是无功而返的,恰恰遇到今天这次测试测出了漏洞。我觉得这才是最真实的版本。

3、 创造力

挖洞最有可能拉开差距的就是这一点,当然也是最难的一点。众测里有几个漏洞的发现的确是创造性的,而在灵光乍现之前,目标真的是一点办法都没有。(当然也不是通杀通用的,都是具有一定的针对性)。

但创造力也是有迹可循的,是在经验和知识的积累下,在某一个时刻真的会有灵感爆发那一瞬间。学会唐诗三百首,不会作诗也会偷。古人这句话还是有一定哲学道理的。