Skip to content

Releases: shadow1ng/fscan

v2.2.0

Choose a tag to compare

@github-actions github-actions released this 10 Jul 06:04
bf036fd

fscan v2.2.0

v2.2.0 是 v2.2 系列首个正式版,基于 v2.1.3 之后的 RC 测试和 Issue 反馈整理发布。

本版本重点提升大规模扫描稳定性、POC 扫描可靠性、非标准端口服务识别、插件隔离和嵌入式 SDK 能力。


重点变化

嵌入式 Scanner SDK

新增 pkg/fscan,fscan 从纯 CLI 工具扩展为可嵌入的 Go 扫描引擎:

  • 支持在 Go 程序内直接调用扫描能力
  • Scanner 实例拥有独立 config / state / session
  • 全局状态迁移到 session,改善多实例并发隔离
  • 补充 SDK 结果转换、配置校验和并发扫描测试

大规模扫描稳定性

  • 新增流式 Host Iterator,大 CIDR 不再一次性展开到内存
  • 移除 MaxHosts 硬限制,大网段不再被静默截断
  • 新增自适应并发调度,基于 RTT、丢包率、fd limit 自动推导扫描参数
  • 线程池升级为 AIMD + 慢启动,遇到资源耗尽时自动降速
  • -gt 全局超时正式生效,超时后会取消扫描任务
  • 新增 -nsp,可禁用网段预筛

服务识别与插件调度

  • 修复非标准端口服务无法匹配插件的问题
  • 新增服务缓存和指纹驱动插件匹配
  • -full 模式下 Web 插件可覆盖所有开放端口
  • 不确定服务增加 HTTP 回退探测
  • 移除误导性的“无可用插件”日志
  • 用户指定 -p 时 UDP 插件按端口交集正确调度

Web / POC 扫描

  • 修复默认扫描 POC 结果缺失
  • 修复 -hf 批量扫描时 POC 缺失
  • 修复 HTTPS 端口误用 HTTP 扫描 POC
  • 修复 POC 结果文件只显示 vulnerable 不显示漏洞名称
  • POC 加载按 pocpath 隔离缓存,多 session 不再互相覆盖
  • 修复 CEL、reverseCheck、正则缓存等稳定性问题
  • -nopoc 禁用 POC 时不再输出误导性错误日志

新增协议插件

新增多种原生协议插件,覆盖邮件、Java 调试、文件共享、带外管理、UDP 和工控场景:

插件 用途
IMAP / POP3 邮件服务器检测
JDWP Java Debug 端口检测
NFS / RMI 文件共享 / Java 远程调用
IPMI 服务器带外管理
SNMP / DNS / BACnet / Modbus 网络设备、DNS、工控协议检测

Web 版

  • 拆分 CLI / Web 入口
  • Web 版结果存储改为 SQLite 持久化
  • Web API 版本号改为动态读取

Bug 修复摘要

  • 修复 #586 默认扫描 POC 结果缺失
  • 修复 #587 -hf 批量扫描 POC 缺失
  • 修复 #588 非标准端口服务插件匹配问题
  • 修复 #590 Telnet Cisco MOTD 横幅误判 shell prompt
  • 修复 #591 HTTPS POC 协议错误与结果名称缺失
  • 修复 #592 service probe 空指针 panic
  • 修复 #593 -ehf 排除主机未生效,支持 IP / CIDR / range
  • 修复 UDP 插件阻塞导致扫描无法结束
  • 修复 SSH goroutine 泄漏和握手 deadline 问题
  • 修复 Redis exploit 超时和非超时错误处理
  • 修复 MongoDB SCRAM、Cassandra、Oracle 等协议问题
  • 修复 SOCKS5 代理认证、LM:NT hash、逗号分隔密码等参数问题
  • 修复非终端输出 ANSI 控制码覆盖结果
  • 修复 CSV / NDJSON / TXT 输出若干字段问题
  • 修复 ARM 32 位原子计数器对齐问题

升级注意

  • WebUI 仍建议视为实验性能力
  • 本地后渗透插件仅用于授权环境
  • v2.2.0 改动较大,建议从 v2.1.3 升级的用户先在测试环境验证扫描参数
  • 如依赖旧版本输出格式,请重点检查 POC、SERVICE、VULN 结果字段

版本说明

版本 说明
fscan 标准版,包含全部插件(推荐)
fscan-nolocal 精简版,不含本地模块(体积更小)
fscan-web WebUI 版,带 Web 管理界面(主流平台)

平台支持

平台 架构
Linux x64, x32, arm64, armv5/6/7, mips, mips64, mipsle
Windows x64, x32
macOS x64, arm64
FreeBSD x64, x32, arm64, armv5/6/7
Solaris x64

校验

本版本已通过:

  • go test ./...
  • 近期 Issue 回归验证
  • 本地 HTTP / HTTPS POC 扫描验证
  • -hf 批量 POC 扫描验证
  • -ehf IP / CIDR 排除验证

完整变更记录见:

v2.1.3...v2.2.0

v2.2.0-rc.1

v2.2.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Jun 04:59

fscan v2.2.0-rc.1

⚠️ 这是预发布版本 (Release Candidate),可能存在未发现的问题。
如果你在使用中遇到任何异常,请积极通过 Issue 反馈,帮助我们尽快稳定正式版。
生产环境建议继续使用 v2.1.3


与 v2.2.0-rc 的变更

本版本基于大量实机测试反馈,修复 30+ 个问题,新增自适应扫描系统。183 个文件变更。


🚀 新功能

自适应并发调度

扫描前自动探测网络环境(RTT、丢包率、fd limit),基于探测数据推导关键参数,替代硬编码默认值:

  • Timeout: median_RTT + 4σ(覆盖 99.9% 正常连接),下限 1s,上限 10s
  • ModuleThreadNum: ThreadNum / 30,下限 5,上限 50
  • MaxRetries: 基于丢包率推导,保证全失败概率 <1%
  • ICMPRate / PocNum: 跟随环境和并发自动调整

线程池升级为 AIMD + 慢启动:慢启动阶段 500ms 翻倍,稳态 AIMD(健康 +5%,拥塞 ×0.5),双信号(资源耗尽率 + RTT 趋势)驱动。

协议级超时下限(ModuleTimeout)

新增 Config.ModuleTimeout() 方法,保证插件级交互超时不低于 3s。自适应系统将端口扫描超时压到 1s 时,SSH 握手、SNMP 探测、数据库认证等多轮交互协议不再受影响。全部 44 个服务插件已迁移。

限流错误分类(ErrorTypeThrottle)

新增 ErrorTypeThrottle 错误类型,区分服务端限流(SSH MaxStartups 等)和真正的网络不可达。限流错误不计入连续失败计数,触发 500ms 退避后继续,避免误判目标不可达而提前放弃。

Web 版独立入口

  • 拆分 main.gomain_cli.gomain_web.go
  • Web 版结果存储从内存替换为 SQLite 持久化(纯 Go 零 CGO)

🐛 Bug 修复

插件调度(#586 #587 #588

  • 非标准端口服务无法匹配插件 — SSH 在 8881 端口,端口匹配失败导致插件不执行。新增服务名称缓存 + 指纹驱动回退匹配 (#588)
  • 移除误导性的"无可用插件"日志 — 预检基于静态端口匹配,不代表实际不执行 (#588)
  • 默认扫描 POC 结果缺失executeRules 返回空 vulName 导致检测结果被丢弃 (#586)
  • 批量扫描(-hf)POC 缺失 — 并发压力下 HTTP 请求瞬时失败未重试,跳过指纹识别和 POC 触发。加入指数退避重试 (#587)
  • UDP 插件在 -p 指定端口时被跳过 — 现在按用户指定端口过滤并正确调度
  • -full 模式下 Web 插件跳过 IsMarkedWebService 检查
  • 不确定服务补做 HTTP 回退探测,覆盖自定义 HTTP 框架漏网场景

UDP 插件

  • UDP 插件阻塞导致扫描无法结束conn.Read() 在目标不响应时无限阻塞。所有 UDP 插件(SNMP/BACnet/DNS/IPMI/TFTP)统一使用 context timeout + conn.Close 双保险
  • SNMP community 爆破混入通用密码字典 — 57 个通用密码串行探测导致 10 分钟阻塞,精简为 8 个专用 community

SSH

  • SSH goroutine 泄漏ssh.NewClientConn 不接受 context,context 取消后底层 TCP 连接未关闭,大规模扫描时泄漏数万 goroutine
  • SSH 握手无 TCP deadline 兜底 — 在 NewClientConn 前设置 deadline,握手成功后清除
  • SSH 爆破并发过高 — 从 30 降至 3,避免触发 OpenSSH MaxStartups 限流

Redis

  • Redis exploit 无超时保护 — exploit 阶段移除了全部 deadline,改为 30s 超时
  • Redis readReply 吞没非超时错误 — 现在仅对 timeout 类型错误做容忍

POC 引擎

  • DetectPocFormat 误判含 transport 的 fscan POC 为 xray 格式 — 修复后 388 个 POC 全部正确加载(之前 8 个失败)
  • CEL clustersend 结果判断错误 — 从字符串比较改为类型断言
  • CEL wait() 函数 nil Reverse 指针 panic
  • reverseCheck 无超时 — 加 10s 超时防止 ceye API 阻塞
  • 正则编译结果未缓存doSearch/bmatches 缓存到 sync.Map

参数与输出

  • -gt 全局超时参数是死代码 — 现在真正生效,超时后取消所有扫描任务
  • -nopoc 禁用 POC 时仍输出错误日志 — 已修复
  • -debug 日志文件写入失败applyLogLevel 重建 Logger 时丢失 DebugLogFile 配置
  • -hash 不支持 LM:NT 格式 — 现在支持 aad3b435b51404ee:31d6cfe0d16ae931... 标准格式
  • -pwd 不支持逗号分隔多个密码 — 现在 -pwd "123,456,root" 正确拆分
  • -nobr 跳过了 Redis 未授权检测 — 未授权是服务探测不是爆破,不受 -nobr 影响
  • 非终端输出时 ANSI 控制码覆盖扫描结果 — 管道/重定向时自动禁用进度条和颜色
  • 静默模式 NDJSON banner 过长 — Redis INFO ~5KB 截断至 200 字符
  • CSV 漏洞 Type 列为空 — 补全 type 字段
  • SNMP 探测成功但终端无输出 — 补充 session.LogVuln 调用

其他

  • service_probe 连接丢失后静默成功Write/ReadConn=nil 时返回明确错误
  • MongoDB readMongoMsg 未设置读超时
  • TXTWriter.Close Sync 失败后未关闭文件
  • MySQL 3306 服务名误识别为 genetec-5400 — nmap 指纹库误匹配,通过 banner 特征校正
  • gmtls stdout 竞态 — 移除 os.Stdout 非同步重定向

🏗️ 架构优化

  • 统一服务缓存webServiceCache 扩展为通用 serviceCache,下沉到 per-session State,消除多实例缓存串台
  • CEL 表达式编译缓存 — 同一 POC 的所有规则共享编译后的 Program
  • POC 全局状态消除allPocs 全局变量改为 pocStore 按 PocPath 缓存,并发场景不再互相覆盖
  • 进度条竞态修复isActive 改为 atomic.Bool
  • Lint 全量修复 — cassandra/ipmi/mongodb/webscan 的 ineffassign、unused、errcheck

反馈与贡献

v2.2.0-rc

v2.2.0-rc Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 01 Jun 01:12
7204211

fscan v2.2.0-rc

⚠️ 这是预发布版本 (Release Candidate),可能存在未发现的问题。
如果你在使用中遇到任何异常,请积极通过 Issue 反馈,帮助我们尽快稳定正式版。
生产环境建议继续使用 v2.1.3


与 v2.1.3 的主要变更

🏗️ 架构升级:嵌入式 Scanner SDK

新增 pkg/fscan 包,fscan 从纯 CLI 工具进化为可嵌入的扫描引擎

  • 支持从其他 Go 程序直接调用 fscan 扫描能力
  • 每个 Scanner 实例拥有独立的 config/state/session
  • 支持多实例并发扫描,日志和结果完全隔离
  • 全局状态已完整迁移到 session 实例

🚀 大规模扫描支持

  • 流式 Host Iterator — /8 级别 CIDR 不再一次性展开到内存
  • 移除 MaxHosts 硬限制 — 大网段不再被静默截断
  • ARM 原子计数器对齐 — 修复 32 位 ARM 平台 panic

🔌 新增协议插件(+9)

插件 用途
IMAP / POP3 邮件服务器检测
JDWP Java Debug 端口检测
NFS / RMI 文件共享 / Java 远程调用
IPMI 服务器带外管理
SNMP (UDP) 网络设备管理
DNS / BACnet / Modbus DNS 服务 / 工控协议

全部为原生协议实现,零外部依赖。

⚡ 性能与体积优化

  • Kafka/MongoDB/Cassandra 从重型客户端库改为 raw TCP 实现,二进制体积减小
  • 热路径零分配、自适应连接池 CAS 无锁化
  • Scanner 客户端指纹收敛(降低被检测概率)

🌐 网络能力增强

  • SOCKS5 代理认证支持(用户名/密码)
  • 国密 TLS(SM2/SM3/SM4)网站扫描
  • 支持 -add-password 追加多个自定义密码

🔧 本地后渗透插件

  • 新增 sshkey、4 种持久化插件(crontask/systemd/winregistry/winschtask)
  • minidump 降级链凭据提取 + 杀软前置检测
  • cleaner 清理所有持久化痕迹
  • systeminfo 整合合并(fileinfo/dcinfo/avdetect/envinfo)

📦 工程改进

  • 目录重命名:WebScan/webscan/mylib/libs/
  • i18n 覆盖扩展(中/英双语)
  • 全量 lint/errcheck 修复
  • 补充大量单元测试

⚠️ 已知问题 / 注意事项

问题 说明
SDK 并发限速共享 CanSendPacket() 全局限速器在多 Scanner 实例间共享(按进程限速,非按实例)
CEL 回连验证走全局 DNSLog 反连检测的 HTTP 请求计数走全局 state(影响可忽略)
本地插件仅限授权场景 持久化/minidump/shell 类插件仅用于授权渗透测试
WebUI 为实验性功能 fscan-web 版本的 Web 界面尚未完善
common 包未完全拆分 内部架构的 common 包职责仍较重,后续版本持续优化

反馈与贡献

这是一个 RC 版本,我们非常需要你的反馈:


版本说明

版本 说明
fscan 标准版,包含全部插件(推荐)
fscan-nolocal 精简版,不含本地后渗透模块(体积更小)
fscan-web WebUI版,带 Web 管理界面(主流平台)

平台支持

平台 架构
Linux x64, x32, arm64, armv5/6/7, mips, mips64, mipsle
Windows x64, x32
macOS x64 (Intel), arm64 (Apple Silicon)
FreeBSD x64, x32, arm64, armv5/6/7
Solaris X64n

v2.1.3

Choose a tag to compare

@github-actions github-actions released this 15 May 12:38

fscan v2.1.3

感谢使用 fscan!

版本说明

版本 说明
fscan 标准版,包含全部插件(推荐)
fscan-nolocal 精简版,不含本地模块(体积更小)
fscan-web WebUI版,带Web管理界面(主流平台)

平台支持

平台 架构
Linux x64, x32, arm64, armv5, armv6, armv7, mips, mips64, mipsle
Windows x64, x32
macOS x64, arm64
FreeBSD x64, x32, arm64, armv5, armv6, armv7
Solaris x64

Changelog

🐛 问题修复

🔧 其他改进

完整更新日志: v2.1.2...v2.1.3

v2.1.2

Choose a tag to compare

@github-actions github-actions released this 25 Apr 10:45

fscan v2.1.2

感谢使用 fscan!

版本说明

版本 说明
fscan 标准版,包含全部插件(推荐)
fscan-nolocal 精简版,不含本地模块(体积更小)
fscan-web WebUI版,带Web管理界面(主流平台)

平台支持

平台 架构
Linux x64, x32, arm64, armv6, armv7, mips, mips64, mipsle
Windows x64, x32
macOS x64, arm64
FreeBSD x64, x32, arm64, armv6, armv7
Solaris x64

Changelog

🚀 新功能

🐛 问题修复

🔧 其他改进

完整更新日志: v2.0.1...v2.1.2

1.8.4

Choose a tag to compare

@shadow1ng shadow1ng released this 11 May 08:51

小更新,优化报错处理。避免部分扫描模块报错后导致的程序退出
linux(amd64)默认使用fscan
windows(x64)默认使用fscan.exe即可

1.8.3

Choose a tag to compare

@shadow1ng shadow1ng released this 13 Nov 04:43

加入控制台颜色输出(可-nocolor)、保存文件json结构(-json)、修改tls最低版本为1.0、端口分组(-p db,web,service)。

fscan 1.8.2

Choose a tag to compare

@shadow1ng shadow1ng released this 19 Nov 09:14

加入hash碰撞、wmiiexec无回显命令执行

fscan 1.8.1

Choose a tag to compare

@shadow1ng shadow1ng released this 06 Jul 13:48

加入手工gc回收,尝试节省无用内存。
-url 支持逗号隔开。
修复一个poc模块bug。

fscan 1.8.0

Choose a tag to compare

@shadow1ng shadow1ng released this 02 Jul 09:27

一、加强poc fuzz模块,支持跑备份文件、目录、shiro-key(默认跑10key,可用-full参数跑100key)等。
二、新增ms17017利用(使用参数: -sc add),可在ms17010-exp.go自定义shellcode,内置添加用户等功能。
三、新增poc、指纹。
四、支持socks5代理。
五、因body指纹更全,默认不再跑ico图标。