起因:

因为筹备护网的原因,公司最近给了很多的大型CMS让挖洞,在不断思考的过程中做出总结。

为什么会挖不到漏洞?

我觉得挖不到漏洞的原因无非以下几种原因:

  1. 对程序不熟悉
  2. 不够仔细
  3. 对特性不熟悉
  4. 知识储备量不够
  5. 没有想象力

对程序不熟悉:

我个人觉得在挖洞之前应该把目标程序所有功能给用一遍,大概了解程序的功能构造以及功能点。有时候把程序过一遍之后大概就能知道目标路由规则了,完全没必要再去看一遍路由规则。在最近审计某个OA的时候在他的路由上花费了大量时间,原因无非就是没搞清楚他到底是怎么走的。后来发现目标有两套入口,在没登陆前用的是多入口。在登录后大部分功能都是单入口。

对程序不熟悉的表现在白盒中其实不太重要,但在黑盒中那就非常重要了。因为连网站的具体功能都不知道,你又怎么去测试呢?就算告诉你那个功能点有漏洞你也找不到。
最近逻辑漏洞很火,但是我相信以后此类漏洞会更多,更火。原因就是WAF的加强,导致研究逻辑漏洞的人越来越多了,毕竟人的思维是会出现问题的。而逻辑漏洞的关键就在逻辑两个字上,怎么理清他的逻辑?对程序业务流程越熟悉逻辑也就越清楚,那挖到洞的概率也就越高。

当然仔细有时候也会害了你,太多仔细往往只会局限于程序本身,而不会去考虑集成的配置环境,在集成环境中大部分配置都不是默认配置,是被开发者改动过的,而这些改动过的地方就成了能否利用成功的关键所在。

不够仔细:

列举几个经常会忽略的地方:

  1. html注释
  2. JS功能
  3. 403目录

html注释很多时候会被我自己忽略掉,在公司的第一个项目中。就是因为不够仔细而导致我们组没有将项目做下来,而其他组却做下来了。我们都已经很内网,并且发现某个子站存在黑客的后门,但是偏偏没有想到去看一眼注释然后去网上找找特征。但是同事去找了,然后在后门里面审计到SSRF,结合目标机器上的redis打进去了。说实话,我听到组长说这个事情的时候内心非常的羞愧。毕竟我们判定为失败的站被同事给搞了进去,是个人应该都有羞耻心。

在JS中往往存在大量越权以及demo,这点是前年的工作中对某个小贷公司的反制上得到的,当时组长带我们搞站的时候就是通过JS里面的手机号爆破进了后台,然后又通过JS得到了真正的后台,这件事情对于我的影响可以说是非常大,甚至于颠覆了我当时对渗透的认知,在我当时的认知中就是JS是客户端文件,无论如何都不会对我搞服务端有任何影响。

对特性不够熟悉:

这个是在代码审计中总结出来的,其原因就是看了P牛很多文章。比如《正则回溯》,《写配置项绕过》之类的。让我充分的明白了“特性”有多重要。当然在两年前我也非常看重特性,但是后来绕过SQL注入WAF的时候,通过特性绕过后,主管当时对我说“我希望你绕过SQL注入的时候更多的是从数据库语法层面考虑,而不是apache或者nginx的特性”。我自己没有抓住重点,他说的是SQL注入,而不是全部。所以不能以偏概全也是一个安全从业人员应该注意的,一是一,二是二。

知识储备量不够以及没有想象力:

我个人觉得这两点是挖洞最重要的两点,迄今为止我挖到的所有漏洞基本是建立在我自己的想象之上的。我在把程序摸清楚之后,就会开始思考:“这个地方能不能这样?”,然后在通过实践去测试到底能不能这样,在实践的过程中因为种种原因又会了解到许多新的知识以及原理。但是想象是需要知识基础的,你没有接触过某个东西是永远也想象不出来他是什么样子。就比如说我们想象不出来四维空间是一样的。

总结:

渗透测试/安全研究/代码审计 嘴巴上说说就能成功的,而是长期坚持不懈的积累知识,然后在思考总结才能爬到自己想达到的高度,真的是知识/想象缺一不可。同样也包括漏洞,所有有意思的漏洞都是不可复制的,能够复制出来的漏洞都是一些没有灵魂可替代性强的漏洞。