ZacharyZcR
d7071b7b8e
fix: -debug 日志文件写入失败,applyLogLevel 重建 Logger 时丢失 DebugLogFile 配置
2026-06-14 22:23:51 +08:00
ZacharyZcR
6ae37b8892
fix: -nopoc 禁用POC时不再输出错误日志
2026-06-14 22:23:51 +08:00
ZacharyZcR
2b202aa298
fix: 让 -gt 全局超时参数真正生效
...
-gt 参数之前是死代码:flag 定义了 GlobalTimeout 但从未被使用。
现在在 RunScan 中用它创建带 deadline 的 context,
超时后所有扫描任务(端口扫描、插件执行)被取消。
2026-06-14 22:23:51 +08:00
ZacharyZcR
6d7e6cd394
fix: 修复3个实测输出问题
...
1. 静默模式NDJSON banner截断至200字符
Redis INFO响应~5KB导致JSONL单行过长,截断后加...后缀
2. CSV漏洞Type列补全
ResultTypeVuln的fillDetail未设type字段,CSV Vulns列为空
统一设为"vulnerability"
3. ICMP权限不足告警精简
4行告警(listen失败/连接失败/权限不足/切换ping)合并为1行
2026-06-14 22:23:51 +08:00
ZacharyZcR
626d8f79bb
fix: 修复3个实测发现的问题
...
1. -pwd 支持逗号分隔多个密码
之前 -pwd "123,456,root" 被当作单个密码,SSH root:123 无法匹配
现在逗号分隔为独立密码,空格保留(可能是密码的一部分)
2. -nobr 禁用爆破时仍检测 Redis 未授权访问
未授权访问是服务探测不是爆破,不应被 -nobr 跳过
将未授权检测移到 DisableBrute 判断之前
3. 指定端口时跳过 UDP 插件调度
-p 80 只扫 HTTP 时不需要 SNMP/BACnet/DNS 等 UDP 探测
仅在默认端口扫描时才分发 UDP 插件
效果: -p 80 从 9 秒降到 3 秒
2026-06-14 22:23:51 +08:00
ZacharyZcR
a52e93e84c
fix: 非终端输出时禁用进度条,防止ANSI控制码覆盖扫描结果
2026-06-14 22:23:50 +08:00
ZacharyZcR
04cae2e42d
fix: 彻底解决UDP插件阻塞导致扫描无法结束的问题
...
根因分析(通过 goroutine dump 定位):
1. UDP conn.Write 在 WSL2 上可能永久阻塞(SetDeadline 对 Write 不生效)
2. SNMP community 爆破混入通用密码字典(57个),串行 × 10s超时 = 10分钟
修复:
- 提取 udpProbe() 公共函数,用 context timeout + conn.Close 双保险
超时后强制关闭连接,中断阻塞的 Write/Read
- BACnet/DNS/IPMI/TFTP 统一使用 udpProbe()
- SNMP probe 使用 goroutine + context select 保护
- SNMP community 列表不再混入通用密码字典(8个专用 community 足够)
- SNMP 后续 community 爆破用 3s 短超时 + 连续失败 3 次快速退出
效果: 同样的扫描从无限卡死 → 9秒完成
2026-06-14 22:23:50 +08:00
ZacharyZcR
4169eb6ee0
fix: UDP插件改用 conn.SetDeadline 替代类型断言
2026-06-14 22:23:50 +08:00
ZacharyZcR
63631d6cdf
fix: 所有UDP插件添加ReadDeadline防止无限阻塞
...
SNMP/BACnet/DNS/IPMI/TFTP 的 conn.Read() 在目标不响应时
无限阻塞(goroutine 泄漏),导致整个扫描无法结束。
在 Write 前设置 ReadDeadline 确保超时后返回。
2026-06-14 22:23:50 +08:00
ZacharyZcR
4f6bb28138
fix: 修复6个运行时问题
...
1. 抑制 gmtls 库的 handshake error stdout 噪声
gmtls/conn.go:1304 硬编码了 fmt.Println,在调用时临时重定向 os.Stdout
2. MySQL 3306 服务名误识别为 genetec-5400
nmap 指纹库将 MySQL 握手包的随机 salt 误匹配,通过 banner 特征校正
3. 管道输出时自动禁用 ANSI 控制码
检测 stdout 是否为终端,非终端时自动启用 NoColor
4. 进度条完成消息措辞精确化
去掉冗余冒号,保持信息简洁一致
5. URL 模式跳过不必要的 TLS 探测
用户已通过 -u 显式指定 http:// 协议时直接使用,不再做 TLS 握手
6. 无网络探测数据时降低默认重试次数
-np 跳过存活探测后,将默认重试从 3 降到 2,加速不可达主机的超时
2026-06-14 22:23:49 +08:00
ZacharyZcR
46a6d812a4
fix: DetectPocFormat 误判含 transport 的 fscan POC 为 xray 格式
...
有 transport 字段但 rules 是数组的 POC(如 apache-httpd-cve-2021-40438)
属于 fscan 格式,不应被 xray 分支兜底。移除错误的 fallback return,
让这类 POC 正确落入 fscan 格式检测分支。
修复前: 388个POC成功380个,失败8个
修复后: 388个POC成功388个,失败0个
2026-06-14 22:23:49 +08:00
ZacharyZcR
d4f4e65dec
refactor: 4项架构优化 — CEL缓存/POC隔离/服务缓存/结果统一
...
1. CEL 表达式编译缓存
- 新增 CelProgCache,同一 POC 的所有规则/参数组合共享编译后的 Program
- clusterpoc 热路径上消除重复的 Compile+Program 调用
2. POC 全局状态消除
- allPocs/pocLoaded 全局变量改为 pocStore 按 PocPath 缓存
- 不同 PocPath 的扫描独立加载,Web API 并发场景不再互相覆盖
3. serviceCache 下沉到 per-session State
- 服务识别缓存从包级全局 map 迁移到 State.serviceCache (sync.Map)
- BaseScanStrategy 通过 SetState 注入 session state
- 消除多个并发扫描之间的服务识别缓存串台
4. POC 结果输出路径统一
- 提取 buildVulnDetails/buildVulnLogMsg/saveVulnResult 三个公共函数
- CheckMultiPoc 和 recordVulnerabilityResult 共用统一的结果构造逻辑
- 消除 details 字段名不一致和日志格式差异
2026-06-14 22:23:49 +08:00
ZacharyZcR
a115499793
fix+perf: 修复10个bug & 10项性能优化
...
Bug修复:
- clustersend CEL结果判断从字符串比较改为类型断言
- Nuclei DSL matcher安全降级为false避免误报
- clusterpoc发现漏洞后返回true修正语义
- reverseCheck加10s超时防止ceye API阻塞
- doSearch/bmatches正则编译结果缓存到sync.Map
- evalset CEL求值失败时存空字符串而非原始表达式
- CEL wait()函数加nil Reverse指针检查防panic
- MongoDB readMongoMsg应用timeout参数设置读超时
- TXTWriter.Close确保Sync失败后仍调用file.Close
性能优化:
- 指纹regex缓存从RWMutex+map改为sync.Map消除锁竞争
- CaseInsensitive指纹词加载时预小写化避免匹配时分配
- 版本提取FindAllStringSubmatch限制返回数量
- i18n.Tr用strconv.Itoa替代Sprintf减少分配
- POC加载用atomic.Bool+DCLP消除热路径锁
- 结果缓冲map预分配容量减少rehash
- HTTP连接池参数随并发数动态调整
- getRuleHash去除反射+Headers排序保证确定性dedup
- POC并发加载用channel替代Mutex收集结果
2026-06-14 22:23:49 +08:00
ZacharyZcR
c49c23c7f0
Harden scan robustness and tests
2026-06-14 22:23:48 +08:00
ZacharyZcR
5ad914a1bb
feat: 统一服务缓存 + 指纹驱动插件匹配
...
将 webServiceCache 扩展为通用 serviceCache,所有指纹识别结果
统一缓存,插件匹配时端口不命中则回退到服务名称匹配。
删除多余的 service_cache.go,复用已有的 ServiceInfo 体系。
补充 nil 防御、Explicit 标记、大量单元/集成/回归测试。
2026-06-14 22:23:47 +08:00
ZacharyZcR
2ab7c4d9b2
fix: 非标准端口的服务无法匹配对应插件 #588
...
端口扫描识别到 8881 上运行 SSH,但 SSH 插件只注册了 [22,2222,2200,22222],
端口不匹配导致插件不执行。
新增服务名称缓存:端口扫描阶段记录 host:port → serviceName,
插件匹配时端口不命中则回退到服务名称匹配。
2026-06-14 22:23:46 +08:00
ZacharyZcR
5c251b123d
fix: 移除误导性的"无可用插件"日志 #588
...
扫描开始前的插件预检基于端口列表静态匹配,不代表实际扫描中插件
不会执行。移除"无可用插件"提示,避免用户误以为插件未工作。
2026-06-14 22:23:46 +08:00
ZacharyZcR
800cc30794
Fix credential cleanup and explicit tuning flags
2026-06-14 22:23:46 +08:00
ZacharyZcR
8e3cac303d
fix: webtitle HTTP 请求失败时重试,修复批量扫描 POC 缺失 #587
...
批量扫描(-hf)时并发压力导致 HTTP 请求瞬时失败,getWebTitle
直接返回 error,跳过指纹识别和 POC 触发。
加入指数退避重试(200ms→400ms),最多 3 次,复用 config.MaxRetries。
2026-06-14 22:23:45 +08:00
ZacharyZcR
4b79cb7a18
ci: 升级 CI Go 版本到 1.25
2026-06-14 22:23:45 +08:00
ZacharyZcR
9d38874a03
fix: 降级 modernc.org/sqlite 到 v1.39.0 适配 CI
2026-06-14 22:23:45 +08:00
ZacharyZcR
88c7e4f2be
feat: 自适应并发调度 — 网络探测 + AIMD + 参数智能推导
...
扫描前自动探测网络环境(RTT、丢包率、fd limit),基于探测数据
推导 6 个关键参数,替代硬编码默认值:
- Timeout: median_RTT + 4σ(覆盖 99.9% 正常连接)
- ModuleThreadNum: target_concurrency / 30
- MaxRetries: ceil(log(0.01)/log(loss_rate))(全失败概率 <1%)
- ICMPRate: 环境基准 × fd 系数
- PocNum: 跟随 ModuleThreadNum
- DisablePing: 已有 ICMP 权限降级机制
线程池从单信号(资源耗尽率)升级为 AIMD + 慢启动:
- 慢启动:target/4 起步,500ms 翻倍
- 稳态 AIMD:健康 +5%,拥塞 ×0.5
- 双信号:资源耗尽率 + RTT 趋势(双 EMA)
用户 -t 显式指定时作为 ceiling,探测仍调整其他参数。
测试:单元 + 边界 + 集成 + 真实网络,core 包 580+ 用例全通过。
2026-06-14 22:23:45 +08:00
ZacharyZcR
e0468ecd35
feat: Web 版独立入口 + SQLite 持久化存储
...
- 拆分 main.go 为 main_cli.go 和 main_web.go,Web 版不再包含 CLI 参数解析
- Web 版直接启动 HTTP 服务,通过 -port/-lang 控制,无需 -web flag
- 结果存储从内存 map 替换为 SQLite(modernc.org/sqlite,纯 Go 零 CGO)
- 数据库文件 ~/.fscan/results.db,进程重启后结果不丢失
- 修复结果分布面板跟随 tab 筛选联动的问题
2026-06-14 22:23:44 +08:00
ZacharyZcR
d0295dcb92
fix: 修复 SSH 扫描 goroutine 泄漏
...
ssh.NewClientConn 不接受 context,context 取消后底层 TCP 连接未关闭,
导致 readLoop goroutine 永久阻塞在 conn.Read 上。大规模扫描时泄漏数万
goroutine。
- doSSHAuth 新增 goroutine 监听 context 取消并关闭底层连接
- TestSingleCredential 移除 5 秒超时放弃逻辑,改为持续等待清理
2026-06-14 22:23:44 +08:00
ZacharyZcR
72042111c6
Merge pull request #580 from shadow1ng/dev
...
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled
v2.2.0-rc Release
2026-06-01 08:54:24 +08:00
ZacharyZcR
569d21a8bc
fix: harden address parsing edge cases
2026-06-01 04:03:46 +08:00
ZacharyZcR
8ec96bfe6d
fix: harden scan edge cases
2026-06-01 03:32:13 +08:00
ZacharyZcR
8b558b4f12
fix: align atomic counters on arm
2026-06-01 03:03:40 +08:00
ZacharyZcR
3e4e2db722
feat: stream large host scans
2026-06-01 02:55:28 +08:00
ZacharyZcR
ac755a9b4a
test: avoid expanding massive CIDRs
2026-06-01 02:33:10 +08:00
ZacharyZcR
ea17b5b1bc
feat: allow multiple added passwords
...
Fixes #584
2026-06-01 02:06:15 +08:00
ZacharyZcR
bfc0e0fb52
fix: support SOCKS5 proxy auth
...
Fixes #585
2026-06-01 01:59:08 +08:00
ZacharyZcR
a92df59dfe
fix: NFS plugin RPC probe + UDP dispatch in auto mode
...
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled
NFS: use RPC NULL call to detect NFS service before MOUNT EXPORT
UDP dispatch: query plugin registry directly in auto mode instead of
GetPlugins which excludes UDP from FilterService
2026-05-19 00:37:35 +08:00
ZacharyZcR
0a28db7371
feat: add NFS, RMI and IPMI plugins
...
NFS (2049/TCP): Sun RPC EXPORT call, lists shared directories
RMI (1099/TCP): Java RMI handshake, detects exposed JMX/RMI endpoints
IPMI (623/UDP): RMCP ping + channel auth capabilities probe
All pure stdlib, zero new dependencies.
2026-05-19 00:01:58 +08:00
ZacharyZcR
778ba019d5
feat: add IMAP and POP3 plugins for mail server detection
...
IMAP (143/993): banner grab + LOGIN brute force
POP3 (110/995): banner grab + USER/PASS brute force
Both registered as safe default plugins with auth-check capability.
2026-05-18 23:29:52 +08:00
ZacharyZcR
f43e3e3d0a
feat: add JDWP plugin for Java debug port detection
...
Detects exposed JDWP (Java Debug Wire Protocol) services on ports
5005/8000/8787/5050. Performs protocol handshake and reports as VULN
since an exposed debug port allows remote code execution.
2026-05-18 23:22:15 +08:00
ZacharyZcR
a1588a321f
feat: SDK agent integration + UDP plugin framework + SNMP plugin
...
SDK enhancements for endpoint agent embedding:
- ScanWithController for pause/resume and live stats
- OnProgress callback for periodic progress reporting
- TaskID injection into every scan result
- ScanController with goroutine-safe pause/resume/stats
- Multi-target stats aggregation (race-free)
UDP plugin infrastructure:
- PluginTypeUDP registry with dedicated dispatch path
- DialUDP on ScanSession with rate limiting and packet counting
- UDP plugins bypass TCP port scan, probe targets directly
- FilterService excludes UDP plugins from TCP port matching
SNMP plugin (first UDP plugin):
- SNMPv2c GetRequest probe for sysDescr detection
- Community string brute force (public/private/community/etc)
- Pure stdlib implementation (encoding/asn1)
- Registered as safe default plugin on port 161/UDP
Tests: 95.7% SDK coverage, race-free, 50+ new test cases
2026-05-18 23:11:39 +08:00
ZacharyZcR
eb4fa38fea
merge sdk architecture polish
2026-05-18 21:41:01 +08:00
ZacharyZcR
c15aa3488b
polish embedded scanner SDK contracts
2026-05-18 21:40:52 +08:00
ZacharyZcR
218811c38d
Merge pull request #582 from shadow1ng/feature/sdk-library
...
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled
Add embeddable scanner SDK
2026-05-18 18:03:12 +08:00
ZacharyZcR
5a884ca6ad
fix lint issues before merge
2026-05-18 17:59:00 +08:00
ZacharyZcR
5942d3bbcb
preserve sdk host language state
2026-05-18 17:43:00 +08:00
ZacharyZcR
c0a9cfd8f5
use config proxy state for credential prechecks
2026-05-18 17:13:19 +08:00
ZacharyZcR
c16aa04e28
isolate session network checks
2026-05-18 17:11:24 +08:00
ZacharyZcR
856eeccd78
respect per-call session dial timeouts
2026-05-18 16:35:58 +08:00
ZacharyZcR
13f7997d16
isolate scan strategy runtime state
2026-05-18 16:33:47 +08:00
ZacharyZcR
adb3ac5b74
add session-aware scan logging
2026-05-18 16:19:34 +08:00
ZacharyZcR
8de7570268
allow concurrent embedded scans
2026-05-18 16:11:41 +08:00
ZacharyZcR
3dde0c6a8e
move plugin safety metadata to registry
2026-05-18 15:57:18 +08:00
ZacharyZcR
d4ed0867c9
polish scanner SDK API and docs
2026-05-18 15:49:57 +08:00
ZacharyZcR
6605c93dd9
improve embedded scanner runtime
2026-05-18 14:53:00 +08:00
ZacharyZcR
6bfa05cb45
add embeddable scanner SDK
2026-05-18 14:41:15 +08:00
ZacharyZcR
bce0a718ea
slim mssql credential check
2026-05-18 14:00:45 +08:00
ZacharyZcR
40c3f1423e
slim oracle credential check
2026-05-18 13:13:40 +08:00
ZacharyZcR
72403ebb32
Merge remote-tracking branch 'origin/dev' into dev
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled
2026-05-16 06:57:16 +08:00
ZacharyZcR
4fa8fdc30e
chore: 砍掉 downloader/shellenv,新增 sshkey 插件
...
- 删除 downloader(curl/certutil 可替代)
- 删除 shellenv(劫持 ls 别名动静太大,实用性差)
- 新增 sshkey:生成 ed25519 密钥对,注入 authorized_keys,
私钥保存到当前目录,支持多用户(root 权限下自动注入 root)
2026-05-16 06:56:12 +08:00
ZacharyZcR
bf210dd94d
refactor: minidump 实现降级链凭据提取
...
不再检测到杀软就直接退出,改为三级降级:
1. 直接 MiniDumpWriteDump(无杀软时尝试,15秒超时)
2. comsvcs.dll(系统签名DLL,部分杀软不拦截)
3. reg save SAM/SECURITY/SYSTEM(离线方式,不碰 LSASS)
全部失败才退出,0.2 秒完成不会卡死系统
2026-05-16 06:51:42 +08:00
ZacharyZcR
cb1079598d
feat: cleaner 支持清理所有持久化痕迹,minidump 增加杀软前置检测
...
cleaner 新增 Windows 持久化完整清理:
- Winlogon Shell/Userinit 恢复默认值
- IFEO 映像劫持清理
- 注册表 Run/RunOnce 清理
- 计划任务、服务、启动文件夹清理
- BITS 任务、WMI 事件订阅清理
- Prefetch 记录清理
minidump 增加杀软前置检测,发现 Defender/EDR 直接退出,
避免 MiniDumpWriteDump hang 导致系统崩溃
2026-05-16 06:20:00 +08:00
ZacharyZcR
ec10097e76
fix: minidump 增加杀软检测和缩短超时,防止 hang 导致系统崩溃
...
- 新增 isAVBlocking 检测 Defender/EDR 进程,发现活跃杀软直接跳过
- dump 超时从 120 秒缩短到 15 秒(正常 dump 几秒完成)
- 三层防护:杀软检测 → 权限检测 → 超时兜底
2026-05-16 06:13:47 +08:00
ZacharyZcR
231563e82b
fix: 修复 socks5proxy/cleaner/minidump 三个插件问题
...
- socks5proxy: 监听地址从 127.0.0.1 改为 0.0.0.0,允许外部连接
- cleaner: 重写清理逻辑,精准匹配 fscan 产物,修复 glob 遍历大目录卡死问题,
history 清理改为真正删除 fscan 相关行
- minidump: SeDebugPrivilege 提升失败时直接退出,不再卡 120 秒超时
2026-05-16 03:17:44 +08:00
ZacharyZcR
5af8682d22
fix: 修复长驻插件启动竞态,删除重复的 bashrc 插件
...
- 修复 forwardshell/reverseshell/socks5proxy 因竞态导致主进程提前退出
- 删除与 shellenv 功能重复的 bashrc 插件
2026-05-16 00:12:21 +08:00
ZacharyZcR
a42f074b00
feat: 新增 4 种持久化插件
...
- winifeo: IFEO 映像劫持 (sethc/utilman/narrator)
- winbits: BITS 后台任务持久化,通过 GUID 操作避免同名冲突
- winlogon: Winlogon Userinit/Shell 追加
- bashrc: Linux bashrc/profile 注入
2026-05-15 23:48:30 +08:00
ZacharyZcR
1ebcd6dc79
fix: 补全 Windows 持久化插件的执行逻辑
...
5 个 Windows 持久化插件原先只拼接命令字符串不执行,现全部补上真实执行逻辑:
- winschtask: schtasks /create 创建计划任务
- winservice: sc create 创建系统服务
- winstartup: 复制 PE 到启动文件夹
- winregistry: reg add 写入 Run/RunOnce 注册表键
- winwmi: PowerShell 创建 WMI 事件订阅(单次调用,1.2s 完成)
2026-05-15 23:35:43 +08:00
ZacharyZcR
150e48ba85
refactor: 合并 fileinfo 和 dcinfo 到 systeminfo
...
- fileinfo 的敏感文件扫描合并到 systeminfo
- dcinfo 的域控信息收集合并到 systeminfo,通过 build tag 隔离平台差异
- 检测到域环境时自动触发域信息收集,WORKGROUP 环境自动跳过
- 新增 systeminfo_dc_windows.go 和 systeminfo_dc_other.go 处理跨平台编译
2026-05-15 23:16:35 +08:00
ZacharyZcR
76a4331fae
refactor: 合并 avdetect 到 systeminfo,修复杀软检测误报
...
- 将 avdetect 的进程匹配逻辑合并到 systeminfo 插件
- 修复进程匹配使用 Contains 导致大量误报,改为精确匹配
- 修正 auto.json 中 Microsoft Security Essentials 为 Microsoft Defender
- 使用 map 索引优化进程匹配性能
- 清理废弃的 envinfo/avdetect i18n key
2026-05-15 22:52:11 +08:00
ZacharyZcR
ca4e1ffad3
refactor: 增强 systeminfo 插件并合并 envinfo
...
- systeminfo 新增网卡信息、权限检测、补丁数量、杀软检测、
防火墙状态、敏感环境变量扫描等功能
- 合并 envinfo 到 systeminfo,删除独立的 envinfo 插件
- 修复本地插件通过 -m 指定时仍需 -h 参数的问题
- 通过回调机制解决 common/plugins 循环依赖
2026-05-15 22:47:39 +08:00
ZacharyZcR
a0fc7881f2
fix: 修复 -m 指定本地插件时误走服务扫描策略的问题
...
当通过 -m 参数指定本地插件(如 systeminfo)时,由于 LocalMode 未被设置,
会错误地进入服务扫描流程,导致不必要的端口扫描和插件重复执行。
现在 determineScanMode 会自动检测 -m 指定的插件类型,
全部为 local 类型时自动切换到本地扫描模式。
2026-05-15 22:40:52 +08:00
ZacharyZcR
bc28df2ed1
Merge branch 'main' into dev
2026-05-15 22:16:07 +08:00
ZacharyZcR
7459da2b44
fix: 恢复 plugins/local 中实际使用的 config 变量
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled
2026-05-15 19:54:36 +08:00
ZacharyZcR
9d191889d0
fix: 移除 composite action 中不支持的 timeout-minutes
2026-05-15 18:43:12 +08:00
ZacharyZcR
2e277a51ed
fix: 修复 plugins/local 未使用变量导致编译失败
2026-05-15 18:41:36 +08:00
ZacharyZcR
d412786228
feat: 支持国密 TLS 网站扫描
...
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled
- 添加 tjfoc/gmsm 依赖,提供 gmtls 国密 TLS 支持
- 新增国密 HTTP 客户端 ClientGM/ClientNoRedirectGM
- DetectHTTPScheme 增加国密 TLS 回退检测,返回 https-gm 协议标识
- webtitle 插件识别并路由到国密客户端
- DoRequest 标准 TLS 失败时自动回退国密客户端
2026-05-13 19:10:37 +08:00
ZacharyZcR
b2e91d9fc0
fix: 修复 POC Cookie/变量提取的两个问题
...
- poc_adapter: xray/afrog 的 output.search 转换为 Search 字段,多步POC变量传递不再丢失
- poc_executor: Set-Cookie 提取优化不再要求捕获组名含 cookie,sessid/token等命名均生效
2026-05-13 18:37:33 +08:00
ZacharyZcR
3436d6ad02
chore: 版本号更新为 2.1.4
2026-05-13 17:32:28 +08:00
ZacharyZcR
a0f323a891
docs: 更新README版本号为 2.1.3
2026-05-13 17:32:27 +08:00
ZacharyZcR
46e50a021f
ci: 修复发布超时 — 增加 timeout-minutes 以及步骤级超时
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled
2026-05-13 17:32:09 +08:00
ZacharyZcR
b32ce5dec8
ci: 添加 main 分支 push 触发 CI 验证
2026-05-13 17:32:09 +08:00
ZacharyZcR and r00t
2c2ca6ace3
v2.1.3 Release ( #572 )
...
* add CVE-2026-24061 detect logic (#562 )
* add CVE-2026-24061 detect logic
* fix(telnet): 修复 errcheck 警告,统一错误处理风格
---------
Co-authored-by: ZacharyZcR <[email protected] >
* fix: 修复 Hub 广播 data race 和端口扫描潜在死锁,清理死代码
- hub.go: broadcast 路径 RLock 改 Lock,修复并发 delete/close 竞争
- port_scan.go: pool.Invoke 失败时释放 wg 和 semaphore,防止死锁
- web_scanner.go: 删除只写不读的 fingerprintCache
- webtitle.go: 移除对已删除 SetFingerprints 的调用
- keylogger.go: 删除未使用的 stopChan 和 isRunning 字段
* refactor: context 穿透扫描生命周期,修复长驻插件阻塞和 Web Stop 无效
- RunScan 接受 context.Context,创建可取消上下文并穿透到所有策略和插件
- 长驻插件(forwardshell/socks5proxy/reverseshell)不再进入 scan WaitGroup,
通过 ctx.Done() 管理生命周期,解除 wg.Wait() 死锁
- Web Stop API 从 stopChan 改为 context.CancelFunc,取消信号真正传播到扫描链路
- ExecuteScanTasks 和 executeScanTask 支持 context 取消检查,停止分发新任务
- CLI 模式传 context.Background(),行为完全不变
* fix: 修复 Web Stop 信号等待阻塞和 SMB 响应解析越界 panic
- scanner.go: 长驻插件等待信号时同时监听 ctx.Done(),Web Stop 可正常返回
- smb_protocol.go: 响应长度检查修正为 47,远端偏移量全部做边界校验
* fix: POC 扫描接入调用方 context,修复 cachedPocPath 竞争和 ProxyStats data race
- webscan/web_scan.go: WebScan 接受 ctx 参数,替换 context.Background();
sync.Once 改为 sync.Mutex 保护 POC 加载,消除 cachedPocPath 并发写竞争
- webtitle.go: ctx 从 Scan 穿透到 identifyFingerprintsMulti → triggerPocScan → WebScan
- webpoc.go: 传递 ctx 到 WebScan
- proxy/types.go: ProxyStats 增加 sync.Mutex
- proxy/manager.go: LastConnectTime/LastError/AverageConnectTime 读写加锁
* fix: 修复 ProxyStats 含 mutex 导致的 copylocks 告警
Stats() 方法改为手动构造副本,避免值拷贝复制 sync.Mutex
* fix: 补全 HTTP/TLS proxy stats 加锁,修复 RPC/SMB 解析越界和 POC 加载逻辑
- httpdialer.go/tlsdialer.go: LastError/LastConnectTime/AverageConnectTime 加 mutex
- findnet.go: RPC 响应结束标记位置 < 4 时跳过截断,防止负数切片 panic
- ms17010.go: SMB 会话响应最小长度改为 45,sessionSetupResponse 加长度校验
- web_scan.go: POC 加载失败时不标记 pocLoaded,允许后续重试
- Eval.go: DNSLog 配置去掉 sync.Once,允许多次扫描更新配置
* fix: Web 全局状态同步、字典文件错误提示、长驻插件连接可取消
- scan.go: Web API 构建 config/state 后同步到全局实例
- config_builder.go: 用户名/密码/URL 文件读取失败时输出错误日志
- reverseshell.go: 读命令设 1s 超时,超时后检查 ctx 实现可取消
- forwardshell.go: handleClient 接受 ctx,取消时关闭连接解除阻塞
- socks5proxy.go: handleClient 接受 ctx,取消时关闭连接解除 IO 阻塞
* refactor: 引入 ScanSession,替代全局状态穿透扫描管道 (Phase 1-3)
- 新增 common/session.go: ScanSession 结构体封装 Config/State/Params/Dialer
- RunScan/Strategy/ExecuteScanTasks/executeScanTask 全部接收 session
- Plugin 接口从 Scan(ctx, info, config, state) 改为 Scan(ctx, info, session)
- 48 个插件实现统一更新签名
- Web API 构建 ScanSession 传给 RunScan
- CLI 模式通过 Initialize() 创建 session
* refactor: 全量替换 WrapperTcpWithTimeout 为 session.DialTCP (Phase 4)
- core/port_scan.go: EnhancedPortScan/connectWithRetry/scanSinglePort 接入 session
- core/service_probe.go: SmartPortInfoScanner 持有 session,重连走 session.DialTCP
- core/icmp.go: CheckLive/tcpProbeAlive 接入 session
- 17 个 service 插件: 内部 helper 函数全部穿透 ctx+session
- 移除插件中冗余的手动 TCP 计数(DialTCP 内部已处理)
- plugins/core 下已无 WrapperTcpWithTimeout/SafeTCPDial 调用残留
* refactor: 清除 core/plugins 全局状态依赖,ProgressManager 缓存引用 (Phase 5)
- core/alive_scanner.go: GetFlagVars() → session.Params
- core/service_scanner.go: GetFlagVars() → session.Params 和 config.Target.Ports
- common/progress_manager.go: 缓存 State 和 NoColor 到字段,不再运行时读全局
- common/output_api.go: SaveResult 改用 GetGlobalConfig().Output.DisableSave
- common/network.go: WrapperTcpWithTimeout 标记 Deprecated
- core/ 和 plugins/ 下已无全局状态调用残留
* fix: 修复 dialer timeout 锁死、CVE 检测绕过 session 和误报问题
* fix: 修复 pocDNSLog data race,穿透 ctx 到全链路,消除残余 net.DialTimeout 绕过
* perf: CVE-2026-24061 检测改并发执行,消除硬 sleep 用 deadline 替代
* feat: 项目缓存系统,跨扫描合并资产,缓存 host:port 避免漏报
* perf: 三阶段性能优化,ICMP 并发提升+TCP 并行探测,端口扫描退避调整,服务探测超时减半
* fix: 修复凭据测试清理 goroutine 无限阻塞导致的 goroutine 泄漏
* fix: 凭据测试连续网络错误短路、resultChan 缓冲防阻塞、timer 泄漏修复
* perf: 大规模扫描网段预筛,按 /24 探活跳过空子网,B 段扫描从 2h+ 降至 2min
* fix: 网段预筛从抽样改全覆盖,每台主机发 1 个探测包,消除漏报
* perf: 网段预筛增加网关启发式,.1/.254 多端口优先探测,命中即跳过逐主机兜底
* fix: MSSQL 连接加 encrypt=disable 修复无 TLS 环境扫描失败,Web API 参数校验负数
* feat: Release 增加 armv5 架构支持
* chore: bump version to 2.1.3
* fix: 锁定 golangci-lint 版本为 v2.12.1 修复 CI checksum 校验失败
* fix: golangci-lint 改用 go install 安装,绕过上游安装脚本 checksum 校验问题
* feat: -silent 模式输出 NDJSON 到 stdout,支持 AI agent 管道消费
- 新增 StdoutNDJSONWriter,silent 模式下每条扫描结果实时输出一行 JSON
- LogWithProgress 层拦截人类可读日志,绕过 logger sync.Once 初始化时序问题
- 支持 fscan -h xxx -silent | jq 管道用法
* fix rdp invalid random panic (#573 )
* restore ms17010 legacy detection and exploit (#574 )
* fix ms17010 legacy packet decoding (#574 )
* fix csv web title output (#575 )
* fix web result protocol output (#577 )
* feat: add -ntp flag to disable TCP supplementary probe
* fix: skip TCP supplementary probe in icmp mode
* feat: add -debug flag with file logging to fscan_debug.log
* fix: resolve golangci-lint errcheck and staticcheck warnings
* fix: skip proxy deep verification for SOCKS5 connections (#579 )
SOCKS5 protocol validates connection reachability at protocol level,
deep verification was incorrectly rejecting non-banner services like
SMB(445), RPC(139) and Kerberos(88).
* fix: exclude timeout from scan failure rate calculation (#578 )
Timeout is a normal scan result when firewalls drop packets, not a
scan failure. Only resource exhaustion errors count toward failure rate.
* feat: flatten NDJSON output for AI agent consumption and add SKILL.md
* perf: 端口扫描自适应超时,基于 RTT 采样动态调整连接超时
* perf: 四项扫描性能优化
- SO_LINGER=0 快速释放连接,减少 TIME_WAIT 堆积
- 服务探测超时自适应,RTT 采样约束读超时上限
- 端口扫描结果流式传递,pipeline 并行端口扫描和插件执行
- ICMP 批量预构建包和地址,减少发送循环开销
* perf: 六项性能优化
- DNS 解析缓存:sync.Map 缓存避免重复系统调用
- 凭据测试 TCP 预检:不可达目标直接跳过全部凭据
- Web 探测 HTTP Client 复用:全局共享连接池
- 端口扫描 Bloom Filter 去重:替代 map 降低内存
- 进度条 atomic 累加 + 50ms 节流渲染:消除锁竞争
- 服务探针预解码:Init 时预编译,运行时零解码开销
* refactor: replace bloom filter with map for deduplication
Bloom filter has false positive risk which can silently drop valid
scan results. Map provides exact deduplication with negligible memory
overhead at the scale of open ports (typically thousands, not millions).
* fix: credential TCP precheck bypass proxy and pipeline goroutine leak
- Skip TCP precheck when proxy is enabled, net.DialTimeout cannot
reach targets behind SOCKS5/HTTP proxy
- Drain stream channel on ctx cancellation to prevent EnhancedPortScan
goroutine from blocking on a full channel
* fix: stream channel 提前返回未关闭导致 goroutine 泄漏,服务探测超时下限 500ms
* fix: resolve golangci-lint errcheck and staticcheck warnings
---------
Co-authored-by: r00t <[email protected] >
2026-05-13 14:41:23 +08:00
ZacharyZcR
db0b53b139
fix(ci): 扩展 UPX 压缩范围覆盖 ARM/MIPS/FreeBSD 架构
2026-04-25 18:13:52 +08:00
ZacharyZcR
4c58843033
chore: 版本号更新为 2.1.2
2026-04-25 17:43:53 +08:00
ZacharyZcR
6b13b2e84f
feat: 添加 GitHub Issue 模板
...
- bug_report.yml: Bug 报告模板
- feature_request.yml: 功能请求模板
- plugin_request.yml: 新插件/协议支持请求模板
- false_positive.yml: 误报/漏报报告模板
- config.yml: 禁用空白 issue,添加文档链接
2025-12-20 10:31:39 +08:00
ZacharyZcR
03b21f92f1
docs: 测试构建
2025-07-17 23:08:06 +08:00
ZacharyZcR
2674e469b8
docs: 测试构建
2025-07-17 23:00:28 +08:00
ZacharyZcR
d4a486763b
docs: 测试构建
2025-07-17 22:45:05 +08:00
ZacharyZcR
6fe1f11e36
docs: 测试构建
2025-07-17 22:36:51 +08:00
ZacharyZcR
6f17deb963
docs: 测试构建
2025-07-17 22:26:42 +08:00
ZacharyZcR
820ba6a35b
docs: 测试构建
2025-07-17 22:19:25 +08:00
ZacharyZcR
5bdfd769f2
docs: 测试构建
2025-07-17 22:14:53 +08:00
ZacharyZcR
b6b898532b
docs: 测试构建
2025-07-17 22:10:56 +08:00
ZacharyZcR
5dd74269a8
docs: 测试构建
2025-07-17 22:07:13 +08:00
ZacharyZcR
26d0955ec6
docs: 测试构建
2025-07-17 21:59:39 +08:00
ZacharyZcR
a198aeabe5
docs: 测试构建
2025-07-17 21:52:06 +08:00
ZacharyZcR
f182732a8b
docs: 测试构建
2025-07-17 21:42:49 +08:00
ZacharyZcR
b49228a07b
docs: 测试构建
2025-07-17 21:37:01 +08:00
ZacharyZcR
3af09b7d8a
docs: 测试构建
2025-07-17 21:33:36 +08:00
ZacharyZcR
379117b07a
docs: 测试构建
2025-07-17 21:26:49 +08:00
ZacharyZcR
4adb4222dd
docs: 测试构建
2025-07-17 21:23:29 +08:00