mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-22 03:10:42 +08:00
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:
@@ -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"))
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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 := ""
|
||||
|
||||
Reference in New Issue
Block a user