ZacharyZcR
d7071b7b8e
fix: -debug 日志文件写入失败,applyLogLevel 重建 Logger 时丢失 DebugLogFile 配置
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
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
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
8402be98e3
优化自适应扫描系统 & 修复 POC 调度问题
...
自适应扫描优化:
- target/ceiling 分离,自适应池可向上探索而非锁死在 target
- assessHealth 阈值按网络环境区分(LAN 收紧 / Internet 放宽)
- RTT 漂移时动态压低 target,配合 AIMD 双重降速
- 去掉 semaphore 双层流控,由 ants pool 统一反压
- 探测端口从 3 个扩充到 8 个,减少 RTT 采样偏差
- computeRetries 按环境调整目标概率和上限
Bug 修复:
- AdaptivePool.Wait() 加 10 分钟超时,防止 goroutine 卡死时永久挂起
- CEL 环境初始化失败后允许重试(sync.Once → sync.Mutex + 标志位)
- CAS 自旋加 runtime.Gosched() 退避,减少高并发下 CPU 空转
- -full 模式下 web 插件跳过 IsMarkedWebService 检查 #588
- 不确定服务补做 HTTP 回退探测,覆盖自定义框架漏网场景
- POC sets 纯字面量值跳过 CEL 编译,消除大量误报错误日志
2026-06-14 22:23:48 +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
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
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
942f0fa6c3
fix: web API 版本号改为动态获取,不再硬编码
2026-06-01 08:34:42 +08:00
ZacharyZcR
a02eed0518
refactor: mylib 重命名为 libs
...
更清晰的目录命名,libs/ 存放内嵌的独立协议实现库。
2026-06-01 08:22:13 +08:00
ZacharyZcR
019d13c9d4
chore: 版本号更新为 2.2.0-rc
...
- README/README_EN 版本标记更新
- globals.go version 常量更新
- 移除 Issue 模板中不可用的安全报告链接
2026-06-01 08:20:01 +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
40b0eee654
Remove SimpleMaxHosts limit to fix large CIDR scanning
...
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled
Closes #583
2026-05-27 16:16:42 +08:00
ZacharyZcR
8d30ee334c
Add native protocol service plugins
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled
2026-05-23 15:51:50 +08:00
ZacharyZcR
73cbe803c4
Expand i18n coverage
2026-05-23 15:18:40 +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
5942d3bbcb
preserve sdk host language state
2026-05-18 17:43:00 +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
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
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
639298b7c8
修复全部SA1006: fmt.Errorf(i18n)统一使用"%s"前缀
2026-05-18 05:17:40 +08:00
ZacharyZcR
f427f04d35
修复SA1006: fmt.Errorf(i18n.Tr)改用fmt.Errorf("%s", ...)
2026-05-18 05:08:34 +08:00
ZacharyZcR
77827bef66
修复凭证测试器计数器、消除panic、补齐i18n
...
- credential_tester: testCredentialWithRetry返回ErrorType,修复网络错误计数器永久不递增的bug
- scanner: os.Exit(1)改为return,defer Cleanup可正常执行
- probe_parser: 5处panic改为error返回,调用链透传到init()
- common库: parsers/initialize/network/session共17处硬编码中文改用i18n
- services插件: 18个文件115处硬编码中文改用i18n
- locale: 补齐service/parser/network相关~25个中英文键
2026-05-18 04:55:20 +08:00
ZacharyZcR
c266912dcb
修复10个代码缺陷: panic防护, 死锁, 密钥泄漏, 错误吞没
...
- eval_random: randomInt参数max<=min时不再panic,返回CEL错误
- scanner: 长驻插件nil/panic时兜底发送ready通道,消除死锁
- poc_executor: Ceye API密钥改为环境变量CEYE_API/CEYE_DOMAIN
- Eval: ParseResponse加入oResp.Request nil检查
- Eval: reverseCheck中http.NewRequest错误不再忽略
- poc_executor: clusterpoc中CEL表达式求值错误记录日志
- winwmi: PowerShell执行失败完整记录错误信息
- sshkey: authorized_keys读取失败处理错误
- minidump: Scan结束后释放系统DLL句柄
- Windows插件: PE文件错误消息改用i18n
2026-05-18 03:47:42 +08:00
ZacharyZcR
2f2b30763c
修复硬编码中文,迁移废弃的 uuid 依赖
...
- flag.go: -local/-perf 参数改用 i18n.GetText,checkParameterConflicts 改用 i18n.Tr
- 补齐中英文 locale 中 flag_local_plugin/flag_perf_stats/param_local_multi_plugin
- satori/go.uuid 迁移为 google/uuid (satori 已废弃)
- CI 补充 lint Go 版本说明
2026-05-18 02:43:45 +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
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
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
Ruihang Zhang and ZacharyZcR
73b0b0b822
fix: 修复大网段扫描不设置上限的问题 ( #581 )
...
测试构建 / 代码检查 (push) Has been cancelled
测试构建 / 单元测试和构建 (push) Has been cancelled
测试构建 / 构建验证 (push) Has been cancelled
* fix: 修复大网段扫描不设置上限的问题
修复三处关键Bug:
1. parseIPFullRange() - 修复逻辑错误
- 问题:当maxTargets=-1时,count >= -1 导致只返回1个IP
- 修复:添加maxTargets > 0检查条件
2. parseIPShortRange() - 添加maxTargets参数支持
- 问题:短格式范围(如192.168.1.1-254)无法被限制
- 修复:添加maxTargets参数并在循环中检查
3. parseIPRangeString() - 修复调用传参遗漏
- 问题:调用parseIPShortRange()未传递maxTargets
- 修复:传入maxTargets参数
改进点:
- 大网段解析(如10.0.0.0/8)现在正确处理不超限的情况
- IP范围解析完整性验证
- 添加详细的bug报告和修复文档
* fix parser range limit handling
---------
Co-authored-by: ZacharyZcR <[email protected] >
2026-05-14 21:45:42 +08:00