mirror of
https://github.com/projectdiscovery/nuclei.git
synced 2025-12-17 21:25:27 +00:00
Made irr default for reporting + misc on new fields
This commit is contained in:
parent
6192c97d40
commit
e683212bb8
@ -189,7 +189,7 @@ func New(options *types.Options) (*Runner, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create the output file if asked
|
// Create the output file if asked
|
||||||
outputWriter, err := output.NewStandardWriter(!options.NoColor, options.NoMeta, options.NoTimestamp, options.JSON, options.Output, options.TraceLogFile)
|
outputWriter, err := output.NewStandardWriter(!options.NoColor, options.NoMeta, options.NoTimestamp, options.JSON, options.JSONRequests, options.Output, options.TraceLogFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "could not create output file")
|
return nil, errors.Wrap(err, "could not create output file")
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,5 +6,9 @@ import (
|
|||||||
|
|
||||||
// formatJSON formats the output for json based formatting
|
// formatJSON formats the output for json based formatting
|
||||||
func (w *StandardWriter) formatJSON(output *ResultEvent) ([]byte, error) {
|
func (w *StandardWriter) formatJSON(output *ResultEvent) ([]byte, error) {
|
||||||
|
if !w.jsonReqResp { // don't show request-response in json if not asked
|
||||||
|
output.Request = ""
|
||||||
|
output.Response = ""
|
||||||
|
}
|
||||||
return jsoniter.Marshal(output)
|
return jsoniter.Marshal(output)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -33,6 +33,7 @@ type Writer interface {
|
|||||||
// StandardWriter is a writer writing output to file and screen for results.
|
// StandardWriter is a writer writing output to file and screen for results.
|
||||||
type StandardWriter struct {
|
type StandardWriter struct {
|
||||||
json bool
|
json bool
|
||||||
|
jsonReqResp bool
|
||||||
noTimestamp bool
|
noTimestamp bool
|
||||||
noMetadata bool
|
noMetadata bool
|
||||||
aurora aurora.Aurora
|
aurora aurora.Aurora
|
||||||
@ -94,7 +95,7 @@ type ResultEvent struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewStandardWriter creates a new output writer based on user configurations
|
// NewStandardWriter creates a new output writer based on user configurations
|
||||||
func NewStandardWriter(colors, noMetadata, noTimestamp, json bool, file, traceFile string) (*StandardWriter, error) {
|
func NewStandardWriter(colors, noMetadata, noTimestamp, json, jsonReqResp bool, file, traceFile string) (*StandardWriter, error) {
|
||||||
auroraColorizer := aurora.NewAurora(colors)
|
auroraColorizer := aurora.NewAurora(colors)
|
||||||
|
|
||||||
var outputFile *fileWriter
|
var outputFile *fileWriter
|
||||||
@ -115,6 +116,7 @@ func NewStandardWriter(colors, noMetadata, noTimestamp, json bool, file, traceFi
|
|||||||
}
|
}
|
||||||
writer := &StandardWriter{
|
writer := &StandardWriter{
|
||||||
json: json,
|
json: json,
|
||||||
|
jsonReqResp: jsonReqResp,
|
||||||
noMetadata: noMetadata,
|
noMetadata: noMetadata,
|
||||||
noTimestamp: noTimestamp,
|
noTimestamp: noTimestamp,
|
||||||
aurora: auroraColorizer,
|
aurora: auroraColorizer,
|
||||||
|
|||||||
@ -147,10 +147,8 @@ func (r *Request) makeResultEventItem(wrapped *output.InternalWrappedEvent) *out
|
|||||||
Matched: types.ToString(wrapped.InternalEvent["matched"]),
|
Matched: types.ToString(wrapped.InternalEvent["matched"]),
|
||||||
ExtractedResults: wrapped.OperatorsResult.OutputExtracts,
|
ExtractedResults: wrapped.OperatorsResult.OutputExtracts,
|
||||||
Timestamp: time.Now(),
|
Timestamp: time.Now(),
|
||||||
}
|
Request: types.ToString(wrapped.InternalEvent["request"]),
|
||||||
if r.options.Options.JSONRequests {
|
Response: types.ToString(wrapped.InternalEvent["raw"]),
|
||||||
data.Request = types.ToString(wrapped.InternalEvent["request"])
|
|
||||||
data.Response = types.ToString(wrapped.InternalEvent["raw"])
|
|
||||||
}
|
}
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|||||||
@ -143,10 +143,8 @@ func (r *Request) makeResultEventItem(wrapped *output.InternalWrappedEvent) *out
|
|||||||
Matched: types.ToString(wrapped.InternalEvent["matched"]),
|
Matched: types.ToString(wrapped.InternalEvent["matched"]),
|
||||||
Host: types.ToString(wrapped.InternalEvent["matched"]),
|
Host: types.ToString(wrapped.InternalEvent["matched"]),
|
||||||
ExtractedResults: wrapped.OperatorsResult.OutputExtracts,
|
ExtractedResults: wrapped.OperatorsResult.OutputExtracts,
|
||||||
|
Response: types.ToString(wrapped.InternalEvent["raw"]),
|
||||||
Timestamp: time.Now(),
|
Timestamp: time.Now(),
|
||||||
}
|
}
|
||||||
if r.options.Options.JSONRequests {
|
|
||||||
data.Response = types.ToString(wrapped.InternalEvent["raw"])
|
|
||||||
}
|
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|||||||
@ -116,10 +116,8 @@ func (r *Request) makeResultEventItem(wrapped *output.InternalWrappedEvent) *out
|
|||||||
ExtractedResults: wrapped.OperatorsResult.OutputExtracts,
|
ExtractedResults: wrapped.OperatorsResult.OutputExtracts,
|
||||||
Timestamp: time.Now(),
|
Timestamp: time.Now(),
|
||||||
IP: types.ToString(wrapped.InternalEvent["ip"]),
|
IP: types.ToString(wrapped.InternalEvent["ip"]),
|
||||||
}
|
Request: types.ToString(wrapped.InternalEvent["request"]),
|
||||||
if r.options.Options.JSONRequests {
|
Response: types.ToString(wrapped.InternalEvent["data"]),
|
||||||
data.Request = types.ToString(wrapped.InternalEvent["request"])
|
|
||||||
data.Response = types.ToString(wrapped.InternalEvent["data"])
|
|
||||||
}
|
}
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|||||||
@ -154,10 +154,8 @@ func (r *Request) makeResultEventItem(wrapped *output.InternalWrappedEvent) *out
|
|||||||
ExtractedResults: wrapped.OperatorsResult.OutputExtracts,
|
ExtractedResults: wrapped.OperatorsResult.OutputExtracts,
|
||||||
Timestamp: time.Now(),
|
Timestamp: time.Now(),
|
||||||
IP: types.ToString(wrapped.InternalEvent["ip"]),
|
IP: types.ToString(wrapped.InternalEvent["ip"]),
|
||||||
}
|
Request: types.ToString(wrapped.InternalEvent["request"]),
|
||||||
if r.options.Options.JSONRequests {
|
Response: types.ToString(wrapped.InternalEvent["response"]),
|
||||||
data.Request = types.ToString(wrapped.InternalEvent["request"])
|
|
||||||
data.Response = types.ToString(wrapped.InternalEvent["response"])
|
|
||||||
}
|
}
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|||||||
@ -118,10 +118,8 @@ func (r *Request) makeResultEventItem(wrapped *output.InternalWrappedEvent) *out
|
|||||||
Metadata: wrapped.OperatorsResult.PayloadValues,
|
Metadata: wrapped.OperatorsResult.PayloadValues,
|
||||||
Timestamp: time.Now(),
|
Timestamp: time.Now(),
|
||||||
IP: types.ToString(wrapped.InternalEvent["ip"]),
|
IP: types.ToString(wrapped.InternalEvent["ip"]),
|
||||||
}
|
Request: types.ToString(wrapped.InternalEvent["request"]),
|
||||||
if r.options.Options.JSONRequests {
|
Response: types.ToString(wrapped.InternalEvent["data"]),
|
||||||
data.Request = types.ToString(wrapped.InternalEvent["request"])
|
|
||||||
data.Response = types.ToString(wrapped.InternalEvent["data"])
|
|
||||||
}
|
}
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|||||||
@ -145,10 +145,8 @@ func (r *Request) makeResultEventItem(wrapped *output.InternalWrappedEvent) *out
|
|||||||
Metadata: wrapped.OperatorsResult.PayloadValues,
|
Metadata: wrapped.OperatorsResult.PayloadValues,
|
||||||
ExtractedResults: wrapped.OperatorsResult.OutputExtracts,
|
ExtractedResults: wrapped.OperatorsResult.OutputExtracts,
|
||||||
IP: types.ToString(wrapped.InternalEvent["ip"]),
|
IP: types.ToString(wrapped.InternalEvent["ip"]),
|
||||||
}
|
Request: types.ToString(wrapped.InternalEvent["request"]),
|
||||||
if r.options.Options.JSONRequests {
|
Response: types.ToString(wrapped.InternalEvent["raw"]),
|
||||||
data.Request = types.ToString(wrapped.InternalEvent["request"])
|
|
||||||
data.Response = types.ToString(wrapped.InternalEvent["raw"])
|
|
||||||
}
|
}
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|||||||
@ -165,7 +165,9 @@ func ToMarkdownTableString(templateInfo *model.Info) string {
|
|||||||
|
|
||||||
classification := templateInfo.Classification
|
classification := templateInfo.Classification
|
||||||
if classification != nil {
|
if classification != nil {
|
||||||
fields.Set("CVSS-Metrics", classification.CVSSMetrics)
|
if classification.CVSSMetrics != "" {
|
||||||
|
generateCVSSMetricsFromClassification(classification, fields)
|
||||||
|
}
|
||||||
fields.Set("CVE-ID", classification.CVEID.String())
|
fields.Set("CVE-ID", classification.CVEID.String())
|
||||||
fields.Set("CWE-ID", classification.CWEID.String())
|
fields.Set("CWE-ID", classification.CWEID.String())
|
||||||
fields.Set("CVSS-Score", strconv.FormatFloat(classification.CVSSScore, 'f', 2, 64))
|
fields.Set("CVSS-Score", strconv.FormatFloat(classification.CVSSScore, 'f', 2, 64))
|
||||||
@ -186,3 +188,18 @@ func ToMarkdownTableString(templateInfo *model.Info) string {
|
|||||||
|
|
||||||
return builder.String()
|
return builder.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func generateCVSSMetricsFromClassification(classification *model.Classification, fields *utils.InsertionOrderedStringMap) {
|
||||||
|
// Generate cvss link
|
||||||
|
var cvssLinkPrefix string
|
||||||
|
if strings.Contains(classification.CVSSMetrics, "CVSS:3.0") {
|
||||||
|
cvssLinkPrefix = "https://www.first.org/cvss/calculator/3.0#"
|
||||||
|
} else if strings.Contains(classification.CVSSMetrics, "CVSS:3.1") {
|
||||||
|
cvssLinkPrefix = "https://www.first.org/cvss/calculator/3.1#"
|
||||||
|
}
|
||||||
|
if cvssLinkPrefix != "" {
|
||||||
|
fields.Set("CVSS-Metrics", fmt.Sprintf("[%s](%s%s)", classification.CVSSMetrics, cvssLinkPrefix, classification.CVSSMetrics))
|
||||||
|
} else {
|
||||||
|
fields.Set("CVSS-Metrics", classification.CVSSMetrics)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user