├── database ├── db │ └── blank └── gh0str3con.json ├── Assets ├── js │ ├── script.js │ ├── flash.js │ ├── dynamicbutton.js │ └── button.js ├── images │ ├── logo.png │ └── logob.png ├── css │ ├── dynamic.css │ ├── dashboard.css │ ├── flash.css │ ├── button.css │ └── index.css └── svgs │ └── new.svg ├── screenshots ├── 1.png ├── 2.png └── logo.gif ├── includes ├── bin │ ├── github-subs.sh │ ├── crt.sh │ ├── initialization.py │ ├── cmdrunner.py │ ├── send.py │ ├── openports.py │ ├── bot.py │ ├── wrecking.py │ ├── subs.py │ └── crawling.py ├── const.js ├── dbgateway.js ├── help.js ├── engine.js └── route.js ├── config.yaml ├── views ├── components │ ├── footer.ejs │ └── header.ejs ├── index.ejs ├── bughunting.ejs └── targetpage.ejs ├── index.js ├── install.sh ├── LICENSE ├── LICENSE.md ├── package.json ├── setup.sh └── README.md /database/db/blank: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Assets/js/script.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /screenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cappricio-Securities/ghostrecon/HEAD/screenshots/1.png -------------------------------------------------------------------------------- /screenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cappricio-Securities/ghostrecon/HEAD/screenshots/2.png -------------------------------------------------------------------------------- /screenshots/logo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cappricio-Securities/ghostrecon/HEAD/screenshots/logo.gif -------------------------------------------------------------------------------- /Assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cappricio-Securities/ghostrecon/HEAD/Assets/images/logo.png -------------------------------------------------------------------------------- /Assets/images/logob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cappricio-Securities/ghostrecon/HEAD/Assets/images/logob.png -------------------------------------------------------------------------------- /database/gh0str3con.json: -------------------------------------------------------------------------------- 1 | { 2 | "admin": { 3 | "username": "karthithehacker 🃏", 4 | "reconinfo": [ 5 | 6 | ] 7 | } 8 | } -------------------------------------------------------------------------------- /includes/bin/github-subs.sh: -------------------------------------------------------------------------------- 1 | while read dom ; 2 | do 3 | echo $dom 4 | python ~/tools/github-search/github-subdomains.py -t $2 -d $dom 5 | 6 | done < $1 7 | -------------------------------------------------------------------------------- /includes/bin/crt.sh: -------------------------------------------------------------------------------- 1 | while read dom ; 2 | do 3 | echo $dom 4 | curl -s https://crt.sh/\?q\=$dom\&output\=json | jq -r '.[].name_value' | sed 's/\*\.//g' | sort -u 5 | 6 | done < $1 7 | -------------------------------------------------------------------------------- /config.yaml: -------------------------------------------------------------------------------- 1 | config: 2 | github_token: your_github_token 3 | chat_ID: your_Telegram_chat_ID 4 | Subs_Scan_Fast: True #It will disable Amass and subsleuth to make work faster set to False to do subdomain bruteforce 5 | Subs_of_Subs: True #It will disabe subdomains of subdomain recon 6 | -------------------------------------------------------------------------------- /includes/bin/initialization.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | target_name = sys.argv[1] 5 | savepath = sys.argv[2] 6 | 7 | # Creating folder for data 8 | os.makedirs(savepath, exist_ok=True) 9 | 10 | # Creating folder with company name 11 | company_folder = os.path.join(savepath, target_name) 12 | os.makedirs(company_folder, exist_ok=True) 13 | -------------------------------------------------------------------------------- /includes/const.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | /** 3 | * gh0str3con 4 | * gh0str3con is a All in one cloud based web Recon tool. 5 | * 6 | * @author karthikeyan V (karthithehacker) 7 | */ 8 | 9 | const os = require("os"); 10 | const homeDir = os.homedir(); 11 | 12 | exports.savepath = homeDir+"/recon/ghostrecon/" 13 | -------------------------------------------------------------------------------- /includes/bin/cmdrunner.py: -------------------------------------------------------------------------------- 1 | import os 2 | import subprocess 3 | 4 | 5 | def run_command(command): 6 | try: 7 | result = subprocess.run(command, shell=True, check=True, 8 | stderr=subprocess.PIPE, stdout=subprocess.PIPE, universal_newlines=True) 9 | return result.stdout 10 | except subprocess.CalledProcessError as e: 11 | print(f"Error executing command: {e}") 12 | return None 13 | -------------------------------------------------------------------------------- /Assets/js/flash.js: -------------------------------------------------------------------------------- 1 | $( document ).ready(function() { 2 | $(".flash").addClass("animate--drop-in-fade-out"); 3 | setTimeout(function () { 4 | $(".flash").removeClass("animate--drop-in-fade-out"); 5 | }, 3500); 6 | }); 7 | 8 | 9 | /* 10 | $(".button").click(function () { 11 | $(".flash").addClass("animate--drop-in-fade-out"); 12 | setTimeout(function () { 13 | $(".flash").removeClass("animate--drop-in-fade-out"); 14 | }, 3500); 15 | }); 16 | */ -------------------------------------------------------------------------------- /views/components/footer.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /includes/bin/send.py: -------------------------------------------------------------------------------- 1 | import os 2 | import requests 3 | 4 | 5 | def sdata(path, targ): 6 | with open(path + targ + '/nlive.txt', 'r') as f: 7 | with open(path + targ + '/live.txt', 'r') as l: 8 | with open(path + targ + '/alls.txt', 'r') as a: 9 | doms = f.read().strip().split('\n') 10 | live = l.read().strip().split('\n') 11 | subs = a.read().strip().split('\n') 12 | pload = {'ports[]': doms, 'subs[]': subs, 13 | 'live[]': live, 'name': targ, 'status': 'completed'} 14 | r = requests.post('http://localhost:8090/update', data=pload) 15 | 16 | 17 | -------------------------------------------------------------------------------- /includes/bin/openports.py: -------------------------------------------------------------------------------- 1 | from cmdrunner import run_command 2 | 3 | def portscan(target_name, savepath): 4 | command = f'naabu -list {savepath}{target_name}/alls.txt -o {savepath}{target_name}/nabu.txt' 5 | run_command(command) 6 | 7 | 8 | def live(target_name, savepath): 9 | httpx_command = f'httpx -list {savepath}{target_name}/nabu.txt | tee -a {savepath}{target_name}/live.txt' 10 | cat_commands = [ 11 | f'cat {savepath}{target_name}/nabu.txt >> {savepath}{target_name}/nlive.txt', 12 | f'cat {savepath}{target_name}/live.txt >> {savepath}{target_name}/nlive.txt' 13 | ] 14 | 15 | run_command(httpx_command) 16 | 17 | for cat_command in cat_commands: 18 | run_command(cat_command) 19 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | /** 3 | * gh0str3con 4 | * gh0str3con is a All in one cloud based web Recon tool. 5 | * 6 | * @author karthikeyan V (karthithehacker) 7 | */ 8 | const CONST = require('./includes/const'); 9 | const express = require("express"); 10 | const app = express(); 11 | const help = require('./includes/help'); 12 | const bodyParser = require('body-parser'); 13 | const os = require("os"); 14 | const yargs = require('yargs/yargs'); 15 | const { hideBin } = require('yargs/helpers') 16 | // get the home directory path 17 | 18 | help.helpintro(); 19 | console.log("URL=====> http://localhost:"+8090) 20 | 21 | app.listen(8090); 22 | app.set('view-engine','ejs'); 23 | app.use(bodyParser.json({limit: "50mb"})); 24 | app.use(bodyParser.urlencoded({limit: "50mb", extended: true, parameterLimit:50000})); 25 | app.use(express.static(__dirname + '/Assets/')); 26 | app.use(require('./includes/route')); 27 | -------------------------------------------------------------------------------- /Assets/js/dynamicbutton.js: -------------------------------------------------------------------------------- 1 | var survey_options = document.getElementById('survey_options'); 2 | var add_more_fields = document.getElementById('add_more_fields'); 3 | var remove_fields = document.getElementById('remove_fields'); 4 | 5 | add_more_fields.onclick = function () { 6 | var newField = document.createElement('input'); 7 | newField.setAttribute('type', 'text'); 8 | newField.setAttribute('name', 'subs[]'); 9 | newField.setAttribute('placeholder', 'Add Scope'); 10 | survey_options.appendChild(newField); 11 | } 12 | 13 | remove_fields.onclick = function () { 14 | var input_tags = survey_options.getElementsByTagName('input'); 15 | if (input_tags.length > 2) { 16 | survey_options.removeChild(input_tags[(input_tags.length) - 1]); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /includes/bin/bot.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | messagecont=""" 4 | 5 | .----------------------------------------------. 6 | | Tool : Gh0str3con | 7 | | Author : @karthithehacker | 8 | | 1'or'1='1 | 9 | '----------------------------------------------' 10 | ^ (\_/) 11 | '----- (O.o) 12 | (> <) 13 | 14 | URL=====> http://localhost:8090 15 | 16 | """ 17 | 18 | 19 | def Started(companyname,chatID): 20 | url = f'https://ghostrecon.cappriciosec.com/sendMessage.php?chatID={chatID}&Message=🔔 New Hunting Started ✅ \n\n👤 Company Name: {companyname}' 21 | response = requests.get(url) 22 | 23 | 24 | def Done(companyname, chatID): 25 | url = f'https://ghostrecon.cappriciosec.com/sendMessage.php?chatID={chatID}&Message=🔔 Work Done Check your report ✅ \n\n👤 Company Name: {companyname}\n\n{messagecont}' 26 | response = requests.get(url) 27 | 28 | -------------------------------------------------------------------------------- /includes/bin/wrecking.py: -------------------------------------------------------------------------------- 1 | import os ,yaml 2 | import sys 3 | 4 | 5 | from subs import * 6 | from openports import * 7 | from send import * 8 | from bot import * 9 | from crawling import * 10 | 11 | 12 | file_path = 'config.yaml' 13 | 14 | with open(file_path, 'r') as file: 15 | data = yaml.safe_load(file) 16 | 17 | 18 | Config = data.get('config', {}) 19 | github_token = Config.get('github_token', '') 20 | ChatId = Config.get('chat_ID', '') 21 | subs_conf = Config.get('Subs_Scan_Fast', '') 22 | subsof = Config.get('Subs_of_Subs', '') 23 | 24 | target_name = sys.argv[1] 25 | path = sys.argv[2] 26 | 27 | 28 | Started(target_name, ChatId) 29 | 30 | subdomain_enumuration(target_name, path, subs_conf, github_token) 31 | sort(target_name, path) 32 | if subsof == False: 33 | subsofsubs(target_name, path) 34 | sorts(target_name, path) 35 | portscan(target_name, path) 36 | live(target_name, path) 37 | webcrawl(target_name, path) 38 | partenmatch(target_name, path) 39 | sdata(path,target_name) 40 | Done(target_name, ChatId) 41 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | tools=( 4 | "CVE-2021-42063" 5 | "CVE-2018-8033" 6 | "CVE-2021-20323" 7 | "CVE-2023-29489" 8 | "crlfi" 9 | "Open redirect" 10 | "CVE-2019-9670" 11 | "CVE-2023-27524" 12 | "CVE-2020-27838" 13 | "CVE-2021-40438" 14 | "CVE-2020-3187" 15 | "CVE-2020-35489" 16 | "CVE-2017-7269" 17 | "CVE-2021-24917" 18 | "CVE-2023-4568" 19 | "CVE-2018-0296" 20 | "laravel-ignition-Rxss" 21 | "CVE-2023-5089" 22 | "CVE-2020-3452" 23 | "critix-netscaler-memory-leak" 24 | "CVE-2023-24044" 25 | "CVE-2015-7297" 26 | "CVE-2018-11784" 27 | "CVE-2015-1635" 28 | "CVE-2022-0165" 29 | "phpinfo-files-leaks" 30 | "shell-history-leaks" 31 | "CVE-2000-0114" 32 | "CVE-2024-1208" 33 | "CVE-2023-46805" 34 | "appspec-yaml-leaks" 35 | "CVE-2024-24919" 36 | "behat-config-leaks" 37 | "CVE-2019-12616" 38 | "CVE-2024-4956" 39 | ) 40 | 41 | 42 | for tool in "${tools[@]}"; do 43 | pip install "$tool" 44 | pip3 install "$tool" 45 | done 46 | 47 | echo "Installation complete." 48 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 karthikeyan.V 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 ProjectDiscovery, Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /views/components/header.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | gh0str3con 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
33 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gh0str3con", 3 | "version": "1.1.0", 4 | "description": "All in one cloud based web Recon tool", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node ." 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/karthi-the-hacker/Gh0stR3c0n.git" 12 | }, 13 | "bin": { 14 | "ghostrecon": "./index.js", 15 | "gh0str3con": "./index.js" 16 | }, 17 | "keywords": [ 18 | "ghostrecon", 19 | "bugbounty", 20 | "bugbounty recon", 21 | "ethicalhacking", 22 | "cybersecurity", 23 | "cybersecurity tool", 24 | "tool", 25 | "security audit", 26 | "karthithehacker" 27 | ], 28 | "files": [ 29 | "index.js", 30 | "views", 31 | "database", 32 | "Assets", 33 | "includes" 34 | ], 35 | "readme": "README.md", 36 | "author": { 37 | "name": "karthikeyan V (karthithehacker)", 38 | "email": "contact@karthithehacker.com", 39 | "url": "https://karthithehacker.com" 40 | }, 41 | "license": "MIT", 42 | "bugs": { 43 | "url": "https://github.com/karthi-the-hacker/Gh0stR3c0n/issues" 44 | }, 45 | "homepage": "https://github.com/karthi-the-hacker/Gh0stR3c0n#readme", 46 | "dependencies": { 47 | "axios": "^1.4.0", 48 | "cheerio": "^1.0.0-rc.12", 49 | "ejs": "^3.1.9", 50 | "express": "^4.18.2", 51 | "fs": "^0.0.1-security", 52 | "lowdb": "^1.0.0", 53 | "nodemailer": "^6.9.3", 54 | "nodemon": "^2.0.22", 55 | "puppeteer": "^20.5.0", 56 | "yargs": "^17.7.2" 57 | } 58 | } 59 | 60 | -------------------------------------------------------------------------------- /Assets/css/dynamic.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Biryani:wght@200&family=Megrim&family=Quicksand:wght@300&display=swap'); 2 | 3 | input { 4 | border-radius: 15px; 5 | margin: 0.4%; 6 | height: 50px; 7 | background: black; 8 | color: white; 9 | width: 90%; 10 | border: 2ch; 11 | max-width: 90%; 12 | 13 | } 14 | #survey_options{ 15 | 16 | align-items: center; 17 | width: 400px; 18 | margin: 0%; 19 | padding: 0%; 20 | border: 0ch; 21 | background: transparent; 22 | 23 | } 24 | 25 | ::placeholder { 26 | /* Chrome, Firefox, Opera, Safari 10.1+ */ 27 | color: rgb(255, 255, 255); 28 | align-items: center; 29 | font-family: 'Biryani', sans-serif; 30 | text-align: center; 31 | opacity: 1; 32 | /* Firefox */ 33 | } 34 | .controls{ 35 | display: flex; 36 | width: 100%; 37 | position: relative; 38 | height: 100%; 39 | left: -7%; 40 | align-items: center; 41 | 42 | justify-content: center; 43 | } 44 | .bts{ 45 | position: absolute; 46 | top: 10%; 47 | left: 88%; 48 | width: 120px; 49 | height: 120px; 50 | color: white; 51 | background: black; 52 | box-shadow: -5px 4px 27px rgba(0, 0, 0, 0.8); 53 | } 54 | .create{ 55 | overflow: scroll; 56 | display: grid; 57 | align-items: center; 58 | height: 100%; 59 | justify-content: center; 60 | 61 | 62 | } 63 | 64 | .imgs{ 65 | position: relative; 66 | left: -17%; 67 | top: 10%; 68 | 69 | display: flex; 70 | align-items: center; 71 | justify-content: center; 72 | box-shadow: -5px 4px 27px rgba(0, 0, 0, 0.8); 73 | } -------------------------------------------------------------------------------- /includes/dbgateway.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | /** 3 | * gh0str3con 4 | * gh0str3con is a All in one cloud based web Recon tool. 5 | * 6 | * @author karthikeyan V (karthithehacker) 7 | */ 8 | const lowdb = require('lowdb'); 9 | const FileSync = require('lowdb/adapters/FileSync'); 10 | 11 | class targetdb { 12 | constructor(targetname,scopes,reportpath) { 13 | let cdb = lowdb(new FileSync('database/db/' + targetname + '.json')) 14 | cdb.defaults({ 15 | recondb:{ 16 | targetname, 17 | status: "none", 18 | scope: scopes, 19 | infos: [] 20 | } 21 | }).write() 22 | return cdb; 23 | } 24 | } 25 | class targetdbload { 26 | constructor(targetname,scopes,live,openport,recinfo) { 27 | let rec = lowdb(new FileSync('database/db/' + targetname + '.json')) 28 | rec.set('recondb.recOn' , 'completed').write(); 29 | rec.get('recondb.infos').push({subs:scopes,live:live,openport:openport}).write(); 30 | } 31 | } 32 | class initializ { 33 | constructor(targetname) { 34 | let cdb = lowdb(new FileSync('database/db/' + targetname + '.json')) 35 | let data_scope = cdb.get('recondb.scope').value(); 36 | return data_scope 37 | 38 | } 39 | } 40 | class retrive { 41 | constructor(targetname) { 42 | let cdb = lowdb(new FileSync('database/db/' + targetname + '.json')) 43 | let data_scope = cdb.get('recondb.infos').value(); 44 | return data_scope 45 | 46 | } 47 | } 48 | 49 | module.exports = { 50 | initializ: initializ, 51 | targetdb: targetdb, 52 | targetdbload: targetdbload, 53 | retrive: retrive 54 | 55 | }; 56 | 57 | 58 | -------------------------------------------------------------------------------- /setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | check_command() { 4 | command -v "$1" >/dev/null 2>&1 || { 5 | echo >&2 "$1 is not installed. Installing..." 6 | return 1 7 | } 8 | return 0 9 | } 10 | 11 | check_tool() { 12 | if ! check_command "$1"; then 13 | echo "Failed to install $1. Please install it manually." 14 | exit 1 15 | fi 16 | } 17 | 18 | # Check and install Python 3 19 | check_command "python3" || sudo apt-get install python3 20 | 21 | # Check and install Go 22 | check_command "go" || sudo apt-get install golang 23 | 24 | # Check and install Node.js and npm 25 | check_command "node" || sudo apt-get install nodejs 26 | check_command "npm" || sudo apt-get install npm 27 | 28 | # Check and install pip 29 | check_command "pip3" || sudo apt-get install python3-pip 30 | 31 | # Check and install specific tools 32 | check_tool "httpx" || go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest 33 | check_tool "katana" || go install github.com/projectdiscovery/katana/cmd/katana@latest 34 | check_tool "subfinder" || go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest 35 | check_tool "amass" || go install -v github.com/owasp-amass/amass/v4/...@master 36 | check_tool "naabu" || sudo apt install -y libpcap-dev && go install -v github.com/projectdiscovery/naabu/v2/cmd/naabu@latest 37 | check_tool "gf" || go install github.com/tomnomnom/gf@latest 38 | cd ~/ 39 | mkdir .gf 40 | git clone https://github.com/tomnomnom/gf 41 | git clone https://github.com/1ndianl33t/Gf-Patterns 42 | 43 | cd ~/gf/examples 44 | cp * ~/.gf/ 45 | cd ~/Gf-Patterns 46 | cp * ~/.gf/ 47 | 48 | echo 'source $GOPATH/src/github.com/tomnomnom/gf/gf-completion.bash' >> ~/.bashrc 49 | # Check and install pip requests module 50 | check_command "pip3" && pip3 install requests 51 | 52 | # Check and install subsleuth 53 | check_command "subsleuth" || sudo npm install subsleuth -g 54 | 55 | echo "All dependencies are installed." 56 | 57 | sudo npm i 58 | 59 | -------------------------------------------------------------------------------- /includes/bin/subs.py: -------------------------------------------------------------------------------- 1 | 2 | from cmdrunner import run_command 3 | 4 | 5 | def subdomain_enumuration(target_name, savepath, subs_conf, token): 6 | github_command = f'sh includes/bin/github-subs.sh {savepath}{target_name}/scope.txt >> {savepath}{target_name}/github.txt {token}' 7 | subfinder_command = f'subfinder -dL {savepath}{target_name}/scope.txt -o {savepath}{target_name}/subfinder.txt' 8 | crtsh_command = f'sh includes/bin/crt.sh {savepath}{target_name}/scope.txt >> {savepath}{target_name}/crtsh.txt' 9 | 10 | run_command(github_command) 11 | run_command(subfinder_command) 12 | run_command(crtsh_command) 13 | 14 | if not subs_conf: 15 | amass_command = f'amass enum -passive -df {savepath}{target_name}/scope.txt -o {savepath}{target_name}/amass.txt' 16 | subsleuth_command = f'subsleuth -l {savepath}{target_name}/scope.txt -w includes/bin/wordlist.txt -o {savepath}{target_name}/subsleuth.txt' 17 | 18 | run_command(amass_command) 19 | run_command(subsleuth_command) 20 | 21 | 22 | def sort(target_name, savepath): 23 | sort_command = f'cat {savepath}{target_name}/*.txt | sort -u | tee -a {savepath}{target_name}/all.txt' 24 | subs3rdlvl_command = f'cat {savepath}{target_name}/all.txt | rev | cut -d "." -f 1,2,3 | sort -u | rev >> {savepath}{target_name}/subs3rdlvl.txt' 25 | 26 | run_command(sort_command) 27 | run_command(subs3rdlvl_command) 28 | 29 | 30 | def subsofsubs(target_name, savepath): 31 | crtsh_subs_command = f'sh includes/bin/crt.sh {savepath}{target_name}/subs3rdlvl.txt >> {savepath}{target_name}/crtsh-subs.txt' 32 | amass_subs_command = f'amass enum -passive -df {savepath}{target_name}/subs3rdlvl.txt -o {savepath}{target_name}/amass-subs.txt' 33 | 34 | run_command(crtsh_subs_command) 35 | run_command(amass_subs_command) 36 | 37 | 38 | def sorts(target_name, savepath): 39 | sorts_command = f'cat {savepath}{target_name}/*.txt | sort -u | tee -a {savepath}{target_name}/alls.txt' 40 | run_command(sorts_command) 41 | -------------------------------------------------------------------------------- /includes/help.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | /** 3 | * gh0str3con 4 | * gh0str3con is a All in one cloud based web Recon tool. 5 | * 6 | * @author karthikeyan V (karthithehacker) 7 | */ 8 | 9 | const { boolean } = require("yargs"); 10 | //lib and includes section 11 | require("os").userInfo().username 12 | module.exports = { 13 | helpmenu: function() { 14 | var argv = require('yargs/yargs')(process.argv.slice(2)) 15 | .usage('\n\n \x1b[30;1m$\x1b[0m \x1b[32;1mGh0str3con \x1b[36;1m[option]\n\n \x1b[37;42;1mUsage:\x1b[0m $0 \x1b[33;1m[options]\x1b[30;1m') 16 | .version('version', '1.0.1').alias('version', 'V') 17 | .options({ 18 | help: { 19 | alias: 'h', 20 | description: "Show help", 21 | requiresArg: true, 22 | required: false 23 | }, 24 | 25 | port: { 26 | alias: 'p', 27 | description: "Provide availabe port between 0 to 65536", 28 | requiresArg: true, 29 | required: false 30 | } 31 | }) 32 | .argv; 33 | console.log('Inspecting options'); 34 | console.dir(argv); 35 | console.log("input:", argv.input); 36 | console.log("output:", argv.output); 37 | }, 38 | helpintro: function() { 39 | cyan='\e[1;36m%s\e[0m\n' 40 | console.log(" \n\n\x1b[36;1m👋 Hey \x1b[37;1m"+require("os").userInfo().username+" \x1b[36;1m\n"); 41 | console.log(" .-----------------------------. "); 42 | console.log(" | Tool : \x1b[31mGh0str3con \x1b[36;1m | "); 43 | console.log(" | Author : \x1b[32;1m@karthithehacker🎖️\x1b[36;1m | "); 44 | console.log(" | \x1b[30m1'or'1='1 \x1b[30m\x1b[36;1m | "); 45 | console.log(" '-----------------------------' "); 46 | console.log(" ^ (\\_/) "); 47 | console.log(" '----- (O.o) "); 48 | console.log(" (> <) "); 49 | 50 | } 51 | }; -------------------------------------------------------------------------------- /includes/engine.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | /** 3 | * gh0str3con 4 | * gh0str3con is a All in one cloud based web Recon tool. 5 | * 6 | * @author karthikeyan V (karthithehacker) 7 | */ 8 | 9 | const { exec } = require("child_process"); 10 | const dbs = require('./dbgateway'); 11 | const CONST = require('./const'); 12 | 13 | 14 | savepath = CONST.savepath 15 | 16 | 17 | function wrecking(targetname,savepath) // This function is used to update and remove unwanted attacks 18 | { 19 | exec("python3 includes/bin/wrecking.py "+targetname +" "+savepath+ " &", (error, stdout, stderr) => { 20 | }); 21 | } 22 | 23 | 24 | function makedir(targetname) // This function is used to update and remove unwanted attacks 25 | { 26 | exec("python3 includes/bin/initialization.py "+targetname+ " "+savepath, (error, stdout, stderr) => { 27 | }); 28 | } 29 | 30 | 31 | function write(scope,targetname) // This function is used to load data into txt file 32 | { 33 | exec("echo "+scope+" >> "+savepath+targetname+"/scope.txt", (error, stdout, stderr) => { 34 | }); 35 | } 36 | 37 | 38 | function load(cdb,targetname){ 39 | 40 | let i; 41 | for (i in cdb){ 42 | let fetdata = cdb[i] 43 | write(fetdata,targetname)// calling write function 44 | } 45 | wrecking(targetname,savepath) 46 | 47 | } 48 | 49 | 50 | class initializ { 51 | constructor(targetname) { 52 | makedir(targetname); // calling makdir function 53 | let cdb = new dbs.initializ(targetname); // this function will get the data and load into txt file 54 | setTimeout(function(){ 55 | load(cdb,targetname); 56 | },20000) 57 | } 58 | } 59 | 60 | class readbugs { 61 | constructor(targetname) { 62 | makedir(targetname); // calling makdir function 63 | let cdb = new dbs.initializ(targetname); // this function will get the data and load into txt file 64 | setTimeout(function(){ 65 | load(cdb,targetname); 66 | },20000) 67 | } 68 | } 69 | 70 | module.exports = { 71 | 72 | initializ: initializ 73 | }; 74 | -------------------------------------------------------------------------------- /includes/bin/crawling.py: -------------------------------------------------------------------------------- 1 | import subprocess 2 | from cmdrunner import run_command 3 | 4 | 5 | input_file = 'crawl.txt' 6 | 7 | # Define patterns and output file names 8 | patterns = [ 9 | ('aws-keys', 'aws-keys.txt'), 10 | ('base64', 'base64.txt'), 11 | ('cors', 'cors.txt'), 12 | ('debug-pages', 'debug-pages.txt'), 13 | ('debug_logic', 'debug_logic.txt'), 14 | ('firebase', 'firebase.txt'), 15 | ('fw', 'fw.txt'), 16 | ('go-functions', 'go-functions.txt'), 17 | ('http-auth', 'http-auth.txt'), 18 | ('idor', 'idor.txt'), 19 | ('img-traversal', 'img-traversal.txt'), 20 | ('interestingEXT', 'interestingEXT.txt'), 21 | ('interestingparams', 'interestingparams.txt'), 22 | ('interestingsubs', 'interestingsubs.txt'), 23 | ('ip', 'ip.txt'), 24 | ('json-sec', 'json-sec.txt'), 25 | ('jsvar', 'jsvar.txt'), 26 | ('lfi', 'lfi.txt'), 27 | ('meg-headers', 'meg-headers.txt'), 28 | ('php-curl', 'php-curl.txt'), 29 | ('php-errors', 'php-errors.txt'), 30 | ('php-serialized', 'php-serialized.txt'), 31 | ('php-sinks', 'php-sinks.txt'), 32 | ('php-sources', 'php-sources.txt'), 33 | ('rce', 'rce.txt'), 34 | ('redirect', 'redirect.txt'), 35 | ('s3-buckets', 's3-buckets.txt'), 36 | ('sec', 'sec.txt'), 37 | ('servers', 'servers.txt'), 38 | ('sqli', 'sqli.txt'), 39 | ('ssrf', 'ssrf.txt'), 40 | ('ssti', 'ssti.txt'), 41 | ('strings', 'strings.txt'), 42 | ('takeovers', 'takeovers.txt'), 43 | ('upload-fields', 'upload-fields.txt'), 44 | ('urls', 'urls.txt'), 45 | ('xss', 'xss.txt'), 46 | ] 47 | 48 | 49 | def run_gf_command(target_name, savepath,input_file, pattern, output_file): 50 | command = f"cat {savepath}{target_name}/{input_file} | gf {pattern} >> {savepath}{target_name}/{output_file}" 51 | subprocess.run(command, shell=True) 52 | 53 | 54 | 55 | def webcrawl(target_name, savepath): 56 | command = f'katana -list {savepath}{target_name}/live.txt-o {savepath}{target_name}/crawl.txt' 57 | run_command(command) 58 | 59 | 60 | def partenmatch(target_name, savepath): 61 | # Run gf commands for each pattern 62 | for pattern, output_file in patterns: 63 | run_gf_command(target_name, savepath,input_file, pattern, output_file) 64 | 65 | cat_commands = [ 66 | f'cat {savepath}{target_name}/nabu.txt >> {savepath}{target_name}/nlive.txt', 67 | f'cat {savepath}{target_name}/live.txt >> {savepath}{target_name}/nlive.txt' 68 | ] 69 | 70 | for cat_command in cat_commands: 71 | run_command(cat_command) 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /includes/route.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | /** 3 | * gh0str3con 4 | * gh0str3con is a All in one cloud based web Recon tool. 5 | * 6 | * @author karthikeyan V (karthithehacker) 7 | */ 8 | 9 | const express = require("express"); 10 | const routes = express.Router(); 11 | const dbs = require('./dbgateway'); 12 | const engine = require('./engine'); 13 | const lowdb = require('lowdb'); 14 | const FileSync = require('lowdb/adapters/FileSync'), 15 | path = require('path'), 16 | adapter = new FileSync('database/gh0str3con.json'), 17 | db = lowdb(adapter); 18 | 19 | let data; 20 | 21 | var currentTime = new Date(); 22 | var currentOffset = currentTime.getTimezoneOffset(); 23 | var ISTOffset = 330; 24 | var date_time = new Date(currentTime.getTime() + (ISTOffset + currentOffset)*60000); 25 | var hoursIST = date_time.getHours() 26 | 27 | 28 | 29 | routes.get('/',(req,res)=>{ 30 | adapters = new FileSync('database/gh0str3con.json'), 31 | dbl = lowdb(adapters); 32 | data = dbl.get('admin.reconinfo').value(); 33 | res.render('index.ejs',{cred:data}); 34 | }) 35 | 36 | routes.get('/new',(req,res)=>{ 37 | res.render('bughunting.ejs',{sucess:'0'}); 38 | }) 39 | 40 | routes.post('/newrecon',(req,res)=>{ 41 | data = req.body; 42 | targetname = req.body.name; 43 | report = req.body.reportpath; 44 | scopes = req.body.subs; 45 | db.get('admin.reconinfo').push({ 46 | targetname:targetname, 47 | report:report, 48 | scope:scopes, 49 | recOn:"pending", 50 | createdat:date_time.toISOString() 51 | }).write(); 52 | res.render('bughunting.ejs',{sucess:'2'}); 53 | d = new dbs.targetdb(targetname,scopes,report); 54 | a = new engine.initializ(targetname); 55 | }) 56 | 57 | routes.post('/update',(req,res)=>{ 58 | data = req.body; 59 | targetname = req.body.name; 60 | scopes = req.body.subs; 61 | live = req.body.live; 62 | ports = req.body.ports; 63 | statu = req.body.status; 64 | db.get('admin.reconinfo').find({targetname: targetname}).assign({ recOn: 'completed' }).write(); 65 | d = new dbs.targetdbload(targetname,scopes,live,ports,statu); 66 | res.send('ok'); 67 | }) 68 | 69 | 70 | routes.get('/:target',(req,res)=>{ 71 | 72 | dat = req.params.target 73 | d = new dbs.retrive(dat); 74 | a = db.get('admin.reconinfo').find({"targetname": dat}).value().report; 75 | re = db.get('admin.reconinfo').find({"targetname": dat}).value().recOn; 76 | if(re == "pending"){ 77 | res.render('index.ejs',{cred:data,reinfo:d}); 78 | } 79 | res.render('targetpage.ejs',{cred:d,comp:dat,repo:a}); 80 | }) 81 | 82 | module.exports = routes; -------------------------------------------------------------------------------- /Assets/js/button.js: -------------------------------------------------------------------------------- 1 | //gsap.registerPlugin(Physics2DPlugin); 2 | 3 | document.querySelectorAll('.button').forEach(button => { 4 | 5 | const bounding = button.getBoundingClientRect() 6 | 7 | button.addEventListener('mousemove', e => { 8 | 9 | let dy = (e.clientY - bounding.top - bounding.height / 2) / -1 10 | let dx = (e.clientX - bounding.left - bounding.width / 2) / 10 11 | 12 | dy = dy > 10 ? 10 : (dy < -10 ? -10 : dy); 13 | dx = dx > 4 ? 4 : (dx < -4 ? -4 : dx); 14 | 15 | button.style.setProperty('--rx', dy); 16 | button.style.setProperty('--ry', dx); 17 | 18 | }); 19 | 20 | button.addEventListener('mouseleave', e => { 21 | 22 | button.style.setProperty('--rx', 0) 23 | button.style.setProperty('--ry', 0) 24 | 25 | }); 26 | 27 | button.addEventListener('click', e => { 28 | button.classList.add('success'); 29 | gsap.to(button, { 30 | '--icon-x': -3, 31 | '--icon-y': 3, 32 | '--z-before': 0, 33 | duration: .2, 34 | onComplete() { 35 | particles(button.querySelector('.emitter'), 100, -4, 6, -80, -50); 36 | gsap.to(button, { 37 | '--icon-x': 0, 38 | '--icon-y': 0, 39 | '--z-before': -6, 40 | duration: 1, 41 | ease: 'elastic.out(1, .5)', 42 | onComplete() { 43 | button.classList.remove('success'); 44 | } 45 | }); 46 | } 47 | }); 48 | }); 49 | 50 | }); 51 | 52 | function particles(parent, quantity, x, y, minAngle, maxAngle) { 53 | let colors = [ 54 | '#FFFF04', 55 | '#EA4C89', 56 | '#892AB8', 57 | '#4AF2FD', 58 | ]; 59 | for(let i = quantity - 1; i >= 0; i--) { 60 | let angle = gsap.utils.random(minAngle, maxAngle), 61 | velocity = gsap.utils.random(70, 140), 62 | dot = document.createElement('div'); 63 | dot.style.setProperty('--b', colors[Math.floor(gsap.utils.random(0, 4))]); 64 | parent.appendChild(dot); 65 | gsap.set(dot, { 66 | opacity: 0, 67 | x: x, 68 | y: y, 69 | scale: gsap.utils.random(.4, .7) 70 | }); 71 | gsap.timeline({ 72 | onComplete() { 73 | dot.remove(); 74 | } 75 | }).to(dot, { 76 | duration: .05, 77 | opacity: 1 78 | }, 0).to(dot, { 79 | duration: 1.8, 80 | rotationX: `-=${gsap.utils.random(720, 1440)}`, 81 | rotationZ: `+=${gsap.utils.random(720, 1440)}`, 82 | physics2D: { 83 | angle: angle, 84 | velocity: velocity, 85 | gravity: 120 86 | } 87 | }, 0).to(dot, { 88 | duration: 1, 89 | opacity: 0 90 | }, .8); 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /views/index.ejs: -------------------------------------------------------------------------------- 1 | <%- include('components/header'); %> 2 |
3 |
4 |
5 |
6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 |
19 |
20 |
21 |
22 |

Welcome back 🃏 23 |

24 | 25 |
26 | 27 |
28 |
29 |
30 |
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 |
Target NameStarted DateMore info
42 |
43 |
44 | 45 | 46 | <% cred.forEach((item)=> { 47 | let targetname = (item.targetname); 48 | let createdat = (item.createdat); 49 | let scopeStatus = item.recOn; 50 | 51 | %> 52 | 53 | 54 | 55 | 56 | 72 | 73 | <% }) %> 74 | 75 | 76 | 77 | 78 | 79 | 80 |
<%= targetname %><%= createdat %> 57 | <% if (scopeStatus==="pending" ) { %> 58 | 59 | 60 |

<%= scopeStatus %>

61 | 62 |
63 | <% } else { %> 64 | 65 | 66 |

Recon info

67 | 68 |
69 | <% } %> 70 | 71 |
81 |
82 |
83 | 84 | 85 |
86 |
87 | 88 |
89 |
90 | 91 | <%- include('components/footer'); %> -------------------------------------------------------------------------------- /Assets/svgs/new.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Assets/css/dashboard.css: -------------------------------------------------------------------------------- 1 | client { 2 | display: none; 3 | } 4 | 5 | p { 6 | margin-block-start: 0; 7 | margin-block-end: 0; 8 | } 9 | 10 | .clientName, 11 | .date { 12 | font-size: 14px; 13 | } 14 | 15 | .left { 16 | color: white; 17 | font-size: 32px; 18 | } 19 | 20 | .right { 21 | display: flex; 22 | flex-direction: row; 23 | } 24 | 25 | .logo { 26 | width: 80px; 27 | height: 80px; 28 | } 29 | 30 | .brand-sec { 31 | margin-right: 8px; 32 | } 33 | 34 | .product { 35 | color: #20FF8B; 36 | font-size: 38px; 37 | height: 40; 38 | } 39 | 40 | .product::after { 41 | color: white; 42 | content: "Intellect"; 43 | } 44 | 45 | .brand { 46 | color: #D1D1D1; 47 | font-size: 12px; 48 | text-align: center; 49 | } 50 | 51 | .brand::after { 52 | color: #20FF8B; 53 | content: "Cappriciosec"; 54 | } 55 | 56 | 57 | 58 | table { 59 | width: 100%; 60 | table-layout: fixed; 61 | border-radius: 50px; 62 | } 63 | 64 | 65 | 66 | 67 | 68 | thead { 69 | border-radius: 50px; 70 | } 71 | 72 | .tbl-header { 73 | 74 | border-radius: 50px; 75 | 76 | 77 | } 78 | 79 | .tbl-content { 80 | height: auto; 81 | overflow-x: auto; 82 | margin-top: 0px; 83 | 84 | background: white; 85 | color: white; 86 | 87 | 88 | } 89 | center { 90 | padding-left: 50px; 91 | padding-right: 50px; 92 | margin-left: 50px; 93 | margin-right: 50px; 94 | } 95 | .infobox{ 96 | display: flex; 97 | 98 | justify-content: center; 99 | align-items: center; 100 | } 101 | th { 102 | border-radius: 25px; 103 | padding: 20px 15px; 104 | text-align: left; 105 | font-weight: 1em; 106 | font-size: 19px; 107 | background-color: #000000; 108 | text-transform: uppercase; 109 | 110 | } 111 | 112 | td { 113 | padding: 15px; 114 | text-align: left; 115 | 116 | vertical-align: middle; 117 | font-weight: 600; 118 | font-family: 'Biryani', sans-serif; 119 | font-size: 15px; 120 | color: black; 121 | word-wrap: break-word; 122 | /* IE 5.5-7 */ 123 | white-space: -moz-pre-wrap; 124 | /* Firefox 1.0-2.0 */ 125 | white-space: pre-wrap; 126 | background: rgb(255, 255, 255); 127 | 128 | } 129 | 130 | th { 131 | 132 | background-color: rgb(0, 0, 0); 133 | color: white; 134 | 135 | } 136 | 137 | tr { 138 | background-color: rgb(0, 0, 0); 139 | color: black; 140 | height: 40px; 141 | border: 10px solid #cdcdcd; 142 | text-align: center; 143 | } 144 | 145 | tr:nth-child(odd) { 146 | 147 | border-radius: 50px; 148 | } 149 | 150 | 151 | .brand-sec { 152 | margin-right: 8px; 153 | } 154 | 155 | .middle { 156 | 157 | position: sticky; 158 | width: 100%; 159 | text-align: center; 160 | 161 | bottom: 0%; 162 | } 163 | 164 | .btn { 165 | display: inline-block; 166 | width: 90px; 167 | height: 90px; 168 | bottom: 50%; 169 | background: rgb(118, 0, 245); 170 | margin: 10px; 171 | border-radius: 30%; 172 | box-shadow: 0 5px 15px -5px rgb(118, 0, 245); 173 | color: #000000; 174 | overflow: hidden; 175 | position: relative; 176 | } 177 | 178 | .btn i { 179 | line-height: 90px; 180 | font-size: 26px; 181 | transition: 0.2s linear; 182 | } 183 | 184 | .btn:hover i { 185 | transform: scale(1.3); 186 | color: #f1f1f1; 187 | } 188 | 189 | .scope{ 190 | margin-left: 2%; 191 | } 192 | 193 | .btn::before { 194 | content: ""; 195 | position: absolute; 196 | width: 120%; 197 | height: 120%; 198 | background: #000000; 199 | transform: rotate(45deg); 200 | left: -110%; 201 | top: 90%; 202 | } 203 | 204 | .btn:hover::before { 205 | animation: aaa 0.7s 1; 206 | top: -10%; 207 | left: -10%; 208 | } 209 | 210 | @keyframes aaa { 211 | 0% { 212 | left: -110%; 213 | top: 90%; 214 | } 215 | 216 | 50% { 217 | left: 10%; 218 | top: -30%; 219 | } 220 | 221 | 100% { 222 | top: -10%; 223 | left: -10%; 224 | } 225 | } 226 | 227 | .product { 228 | color: #20FF8B; 229 | font-size: 38px; 230 | height: 52; 231 | } 232 | 233 | .product::after { 234 | color: white; 235 | content: "Intellect"; 236 | } 237 | 238 | .brand { 239 | color: #D1D1D1; 240 | font-size: 12px; 241 | text-align: center; 242 | } 243 | 244 | .brand::after { 245 | color: #20FF8B; 246 | content: "Cappriciosec"; 247 | } 248 | 249 | section { 250 | background: black; 251 | color: white; 252 | margin-top: 20px; 253 | width: 97%; 254 | height: auto; 255 | border-radius: 50px; 256 | } 257 | 258 | .fotter { 259 | margin-top: 40px; 260 | padding: 10px; 261 | clear: left; 262 | text-align: center; 263 | font-size: 20px; 264 | font-family: arial; 265 | color: #fff; 266 | } 267 | 268 | .fotter i { 269 | font-style: normal; 270 | color: black; 271 | font-size: 20px; 272 | position: relative; 273 | top: 2px; 274 | } 275 | 276 | .fotter a { 277 | color: #fff; 278 | text-decoration: none; 279 | } 280 | 281 | .fotter a:hover { 282 | text-decoration: underline; 283 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 |
3 | 4 |

5 | 6 | > Cloud-Based, Fast, and Customizable Web Recon Tool. 7 | 8 |

karthi-the-hacker

9 |

karthithehacker

10 | 11 | ## Prerequisites 12 | 13 | - NodeJs 14 | - Python3 15 | - Go 16 | - pip3 17 | - npm 18 | 19 | ### Screen Shots 📸 : 20 |

21 |

Screen Shot 1

22 |

Gh0stR3c0n

23 |

Screen Shot 2

24 |

Gh0stR3c0n

25 | 26 | 27 | 28 | 29 | 30 | ## Steps to install for Linux & Mac🐧 👨🏽‍💻: 31 | 32 |

Gh0stR3c0n

33 | 34 |

35 | kali 36 | debian 37 | parrot os 38 | blackbox 39 | ubuntu 40 | 41 | 42 | 43 | ## Installation and Example 44 | 45 | 1. Install NodeJS [Instructions Here](https://nodejs.org/en/download/package-manager/) (If you can't figure this out, you shouldn't really be using this) 46 | 47 | - Github 48 | - click [HERE](https://github.com/karthi-the-hacker/ghostrecon.git) for downloads 49 | - Change Directory 50 | - `cd ghostrecon` 51 | 52 | 2. Setting up `Ghostrecon` 53 | 54 | - Running Setup scripts 55 | - `mkdir ~/recon` 56 | - `mkdir ~/recon/ghostrecon/` 57 | - `chmod +x index.js` 58 | - `chmod +x setup.sh` 59 | - `./setup.sh` if the setup shows any error install the requirements manually 60 | - ` npm i ` If incase setup shows any error run this command 61 | 62 | 4. Configurations 63 | - Telegram Notification 64 | - `nano config.yaml` 65 | - `chat_ID: your_ChatID` Replace with your telegram chat id 66 | - Open your telegram and search for [`@CappricioSecuritiesTools_bot`](https://web.telegram.org/k/#@CappricioSecuritiesTools_bot) and click start 67 | 68 | - Github Recon 69 | - `github_token: your_github_token` Replace with your Github Token 70 | 71 | 72 | - Deep Recon 73 | - `Subs_Scan_Fast: True` True disable the Subdomain Brute-forcing & Amass 74 | - `Subs_of_Subs: True` True disable the Subdomains of Subdomain discovery 75 | - By default, changes are saved as 'True' according to your preference. 76 | - Save and Exit 77 | 78 | 5. Starting Ghostrecon 79 | - Run Command 80 | - `./index.js` To start Ghost Recon run this command 81 | - Start Recon 82 | - `open http://localhost:8090` Open this url in your browser 83 | - `open http://localhost:8090/new` Start new recon 84 | 85 | ## Features ⚙️ : 86 | 87 | - SubDomain Recon. 88 | - SubDomains of SubDomain Recon. 89 | - Finding Live with unique open ports. 90 | - Finding open ports. 91 | - WebCrawling. 92 | - Pattern Matching. 93 | - GUI Modern Web interface 94 | - Telegram Bot 🔔 Notification 🔔 [`@CappricioSecuritiesTools_bot`](https://web.telegram.org/k/#@CappricioSecuritiesTools_bot) 95 | 96 | ### Required tools ⚒️ : 97 | 98 | - [Amass](https://github.com/OWASP/Amass) 99 | - [Subfinder](https://github.com/projectdiscovery/subfinder) 100 | - [Naabu](https://github.com/projectdiscovery/naabu) 101 | - [Httpx](https://github.com/projectdiscovery/httpx) 102 | - [Katana](https://github.com/projectdiscovery/katana) 103 | - [gf](https://github.com/tomnomnom/gf) 104 | - [gf-Patterns](https://github.com/1ndianl33t/Gf-Patterns) 105 | 106 |

Connect with me:

107 |

108 | karthithehacker 109 | cyberspartan 110 | karthithehacker 111 | karthithehacker 112 |

113 | 114 | -------------------------------------------------------------------------------- /Assets/css/flash.css: -------------------------------------------------------------------------------- 1 | .flash { 2 | display: block; 3 | position: fixed; 4 | top: 25px; 5 | right: 25px; 6 | width: 350px; 7 | padding: 20px 25px 20px 85px; 8 | font-size: 16px; 9 | font-weight: 400; 10 | color: #000000; 11 | background-color: #FFF; 12 | border: 2px solid #ffffff; 13 | border-radius: 2px; 14 | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25); 15 | opacity: 0; 16 | } 17 | 18 | .flash__icon { 19 | position: absolute; 20 | top: 50%; 21 | left: 0; 22 | width: 1.8em; 23 | height: 100%; 24 | padding: 0 0.4em; 25 | background-color: #000000; 26 | color: #FFF; 27 | font-size: 36px; 28 | font-weight: 300; 29 | transform: translate(0, -50%); 30 | } 31 | 32 | .flash__icon .icon { 33 | position: absolute; 34 | top: 50%; 35 | transform: translate(0, -50%); 36 | } 37 | 38 | 39 | 40 | @-webkit-keyframes drop-in-fade-out { 41 | 0% { 42 | opacity: 0; 43 | visibility: visible; 44 | -webkit-transform: translate3d(0, -200%, 0); 45 | -moz-transform: translate3d(0, -200%, 0); 46 | -ms-transform: translate3d(0, -200%, 0); 47 | -o-transform: translate3d(0, -200%, 0); 48 | transform: translate3d(0, -200%, 0); 49 | } 50 | 51 | 12% { 52 | -webkit-transform: translate3d(0, 0, 0); 53 | -moz-transform: translate3d(0, 0, 0); 54 | -ms-transform: translate3d(0, 0, 0); 55 | -o-transform: translate3d(0, 0, 0); 56 | transform: translate3d(0, 0, 0); 57 | } 58 | 59 | 20% { 60 | opacity: 1; 61 | } 62 | 63 | 70% { 64 | opacity: 1; 65 | visibility: visible; 66 | -webkit-transform: translate3d(0, 0, 0); 67 | -moz-transform: translate3d(0, 0, 0); 68 | -ms-transform: translate3d(0, 0, 0); 69 | -o-transform: translate3d(0, 0, 0); 70 | transform: translate3d(0, 0, 0); 71 | } 72 | 73 | 80% { 74 | opacity: 0; 75 | } 76 | 77 | 100% { 78 | visibility: hidden; 79 | -webkit-transform: translate3d(75%, 0, 0); 80 | -moz-transform: translate3d(75%, 0, 0); 81 | -ms-transform: translate3d(75%, 0, 0); 82 | -o-transform: translate3d(75%, 0, 0); 83 | transform: translate3d(25%, 0, 0); 84 | } 85 | } 86 | 87 | @-moz-keyframes drop-in-fade-out { 88 | 0% { 89 | opacity: 0; 90 | visibility: visible; 91 | -webkit-transform: translate3d(0, -200%, 0); 92 | -moz-transform: translate3d(0, -200%, 0); 93 | -ms-transform: translate3d(0, -200%, 0); 94 | -o-transform: translate3d(0, -200%, 0); 95 | transform: translate3d(0, -200%, 0); 96 | } 97 | 98 | 12% { 99 | -webkit-transform: translate3d(0, 0, 0); 100 | -moz-transform: translate3d(0, 0, 0); 101 | -ms-transform: translate3d(0, 0, 0); 102 | -o-transform: translate3d(0, 0, 0); 103 | transform: translate3d(0, 0, 0); 104 | } 105 | 106 | 20% { 107 | opacity: 1; 108 | } 109 | 110 | 70% { 111 | opacity: 1; 112 | visibility: visible; 113 | -webkit-transform: translate3d(0, 0, 0); 114 | -moz-transform: translate3d(0, 0, 0); 115 | -ms-transform: translate3d(0, 0, 0); 116 | -o-transform: translate3d(0, 0, 0); 117 | transform: translate3d(0, 0, 0); 118 | } 119 | 120 | 80% { 121 | opacity: 0; 122 | } 123 | 124 | 100% { 125 | visibility: hidden; 126 | -webkit-transform: translate3d(75%, 0, 0); 127 | -moz-transform: translate3d(75%, 0, 0); 128 | -ms-transform: translate3d(75%, 0, 0); 129 | -o-transform: translate3d(75%, 0, 0); 130 | transform: translate3d(25%, 0, 0); 131 | } 132 | } 133 | 134 | @-o-keyframes drop-in-fade-out { 135 | 0% { 136 | opacity: 0; 137 | visibility: visible; 138 | -webkit-transform: translate3d(0, -200%, 0); 139 | -moz-transform: translate3d(0, -200%, 0); 140 | -ms-transform: translate3d(0, -200%, 0); 141 | -o-transform: translate3d(0, -200%, 0); 142 | transform: translate3d(0, -200%, 0); 143 | } 144 | 145 | 12% { 146 | -webkit-transform: translate3d(0, 0, 0); 147 | -moz-transform: translate3d(0, 0, 0); 148 | -ms-transform: translate3d(0, 0, 0); 149 | -o-transform: translate3d(0, 0, 0); 150 | transform: translate3d(0, 0, 0); 151 | } 152 | 153 | 20% { 154 | opacity: 1; 155 | } 156 | 157 | 70% { 158 | opacity: 1; 159 | visibility: visible; 160 | -webkit-transform: translate3d(0, 0, 0); 161 | -moz-transform: translate3d(0, 0, 0); 162 | -ms-transform: translate3d(0, 0, 0); 163 | -o-transform: translate3d(0, 0, 0); 164 | transform: translate3d(0, 0, 0); 165 | } 166 | 167 | 80% { 168 | opacity: 0; 169 | } 170 | 171 | 100% { 172 | visibility: hidden; 173 | -webkit-transform: translate3d(75%, 0, 0); 174 | -moz-transform: translate3d(75%, 0, 0); 175 | -ms-transform: translate3d(75%, 0, 0); 176 | -o-transform: translate3d(75%, 0, 0); 177 | transform: translate3d(25%, 0, 0); 178 | } 179 | } 180 | 181 | @keyframes drop-in-fade-out { 182 | 0% { 183 | opacity: 0; 184 | visibility: visible; 185 | -webkit-transform: translate3d(0, -200%, 0); 186 | -moz-transform: translate3d(0, -200%, 0); 187 | -ms-transform: translate3d(0, -200%, 0); 188 | -o-transform: translate3d(0, -200%, 0); 189 | transform: translate3d(0, -200%, 0); 190 | } 191 | 192 | 12% { 193 | -webkit-transform: translate3d(0, 0, 0); 194 | -moz-transform: translate3d(0, 0, 0); 195 | -ms-transform: translate3d(0, 0, 0); 196 | -o-transform: translate3d(0, 0, 0); 197 | transform: translate3d(0, 0, 0); 198 | } 199 | 200 | 20% { 201 | opacity: 1; 202 | } 203 | 204 | 70% { 205 | opacity: 1; 206 | visibility: visible; 207 | -webkit-transform: translate3d(0, 0, 0); 208 | -moz-transform: translate3d(0, 0, 0); 209 | -ms-transform: translate3d(0, 0, 0); 210 | -o-transform: translate3d(0, 0, 0); 211 | transform: translate3d(0, 0, 0); 212 | } 213 | 214 | 80% { 215 | opacity: 0; 216 | } 217 | 218 | 100% { 219 | visibility: hidden; 220 | -webkit-transform: translate3d(75%, 0, 0); 221 | -moz-transform: translate3d(75%, 0, 0); 222 | -ms-transform: translate3d(75%, 0, 0); 223 | -o-transform: translate3d(75%, 0, 0); 224 | transform: translate3d(25%, 0, 0); 225 | } 226 | } 227 | 228 | .animate--drop-in-fade-out { 229 | -webkit-animation: drop-in-fade-out 3.5s 0.4s cubic-bezier(.32, 1.75, .65, .91); 230 | -moz-animation: drop-in-fade-out 3.5s 0.4s cubic-bezier(.32, 1.75, .65, .91); 231 | -ms-animation: drop-in-fade-out 3.5s 0.4s cubic-bezier(.32, 1.75, .65, .91); 232 | -o-animation: drop-in-fade-out 3.5s 0.4s cubic-bezier(.32, 1.75, .65, .91); 233 | animation: drop-in-fade-out 3.5s 0.4s cubic-bezier(.32, 1.75, .65, .91); 234 | } -------------------------------------------------------------------------------- /Assets/css/button.css: -------------------------------------------------------------------------------- 1 | .button { 2 | --background: #000000; 3 | --color: #F6F8FF; 4 | --shadow: rgba(0, 9, 61, 0.24); 5 | --cannon-dark: #A6ACCD; 6 | --cannon-light: #F6F8FF; 7 | --cannon-shadow: rgba(13, 15, 24, 0.9); 8 | --confetti-1: #892AB8; 9 | --confetti-2: #EA4C89; 10 | --confetti-3: #FFFF04; 11 | --confetti-4: #4AF2FD; 12 | --z-before: -6; 13 | display: block; 14 | width: 200px; 15 | height: 50px; 16 | 17 | outline: none; 18 | cursor: pointer; 19 | position: relative; 20 | 21 | border: 0; 22 | background: none; 23 | padding: 9px 22px 9px 16px; 24 | line-height: 26px; 25 | font-family: inherit; 26 | font-weight: 600; 27 | font-size: 14px; 28 | color: var(--color); 29 | -webkit-appearance: none; 30 | -webkit-tap-highlight-color: transparent; 31 | transition: transform var(--transform-duration, 0.4s); 32 | will-change: transform; 33 | transform-style: preserve-3d; 34 | transform: perspective(440px) rotateX(calc(var(--rx, 0) * 1deg)) rotateY(calc(var(--ry, 0) * 1deg)) translateZ(0); 35 | } 36 | 37 | .button:hover { 38 | --transform-duration: .16s; 39 | } 40 | 41 | .button.success { 42 | --confetti-scale: 0; 43 | --stroke-dashoffset: 15; 44 | } 45 | 46 | .button:before { 47 | content: ""; 48 | position: absolute; 49 | left: 0; 50 | top: 0; 51 | right: 0; 52 | bottom: 0; 53 | border-radius: 12px; 54 | transform: translateZ(calc(var(--z-before) * 1px)); 55 | background: var(--background); 56 | box-shadow: 0 4px 8px var(--shadow); 57 | } 58 | 59 | .button .icon, 60 | .button span { 61 | margin-top: -10px; 62 | display: inline-block; 63 | vertical-align: top; 64 | position: relative; 65 | z-index: 1; 66 | } 67 | .rectes{ 68 | text-decoration: none; 69 | color: white; 70 | font-size: 1em; 71 | } 72 | 73 | .lk{ 74 | text-decoration: none; 75 | text-align: right; 76 | margin-top: -50px; 77 | height: 70px; 78 | display: flex; 79 | align-items: center; 80 | justify-content: center; 81 | background: #000000; 82 | border-radius: 20px; 83 | width: 200px; 84 | } 85 | 86 | .button .icon { 87 | --z: 2px; 88 | 89 | 90 | width: 100px; 91 | height: 14px; 92 | margin: 8px 16px 0 0; 93 | transform: translate(calc(var(--icon-x, 0) * 1px), calc(var(--icon-y, 0) * 1px)) translateZ(2px); 94 | } 95 | 96 | .button .icon .confetti { 97 | position: absolute; 98 | left: 17px; 99 | bottom: 9px; 100 | } 101 | 102 | .button .icon .confetti svg { 103 | width: 18px; 104 | height: 16px; 105 | display: block; 106 | stroke-width: 1px; 107 | fill: none; 108 | stroke-linejoin: round; 109 | stroke-linecap: round; 110 | } 111 | 112 | .button .icon .confetti svg * { 113 | transition: stroke-dashoffset 0.2s; 114 | stroke-dasharray: 15 20; 115 | stroke-dashoffset: var(--stroke-dashoffset, 0); 116 | stroke: var(--stroke-all, var(--stroke, var(--confetti-2))); 117 | } 118 | 119 | .button .icon .confetti svg *:nth-child(2) { 120 | --stroke: var(--confetti-3); 121 | } 122 | 123 | .button .icon .confetti svg *:nth-child(3) { 124 | --stroke: var(--confetti-1); 125 | } 126 | 127 | .button .icon .confetti .emitter { 128 | position: absolute; 129 | left: 4px; 130 | bottom: 4px; 131 | pointer-events: none; 132 | } 133 | 134 | .button .icon .confetti .emitter div { 135 | width: 4px; 136 | height: 4px; 137 | margin: -2px 0 0 -2px; 138 | border-radius: 1px; 139 | position: absolute; 140 | left: 0; 141 | top: 0; 142 | transform-style: preserve-3d; 143 | background: var(--confetti-all, var(--b, none)); 144 | } 145 | 146 | .button .icon .confetti i { 147 | width: 4px; 148 | height: 4px; 149 | display: block; 150 | transform: scale(var(--confetti-scale, 0.5)); 151 | position: absolute; 152 | transition: transform 0.25s; 153 | left: var(--left, -1px); 154 | top: var(--top, 3px); 155 | border-radius: var(--border-radius, 1px); 156 | background: var(--confetti-background, var(--confetti-3)); 157 | } 158 | 159 | .button .icon .confetti i:nth-child(2) { 160 | --left: 9px; 161 | --top: -1px; 162 | --border-radius: 2px; 163 | --confetti-background: var(--confetti-4); 164 | } 165 | 166 | .button .icon .confetti i:nth-child(3) { 167 | --left: 5px; 168 | --top: 3px; 169 | --confetti-background: var(--confetti-1); 170 | } 171 | 172 | .button .icon .confetti i:nth-child(4) { 173 | --left: 10px; 174 | --top: 14px; 175 | --confetti-background: var(--confetti-2); 176 | } 177 | 178 | .button .icon .confetti i:nth-child(5) { 179 | --left: 9px; 180 | --top: 7px; 181 | --confetti-background: var(--confetti-4); 182 | } 183 | 184 | .button .icon .confetti i:nth-child(6) { 185 | --left: 6px; 186 | --top: 8px; 187 | --border-radius: 2px; 188 | --confetti-background: var(--confetti-2); 189 | } 190 | 191 | .button .icon .cannon { 192 | position: relative; 193 | width: 24px; 194 | height: 14px; 195 | transform: translate(0, 3px) rotate(-45deg); 196 | filter: drop-shadow(-2px 2px 2px var(--cannon-shadow)); 197 | } 198 | 199 | .button .icon .cannon:before, 200 | .button .icon .cannon:after { 201 | content: ""; 202 | display: block; 203 | height: 14px; 204 | } 205 | 206 | .button .icon .cannon:before { 207 | background: linear-gradient(var(--cannon-dark), var(--cannon-light) 50%, var(--cannon-dark)); 208 | width: 100%; 209 | -webkit-clip-path: polygon(25px -1px, 0 52%, 25px 15px); 210 | clip-path: polygon(25px -1px, 0 52%, 25px 15px); 211 | } 212 | 213 | .button .icon .cannon:after { 214 | width: 6px; 215 | position: absolute; 216 | right: -3px; 217 | top: 0; 218 | border-radius: 50%; 219 | box-shadow: inset 0 0 0 0.5px var(--cannon-light); 220 | background: linear-gradient(90deg, var(--cannon-dark), var(--cannon-light)); 221 | } 222 | 223 | .button.white { 224 | --background: #fff; 225 | --color: #1E2235; 226 | --border: #E1E6F9; 227 | --shadow: none; 228 | --cannon-dark: #103FC5; 229 | --cannon-light: #275EFE; 230 | --cannon-shadow: rgba(0, 9, 61, 0.2); 231 | } 232 | 233 | .button.white:before { 234 | box-shadow: inset 0 0 0 1px var(--border); 235 | } 236 | 237 | .button.grey { 238 | --background: #000000; 239 | --cannon-shadow: rgb(0, 0, 0); 240 | --cannon-dark: #D1D6EE; 241 | --cannon-light: #FFFFFF; 242 | } 243 | 244 | html { 245 | box-sizing: border-box; 246 | -webkit-font-smoothing: antialiased; 247 | } 248 | 249 | * { 250 | box-sizing: inherit; 251 | } 252 | 253 | *:before, 254 | *:after { 255 | box-sizing: inherit; 256 | } 257 | 258 | 259 | 260 | body .button { 261 | margin: 0 12px; 262 | } 263 | 264 | body .dribbble { 265 | position: fixed; 266 | display: block; 267 | right: 20px; 268 | bottom: 20px; 269 | } 270 | 271 | body .dribbble img { 272 | display: block; 273 | height: 28px; 274 | } 275 | 276 | body .twitter { 277 | position: fixed; 278 | display: block; 279 | right: 64px; 280 | bottom: 14px; 281 | } 282 | 283 | body .twitter svg { 284 | width: 32px; 285 | height: 32px; 286 | fill: #1da1f2; 287 | } -------------------------------------------------------------------------------- /views/bughunting.ejs: -------------------------------------------------------------------------------- 1 | <%- include('components/header'); %> 2 | <% if (sucess>1) { %> 3 |
4 |
5 | 6 |
7 |

8 | Success! 9 |

10 |
11 |
12 |
13 |
14 |
15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 |
28 |
29 |
30 |
31 |

Welcome back 🃏 32 |

33 | 34 |
35 | 36 |
37 |
38 |
39 | 41 |
42 |
43 |
44 | 45 | 46 | 47 | 48 |
49 | 50 |
51 | 52 | 53 |
54 | 70 | 86 | 87 |
88 | 89 |
90 |
91 |
92 |
93 | <%} else { %> 94 |
95 |
96 |
97 |
98 |
99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 |
110 |
111 |
112 |
113 |
114 |

Welcome back 🃏 115 |

116 | 117 |
118 | 119 |
120 |
121 |
122 | 124 |
125 |
126 |
127 | 128 | 129 | 130 | 131 |
132 | 133 |
134 | 135 | 136 |
137 | 153 | 169 | 170 |
171 | 172 |
173 |
174 |
175 |
176 | <% } %> 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | <%- include('components/footer'); %> -------------------------------------------------------------------------------- /Assets/css/index.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Rubik:300,300i,400,400i,500,500i,700,700i,900,900i&display=swap&subset=cyrillic"); 2 | @import url("https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;700&family=Playfair+Display:ital,wght@0,400;0,500;0,600;0,700;0,800;0,900;1,400;1,500;1,600;1,700;1,800;1,900&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"); 3 | @import url('https://fonts.googleapis.com/css2?family=Biryani:wght@200&family=Quicksand:wght@300&display=swap'); 4 | @import url('https://fonts.googleapis.com/css2?family=Biryani:wght@200&family=Megrim&family=Quicksand:wght@300&display=swap'); 5 | @font-face { 6 | font-family: hacker; 7 | src: url(/font/Hacked-KerX.ttf); 8 | } 9 | 10 | @font-face { 11 | font-family: blade; 12 | src: url(/font/Blade2-oveV.ttf); 13 | } 14 | 15 | @font-face { 16 | font-family: sword; 17 | src: url(/font/SwordThrasher-6ZE6.ttf); 18 | } 19 | 20 | @font-face { 21 | font-family: water; 22 | src: url(/font/Waterlily_Script.ttf); 23 | } 24 | 25 | 26 | @import url('https://fonts.googleapis.com/css2?family=Quicksand:wght@300&display=swap'); 27 | 28 | 29 | body { 30 | background: black; 31 | padding: 0; 32 | margin-top: 30px; 33 | font-family: 'Megrim', cursive; 34 | display: flex; 35 | align-items: center; 36 | justify-content: center; 37 | flex-flow: column; 38 | color: black; 39 | } 40 | .htext{ 41 | font-family: 'Megrim', cursive; 42 | } 43 | .htexts { 44 | margin-left: 10px; 45 | margin-bottom: 20px; 46 | font-family: 'Megrim', cursive; 47 | } 48 | h1 { 49 | 50 | margin-top: 20px; 51 | margin-left: 10px; 52 | } 53 | 54 | h2 { 55 | margin: 0; 56 | font-size: 10px; 57 | font-weight: 300; 58 | color: grey; 59 | } 60 | 61 | .text-small { 62 | font-size: 9px; 63 | margin-bottom: -35px; 64 | } 65 | 66 | .text-small h1 { 67 | color: white; 68 | margin-top: -10%; 69 | margin-bottom: -20px; 70 | font-size: 12px; 71 | } 72 | 73 | .text-small p { 74 | 75 | margin-top: -20px; 76 | margin-bottom: -10px; 77 | 78 | } 79 | 80 | .text-medium { 81 | font-size: 12px; 82 | } 83 | 84 | .text-large { 85 | font-size: 16px; 86 | } 87 | 88 | .success { 89 | color: #85ff85; 90 | } 91 | 92 | .server { 93 | color: #ff0000; 94 | background: #630c0c5b; 95 | } 96 | 97 | .app-container { 98 | width: 95vw; 99 | height: 90vh; 100 | background: rgb(255, 255, 255); 101 | border-radius: 20px; 102 | } 103 | 104 | .flex-container { 105 | display: flex; 106 | } 107 | 108 | .flex-center { 109 | display: flex; 110 | align-items: center; 111 | justify-content: center; 112 | } 113 | 114 | .flex-row { 115 | display: flex; 116 | flex-flow: row; 117 | align-items: center; 118 | position: relative; 119 | } 120 | 121 | .flex-apart { 122 | justify-content: space-between; 123 | } 124 | 125 | .flex-column { 126 | display: flex; 127 | flex-flow: column; 128 | } 129 | 130 | #app-nav { 131 | width: 7%; 132 | position: relative; 133 | border-radius: 25px; 134 | top:5%; 135 | left: 1.7%; 136 | background: black; 137 | height: 90%; 138 | box-shadow: 0px -2px 50px 7px rgba(0, 0, 0, 0.4); 139 | } 140 | 141 | #app-dashboard { 142 | flex: 9; 143 | padding: 20px; 144 | position: relative; 145 | width: 80%; 146 | left: 1%; 147 | } 148 | 149 | #app-sidepanel { 150 | flex: 3; 151 | background: #080624; 152 | border-left: solid 1px #8080801f; 153 | padding: 20px; 154 | border-radius: 20px; 155 | overflow: overlay; 156 | } 157 | 158 | #app-search { 159 | border: 0; 160 | padding: 10px; 161 | color: white; 162 | border-radius: 5px; 163 | background: #7e7e7e1f; 164 | } 165 | 166 | .fa-search { 167 | margin-left: -25px; 168 | position: absolute; 169 | margin-top: 8px; 170 | opacity: .3; 171 | } 172 | 173 | .nav-item { 174 | margin: 20px; 175 | padding: 15px 5px; 176 | color: white; 177 | cursor: pointer; 178 | border-radius: 5px; 179 | 180 | } 181 | 182 | .nav-item:hover, 183 | .nav-item.active { 184 | background: white; 185 | transition: .5s; 186 | color: black; 187 | box-shadow: 0px -2px 53px 22px rgba(255, 255, 255, 0.2); 188 | } 189 | 190 | #logo { 191 | width: 80%; 192 | height: auto; 193 | border-radius: 20px; 194 | margin: 25px 0 22px 0; 195 | 196 | } 197 | 198 | #dashboard-header { 199 | height: 10%; 200 | min-height: 75px; 201 | align-items: baseline; 202 | } 203 | 204 | 205 | .dashboard-container { 206 | position: relative; 207 | flex: 1; 208 | height: -webkit-fill-available; 209 | } 210 | 211 | .dashboard-item { 212 | background: black; 213 | border-radius: 10px; 214 | padding: 30px 20px 10px 20px; 215 | margin: 10px; 216 | height: calc(100% - 60px); 217 | } 218 | 219 | .dashboard-row { 220 | flex: 1; 221 | } 222 | 223 | .dashboard-row-large { 224 | flex: 3; 225 | } 226 | 227 | .dashboard-column { 228 | flex: 1; 229 | height: 100%; 230 | } 231 | 232 | .flex-row .dashboard-container:first-child .dashboard-item { 233 | margin-left: 0; 234 | } 235 | 236 | .flex-row .dashboard-column .dashboard-container:first-child .dashboard-item { 237 | margin-left: 10px; 238 | } 239 | 240 | .flex-row .dashboard-container:last-child .dashboard-item, 241 | .flex-row .dashboard-column .dashboard-item { 242 | margin-right: 0; 243 | } 244 | 245 | .dashboard-container-large { 246 | flex: 2; 247 | } 248 | 249 | .dashboard-row-large .dashboard-item { 250 | padding-top: 10px; 251 | height: calc(100% - 40px); 252 | } 253 | 254 | .dashboard-container .text-large { 255 | margin: 10px 0 0 0; 256 | } 257 | 258 | .dashboard-container .text-small { 259 | opacity: .4; 260 | white-space: pre; 261 | } 262 | 263 | .dashboard-container-logo { 264 | position: relative; 265 | } 266 | 267 | #dashboard-charts { 268 | position: relative; 269 | height: 80%; 270 | width: 100%; 271 | overflow: overlay; 272 | } 273 | 274 | .dashboard-container-logo img { 275 | width: 30px; 276 | position: absolute; 277 | left: calc(50% - 15px); 278 | top: -40px; 279 | } 280 | 281 | #chart1, 282 | #chart2, 283 | #chart3 { 284 | max-width: 200px; 285 | height: 50px; 286 | } 287 | 288 | #chart1 { 289 | --color: #f79319; 290 | } 291 | 292 | #chart2 { 293 | --color: #345d9d; 294 | } 295 | 296 | #chart3 { 297 | --color: #d9327b; 298 | } 299 | 300 | #chart4 { 301 | width: 100%; 302 | height: 75%; 303 | min-height: 200px; 304 | } 305 | 306 | .charts-css { 307 | --color-1: #f79319; 308 | --color-2: #345d9d; 309 | --color-3: #d9327b; 310 | } 311 | 312 | .chart-container { 313 | position: relative; 314 | border-radius: 10px; 315 | overflow: hidden; 316 | } 317 | 318 | .chart-overlay { 319 | width: 100%; 320 | height: 100%; 321 | position: absolute; 322 | top: 0; 323 | left: 0; 324 | background-image: linear-gradient(to left, rgb(255 0 0 / 0%), #191737); 325 | z-index: 1; 326 | opacity: 1; 327 | border-radius: 10px; 328 | } 329 | 330 | .chart-header { 331 | width: 100%; 332 | } 333 | 334 | .chart-header i { 335 | margin-left: 5px; 336 | } 337 | 338 | .chart-header .dropdown { 339 | padding: 10px; 340 | border-radius: 10px; 341 | background: #ffffff1f; 342 | cursor: pointer; 343 | } 344 | 345 | .chart-legend-circle { 346 | width: 8px; 347 | height: 8px; 348 | display: block; 349 | background: rebeccapurple; 350 | border-radius: 50%; 351 | margin: 30px 15px; 352 | } 353 | 354 | .profit-item, 355 | .transaction-item { 356 | padding: 10px 0; 357 | } 358 | 359 | .profit-item i, 360 | .transaction-item i { 361 | padding: 15px; 362 | border-radius: 10px; 363 | margin-right: 15px; 364 | opacity: .5; 365 | } 366 | 367 | .profit-item i.success { 368 | background: #1a6c1a30; 369 | } 370 | 371 | .profit-item i.alert { 372 | background: #ff000030; 373 | } 374 | 375 | .flex-column .profit-item:first-child { 376 | border-bottom: dashed 1px #ffffff0d; 377 | } 378 | 379 | .profit-item .text-small { 380 | margin-top: 3px; 381 | margin-right: 3px; 382 | opacity: .3; 383 | } 384 | 385 | #transfer-now input { 386 | background: #7e7e7e1f; 387 | border: 0; 388 | border-radius: 5px; 389 | padding: 12px; 390 | margin: 5px 0; 391 | width: 100%; 392 | font-size: 10px; 393 | } 394 | 395 | #transfer-now button { 396 | padding: 10px; 397 | background: rgb(118, 0, 245); 398 | border: 0; 399 | width: 100%; 400 | margin-top: 10px; 401 | border-radius: 7px; 402 | color: white; 403 | font-weight: 600; 404 | cursor: pointer; 405 | } 406 | 407 | #app-sidepanel .header-icon { 408 | padding: 15px; 409 | background: #7e7e7e1f; 410 | cursor: pointer; 411 | border-radius: 50%; 412 | font-size: 12px; 413 | margin: 0 0 20px 0; 414 | } 415 | 416 | #app-sidepanel img { 417 | width: 100%; 418 | opacity: .7; 419 | } 420 | 421 | .dot { 422 | width: 8px; 423 | height: 8px; 424 | display: block; 425 | background: #7e7e7e63; 426 | border-radius: 50%; 427 | margin: 10px 5px; 428 | cursor: pointer; 429 | } 430 | 431 | .dot.active { 432 | background: rebeccapurple; 433 | } 434 | 435 | .transaction-item i { 436 | background: #8080803d; 437 | } 438 | 439 | .transaction-item .text-small { 440 | opacity: .3; 441 | } 442 | 443 | .transaction-item .flex-apart { 444 | width: 100%; 445 | } 446 | 447 | .transaction-item .transaction-price { 448 | align-items: flex-end; 449 | /* justify-content: start; */ 450 | display: flex; 451 | flex-flow: column; 452 | } 453 | 454 | .transaction-item .transaction-price span.text-small { 455 | margin-right: 3px; 456 | } 457 | 458 | #upgrade-area i { 459 | margin: 30px 0 10px 0; 460 | font-size: 20px; 461 | padding: 13px; 462 | border: solid 1px #ffffff61; 463 | border-radius: 50%; 464 | color: #625599; 465 | } 466 | 467 | #upgrade-area .flex-center { 468 | text-align: center; 469 | opacity: .7; 470 | } 471 | 472 | #upgrade-area button { 473 | padding: 10px; 474 | background: #49464e70; 475 | border: 0; 476 | width: 100%; 477 | margin-top: 10px; 478 | border-radius: 7px; 479 | color: white; 480 | font-weight: 600; 481 | cursor: pointer; 482 | } 483 | 484 | .header-div { 485 | background: black; 486 | display: flex; 487 | position: relative; 488 | height: 300px; 489 | width: 100%; 490 | border-radius: 20px; 491 | margin-bottom: 10px; 492 | } 493 | 494 | .img-txt { 495 | display: flex; 496 | } 497 | 498 | .img-txt img { 499 | border-radius: 50%; 500 | } 501 | 502 | .right img { 503 | 504 | 505 | border-radius: 50%; 506 | border: 2px solid rgb(118, 0, 245); 507 | 508 | } 509 | 510 | .left { 511 | margin-right: 20px; 512 | display: flex; 513 | align-items: center; 514 | justify-content: center; 515 | } 516 | 517 | .right { 518 | margin-top: 10px; 519 | margin-left: 20px; 520 | width: 90%; 521 | } 522 | 523 | .right h1 { 524 | font-family: hacker; 525 | letter-spacing: 6px; 526 | font-size: 3em; 527 | } 528 | 529 | .glow-on-hover { 530 | width: 220px; 531 | height: 50px; 532 | border: none; 533 | outline: none; 534 | color: #fff; 535 | background: #111; 536 | cursor: pointer; 537 | position: relative; 538 | z-index: 0; 539 | border-radius: 10px; 540 | } 541 | 542 | .glow-on-hover:before { 543 | content: ''; 544 | background: linear-gradient(45deg, #ff0000, #ff7300, #fffb00, #48ff00, #00ffd5, #002bff, #7a00ff, #ff00c8, #ff0000); 545 | position: absolute; 546 | top: -2px; 547 | left: -2px; 548 | background-size: 400%; 549 | z-index: -1; 550 | filter: blur(5px); 551 | width: calc(100% + 4px); 552 | height: calc(100% + 4px); 553 | animation: glowing 20s linear infinite; 554 | opacity: 0; 555 | transition: opacity .3s ease-in-out; 556 | border-radius: 10px; 557 | } 558 | 559 | .glow-on-hover:active { 560 | color: #000 561 | } 562 | 563 | .glow-on-hover:active:after { 564 | background: transparent; 565 | } 566 | 567 | .glow-on-hover:hover:before { 568 | opacity: 1; 569 | } 570 | 571 | .glow-on-hover:after { 572 | z-index: -1; 573 | content: ''; 574 | position: absolute; 575 | width: 100%; 576 | height: 100%; 577 | background: #111; 578 | left: 0; 579 | top: 0; 580 | border-radius: 10px; 581 | } 582 | 583 | @keyframes glowing { 584 | 0% { 585 | background-position: 0 0; 586 | } 587 | 588 | 50% { 589 | background-position: 400% 0; 590 | } 591 | 592 | 100% { 593 | background-position: 0 0; 594 | } 595 | } 596 | 597 | .terminal-window { 598 | text-align: left; 599 | width: auto; 600 | height: 480px; 601 | border-radius: 10px; 602 | margin-top: 10px; 603 | position: relative; 604 | } 605 | 606 | .terminal-window header { 607 | background: rgb(118, 0, 245); 608 | height: 30px; 609 | border-radius: 8px 8px 0 0; 610 | padding-left: 10px; 611 | } 612 | 613 | .terminal-window header .button { 614 | width: 12px; 615 | height: 12px; 616 | margin: 10px 4px 0 0; 617 | display: inline-block; 618 | border-radius: 8px; 619 | } 620 | 621 | .terminal-window header .button.green { 622 | background: #3BB662; 623 | } 624 | 625 | .terminal-window header .button.yellow { 626 | background: #E5C30F; 627 | } 628 | 629 | .terminal-window header .button.red { 630 | background: #E75448; 631 | } 632 | 633 | .terminal-window section.terminal { 634 | color: white; 635 | font-family: Menlo, Monaco, "Consolas", "Courier New", "Courier"; 636 | font-size: 11pt; 637 | background: black; 638 | padding: 10px; 639 | box-sizing: border-box; 640 | position: absolute; 641 | width: 100%; 642 | top: 30px; 643 | bottom: 0; 644 | overflow: auto; 645 | } 646 | 647 | .terminal-window section.terminal .typed-cursor { 648 | opacity: 1; 649 | -webkit-animation: blink 0.7s infinite; 650 | -moz-animation: blink 0.7s infinite; 651 | animation: blink 0.7s infinite; 652 | } 653 | 654 | @keyframes blink { 655 | 0% { 656 | opacity: 1; 657 | } 658 | 659 | 50% { 660 | opacity: 0; 661 | } 662 | 663 | 100% { 664 | opacity: 1; 665 | } 666 | } 667 | 668 | @-webkit-keyframes blink { 669 | 0% { 670 | opacity: 1; 671 | } 672 | 673 | 50% { 674 | opacity: 0; 675 | } 676 | 677 | 100% { 678 | opacity: 1; 679 | } 680 | } 681 | 682 | @-moz-keyframes blink { 683 | 0% { 684 | opacity: 1; 685 | } 686 | 687 | 50% { 688 | opacity: 0; 689 | } 690 | 691 | 100% { 692 | opacity: 1; 693 | } 694 | } 695 | 696 | .terminal-data { 697 | display: none; 698 | } 699 | 700 | .terminal-window .gray { 701 | color: gray; 702 | } 703 | 704 | .terminal-window .green { 705 | color: green; 706 | } -------------------------------------------------------------------------------- /views/targetpage.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | gh0str3con 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 255 | 544 | 1256 | 1541 | 1616 | 1617 | 1618 | 1619 | 1620 | 1621 | 1622 |
1623 | 1624 | <% let subs,bugs,display,d,live,openports,livelen; cred.forEach((item)=> { 1625 | subs = (item.subs); 1626 | 1627 | bugs = (item.bugs); 1628 | live = (item.live); 1629 | openports = (item.openport); 1630 | 1631 | 1632 | 1633 | })%> 1634 |
1635 |
1636 |
1637 |
1638 | 1639 | 1640 | 1641 | 1642 | 1643 | 1644 | 1645 | 1646 | 1647 | 1648 |
1649 |
1650 |
1651 |
1652 |
1653 |

Welcome back 🃏 1654 |

1655 | 1656 |
1657 | 1658 |
1659 |

Scope Name : <%- comp %>

1660 |

Report point : <%- repo %>

1661 |
1662 |
1663 |

<%- subs.length %>

1664 |

Sub-domains

1665 | 1666 |
1667 |
1668 |

<%- live.length %>

1669 |

Live

1670 |
1671 |
1672 |

<%- openports.length %>

1673 |

Open ports

1674 |
1675 |
1676 |
1677 |
1678 |
1679 | 1680 | 1681 | 1682 | 1683 | 1684 | 1685 | 1686 | 1687 |
Sub-Domains
1688 |
1689 |
1690 | 1691 | 1692 | <% var i=0; %> 1693 | <% while(i<=subs.length) { %> 1694 | 1695 | 1696 | <% i++ } %> 1697 | 1698 | 1699 | 1700 | 1701 | 1702 |
<%- subs[i] %>
1703 |
1704 |
1705 |
1706 |
1707 | 1708 | 1709 | 1710 | 1711 | 1712 | 1713 | 1714 | 1715 | 1716 |
Live
1717 |
1718 |
1719 | 1720 | 1721 | 1722 | <% var i=0; %> 1723 | <% while (i <=live.length) { %> 1724 | 1725 | 1726 | <% i++} %> 1727 | 1728 | 1729 | 1730 | 1731 | 1732 |
<%- live[i] %>
1733 |
1734 |
1735 |
1736 |
1737 | 1738 | 1739 | 1740 | 1741 | 1742 | 1743 | 1744 | 1745 |
Open ports with Live
1746 |
1747 |
1748 | 1749 | 1750 | 1751 | <% var i=0; %> 1752 | <% while (i <=openports.length) { %> 1753 | 1754 | 1755 | <% i++} %> 1756 | 1757 | 1758 | 1759 | 1760 | 1761 |
<%- openports[i] %>
1762 |
1763 |
1764 | 1765 | 1766 | 1767 |
1768 |
1769 | 1770 |
1771 |
1772 | 1773 | 1774 | 1775 | 1776 | 1871 | 1872 | 1873 | 1874 | 1892 | 1913 | 1914 | 1915 | --------------------------------------------------------------------------------