diff --git a/create_dbs.py b/create_dbs.py index 2fab322..dabb3fa 100644 --- a/create_dbs.py +++ b/create_dbs.py @@ -9,4 +9,5 @@ from libs.sql import * if __name__ == "__main__": db_name = "weirdAAL.db" create_awskey_table(db_name, "AWSKey") - create_recon_table(db_name, "recon") \ No newline at end of file + create_recon_table(db_name, "recon") + create_services_table(db_name,"services") \ No newline at end of file diff --git a/libs/brute.py b/libs/brute.py index ec27ca1..b79631d 100644 --- a/libs/brute.py +++ b/libs/brute.py @@ -124,7 +124,7 @@ def generic_permission_bruteforcer(service, tests): db_logger = [] for action in actions: - db_logger.append([service, action, AWS_ACCESS_KEY_ID, timenow]) + db_logger.append([service, action, AWS_ACCESS_KEY_ID, datetime.datetime.now()]) # print (db_logger) # scrapped the json logging idea but keeping it here just in case @@ -161,7 +161,7 @@ def generic_permission_bruteforcer_region(service, tests, region_passed): db_logger = [] for action in actions: - db_logger.append([service, action, AWS_ACCESS_KEY_ID, timenow]) + db_logger.append([service, action, AWS_ACCESS_KEY_ID, datetime.datetime.now()]) # print (db_logger) # scrapped the json logging idea but keeping it here just in case diff --git a/libs/sql.py b/libs/sql.py index bf3fa58..ce259c9 100644 --- a/libs/sql.py +++ b/libs/sql.py @@ -33,7 +33,7 @@ def create_recon_table(db_name, table_name): service text, sub_service text, AWSKeyID text, - checked_at text, + checked_at timestamp, PRIMARY KEY (ID))""" #FOREIGN KEY (AWSKeyID) references AWSKey(ID))""" create_table(db_name,table_name,sql) @@ -48,6 +48,18 @@ def create_awskey_table(db_name, table_name): create_table(db_name,table_name,sql) print ("created table: {}".format(table_name)) +def create_services_table(db_name, table_name): + sql = """CREATE TABLE services + (ID integer, + AWSKeyID Text, + service text, + sub_service text, + sub_service_data text, + checked_at timestamp, + PRIMARY KEY(ID))""" + create_table(db_name,table_name,sql) + print ("created table: {}".format(table_name)) + def insert_awskey_data(db_name, records): sql = """INSERT INTO AWSKey(AWSKeyID, Description) VALUES (?,?)""" @@ -62,7 +74,7 @@ def insert_reconservice_data(db_name, records): def search_recon_by_key(db_name,AWSKeyID): with sqlite3.connect(db_name) as db: cursor = db.cursor() - cursor.execute("""SELECT service,sub_service FROM recon WHERE AWSKeyID=?""",(AWSKeyID,)) + cursor.execute("""SELECT service,sub_service,checked_at FROM recon WHERE AWSKeyID=? ORDER BY datetime(checked_at)""",(AWSKeyID,)) results = cursor.fetchall() return results diff --git a/modules/db.py b/modules/db.py index bedf460..b8d9598 100644 --- a/modules/db.py +++ b/modules/db.py @@ -1,29 +1,66 @@ ''' -queries that interact with db can go here +Queries that interact with the db ''' import boto3 import sqlite3 from sqlite3 import Error -from libs.sql import * +from libs.sql import * session = boto3.Session() credentials = session.get_credentials() AWS_ACCESS_KEY_ID = credentials.access_key +db_name = "weirdAAL.db" + # for a key, what services does it have listed in the DB + + def step_show_services_by_key(): - db_name = "weirdAAL.db" - results = search_recon_by_key(db_name,AWS_ACCESS_KEY_ID) + ''' + Show services for a given key service:sub_service + example: elasticbeanstalk:DescribeEvents + ''' + results = search_recon_by_key(db_name, AWS_ACCESS_KEY_ID) print("Services enumerated for {}".format(AWS_ACCESS_KEY_ID)) for result in results: - print("{}:{}".format(result[0],result[1])) + print("{}:{}".format(result[0], result[1])) + + +def step_show_services_by_key_with_date(): + ''' + Show services for a given key service:sub_service + example: elasticbeanstalk:DescribeEvents + ''' + results = search_recon_by_key(db_name, AWS_ACCESS_KEY_ID) + print("Services enumerated for {}".format(AWS_ACCESS_KEY_ID)) + for result in results: + print("{}:{} -> Date: {}".format(result[0], result[1], result[2])) # same as show_sevices + + def step_list_services_by_key(): - db_name = "weirdAAL.db" - results = search_recon_by_key(db_name,AWS_ACCESS_KEY_ID) + ''' + Show services for a given key service:sub_service + example: elasticbeanstalk:DescribeEvents + ''' + results = search_recon_by_key(db_name, AWS_ACCESS_KEY_ID) print("Services enumerated for {}".format(AWS_ACCESS_KEY_ID)) for result in results: - print("{}:{}".format(result[0],result[1])) \ No newline at end of file + print("{}:{}".format(result[0], result[1])) + + +# for a key, what services does it have listed in the DB and the date + + +def step_list_services_by_key_with_date(): + ''' + Show services for a given key service:sub_service with date + example: elasticbeanstalk:DescribeEvents -> Date: 2018-04-18 20:36:41.791780 + ''' + results = search_recon_by_key(db_name, AWS_ACCESS_KEY_ID) + print("Services enumerated for {}".format(AWS_ACCESS_KEY_ID)) + for result in results: + print("{}:{} -> Date: {}".format(result[0], result[1], result[2])) diff --git a/weirdAAL.py b/weirdAAL.py index 4a81fd4..9cbfd94 100755 --- a/weirdAAL.py +++ b/weirdAAL.py @@ -60,9 +60,9 @@ def method_create(): # Need to figure out if we have keys in the ENV or not -if AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY: +try: perform_credential_check() -else: +except: print("Please supply keys as outlined in our README.md file") # exit(1)