Made irr default for reporting + misc on new fields

This commit is contained in:
Ice3man543 2021-09-09 18:53:55 +05:30
parent 6192c97d40
commit e683212bb8
10 changed files with 37 additions and 26 deletions

View File

@ -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")
} }

View 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)
} }

View File

@ -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,

View File

@ -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
} }

View File

@ -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
} }

View File

@ -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
} }

View File

@ -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
} }

View File

@ -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
} }

View File

@ -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
} }

View File

@ -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)
}
}