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,允许多次扫描更新配置
This commit is contained in:
ZacharyZcR
2026-04-27 21:34:42 +08:00
parent bd0986216b
commit 653f11295a
6 changed files with 23 additions and 12 deletions
+3 -6
View File
@@ -33,16 +33,13 @@ var (
// 包级POC配置
var (
pocConfigOnce sync.Once
pocDNSLog bool // DNSLog配置缓存
pocDNSLog bool // DNSLog配置缓存
)
// InitPOCConfig 初始化POC配置(在扫描开始前调用一次
// InitPOCConfig 初始化POC配置(在扫描开始前调用)
// 这样CEL回调函数可以使用包级变量而非GetGlobalConfig
func InitPOCConfig(dnsLog bool) {
pocConfigOnce.Do(func() {
pocDNSLog = dnsLog
})
pocDNSLog = dnsLog
}
// NewEnv 创建一个新的 CEL 环境(使用缓存避免重复注册函数)
+3 -1
View File
@@ -56,7 +56,9 @@ func WebScan(ctx context.Context, info *common.HostInfo, cfg *common.Config) {
if !pocLoaded {
cachedPocPath = cfg.POC.PocPath
initPocs()
pocLoaded = true
if len(allPocs) > 0 {
pocLoaded = true
}
}
pocMu.Unlock()