Skip to content

Commit 5e5e030

Browse files
author
Heiko Kiesel
committed
Adjust db query to output subdomains even if no relations exist
Signed-off-by: Heiko Kiesel <heiko.kiesel@iteratec.com>
1 parent fbf1057 commit 5e5e030

1 file changed

Lines changed: 23 additions & 25 deletions

File tree

scanners/amass/parser/parser.js

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const fs = require('fs');
77
const path = require('path');
88
const os = require('os');
99

10-
async function checkifTableExists(db){
10+
async function checkifTableExists(db) {
1111
const query = `select count(*) from sqlite_master m where m.name="assets" OR m.name="relations"`
1212

1313
return new Promise((resolve, reject) => {
@@ -41,43 +41,41 @@ async function openDatabase(fileContent) {
4141
async function parse(fileContent) {
4242
const db = await openDatabase(fileContent);
4343
const tableExists = await checkifTableExists(db);
44-
if(!tableExists) return [];
44+
if (!tableExists) return [];
4545

4646
return new Promise((resolve, reject) => {
4747

4848
const query = `
4949
WITH relation_chain AS (
50-
SELECT
51-
fqdn.content AS subdomain,
52-
ips.content AS ip,
53-
cidr.content AS cidr,
54-
asn.id AS asn_id,
55-
asn.content AS asn
50+
SELECT
51+
fqdn.content AS subdomain,
52+
ips.content AS ip,
53+
cidr.content AS cidr,
54+
asn.id AS asn_id,
55+
asn.content AS asn
5656
FROM assets fqdn
57-
58-
JOIN relations r1 ON fqdn.id = r1.from_asset_id AND (r1.type = 'a_record' OR r1.type = 'aaaa_record')
59-
JOIN assets ips ON r1.to_asset_id = ips.id
60-
61-
JOIN relations r2 ON ips.id = r2.to_asset_id AND r2.type = 'contains'
62-
JOIN assets cidr ON r2.from_asset_id = cidr.id
63-
64-
JOIN relations r3 ON cidr.id = r3.to_asset_id AND r3.type = 'announces'
65-
JOIN assets asn ON r3.from_asset_id = asn.id
66-
67-
WHERE fqdn.type = 'FQDN'
68-
)
6957
70-
SELECT
58+
LEFT JOIN relations r1 ON fqdn.id = r1.from_asset_id AND (r1.type = 'a_record' OR r1.type = 'aaaa_record')
59+
LEFT JOIN assets ips ON r1.to_asset_id = ips.id
60+
61+
LEFT JOIN relations r2 ON ips.id = r2.to_asset_id AND r2.type = 'contains'
62+
LEFT JOIN assets cidr ON r2.from_asset_id = cidr.id
63+
64+
LEFT JOIN relations r3 ON cidr.id = r3.to_asset_id AND r3.type = 'announces'
65+
LEFT JOIN assets asn ON r3.from_asset_id = asn.id
66+
67+
WHERE fqdn.type = 'FQDN'
68+
)
69+
SELECT
7170
rc.subdomain,
7271
rc.ip,
7372
rc.cidr,
7473
rc.asn,
7574
a.content AS managed_by,
7675
(SELECT content FROM assets WHERE id = 1) AS domain
77-
78-
FROM relation_chain rc
79-
JOIN relations r ON rc.asn_id = r.from_asset_id AND r.type = 'managed_by'
80-
JOIN assets a ON r.to_asset_id = a.id;`;
76+
FROM relation_chain rc
77+
LEFT JOIN relations r ON rc.asn_id = r.from_asset_id AND r.type = 'managed_by'
78+
LEFT JOIN assets a ON r.to_asset_id = a.id;`;
8179

8280
db.all(query, [], (err, rows) => {
8381
if (err) {

0 commit comments

Comments
 (0)