去年一整年攻防演练和渗透都做了不少,很多时候需要翻看站点的js文件并且在其中找出接口测试,但是有的站非常大,接口数量非常多,靠手工检测非常耗时;所以如果有个自动化工具来先过一遍,那事情就会好办很多
其实目前关于这种自动化测试的工具也不是没有,我之前就经常用这个工具跑自动化接口测试
这个工具最后会生成一个HTML报告出来,里面有用的信息就API接口路径和漏洞信息这两项,不包含全量的接口测试数据;我也粗略的看过这个工具的源码,关于接口路径,它都是通过正则匹配获取的;实际使用起来也是检测时间比较长,而且对网络的压力比较大
不是说我写的工具就一定比他好,我这个才刚刚做出来,肯定不成熟,但是速度还挺快,到目前为止我用了两天,也是通过使用这个工具挖到了几个漏洞,感觉还是具有实际使用价值的
下面是这个工具的工作流程图
其实也挺简单的,基本上就是一个大爬虫,抓出来的响应都是全量存储的,看接口响应的时候直接连到数据库里面看
写到这里我自己可能就有个疑问了,为什么要用语法分析工具提取js中的字符串呢?
人有时候感觉自己头顶尖尖的,这很正常,就像产品经理永远不知道自己的产品会被客户怎么使用,虽然可能这位产品经理也想到这个问题了,但是他束手无策,因为任何人都无法根除菠萝披萨和草莓水饺这类东西的存在
正常来说,提取js字符串只需要用正则提取就足够了,但是我懒得写正则,所以就拿人家现成的语法分析器来写爬虫了
这里用的语法分析器是tree-sitter,官方预置了很多语言的parser,还支持代码查询,非常具有进化成代码审计工具的潜力
tree-sitter/tree-sitter: An incremental parsing system for programming tools
这个语法分析器可以理解为是现代化的lex yacc,词法分析和语法分析融为一体,自带清晰的语义冲突提醒,我之前拿他实现了fofa查询语法的解析,感觉非常方便好用(本来想做指纹识别工具,融到“小改ARL”里面,但是后来感觉没什么必要,就废弃了)
当然这个语法分析器目前还没有污点分析功能,如果要做代码审计工具,必须实现污点分析模块,不过我现在没有那么急的代码审计需求,所以先不做
存储数据方面我用的是surrealdb,这个数据库可能比较冷门,但是它官网的宣传非常强大,这个数据库是一个multi-model、支持向量查询、支持全文检索、支持嵌入式运行的数据库。这里提到的multi-model就是这个数据库既支持关系型存储也支持文档型存储,理论上非常好用
SurrealDB | The ultimate multi-model database
但是宣传是这么宣传,叫的最响的不一定是最猛的,这个数据库目前bug还是很多,理论上它支持多种语言的嵌入式运行,但实际上应该只有rust和C#的SDK是支持嵌入式的,其他语言的SDK开嵌入式基本上一定会报错,github上面也有人开了关于嵌入式问题的issue,官方目前还在修复
我用surrealdb是因为本来我这个API测试工具想利用向量相似度查询功能对响应内容进行分类,但是原始响应内容直接进行向量检索是不实用的,因为每个站点的响应结构都不一样,对于每个站来说,响应内容转换成向量的特征也是不一样的,除非试试聚类算法,或者试试文本嵌入模型,否则这种基于向量相似度的分类方法很难实现;然而不管是聚类算法还是文本嵌入都需要时间去计算,想想感觉还是不如人工筛选,人工筛选可以通过优化交互等方式提高效率,这个事情目前我正在做,感觉还是不错的
其他也没什么了,就写到这吧