fix: 修复 #591 POC 对 HTTPS 端口误用 HTTP + #592 空指针 panic

1. buildTargetURL 对 443/8443 等已知 TLS 端口默认使用 https scheme,
   webtitle 触发 POC 扫描前将检测到的协议写回 info.URL,
   避免对 HTTPS 服务发送 HTTP 请求导致 EOF
2. GetInfo 添加 probe nil 检查,防止探针初始化失败时空指针 panic
3. 删除 test-nuclei-example.yaml 测试模板,避免 robots.txt 误报
This commit is contained in:
ZacharyZcR
2026-06-27 16:23:52 +08:00
parent 4976cb1f6b
commit 4922122530
4 changed files with 19 additions and 27 deletions
+4
View File
@@ -392,6 +392,10 @@ func (i *Info) tryProbes(response []byte, probes []*Probe) bool {
// GetInfo 分析响应数据并提取服务信息
func (i *Info) GetInfo(response []byte, probe *Probe) {
if probe == nil {
return
}
// 响应数据有效性检查
if len(response) <= 0 {
common.LogDebug(i18n.GetText("service_probe_empty_response"))
+1
View File
@@ -270,6 +270,7 @@ func (p *WebTitlePlugin) identifyFingerprintsMulti(ctx context.Context, info *co
// 非全量模式下,基于指纹触发POC扫描
if !config.POC.Full && !config.POC.Disabled {
info.URL = baseURL
p.triggerPocScan(ctx, info, fingerprints, config, session)
}
-26
View File
@@ -1,26 +0,0 @@
id: test-nuclei-example
info:
name: Test Nuclei Example Template
author: fscan-dev
severity: info
description: |
This is a test template to demonstrate Nuclei format support in fscan.
It will be automatically converted to fscan format during loading.
reference:
- https://github.com/shadow1ng/fscan
http:
- method: GET
path:
- "{{BaseURL}}/robots.txt"
matchers:
- type: word
words:
- "User-agent"
- "Disallow"
condition: and
- type: status
status:
- 200
+14 -1
View File
@@ -97,7 +97,11 @@ func WebScan(ctx context.Context, info *common.HostInfo, cfg *common.Config, ses
func buildTargetURL(info *common.HostInfo) (string, error) {
// 自动构建URL
if info.URL == "" {
info.URL = protocolHTTP + net.JoinHostPort(info.Host, fmt.Sprint(info.Port))
protocol := protocolHTTP
if isTLSPort(info.Port) {
protocol = protocolHTTPS
}
info.URL = protocol + net.JoinHostPort(info.Host, fmt.Sprint(info.Port))
} else if !hasProtocolPrefix(info.URL) {
info.URL = protocolHTTP + normalizeSchemelessWebTarget(info.URL)
}
@@ -132,6 +136,15 @@ func hasProtocolPrefix(urlStr string) bool {
return strings.HasPrefix(urlStr, protocolHTTP) || strings.HasPrefix(urlStr, protocolHTTPS)
}
func isTLSPort(port int) bool {
switch port {
case 443, 8443, 4443, 9443:
return true
default:
return false
}
}
func normalizeSchemelessWebTarget(rawURL string) string {
authority := rawURL
suffix := ""