
0x01 前言
在安全服务项目日益增多的背景下,为了提升检测效率、确保测试过程的规范性并实现更全面的覆盖,Tide安全团队结合自身在渗透测试领域的实战经验和安全开发能力,设计并实现了一款自动化渗透测试工具。
这款工具采用Golang语言开发,采用C/S架构,集成了从资产探测、服务识别、爬虫、被动监测、漏洞扫描、POC检测到自动截屏与报告生成的全流程。无论是甲方安全团队进行日常自检,还是乙方安服团队执行对外安全评估,它都能提供一套标准化的全面检测方案,并自动输出专业报告。本文旨在分享该工具的整体框架设计思路以及部分关键功能的实现方法。
0x02 自动化工具的必要性
传统的渗透测试高度依赖人工,而测试人员的经验、技术深度和细心程度各有不同,这直接导致了最终的测试结果可能存在巨大差异。虽然使用测试用例可以让手工测试更规范一些,但每个人擅长的技术点不同,发现漏洞的角度也会大相径庭。此外,纯人工测试的效率相对较低,即便是一个常见的CMS系统,完成一轮完整的黑盒测试也常常需要3到5天,即便如此,也没有人敢保证测试后系统就绝对安全。这种工作模式,在追求快节奏和高时效性的当下,显得有些力不从心。
当然,自动化扫描工具也存在一些固有的短板,比如可能影响业务可用性、产生误报或漏报、对业务逻辑漏洞测试存在盲区,以及被安全设备拦截等问题。但它也有其不可替代的优势:在参数检测的全面性上,一个设计良好的爬虫能让扫描器触及系统的每一个参数点;在漏洞检测的效率上,人工可能需要识别框架后再逐个手工验证POC,而工具可以实现自动化的分析、识别、检测与报告生成;从时效性上看,一套系统可能只需30分钟就能完成全面扫描并生成报告,而人工或许才刚刚配置好测试环境。
因此,自动化工具的核心价值在于,它能将测试人员从大量重复、繁琐的检查工作中解放出来,让大家能集中精力去探索更深层次的潜在盲区,将专业知识运用在最需要创造力的地方。它也是IT合规性检测中的关键一环。当项目接踵而至、海量资产亟待评估、重复性的报告编写令人疲惫时,拥有一款贴合自身需求的自动化渗透测试工具就显得尤为必要。
0x03 市面上的自动化工具
目前市面上已有不少优秀的自动化检测工具,例如Goby、Xray、BurpSuite、AWVS、AppScan、Nessus等。其中,Goby和Xray分别出自国内知名的华顺信安和长亭科技,几乎是每位渗透测试工程师的必备利器。
Goby由华顺信安的赵武(Zwell,也是Pangolin、JSky、FOFA的作者)主导开发,其在资产探测、高效扫描、漏洞利用等方面的设计堪称艺术,体现了开发者对渗透测试的深刻理解。
Xray作为长亭科技推出的免费白帽子工具平台,功能丰富且调用简单,如今已成为许多自定义扫描平台的核心组件。其企业版“洞鉴”更是展现出强大的检测能力,尤其是用Markdown编写的检测报告,清晰且专业。
我们深知,完全模仿Goby或Xray既不现实,也无必要。我们的目标不是重复造轮子,而是在巨人的肩膀上,找到最适合自身业务场景和技术栈的“最佳实践”。
0x04 自动化渗透测试工具框架
我们的核心目标,是让渗透测试服务变得更快捷、标准化且易于操作。考虑到工具的使用者可能包括专业渗透测试人员、其他安服部门的同事,甚至是售前或运维人员,因此工具的安装、部署、使用和报告生成都必须足够便捷。最终,我们参考了Goby的开发框架,选择了GoLang + Electron + VUE的技术栈,这套方案能很好地支持Windows、MacOS和Linux等多平台。

工具的界面设计力求简洁,用户只需简单填写必要信息,即可一键生成报告。

工具内置了多种报告模板,下图展示的是我们团队内部使用的渗透测试报告模板。

这款工具由Tide安全团队的四位成员共同开发,从零开始学习Go语言到完成基础版本,大约花了两个月时间,期间还需要兼顾日常项目工作,过程可谓“痛并快乐着”。
skad:负责前端总设计、API交互、报告生成等。
浮生若梦:主要负责常规漏洞检测模块、POC检测模块、日志截图等功能。
天下兵马大都督:负责爬虫模块、授权认证、前端设计等。
重剑无锋:本人则主要负责一些他们“不屑于干”的杂活。
0x05 部分功能实现方法参考
1. 前后端交互
前端与后端的交互模式主要借鉴了Goby的实现。前端使用Electron + VUE + nodejs开发并打包。前端启动时,会在后台同步启动Go语言编写的服务端,服务端提供一系列API接口供前端调用,从而实现前后端的数据交互。

在最初的方案调研中,我们曾考虑使用Golang自带的GUI库来实现前端界面,但发现现有库要么功能繁琐,要么跨平台兼容性不佳。也设想过B/S架构,比如使用Gin框架,类似gshark或pocassist那样,但考虑到我们的功能相对集中,专门搭建一个Web服务有些“杀鸡用牛刀”。最终选择Electron,正是因为看到了Goby、中国蚁剑、FOFA客户端等成功案例,向成熟方案学习总是更稳妥。
参考资料:
一款漏洞验证框架的构思:https://nosec.org/home/detail/2919.html
Vue+Electron项目:https://segmentfault.com/a/1190000038463122
2. 资产探测
由于工具主要定位是对单个Web资产进行深度扫描,因此资产探测的重点在于端口扫描、服务指纹识别和应用指纹识别。这些信息也为后续的POC检测环节提供了依据,可以根据指纹信息精准匹配POC,提高检测成功率并降低对业务的不良影响。
- 端口扫描和探测
直接使用Go代码实现端口存活性探测,并集成了nmap的指纹库进行服务指纹识别。这部分实现可以参考dismap和ServerScan项目。
ServerScan: https://github.com/Adminisme/ServerScan
dismap: https://github.com/zhzyker/dismap
- 应用指纹识别
应用指纹识别方面,我们参考了多个开源工具。我之前用Python写过TideFinger,这次则融合了dismap、fscan、kscan等Golang工具的指纹库,并借鉴了Goby的指纹识别策略。
TideFinger: https://github.com/TideSec/TideFinger
dismap: https://github.com/zhzyker/dismap
fscan: https://github.com/shadow1ng/fscan
kscan: https://github.com/lcvvvv/kscan
3. 被动探测
我们采用了主动扫描与被动扫描相结合的方式。被动探测的实现流程与Xray的被动扫描基本一致:导入证书(用于监听HTTPS)-> 监听端口 -> 引导用户设置浏览器代理 -> 监听并分析流量数据。整个过程力求对用户无感。被动监听到的流量数据,会被用于后续的二次爬取、漏洞检测和敏感信息识别等。
流量监听主要依赖goproxy库,并对请求头和响应包进行了定制化修改。为了更准确地识别登录请求数据包,我们还结合了机器学习与行为分析的方法,目前识别成功率在90%左右。
goproxy库:https://github.com/elazarl/goproxy
我们对库中的RespHandlerFunc和ReqHandlerFunc进行了大量二次开发,因为准确判断登录成功的数据包是关键一步,这是后续进行登录机制验证、弱口令猜解、用户名枚举、未授权访问等漏洞检测的基础。
这个过程本质上与AppScan、AWVS分析登录流程是一致的,只是我们努力使其更加自动化。对于一些结构复杂、难以自动判断的登录包,工具会弹出确认框,允许人工介入辅助确认。

4. 链接爬虫
爬虫的能力是衡量一个扫描器优劣的关键。考虑到传统的静态爬虫无法解析JavaScript,我们同时使用了Go + Selenium + chromedriver的组合来抓取需要渲染的页面(如大量使用Vue、React的站点),以获得更全面的链接和参数。静态爬虫部分则主要参考了colly和幽灵蛛(pholcus)。
Go最强大的爬虫库colly:https://github.com/gocolly/colly
crawlergo:https://github.com/Qianlitp/crawlergo
幽灵蛛爬虫:https://github.com/henrylee2cn/pholcus
Go的selenium:https://github.com/tebeka/selenium
为了尽可能降低对业务系统的影响,在爬虫阶段会对爬取到的链接进行分类。例如,涉及添加、删除、更新等操作的敏感链接,以及POST写入请求,只有在用户明确确认当前为测试环境时,才会对其进行漏洞检测。这种做法虽然可能导致一定的漏报,但首要原则是避免对用户数据造成破坏。
5. 登录缺陷测试
登录缺陷测试主要围绕登录请求-响应过程展开,通过分析返回包长度、返回内容、Cookie变化等因素进行综合判断。测试项包括:用户名枚举、密码暴力猜解、验证码绕过、敏感信息明文传输、弱加密算法、会话固定、Cookie验证缺陷、Cookie中存储敏感信息等。
验证码绕过测试一方面尝试删除验证码参数或重复使用同一验证码,观察系统响应是否一致;另一方面,我们也在探索使用卷积神经网络(CNN)自动识别简单验证码,不过目前识别率还有待提升。
验证码识别参考资料:
我们团队lmn小姐姐的大作:https://www.yuque.com/tidesec/xxae8n/ucbwtx
基于Go的tensorflow:https://github.com/galeone/tfgo
基于Go的图形识别:https://github.com/tinrab/go-tensorflow-image-recognition
6. 常规漏洞检测
常规漏洞检测主要包括SQL注入、XSS、命令注入、文件包含、目录遍历等。虽然这类漏洞现在出现的频率降低,但一旦出现往往危害较高,漏测的影响也很大。我们深知,仅凭自身力量实现一个媲美Xray或AWVS的常规漏洞扫描引擎非常困难。
为此,我们借鉴了gryffin的思路,集成Arachni来完成部分常规漏洞的检测。对于SQL注入和XSS,我们自己用Go实现了一部分检测逻辑。也曾考虑集成sqlmap,但由于它是Python编写,我们不想再额外打包Python环境,而独立的exe版本又不符合我们的架构需求。Arachni基于Ruby,官方提供了各平台预编译版本,调用相对方便。
在完成第一版后,我们也尝试模仿WAScan的思路用Go重写扫描器,但目前进展缓慢。当然,直接调用Xray或AWVS的API也是一种选择,但非自研引擎在后续的功能定制、数据包构造、截图留存等方面会有诸多不便,商业软件的版权和依赖也是需要考虑的问题。
基于Go的扫描器gryffin:https://github.com/yahoo/gryffin
基于Ruby的扫描器Arachni:https://github.com/Arachni/arachni
基于Python的扫描器:https://github.com/FOGSEC/WAScan
7. POC检测
POC检测的重要性不言而喻,特别是对于Weblogic、Struts2、Fastjson、ThinkPHP、Shiro等主流框架的历史高危漏洞。集成丰富的POC库,再结合精准的应用指纹进行定向检测,工具在效率上是人工无法比拟的。
我们团队内部一直维护着一个自研的POC平台,其核心是基于Fscan和pocassist进行的二次开发。POC库的持续更新维护是一项艰巨的工作,如果有条件,采购商业版的POC库是更高效、更及时的选择。
如果选择自建POC库,初期可以从nuclei、xray、pocassist、fscan等优秀开源实战项目中获取,这些项目的POC格式大多相似,稍作修改即可通用。
Nuclei:https://github.com/projectdiscovery/nuclei
Xray:https://github.com/chaitin/xray
pocassist:https://github.com/jweny/pocassist/
fscan:https://github.com/shadow1ng/fscan
8. 逻辑漏洞检测
逻辑漏洞是自动化工具检测的难点。我们看过一些基于AI或大数据分析的方案,但它们通常针对特定业务,且需要大量样本数据进行训练。
因此,目前的逻辑漏洞检测仅限于验证码绕过、用户名枚举、未授权访问这类“弱逻辑”漏洞,主要通过对比不同请求的返回包差异进行判断,目前误报率尚可接受。
对于垂直越权漏洞,需要获取不同权限的账户分别发送请求进行比对,但一些公共API接口可能导致误报。
而对于水平越权及0元支付、无限抽奖等复杂的业务逻辑漏洞,目前还没有成熟的自动化检测思路。
9. 日志及截图
无论是人工测试还是工具扫描,渗透测试都存在一定风险。因此,我们非常重视操作日志的留存,工具发出的所有流量和执行的关键操作都会被详细记录,以便在出现问题时进行追溯和佐证。
此外,对于每个漏洞检测项(无论是否发现漏洞),工具都会进行自动化截图保存,部分关键截图会被插入到最终的报告中。截图功能主要使用了chromedp库提供的网页截屏能力。
chromedp:https://github.com/chromedp/chromedp
网页截屏:https://www.jianshu.com/p/c4451e488e6a
工具会对每个测试项目进行检测并自动截图留存。


10. 输出报告
报告是安全服务最重要的交付物之一,公司对报告格式有严格要求。为了生成符合规范的报告,我们调研了不少方案。起初打算使用unioffice,但由于我们的报告模板有些特殊要求无法满足,且unioffice的代码修改起来比较困难,也并非完全免费。最终,我们参考unioffice的实现原理,自己编写了一个报告生成器,虽然略显笨重,但完全满足我们的定制化需求。
生成Word报告后,为了方便阅读,工具还提供了转换为PDF版本的功能,主要参考了doc2pdf-go。在Windows平台上,还有一种更便捷的VBA转换方法。
unioffice:https://github.com/unidoc/unioffice
doc转PDF:https://github.com/piaobocpp/doc2pdf-go
vba doc转docx:https://www.cnblogs.com/owenzhou/p/10795209.html
PDF/DOC/DOCX:https://github.com/sajari/docconv



0x06 写在后面
实事求是地说,无论是代码质量、漏洞检测能力还是功能覆盖面,我们的工具与Goby的“资产-指纹-漏洞-利用-横向”体系,或是Xray的“主被动结合-智能爬虫-Web全景扫描-POC检测”能力相比,都还有很长的路要走。不过,我们的工具也有一些自身的特色和适用场景:
- 高度可定制:我们可以根据渗透测试、等保测评或合规检查的具体要求,灵活设定和调整测试项。登录验证、弱口令检测、未授权访问、Cookie安全等模块均可独立配置和扩展。
- 风险可控:自研的爬虫引擎可以在测试时有效识别并规避高危操作(如删除、写入),显著降低了在已登录状态下扫描管理后台的风险。
- 简单易用:工具设计直观,即使是非专业安全人员(如研发、测试、运维同事)也能快速上手,在不增加额外学习成本的基础上,以可视化的方式完成基础安全检测。
- 过程可溯:详细的漏洞截图、完整的操作日志以及符合内部要求的报告输出,能满足安服团队对过程留痕和交付物的日常需求。
- 高效快捷:对一个常规Web系统的全面扫描通常在10到30分钟内完成,这使测试人员能节省大量时间,去专注挖掘更深层次的业务逻辑漏洞。
当然,工具目前仍面临诸多挑战:Web常规漏洞的检测精度、POC库的持续维护、复杂逻辑漏洞的自动化发现、WAF等安全设备的绕过、误报与漏报的平衡、验证码识别准确率的提升,以及漏洞利用链的自动化构造等。距离BurpSuite、Goby、Xray这样的成熟产品,我们还有很长的路要走。
自动化渗透测试或许是未来的发展趋势,但目前仍处于早期阶段,许多复杂问题尚无法完全依靠人工智能解决。尽管它暂时无法完全替代经验丰富的渗透测试工程师,但在标准化、重复性高、覆盖面广的检测任务上,它已经能够比人工完成得更好、更快。这,正是我们开发这款工具的初衷。
不妨设想一下,当人工智能技术足够成熟,自动化工具能完美模拟人类专家的思维时,我们是否还需要手动配置Burpsuite和Nmap去测试每一个系统呢?
注:关于工具源码,目前部分功能仍在迭代完善中,暂不考虑开源。部分指纹识别相关的代码,未来可能会在我们的知识星球“Tide安全攻防”中与大家分享。针对星球用户,我们后续也计划上线一些新的在线安全服务,敬请期待。