Skip to content

Events

An Event is a piece of data discovered by BBOT. Examples include IP_ADDRESS, DNS_NAME, EMAIL_ADDRESS, URL, etc. When you run a BBOT scan, events are constantly being exchanged between modules. They are also output to the console:

[DNS_NAME]      www.evilcorp.com    sslcert         (distance-0, in-scope, resolved, subdomain, a-record)
 ^^^^^^^^       ^^^^^^^^^^^^^^^^    ^^^^^^^          ^^^^^^^^^^
event type      event data          source module    tags

Event Attributes

Each BBOT event has the following attributes. Not all of these attributes are visible in the terminal output. However, they are always saved in output.json in the scan output folder. If you want to see them on the terminal, you can use --json.

  • .type: the event type (e.g. DNS_NAME, IP_ADDRESS, OPEN_TCP_PORT, etc.)
  • .id: an identifier representing the event type + a SHA1 hash of its data (note: multiple events can have the same .id)
  • .uuid: a universally unique identifier for the event (e.g. DNS_NAME:6c96d512-090a-47f0-82e4-6860e46aac13)
  • .scope_description: describes the scope of the event (e.g. in-scope, affiliate, distance-2)
  • .data: the actual discovered data (for some events like DNS_NAME or IP_ADDRESS, this is a string. For other more complex events like HTTP_RESPONSE, it's a dictionary)
  • .host: the hostname or IP address (e.g. evilcorp.com or 1.2.3.4)
  • .port: the port number (e.g. 80, 443)
  • .netloc: the network location, including both the hostname and port (e.g. www.evilcorp.com:443)
  • .resolved_hosts: a list of all resolved hosts for the event (A, AAAA, and CNAME records)
  • .dns_children: a dictionary of all DNS records for the event (typically only present on DNS_NAME)
  • .web_spider_distance: a count of how many URL links have been followed in a row to get to this event
  • .scope_distance: a count of how many hops it is from the main scope (0 == in-scope)
  • .scan: the ID of the scan that produced the event
  • .timestamp: the date/time when the event was discovered
  • .parent: the ID of the parent event that led to the discovery of this event
  • .parent_uuid: the universally unique identifier for the parent event
  • .tags: a list of tags describing the event (e.g. mx-record, http-title, etc.)
  • .module: the module that discovered the event
  • .module_sequence: the recent sequence of modules that were executed to discover the event (including omitted events)
  • .discovery_context: a description of the context in which the event was discovered
  • .discovery_path: a list of every discovery context leading to this event
  • .parent_chain: a list of every event UUID leading to the discovery of this event (corresponds exactly to .discovery_path)

These attributes allow us to construct a visual graph of events (e.g. in Neo4j) and query/filter/grep them more easily. Here is what a typical event looks like in JSON format:

{
  "type": "DNS_NAME",
  "id": "DNS_NAME:33bc005c2bdfea4d73e07db733bd11861cf6520e",
  "uuid": "DNS_NAME:6c96d512-090a-47f0-82e4-6860e46aac13",
  "scope_description": "in-scope",
  "data": "link.evilcorp.com",
  "host": "link.evilcorp.com",
  "resolved_hosts": [
    "184.31.52.65",
    "2600:1402:b800:d82::700",
    "2600:1402:b800:d87::700",
    "link.evilcorp.com.edgekey.net"
  ],
  "dns_children": {
    "A": [
      "184.31.52.65"
    ],
    "AAAA": [
      "2600:1402:b800:d82::700",
      "2600:1402:b800:d87::700"
    ],
    "CNAME": [
      "link.evilcorp.com.edgekey.net"
    ]
  },
  "web_spider_distance": 0,
  "scope_distance": 0,
  "scan": "SCAN:b6ef48bc036bc8d001595ae5061846a7e6beadb6",
  "timestamp": "2024-10-18T15:40:13.716880+00:00",
  "parent": "DNS_NAME:94c92b7eaed431b37ae2a757fec4e678cc3bd213",
  "parent_uuid": "DNS_NAME:c737dffa-d4f0-4b6e-a72d-cc8c05bd892e",
  "tags": [
    "subdomain",
    "a-record",
    "cdn-akamai",
    "in-scope",
    "cname-record",
    "aaaa-record"
  ],
  "module": "speculate",
  "module_sequence": "speculate->speculate",
  "discovery_context": "speculated parent DNS_NAME: link.evilcorp.com",
  "discovery_path": [
    "Scan insidious_frederick seeded with DNS_NAME: evilcorp.com",
    "TXT record for evilcorp.com contains IP_ADDRESS: 149.72.247.52",
    "PTR record for 149.72.247.52 contains DNS_NAME: o1.ptr2410.link.evilcorp.com",
    "speculated parent DNS_NAME: ptr2410.link.evilcorp.com",
    "speculated parent DNS_NAME: link.evilcorp.com"
  ],
  "parent_chain": [
    "DNS_NAME:34c657a3-0bfa-457e-9e6e-0f22f04b8da5",
    "IP_ADDRESS:efc0fb3b-1b42-44da-916e-83db2360e10e",
    "DNS_NAME:c737dffa-d4f0-4b6e-a72d-cc8c05bd892e",
    "DNS_NAME_UNRESOLVED:722a3473-30c6-40f1-90aa-908d47105d5a",
    "DNS_NAME:6c96d512-090a-47f0-82e4-6860e46aac13"
  ]
}

For a more detailed description of BBOT events, see Developer Documentation - Event.

Below is a full list of event types along with which modules produce/consume them.

List of Event Types

Event Type # Consuming Modules # Producing Modules Consuming Modules Producing Modules
* 18 0 affiliates, cloudcheck, csv, discord, dnsresolve, http, json, mysql, neo4j, postgres, python, slack, splunk, sqlite, stdout, teams, txt, websocket
ASN 0 1 asn
AZURE_TENANT 1 0 speculate
CODE_REPOSITORY 7 7 docker_pull, git_clone, gitdumper, github_workflows, google_playstore, postman_download, trufflehog code_repository, dockerhub, git, github_codesearch, github_org, gitlab, postman
DNS_NAME 61 44 anubisdb, asset_inventory, azure_realm, azure_tenant, baddns, baddns_zone, bevigil, binaryedge, bucket_amazon, bucket_azure, bucket_digitalocean, bucket_firebase, bucket_google, bufferoverrun, builtwith, c99, censys, certspotter, chaos, credshed, crt, crt_db, dehashed, digitorus, dnsbimi, dnsbrute, dnsbrute_mutations, dnscaa, dnscommonsrv, dnsdumpster, dnstlsrpt, emailformat, fullhunt, github_codesearch, hackertarget, hunterio, leakix, myssl, nmap_xml, oauth, otx, passivetotal, pgp, portscan, rapiddns, securitytrails, securitytxt, shodan_dns, shodan_idb, sitedossier, skymem, speculate, subdomaincenter, subdomainradar, subdomains, trickest, urlscan, viewdns, virustotal, wayback, zoomeye anubisdb, azure_tenant, bevigil, binaryedge, bufferoverrun, builtwith, c99, censys, certspotter, chaos, crt, crt_db, digitorus, dnsbrute, dnsbrute_mutations, dnscaa, dnscommonsrv, dnsdumpster, dnsresolve, fullhunt, hackertarget, hunterio, leakix, myssl, ntlm, oauth, otx, passivetotal, rapiddns, securitytrails, shodan_dns, shodan_idb, sitedossier, speculate, sslcert, subdomaincenter, subdomainradar, trickest, urlscan, vhost, viewdns, virustotal, wayback, zoomeye
DNS_NAME_UNRESOLVED 3 0 baddns, speculate, subdomains
EMAIL_ADDRESS 1 10 emails credshed, dehashed, dnscaa, dnstlsrpt, emailformat, hunterio, pgp, securitytxt, skymem, sslcert
FILESYSTEM 4 9 extractous, jadx, trufflehog, unarchive apkpure, docker_pull, filedownload, git_clone, gitdumper, github_workflows, jadx, postman_download, unarchive
FINDING 2 28 asset_inventory, web_report ajaxpro, baddns, baddns_direct, baddns_zone, badsecrets, bucket_amazon, bucket_azure, bucket_digitalocean, bucket_firebase, bucket_google, bypass403, dastardly, git, gitlab, host_header, hunt, newsletters, ntlm, nuclei, paramminer_cookies, paramminer_getparams, shodan_idb, smuggler, speculate, telerik, trufflehog, url_manipulation, wpscan
GEOLOCATION 0 2 ip2location, ipstack
HASHED_PASSWORD 0 2 credshed, dehashed
HTTP_RESPONSE 20 1 ajaxpro, asset_inventory, badsecrets, dastardly, dotnetnuke, excavate, filedownload, gitlab, host_header, newsletters, nmap_xml, ntlm, paramminer_cookies, paramminer_getparams, paramminer_headers, speculate, telerik, trufflehog, wappalyzer, wpscan httpx
IP_ADDRESS 9 4 asn, asset_inventory, ip2location, ipneighbor, ipstack, nmap_xml, portscan, shodan_idb, speculate asset_inventory, dnsresolve, ipneighbor, speculate
IP_RANGE 2 0 portscan, speculate
MOBILE_APP 1 1 apkpure google_playstore
OPEN_TCP_PORT 6 4 asset_inventory, fingerprintx, httpx, nmap_xml, portfilter, sslcert asset_inventory, portscan, shodan_idb, speculate
ORG_STUB 4 1 dockerhub, github_org, google_playstore, postman speculate
PASSWORD 0 2 credshed, dehashed
PROTOCOL 1 1 nmap_xml fingerprintx
RAW_DNS_RECORD 0 3 dnsbimi, dnsresolve, dnstlsrpt
RAW_TEXT 2 1 excavate, trufflehog extractous
SOCIAL 6 3 dockerhub, github_org, gitlab, gowitness, postman, speculate dockerhub, gitlab, social
STORAGE_BUCKET 8 5 baddns_direct, bucket_amazon, bucket_azure, bucket_digitalocean, bucket_file_enum, bucket_firebase, bucket_google, speculate bucket_amazon, bucket_azure, bucket_digitalocean, bucket_firebase, bucket_google
TECHNOLOGY 4 8 asset_inventory, gitlab, web_report, wpscan badsecrets, dotnetnuke, gitlab, gowitness, nuclei, shodan_idb, wappalyzer, wpscan
URL 21 2 ajaxpro, asset_inventory, baddns_direct, bypass403, ffuf, generic_ssrf, git, gowitness, httpx, iis_shortnames, ntlm, nuclei, portfilter, robots, smuggler, speculate, telerik, url_manipulation, vhost, wafw00f, web_report gowitness, httpx
URL_HINT 1 1 ffuf_shortnames iis_shortnames
URL_UNVERIFIED 7 18 code_repository, filedownload, httpx, oauth, portfilter, social, speculate azure_realm, bevigil, bucket_file_enum, dnsbimi, dnscaa, dnstlsrpt, dockerhub, excavate, ffuf, ffuf_shortnames, github_codesearch, gowitness, hunterio, robots, securitytxt, urlscan, wayback, wpscan
USERNAME 1 2 speculate credshed, dehashed
VHOST 1 1 web_report vhost
VULNERABILITY 2 13 asset_inventory, web_report ajaxpro, baddns, baddns_direct, baddns_zone, badsecrets, dastardly, dotnetnuke, generic_ssrf, nuclei, shodan_idb, telerik, trufflehog, wpscan
WAF 1 1 asset_inventory wafw00f
WEBSCREENSHOT 0 1 gowitness
WEB_PARAMETER 5 4 hunt, paramminer_cookies, paramminer_getparams, paramminer_headers, web_parameters excavate, paramminer_cookies, paramminer_getparams, paramminer_headers

Findings Vs. Vulnerabilities

BBOT has a sharp distinction between Findings and Vulnerabilities:

VULNERABILITY

  • There's a higher standard for what is allowed to be a vulnerability. They should be considered confirmed and actionable - no additional confirmation required
  • They are always assigned a severity. The possible severities are: LOW, MEDIUM, HIGH, or CRITICAL

FINDING

  • Findings can range anywhere from "slightly interesting behavior" to "likely, but unconfirmed vulnerability"
  • Are often false positives

By making this separation, actionable vulnerabilities can be identified quickly in the midst of a large scan