Files

1 line
9.2 KiB
JSON

{"repo": "brevityinmotion/brevityrecon", "files": {"lib/brevityprogram/programs.py": {"62b918fa36b563c63af97e24c79f6d5b3f7e8961": {"t": 1785674634.5909653, "n": 9002, "h": "a74a3795e038de27", "c": "import boto3\nimport io\nimport botocore\nimport json\n#from botocore.exceptions import ClientError\nimport logging\nimport brevitycore.core\nimport brevityprogram.dynamodb\nimport brevityscope.scope\nimport brevityscope.parser\n\ndef generate_program(programPlatform, inviteType, listscopein, listscopeout, programName, scopeInURLs, scopeInGithub, scopeInWild, scopeInGeneral, scopeInIP, scopeOutURLs, scopeOutGithub, scopeOutWild, scopeOutGeneral, scopeOutIP):\n try:\n # DynamoDB data load\n createStatus = brevityprogram.dynamodb.create_program(programName)\n scopeinStatus = brevityprogram.dynamodb.update_program_scopein(programName,listscopein)\n scopeoutStatus = brevityprogram.dynamodb.update_program_scopeout(programName,listscopeout)\n platformStatus = brevityprogram.dynamodb.update_program_platform(programName, programPlatform)\n inviteStatus = brevityprogram.dynamodb.update_invite_type(programName, inviteType)\n \n scopeStatus = brevityprogram.dynamodb.update_program_scopeinurls(programName,scopeInURLs)\n scopeStatus = brevityprogram.dynamodb.update_program_scopeingithub(programName,scopeInGithub)\n scopeStatus = brevityprogram.dynamodb.update_program_scopeinwild(programName,scopeInWild)\n scopeStatus = brevityprogram.dynamodb.update_program_scopeingeneral(programName,scopeInGeneral)\n scopeStatus = brevityprogram.dynamodb.update_program_scopeinIP(programName,scopeInIP)\n scopeStatus = brevityprogram.dynamodb.update_program_scopeouturls(programName,scopeOutURLs)\n scopeStatus = brevityprogram.dynamodb.update_program_scopeoutgithub(programName,scopeOutGithub)\n scopeStatus = brevityprogram.dynamodb.update_program_scopeoutwild(programName,scopeOutWild)\n scopeStatus = brevityprogram.dynamodb.update_program_scopeoutgeneral(programName,scopeOutGeneral)\n scopeStatus = brevityprogram.dynamodb.update_program_scopeoutIP(programName,scopeOutIP)\n \n except:\n return 'Program creation failed.'\n return 'Program successfully created.'\n\ndef generateProgramSyncScript(programName):\n secretName = 'brevity-aws-recon'\n regionName = 'us-east-1'\n secretRetrieved = brevitycore.core.get_secret(secretName,regionName)\n secretjson = json.loads(secretRetrieved)\n awsAccessKeyId = secretjson['AWS_ACCESS_KEY_ID']\n awsSecretKey = secretjson['AWS_SECRET_ACCESS_KEY']\n \n fileBuffer = io.StringIO()\n #fileBuffer.write(\"\"\"#!/bin/bash\n fileContents = f\"\"\"#!/bin/bash\n\n# AWS synchronization of data\n \n# This information will be cleared every session as it is not persistent\nexport AWS_ACCESS_KEY_ID={awsAccessKeyId}\nexport AWS_SECRET_ACCESS_KEY={awsSecretKey}\nexport AWS_DEFAULT_REGION=us-east-1\n\nexport HOME=/root\nmkdir $HOME/security/raw/{programName}\nmkdir $HOME/security/refined/{programName}\nmkdir $HOME/security/run/{programName}\nmkdir $HOME/security/raw/{programName}/responses\nmkdir $HOME/security/raw/{programName}/httpx\nmkdir $HOME/security/raw/{programName}/crawl\nmkdir $HOME/security/presentation\nmkdir $HOME/security/presentation/{programName}\nmkdir $HOME/security/presentation/{programName}/httpx\nmkdir $HOME/security/presentation/{programName}/httpx-json\n\n# Retrieve any configuration updates\naws s3 sync s3://brevity-inputs/config/ $HOME/security/config/\n\n# Retrieve any new scopes specific for amass\naws s3 sync s3://brevity-inputs/scope/{programName}/ $HOME/security/tools/amass/\n\n# Retrieve custom input scopes for programs\naws s3 sync s3://brevity-inputs/programs/{programName}/ $HOME/security/inputs/{programName}/\n\n# Retrieve run files specific for program\naws s3 sync s3://brevity-inputs/run/{programName}/ $HOME/security/run/{programName}/\n \n# Submit any new data\n# aws s3 sync $HOME/security/raw/{programName}/ s3://brevity-data/raw/{programName}/\naws s3 sync $HOME/security/refined/{programName}/ s3://brevity-data/refined/{programName}/\n\n# Load configs\naws s3 sync s3://brevity-inputs/tools/ $HOME/security/tools/\n\n# Copy files from server post operations to S3 raw bucket\naws s3 cp --recursive $HOME/security/raw/{programName}/responses/ s3://brevity-raw/responses/{programName}/\naws s3 cp --recursive $HOME/security/raw/{programName}/httpx/ s3://brevity-raw/httpx/{programName}/\naws s3 cp --recursive $HOME/security/raw/{programName}/crawl/ s3://brevity-raw/crawl/{programName}/\naws s3 cp --recursive $HOME/security/presentation/httpx-json/ s3://brevity-data/presentation/httpx-json/\naws s3 cp --recursive $HOME/security/presentation/{programName}/httpx/ s3://brevity-data/presentation/httpx/\naws s3 cp --recursive $HOME/security/presentation/{programName}/nuclei/ s3://brevity-data/presentation/nuclei/\"\"\"\n fileBuffer.write(fileContents)\n #objectBuffer = io.BytesIO(fileBuffer.getvalue().encode())\n return fileBuffer\n\ndef prepareProgram(programName,inputBucketName):\n fileBuffer = generateProgramSyncScript(programName)\n objectBuffer = io.BytesIO(fileBuffer.getvalue().encode())\n\n # Upload file to S3\n object_name = 'sync-' + programName + '.sh'\n object_path = 'run/' + programName + '/' + object_name\n status = brevitycore.core.upload_object(objectBuffer,inputBucketName,object_path)\n fileBuffer.close()\n objectBuffer.close()\n return status\n\ndef cleanupScopeFiles(dfIn):\n dfIn.columns=['ScopeIn']\n dfIn = dfIn[~dfIn.ScopeIn.str.contains('[ ]')]\n dfIn.ScopeIn = dfIn.ScopeIn.str.replace('https://','')\n dfIn.ScopeIn = dfIn.ScopeIn.str.replace('http://','')\n dfIn.ScopeIn = dfIn.ScopeIn.str.replace('\\*.','')\n return dfIn\n\ndef generateScriptStepFunctions(programName, inputBucketName, taskToken, operationName):\n secretName = 'brevity-aws-recon'\n regionName = 'us-east-1'\n secretRetrieved = brevitycore.core.get_secret(secretName,regionName)\n secretjson = json.loads(secretRetrieved)\n awsAccessKeyId = secretjson['AWS_ACCESS_KEY_ID']\n awsSecretKey = secretjson['AWS_SECRET_ACCESS_KEY']\n\n stateInput = '{\"program\":\"' + programName + '\",\"operation\":\"' + operationName + '\",\"statusCode\":200}'\n fileBuffer = io.StringIO()\n fileContents = f\"\"\"#!/bin/bash\n\nexport AWS_ACCESS_KEY_ID={awsAccessKeyId}\nexport AWS_SECRET_ACCESS_KEY={awsSecretKey}\nexport AWS_DEFAULT_REGION=us-east-1\n\naws stepfunctions send-task-success --task-token {taskToken} --task-output '{stateInput}'\"\"\"\n\n fileBuffer.write(fileContents)\n objectBuffer = io.BytesIO(fileBuffer.getvalue().encode())\n # Upload file to S3\n object_name = 'stepfunctions-' + programName + '.sh'\n object_path = 'run/' + programName + '/' + object_name\n status = brevitycore.core.upload_object(objectBuffer,inputBucketName,object_path)\n fileBuffer.close()\n objectBuffer.close()\n return status\n\n# This approach is no longer in-use. Moving functionality from DO Droplet to persistent EC2 instance that is always syncing S3 bucket of responses to attached EBS volume. Will eventually delete this function once the EC2 code is complete.\ndef generateScriptSift(programName, inputBucketName):\n \n secretName = 'brevity-aws-recon'\n regionName = 'us-east-1'\n secretRetrieved = brevitycore.core.get_secret(secretName,regionName)\n secretjson = json.loads(secretRetrieved)\n awsAccessKeyId = secretjson['AWS_ACCESS_KEY_ID']\n awsSecretKey = secretjson['AWS_SECRET_ACCESS_KEY']\n fileBuffer = io.StringIO()\n fileContents = f\"\"\"#!/bin/bash\n\nexport AWS_ACCESS_KEY_ID={awsAccessKeyId}\nexport AWS_SECRET_ACCESS_KEY={awsSecretKey}\nexport AWS_DEFAULT_REGION=us-east-1\n\n# Run custom sift script\nexport HOME=/root\nexport PATH=/root/go/bin:$PATH\n\n# Retrieve zipped and compressed responses file\naws s3 cp s3://brevity-data/refined/{programName}/{programName}-responses.tar.gz $HOME/security/raw/{programName}/\n\nwait\ncd $HOME/security/raw/{programName}/\ntar -xvzf {programName}-responses.tar.gz\nwait\nsift -f $HOME/security/config/search-keywords.csv $HOME/security/raw/{programName}/responses -o matches-{programName}-keywords.txt --only-matching\nwait\nsift -f $HOME/security/config/search-extensions.csv $HOME/security/raw/{programName}/responses -o matches-{programName}-extensions.txt --only-matching\nwait\nsift -f $HOME/security/config/search-filenames.csv $HOME/security/raw/{programName}/responses -o matches-{programName}-filenames.txt --only-matching\nwait\nsift -f $HOME/security/config/search-phrases.csv $HOME/security/raw/{programName}/responses -o matches-{programName}-phrases.txt --only-matching\nwait\nsleep 10\nmv $HOME/security/raw/{programName}/matches-* $HOME/security/refined/{programName}/\nsleep 10\n# rm -r responses\n# sleep 10\nsh $HOME/security/config/sync-{programName}.sh\"\"\"\n\n fileBuffer.write(fileContents)\n objectBuffer = io.BytesIO(fileBuffer.getvalue().encode())\n # Upload file to S3\n object_name = 'sift-' + programName + '.sh'\n object_path = 'run/' + programName + '/' + object_name\n status = brevitycore.core.upload_object(objectBuffer,inputBucketName,object_path)\n fileBuffer.close()\n objectBuffer.close()\n return status"}}}}