Skip to content

Add new data tool to the html export

Ugo Meguerditchian edited this page May 30, 2023 · 3 revisions

Getting started

OrgASM as a friendly html report that can be modified easily. For this you don't need to modify the generator.py

1 - Existing HTML objects

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"

2 - Configuration file

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.

2.2 - Table objects

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".