Upload files to "/"
This commit is contained in:
163
recon.py
Normal file
163
recon.py
Normal file
@@ -0,0 +1,163 @@
|
||||
#!/usr/bin/python3
|
||||
import requests,subprocess,os,threading,argparse,time
|
||||
from rich.console import Console
|
||||
from rich.panel import Panel
|
||||
from rich.align import Align
|
||||
from rich.text import Text
|
||||
|
||||
|
||||
#set up arguments
|
||||
parser = argparse.ArgumentParser(description="StrikeTeam Recon")
|
||||
parser.add_argument("--domain", help="Target Domain")
|
||||
parser.add_argument("--br", action="store_true",help="Run Basic Recon Function")
|
||||
parser.add_argument("--monitor", action="store_true",help="Monitor Subdomains")
|
||||
parser.add_argument("--dedup", action="store_true", help="Deduplicate Subdomains")
|
||||
args = parser.parse_args()
|
||||
#Variables as Needed
|
||||
domain = args.domain
|
||||
|
||||
### colors
|
||||
RED = "\033[31m"
|
||||
GREEN = "\033[32m"
|
||||
BLUE = "\033[34m"
|
||||
PURPLE = "\033[35m"
|
||||
RESET = "\033[0m"
|
||||
|
||||
def basic_recon():
|
||||
#subfinder
|
||||
# check if subfinder is installed
|
||||
if os.path.exists("/usr/bin/subfinder") or os.path.exists("/bin/subfinder"):
|
||||
#write subfinder output to .subdomain.md
|
||||
with open(".subdomains.md", "w") as subdomain_file:
|
||||
subprocess.run(["subfinder", "-d" , domain, " &"], stdout=subdomain_file, check=True)
|
||||
else:
|
||||
#if subfinder isn't installed, move on
|
||||
print(f"{RED}Subfinder is not installed, please install it...\n{RESET}")
|
||||
pass
|
||||
|
||||
|
||||
#httpx
|
||||
# check if httpx is installed
|
||||
if os.path.exists("/usr/bin/httpx") or os.path.exists("/bin/httpx") or os.path.exists("/snap/bin/httpx"):
|
||||
command = "cat .subdomains.md | httpx > .urls.md"
|
||||
try:
|
||||
subprocess.run(command, shell=True, check=True)
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(f"{RED}Command failed with exit code {e.returncode}{RESET}")
|
||||
|
||||
else:
|
||||
#if httpx isn't installed, move on
|
||||
print(f"{RED}httpx is not installed, please install it...\n{RESET}")
|
||||
pass
|
||||
#wafw00f
|
||||
#check if wafw00f is installed
|
||||
if os.path.exists("/usr/bin/wafw00f") or os.path.exists("/bin/wafw00f"):
|
||||
#write nuclei output to .nuclei.md
|
||||
wafw00f_command = "wafw00f -i .urls.md -o .waf-check.md &"
|
||||
subprocess.run(wafw00f_command, shell=True, check=True)
|
||||
else:
|
||||
#if nuclei isn't installed, move on
|
||||
print(f"{RED}wafw00f is not installed, please install it...\n{RESET}")
|
||||
pass
|
||||
|
||||
|
||||
|
||||
#nuclei
|
||||
# check if nuclei is installed
|
||||
if os.path.exists("/usr/bin/nuclei") or os.path.exists("/bin/nuclei"):
|
||||
#write nuclei output to .nuclei.md
|
||||
nuclei_command = "nuclei -l .urls.md -s critical,high,medium,low -o .nuclei.md &"
|
||||
subprocess.run(nuclei_command, shell=True, check=True)
|
||||
else:
|
||||
#if nuclei isn't installed, move on
|
||||
print(f"{RED}Nuclei is not installed, please install it...\n{RESET}")
|
||||
pass
|
||||
#subzy
|
||||
# check if subzy is installed
|
||||
|
||||
if os.path.exists("/usr/bin/subzy") or os.path.exists("/bin/subzy"):
|
||||
#write nuclei output to .nuclei.md
|
||||
subzy_command = "subzy run --targets .sd.md > .sd_takeover.md &"
|
||||
subprocess.run(subzy_command, shell=True, check=True)
|
||||
else:
|
||||
#if subzy isn't installed, move on
|
||||
print(f"{RED}Subzy is not installed, please install it...\n{RESET}")
|
||||
pass
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def dedup(output_file=".new_subdomains.md"):
|
||||
# deduplicate subdomain files
|
||||
try:
|
||||
# Read lines from both files into a set to automatically remove duplicates
|
||||
file1 = input("File 1: ")
|
||||
file2 = input("File 2: ")
|
||||
with open(file1, 'r') as f1, open(file2, 'r') as f2:
|
||||
unique_subdomains = set(line.strip() for line in f1 if line.strip())
|
||||
unique_subdomains.update(line.strip() for line in f2 if line.strip())
|
||||
|
||||
# Write the unique subdomains to the output file
|
||||
with open(output_file, 'w') as f_out:
|
||||
for subdomain in sorted(unique_subdomains):
|
||||
f_out.write(subdomain + '\n')
|
||||
|
||||
print(f"Successfully created {output_file} with {len(unique_subdomains)} unique subdomains.")
|
||||
|
||||
except FileNotFoundError as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
|
||||
|
||||
def monitor_subdomains():
|
||||
console = Console()
|
||||
panel = Panel("MONITORING SUBDOMAINS", title="Monitor Mode", border_style="white")
|
||||
console.print(panel)
|
||||
|
||||
|
||||
while True:
|
||||
# 1. Run subfinder to get current subdomains
|
||||
# -silent removes banners, -d specifies domain
|
||||
print(f"{BLUE}[*] Scanning...{RESET}")
|
||||
result = subprocess.run(
|
||||
["subfinder", "-d", domain, "-silent"],
|
||||
capture_output=True,
|
||||
text=True
|
||||
)
|
||||
current_subs = set(result.stdout.splitlines())
|
||||
|
||||
# 2. Load existing subdomains from file
|
||||
if not os.path.exists(".subdomains.md"):
|
||||
open(".subdomains.md", 'a').close() # Create file if it doesn't exist
|
||||
|
||||
with open(".subdomains.md", "r") as f:
|
||||
existing_subs = set(line.strip() for line in f)
|
||||
|
||||
|
||||
# 3. Compare and find NEW subdomains
|
||||
new_subs = current_subs - existing_subs
|
||||
|
||||
# 4. If new ones found, append to file and print
|
||||
if new_subs:
|
||||
with open(".subdomain.md", "a") as f:
|
||||
for sub in new_subs:
|
||||
print(f"{RED}New Subdomain Found: {sub}{RESET}")
|
||||
f.write(sub + "\n")
|
||||
else:
|
||||
print(f"{GREEN}[+] No new subdomains found this round.{RESET}")
|
||||
|
||||
# 5. Wait for 2 hours (7200 seconds)
|
||||
print(f"{BLUE}[*] Sleeping for 2 hours...{RESET}")
|
||||
time.sleep(7200)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
if args.br:
|
||||
basic_recon()
|
||||
if args.monitor:
|
||||
monitor_subdomains()
|
||||
if args.dedup:
|
||||
dedup()
|
||||
|
||||
Reference in New Issue
Block a user