-
Notifications
You must be signed in to change notification settings - Fork 5
Add new data tool to the html export
OrgASM as a friendly html report that can be modified easily. For this you don't need to modify the generator.py
There are 3 HTML objects that actually exist :
- A list object
- A table with on key and multiple items
- A table with a dict and muliple keys
The list object need a list.
The table with one key and multiple items need this form :
{
'192.168.1.1': {'ports': ['80', '443'], 'fqdns': ['test.com', 'test2.com']},
'192.168.1.2': {'ports': ['80', '443'], 'fqdns': ['test.com', 'test2.com']},
}
The table with a dict and muliple keys need this form :
{
"ip1": {[{Name:name, Severity:severity...}, {Name:name, Severity:severity...}, ...]}
"ip2": {[{Name:name, Severity:severity...}, {Name:name, Severity:severity...}, ...]}
"fqdn": {[{Name:name, Severity:severity...}, {Name:name, Severity:severity...}, ...]}
}
So in configuration file :
- For a list : style:"list"
- For a table with one key and multiple items : style:"table"
- For a table with a dict and keys with items : style:"table_mutli"
The configuration file contains the architecture of your website export inside the 'WEB' section :
WEB : #export
activate : True
initial_scan:
depends_on : null
style: "table"
collumns: ["IP","FQDNs"]
name: "Attack Surface"
tab: "IPs - FQDNs"
mapper: "initial_scan"
deads :
depends_on : null
style: "list"
name: "Deads FQDNs"
tab: "IPs - FQDNs"
mapper: "deads"
ports_scanner:
depends_on : null
style: "table"
collumns: ["IP", "Ports"]
name: "Ports & Services"
tab: "Ports - Services"
mapper: "return_ports"
detect_services:
collumns: ["Services"]
depends_on : "ports_scanner"
mapper: "return_services"
analyze_web_techno:
depends_on : null
tab: "Web Technologies"
name: "Web Technologies"
style: "table"
collumns: ["Url", "IP", "Technologies", "Version", "Headers"]
mapper: "return_web_techno"
nuclei:
depends_on : null
tab: "Vulnerabilities"
name: "Nuclei"
style: "table_multi"
collumns: ["IP|FQDN", "Name", "Severity", "Cve-id", "Cwe-id", "Cvss-metrics", "Cvss-score", "Description", "Reference", "Type", "Host", "Matched-at", "Extracted-results", "Ip", "Timestamp", "curl-command", "matcher-status", "matched-line", "matcher-name", "Tags", "template", "template-url", "template-id", "template-path", "Author"]
mapper: "return_nuclei"
As you can see there few option possible.
First the web export can be activated or not.
Then each tools has his part.
A tool can "depends_on" another one. If a tool depends on nothing then the 'name' object is mandatory.
Let's take a look at the 'deads' tool :
deads :
depends_on : null
style: "list"
name: "Deads FQDNs"
tab: "IPs - FQDNs"
mapper: "deads"
Here the tool depends on nothing, The style is a 'list'. The name of the object is 'Deads FQDNs' and it will be on the tab 'IPs - FQDNs'. The data to use will be given by the mapper 'deads'.
Now let's take a look at the ports_scanner and his child detect_services :
ports_scanner:
depends_on : null
style: "table"
collumns: ["IP", "Ports"]
name: "Ports & Services"
tab: "Ports - Services"
mapper: "return_ports"
detect_services:
collumns: ["Services"]
depends_on : "ports_scanner"
mapper: "return_services"
Here the tool ports_scanner his a table inside the tab 'Ports - Service' and use the mapper 'return-ports'.
detect_services depends_on ports_scanner so it doens't have a name either a tab. Instead his data will be added to the table of ports_scanner.
The table objects need a collumns object :
ports_scanner:
depends_on : null
style: "table"
collumns: ["IP", "Ports"]
The collumns object will determine (as you can imagine) the collumns of the table on the HTML export. The first key, like for this example above "IP" is related to the root items of the dict you returned example :
return_dict_of_ports_scanner={
"1.1.1.1":{
"Ports":[80,443]
}
}
In this case in the collumn "IP" of the table, there will be "1.1.1.1" and so on if more root items is given.
Then the "Ports" in collumns will search inside the dict for "Ports" inside "1.1.1.1".