自动化渗透测试

挫其锐,解其纷,和其光,同其尘.

Posted by taomujian on May 3, 2024

简述

2018年,大学毕业,进入第一家公司,刚进入安全行业,从事渗透测试工作.当时在下班后和周末空闲时间学习了Vue框架,本身又有Python基础,正好要写点什么东西要练习下所学的东西,所以就写出了linbing这个半自动化渗透测试系统.

2019年开源linbing之后,又继续慢慢的打磨.后续又入职其他公司,很幸运,继续为公司在linbing开源的基础上研发功能更多、使用更方便、扫描更快的自动化渗透测试系统.不幸的是,因为要给公司做这个系统,之前开源的系统不方便继续大规模更新,以防违反职业道德,所以只会修复一些BUG,基本上不会增加新的功能,导致之前开源的linbing一直很不咋地.用现在的眼光来审视linbing,犹如刚出生的婴儿一样,很弱小.在公司写的代码是无法公布出来,但是关于自动渗透测试系统的一些理解可以分享出来.

从字面意思上来说,就是扫描要快,比如端口扫描要快、目录扫描要快、漏洞扫描要快.渗透测试时分秒必争,一些信息收集的工作越快结束,越能节省出很多时间给后续的流程,提高工作效率.

这个快并不是一味的追求极致,为何?抛开客观条件(带宽、内存等机器资源限制)之外,扫描器发包的速度可以无限扩大,但是目标接收的请求是有限的,总会有个极限,一旦超越,就有可能造成DDOS攻击导致目标直接崩溃,这样造成的动静太过于大了,也容易导致扫描IP被对方封禁,得不尝失.

不追求快的话,就会导致扫描特别慢,有可能授权测试的时间都到了,还没有结束,这样也不行,完全就成了无用之物.比如要对大量目标进行全端口(1-65535)扫描,如果要采用nmap这个工具,则会非常非常慢.如果采用masscan,虽然速度上去了,但是masscan识别不了指纹.一般会采用先用masscan扫描开放的端口,然后再用nmap去识别端口指纹,这样扫描速度上去了,并且还能识别指纹.

还有一种比较简单的方法,对一些开源的用Go写的端口扫描器进行改造,把nmap指纹加上去,由于Go有天然的高并发特性,可以快速扫描端口,在扫描端口的同时就根据nmap指纹识别出端口指纹,这样扫描速度也能上去,指纹也能识别到.比起nmap+masscan的组合,扫描速度整体是要高一点的,端口指纹准确度基本上没区别.

在快这方面,需要掌握好火候,不可追求极致的快,也不能过于慢,要想达到理想状态这的确是一个难题.

准指的是扫描的准确度,比如端口指纹识别的准确度、目录扫描的准确度、漏洞扫描的准确度.

端口指纹需要不断的积累,不仅包含nmap指纹库这种TCP/UDP端口指纹库,还包括cms指纹库、著名浏览器插件wappalyzer所用的指纹库等web指纹库.

目录扫描就是需要目录字典了,一个全面的目录字典还是很重要的,字典太大了又会产生很多无效扫描,就需要全而经典的一个目录字典.

漏洞扫描准确度就更重要了,可谓是重中之重.漏洞扫描插件写的准确,会极大的过滤掉无效的扫描信息,快速定位到真实漏洞,方便快速进行外网打点.现在有些商业漏洞扫描系统,实在是不敢恭维.为了凑漏洞插件数量,会采用版本匹配这种方式来判断是否有漏洞.版本匹配是指如果识别出目标的某个中间件或者cms系统版本,那么就会从CVE等漏洞库中根据版本来匹配目标存在存在哪些漏洞,而不是真的检查是否真的存在漏洞.目标有可能早已修复漏洞点,但是并没有升级版本.还有一点就是,虽然目标存在漏洞,但是这个漏洞利用条件极其苛刻,基本上是无法利用的,这样的漏洞是没必要写成插件的.为了凑插件数量,可能出于商业目的,或是被同行内卷的,但是这样的生态是不对的,不对就是不对.扫描出一个目标存在1000多个漏洞,最后耗费很大力气排查发现基本上这些漏洞是没啥用的,对于接下来的渗透测试毫无作用,无疑是浪费时间.

不同于快,准就是需要不断的积累,需要追求到极致,要非常非常的准才行.这个准相当于是射击游戏中的倍镜,倍数越高,看到的则越准确.

狠是指相对于渗透测试深度而言的,目前大部分的漏洞扫描是POC扫描,仅是扫描出存在漏洞就结束了,但是对于自动化渗透测试系统来说,这仅仅是个开始,需要进一步对漏洞利用.

针对漏洞进行利用包括执行命令、读取文件、反弹shell、Getshell等几种类型,进行利用时就是所谓的一健利用了.漏洞利用完也是后渗透测试的开始,后续还需要上传免杀木马,还要连上C2进行各种操作.

和准一样,狠也需要追求到极致,要非常非常的深入才行.这个准相当于是射击游戏中的枪,威力越大越好,配合准这个高倍镜,再配合漏洞这个穿甲弹,就会成为杀伤力巨大的一把杀器,一往直前,无坚不摧.

动是指不同的渗透测试阶段在自动化渗透测试系统中产生的数据是能够联动起来,是活的.

比如从目标网站证书获取的域名信息可以进一步传递给子域名爆破,子域名爆破出来的域名和IP信息可以传递给端口扫描,去进行端口扫描,端口扫描扫出来的资产又可以进行漏洞扫描和目录扫描,漏洞扫描扫出来的漏洞又可以进行漏洞利用,可以种植免杀马,又可以进行后渗透测试.可以发现渗透测试每个阶段输出的数据可以作为其他阶段的输入.这样数据之间产生了联动,相当于是活的,会自动动起来,也就更符合自动化这三个字的含义.

总之,一个完美的自动化渗透测试系统能够贯穿整个渗透测试系统,从信息收集到漏洞利用,再到后渗透,再到消除入侵痕迹,这都是必不可少的.

总结

渗透测试每个阶段所用的工具分别是各个’器官’,自动化渗透测试系统是一个外壳,把这些’器官’都组合起来,形成一个完美的’人’.既要追求完美外壳也要追求完美’器官’,不仅每个’器官’要做到完美,外壳也要完美,这样才是完美的的一个’人’