其实就是刷SRC的理论,算是一个阶段性理论小结,方向依旧是自动化,智能化,以让大多数安全从业者失业为目标的漏洞扫描器,以自动化躺赚为目的的赚钱工具,本质上业务安全也属于数据收集和数据分析。
最近实在是思维枯竭,能力极限,有种江郎才尽的意思,所以来复盘下,其实用点心多挖挖怎么都会有产出,但这种方式在OpenAI chatgpt、github copilot的时代显得不是那么有逼格,也不符合我的性格,让我专注深入的重复机械的做一件事,拧螺丝钉太难了,我还是喜欢做些有趣的东西。
话归正题,众所周知,资产收集监控,攻击面管理已经是所有做渗透入侵的黑客们,干一个目标的第一步,也是重中之重的一步,市面上的工具也层出不穷,围绕着子域名、IP、端口、资产测绘等等手法,这些我给了粗浅的分类了下,称为资产收集的"广度",自然,有了广度就有"深度",web爬虫,资产数据清洗处理就称之为"深度",广度更侧重于实时监控业务变更,比如新业务上线。
因为广度已经太多人讲过了,我早年间也谈过多次,所以本篇我侧重于讲"深度",我是比较熟悉做爬虫的,爬虫的目的就是深度,自动收集大量的web资产,http请求与响应api接口,也就是完整的http数据包,并且区分接口类型,标注接口功能。
简单的实现这些功能,不是太难,但实现这些功能后的细节优化,场景识别,场景应用,就比如现在的web站点很烦,前端弄的奇形怪状,一个头两个大,js满足不了他们整出了jQuery,jQuery满足不了他们,整出了vue,服务端nodejs,打包和强混淆的webpack,简直玩出了花,各种验证码,反爬策略... 所以在页面的前端场景识别上,我分了两类,按照单个页面的分析,一个依据识别,页面的主要内容的变更,是按照导航的location.search还是location.hash,意思就是,页面内容的变更,是依据换了一个html页面,还只是前端js控制的dom节点的变更。
所以从爬虫收集更多http接口的原则,粗浅的把web应用分为两类: 1. 单页面应用。 2. 多页面应用。最近我将更侧重于研究单页面应用的爬虫玩法,还有,据我所知,目前业界的爬虫侧重的都是多页面web应用,甚至只是收集url而已,在当时当下,单页面应用早已是主流了。
爬虫的最大原则,尽量模拟人类的操作方式,比如打开页面后的下滑滚动要有,表单填写的人类资料库要准备齐全,少js.click(),多cdp 控制mouse.click()....,网络请求的hook,把logout之类关键字拦的死死的,并且储备页面特征,匹配页面是做什么的,给出标记分类: 内容展示、登陆、注册、忘记密码、个人信息修改 、评论、发文章、上传文件、多input表单.... 以上是爬虫篇,主要两点,页面分类识别,以及模拟人类访问。
在爬虫之后,继续深度,当收集到足够的资产,如何管理,如何梳理出有价值数据,看似简单,实属困难无比,在爬虫阶段,我们用泛化的方式来去重复,但不免,在数据量很大后,还是出现一些无意义但占很大比例的无效数据,可能这是业务的一种反爬策略吧,放一些随机请求,随机hash、时间戳、参数名,干扰爬虫,参数名我真很难忍,参数值泛化就完事,参数名也是醉了,所以单个站点设置爬取次数阈值,单个接口文件设置次数阈值,单个参数值长度设置极限阈值。
在收集的大量数据中去重清理出有效的数据,在http数据包中,开始清洗,大概分为两个类型,无意义http数据包,有意义http数据包,无意义http数据包就是无论修改请求的任意参数值,http响应包并未任何改变,反之,修改参数值会导致http响应包出现改变,称之为有意义http数据包,就是异常捕捉。
继续测试出现异常http数据包,当然,单靠手测那就猴年马月去了,所以我们需要漏洞扫描器,漏洞扫描器本质上是在网安行业数据分析的一个工具,筛出漏洞来。
对于没有筛出漏洞的,我们也不着急,根据以往经验,对http数据包进行特征库建立,根据http请求文件名,参数名,参数值,http响应内容来识别标记http数据包的用途,比如基础的 增/删/改/查/上传/下载,和业务类phone tel account address id等,便于之后的人工处理,手工测试。
最后总结,还是个分类问题,收集到有用的的http数据包,再清洗出可能有价值的http数据包,接下来更高效的就出漏洞了。