def knockpy(): info("\n\nRunning Knock \n") knockpyCmd = "python {} -c {}".format( os.path.join(script_path, "bin/knockpy/knockpy/knockpy.py"), domain) debug("\nRunning Command: {}".format(knockpyCmd)) os.system(knockpyCmd) rootdomainStrip = domain.replace(".", "_") knockpyFilenameInit = "{}_knock.csv".format(output_base) os.system("mv {}* {}".format(rootdomainStrip, knockpyFilenameInit)) time.sleep(1) knockpySubs = [] try: with open(knockpyFilenameInit, "rt") as f: reader = csv.reader(f, delimiter=",") for row in reader: knockpySubs.append(row[3]) filenameKnocktxt = "{}.txt".format(knockpyFilenameInit) f1 = open(filenameKnocktxt, "w") for hosts in knockpySubs: hosts = "".join(hosts) f1.writelines("\n" + hosts) f1.close() except: error("\nKnock File Error\n") time.sleep(1)
def distroIsSupported(pkg): color.debug(getDistro()) if pkg['distros']: return (getDistro() in pkg['distros']) or (pkg['distros'] == ["all"]) else: color.warn("Supported distros not specified, assuming this distro is supported.....") return True
def isInMainRepo(pkgname, paths): if getCachedPackageMainRepoInfo(paths[2], paths[0], pkgname): color.debug("Found in main repo cache") return True else: color.debug("Not found in main repo cache") return False
def writeFiles(name): """Writes info of all hosts from subhosts """ subdomainCounter = 0 subdomainAllFile = "{}-all.txt".format(output_base) fileExt = { "sublist3r": ".txt", "knock": ".csv.txt", "enumall": ".lst", "massdns": ".txt", "amass": ".txt", "subfinder": ".txt", } fileName = output_base + "_" + name + fileExt[name] debug("\n Opening %s File" % name) try: with open(fileName, "r") as f: SubHosts = f.read().splitlines() with open(subdomainAllFile, "a") as f: f.writelines("\n\n" + name) for hosts in SubHosts: hosts = "".join(hosts) f.writelines("\n" + hosts) subdomainCounter = subdomainCounter + 1 os.remove(fileName) info("\n{} Subdomains discovered by {}".format(subdomainCounter, name)) except: error("\nError Opening %s File!\n" % name) return subdomainCounter
def subdomainfile(): subdomainAllFile = "{}-all.txt".format(output_base) names = ["sublist3r", "knock", "enumall", "massdns", "amass", "subfinder"] for name in names: writeFiles(name) debug("\nCombining Domains Lists\n") with open(subdomainAllFile, "r") as domainList: uniqueDomains = set(domainList) domainList.close() subdomainUniqueFile = "{}-unique.txt".format(output_base) uniqueDomainsOut = open(subdomainUniqueFile, "w") for domains in uniqueDomains: domains = domains.replace("\n", "") if domains.endswith(domain): uniqueDomainsOut.writelines("https://{}\n".format(domains)) if ports is not False: uniqueDomainsOut.writelines( "https://{}:8443\n".format(domains)) if secure is False: uniqueDomainsOut.writelines("http://{}\n".format(domains)) if ports is not False: uniqueDomainsOut.writelines( "http://{}:8080\n".format(domains)) time.sleep(1) rootdomainStrip = domain.replace(".", "_") info("\nCleaning Up Old Files\n") try: os.system("rm {}*".format(domain)) os.system("rm {}*".format(rootdomainStrip)) except: error("\nError Removing Files!\n") if not noeyewitness: eyewitness(subdomainUniqueFile)
def installPackage(flags, paths, args): if os.path.exists(args[0]): installLocalPackage(flags, paths, args) quit() if os.path.exists(f"{paths[0]}/{args[0].lower()}") and not flags.fresh: updatePackage(flags, paths, *args) quit() color.isDebug = flags.debug args[0] = args[0].lower() if not os.path.exists(f"{paths[2]}/R2Boyo25"): downloadMainRepo(paths[2]) packagename = args[0] if ":" in packagename: branch = None commit = packagename.split(":")[-1] packagename = packagename.split(":")[0] elif packagename.count("/") > 1: branch = packagename.split("/")[-1] packagename = "/".join(packagename.split(":")[:-1]) commit = None elif ( ":" in packagename ) and ( packagename.count("/") > 1 ): commit = packagename.split(":")[-1] packagename = packagename.split(":")[0] branch = packagename.split("/")[-1] packagename = "/".join(packagename.split(":")[:-1]) else: branch = None commit = None args[0] = packagename color.note("Deleting old binaries and source files.....") deletePackage(paths[0], paths[1], args[0], paths, branch = branch, commit = commit) color.note("Downloading from github.....") color.debug(paths[0], "https://github.com/" + args[0], args[0]) downloadPackage(paths[0], "https://github.com/" + args[0], args[0], branch = branch, commit = commit) if isInMainRepo(args[0], paths) and not isAvalonPackage(args[0], paths[0], args[0]): color.note("Package is not an Avalon package, but it is in the main repository... installing from there.....") moveMainRepoToAvalonFolder(paths[2], args[0], paths[0], paths) else: color.debug("Not in the main repo") checkReqs(paths, args[0]) installDeps(flags, paths, args) if not flags.noinstall: color.note("Beginning compilation/installation.....") compilePackage(paths[0], paths[1], args[0], paths, flags) color.success("Done!") else: color.warn("-ni specified, skipping installation/compilation")
def archIsSupported(pkg): color.debug(str(pkg)) color.debug(getArch()) if pkg['arches']: return (getArch() in pkg['arches']) or (pkg['arches'] == ["all"]) else: color.warn("Supported arches not specified, assuming this arch is supported.....") return True
def downloadMainRepo(cacheDir): #shutil.rmtree(cacheDir) if os.path.exists(f"{cacheDir}/R2Boyo25"): color.debug(f"cd {cacheDir}; git pull") os.system(f"cd {cacheDir}; git pull") else: color.debug(f"git clone --depth 1 https://github.com/r2boyo25/AvalonPMPackages \"{cacheDir}\" -q") os.system(f"git clone --depth 1 https://github.com/r2boyo25/AvalonPMPackages \"{cacheDir}\" -q")
def getCachedPackageInfo(cacheFolder, srcFolder, pkgname): if getCachedPackageMainRepoInfo(cacheFolder, srcFolder, pkgname): return getCachedPackageMainRepoInfo(cacheFolder, srcFolder, pkgname) elif getCachedPackageRepoInfo(cacheFolder, srcFolder, pkgname): return getCachedPackageRepoInfo(cacheFolder, srcFolder, pkgname) else: color.debug("Not cached") return False
def enumall(): info("\n\nRunning Enumall \n") enumallCMD = "python {} {}".format( os.path.join(script_path, "bin/domain/enumall.py"), domain) debug("\nRunning Command: {}".format(enumallCMD)) os.system(enumallCMD) info("\nenumall Complete") time.sleep(1)
def copyFilesToFiles(paths, pkgname, files = ['all']): color.debug(str(files)) if files != ['all']: for file in files: copyFile(paths[0] + '/' + pkgname + '/' + file, paths[4] + '/' + pkgname + '/' + file) else: for file in os.listdir(paths[0] + '/' + pkgname + '/'): copyFile(paths[0] + '/' + pkgname + '/' + file, paths[4] + '/' + pkgname + '/' + file)
def getMainRepoPackageInfo(pkgname): r = requests.get(f'https://raw.githubusercontent.com/R2Boyo25/AvalonPMPackages/master/{pkgname}/package') color.debug(f'https://raw.githubusercontent.com/R2Boyo25/AvalonPMPackages/master/{pkgname}/package') color.debug(r.text) if not "404" in r.text: return r.json() else: raise e404("Main")
def installPipDeps(deps): try: deps['pip'] except: return color.note('Found pip dependencies, installing.....') depss = " ".join( deps['pip'] ) color.debug(f"pip3 install{' --user' if os.path.exists('/etc/portage') else ''} {depss}") os.system(f"pip3 install{' --user' if os.path.exists('/etc/portage') else ''} {depss}")
def getPackageInfo(paths, pkgname, commit = None, branch = None): color.debug(pkgname) color.debug(str(paths)) if getCachedPackageInfo(paths[2], paths[0], pkgname): return NPackage(getCachedPackageInfo(paths[2], paths[0], pkgname)) else: try: return NPackage(getRepoPackageInfo(pkgname, commit = commit, branch = branch)) except: return NPackage(getMainRepoPackageInfo(pkgname))
def getCachedPackageRepoInfo(cacheFolder, srcFolder, pkgname): if os.path.exists(f"{srcFolder}/{pkgname}/.avalon/package"): #color.debug("Loading from src;", f"{srcFolder}/{pkgname}/.avalon/package") with open(f"{srcFolder}/{pkgname}/.avalon/package", 'r') as pkgfile: try: return json.loads(pkgfile.read()) except Exception as e: color.debug("Content: " + pkgfile.read()) raise e else: return False
def getCachedPackageMainRepoInfo(cacheFolder, srcFolder, pkgname): #color.debug(f"{cacheFolder}/{pkgname}/package") #color.debug(case.case.getCaseInsensitivePath(f"{cacheFolder}/{pkgname}/package")) if os.path.exists(case.case.getCaseInsensitivePath(f"{cacheFolder}/{pkgname}/package")): #color.debug("Loading from main repo cache") with open(case.case.getCaseInsensitivePath(f"{cacheFolder}/{pkgname}/package"), 'r') as pkgfile: try: return json.loads(pkgfile.read()) except Exception as e: color.debug(pkgfile.read()) raise e
def amass(rerun=0): if which("amass"): info("\n\nRunning Amass \n") amassFileName = "{}_amass.txt".format(output_base) amassCmd = "amass enum -d {} -o {}".format(domain, amassFileName) debug("\nRunning Command: {}".format(amassCmd)) os.system(amassCmd) info("\nAmass Complete") time.sleep(1) else: warning("\n\nmass is not currently in your $PATH \n") if check_gopath("amass", "github.com/OWASP/Amass/...") and rerun != 1: amass(rerun=1)
def subfinder(rerun=0): if which("subfinder"): info("\n\nRunning Subfinder \n") subfinderFileName = "{}_subfinder.txt".format(output_base) subfinderCmd = "subfinder -d {} -o {}".format(domain, subfinderFileName) debug("\nRunning Command: {}".format(subfinderCmd)) os.system(subfinderCmd) info("\nsubfinder Complete") time.sleep(1) else: warning("\n\nubfinder is not currently in your $PATH \n") if check_gopath("subfinder", "github.com/subfinder/subfinder") and rerun != 1: subfinder(rerun=1)
def sublist3r(brute=False): info("\n\nRunning Sublist3r \n") sublist3rFileName = "{}_sublist3r.txt".format(output_base) Subcmd = "python {} -v -t 15 {} -d {} -o {}".format( os.path.join(script_path, "bin/Sublist3r/sublist3r.py"), "-b" if brute else "", domain, sublist3rFileName, ) debug("\nRunning Command: {}".format(Subcmd)) os.system(Subcmd) info("\nSublist3r Complete") time.sleep(1) if brute: eyewitness(sublist3rFileName)
def updatePackage(flags, paths, *args): "Update to newest version of a repo, then recompile + reinstall program" args = list(args) if len(args) == 0: args.append("r2boyo25/avalonpackagemanager") #if not os.path.exists(f"{paths[0]}/{args[0].lower()}"): # installPackage(flags, paths, args) # quit() if not os.path.exists(f"{paths[2]}/R2Boyo25"): downloadMainRepo(paths[2]) color.isDebug = flags.debug args[0] = args[0].lower() #color.note("Deleting old binaries and source files.....") #deletePackage(paths[0], paths[1], args[0], paths, branch = branch, commit = commit) #rmFromBin(paths[1], packagename, paths) color.note("Pulling from github.....") #color.debug(paths[0], "https://github.com/" + args[0], args[0]) if os.system(f"cd {paths[0]}/{args[0]}; git pull"): if os.system(f"cd {paths[0]}/{args[0]}; git reset --hard; git pull"): error("Git error") #downloadPackage(paths[0], "https://github.com/" + args[0], args[0], branch = branch, commit = commit) if isInMainRepo(args[0], paths): color.note("Package is not an Avalon package, but it is in the main repository... installing from there.....") moveMainRepoToAvalonFolder(paths[2], args[0], paths[0], paths) else: color.debug("Not in the main repo") checkReqs(paths, args[0]) installDeps(flags, paths, args) if not flags.noinstall: color.note("Beginning compilation/installation.....") compilePackage(paths[0], paths[1], args[0], paths, flags) color.success("Done!") else: color.warn("-ni specified, skipping installation/compilation")
def massdns(): info("\n\nRunning massdns \n") word_file = os.path.join( script_path, "bin/sublst/all.txt" if bruteall else "bin/sublst/sl-domains.txt") massdnsCMD = "python {} {} {} | {} -r resolvers.txt -t A -o S -w {}-massdns.txt".format( os.path.join(script_path, "bin/subbrute/subbrute.py"), word_file, domain, os.path.join(script_path, "bin/massdns/bin/massdns"), output_base, ) debug("\nRunning Command: {}".format(massdnsCMD)) os.system(massdnsCMD) info("\nMasscan Complete") time.sleep(1)
def downloadPackage(srcFolder, packageUrl, packagename = None, branch = None, commit = None): if not packagename: packagename = packageUrl.lstrip("https://github.com/") color.debug(packagename) os.chdir(srcFolder) if commit and branch: os.system('git clone ' + packageUrl + ' ' + packagename + " -q") os.system(f"cd {packagename}; git reset --hard {commit}") elif branch: packagename = "/".join(packagename.split(":")[:-1]) os.system('git clone --depth 1 ' + packageUrl + ' ' + packagename + " -q -b " + branch) elif commit: os.system('git clone ' + packageUrl + ' ' + packagename + " -q") os.system(f"cd {packagename}; git reset --hard {commit}") else: os.system('git clone --depth 1 ' + packageUrl + ' ' + packagename + " -q")
def eyewitness(filename): info("\n\nRunning EyeWitness \n") EWHTTPScriptIPS = "python {} -f {} {} --no-prompt --web -d {}-{}-EW".format( os.path.join(script_path, "bin/EyeWitness/Python/EyeWitness.py"), filename, "--active-scan" if active else "", output_base, time.strftime("%m-%d-%y-%H-%M"), ) if vpn: info( "\nIf not connected to VPN manually run the following command on reconnect:\n{}" .format(EWHTTPScriptIPS)) vpncheck() debug("\nRunning Command: {}".format(EWHTTPScriptIPS)) os.system(EWHTTPScriptIPS) print("\a")
def installBuildDepDeps(deps): try: deps['build-dep'] except: return if deps['build-dep']: color.note("Found build-dep (apt) dependencies, installing..... (this will require your password)") depss = " ".join( deps['build-dep'] ) username = getpass.getuser() if username != 'root' and not username.startswith("u0_a"): color.debug(f'sudo apt build-dep -y {depss}') if os.system(f'sudo apt build-dep -y {depss}'): error("apt error") else: color.debug(f'apt build-dep -y {depss}') if os.system(f'apt build-dep -y {depss}'): error("apt error")
def installAptDeps(deps): try: deps['apt'] except: return if deps['apt']: filtered_deps = aptFilter(deps['apt']) if len(filtered_deps) > 0: color.note("Found apt dependencies, installing..... (this will require your password)") depss = " ".join(filtered_deps) username = getpass.getuser() if username != 'root' and not username.startswith("u0_a"): color.debug(f'sudo apt install -y {depss}') os.system(f'sudo apt install -y {depss}') else: color.debug(f'apt install -y {depss}') os.system(f'apt install -y {depss}')
def runScript(script, *args): langs = { 'py':'python3', 'sh':'bash' } if os.path.exists('/etc/portage'): with open(script, "r") as r: e = r.read() with open(script, "w") as w: w.write(e.replace("pip3 install", "pip3 install --user").replace("pip install", "pip install --user")) argss = " ".join([f"{arg}" for arg in args]) if script.split('.')[-1].lower() in langs: color.debug(f"{langs[script.split('.')[-1]]} {script} {argss}") return os.system(f"{langs[script.split('.')[-1]]} {script} {argss}") else: color.debug(f'{langs["sh"]} {script} {argss}') return os.system(f'{langs["sh"]} {script} {argss}')
def redoBin(flags, paths, *args): "Redo making of symlinks without recompiling program" args = list(args) color.isDebug = flags.debug args[0] = args[0].lower() packagename = args[0] binFolder = paths[1] srcFolder = paths[0] pkg = getPackageInfo(paths, packagename) color.debug(packagename, binFolder, srcFolder, str(pkg)) rmFromBin(binFolder, packagename, paths, pkg = pkg) if pkg['binfile']: mvBinToBin(binFolder, paths[4]+packagename, srcFolder + "/" + packagename + "/", pkg['binfile'], pkg['binname']) else: mvBinToBin(binFolder, paths[4]+packagename, srcFolder + "/" + packagename + "/", pkg['binname'], pkg['binname'])
def moveMainRepoToAvalonFolder(cacheFolder, pkgname, srcFolder, paths): color.debug(pkgname) color.debug("Moving to .avalon folder") color.debug(srcFolder + "/" + pkgname + "/.avalon") shutil.rmtree(srcFolder + "/" + pkgname + "/.avalon", ignore_errors = True) if isInMainRepo(pkgname, paths): color.debug(case.case.getCaseInsensitivePath(cacheFolder + "/" + pkgname), srcFolder + "/" + pkgname + '/.avalon') shutil.copytree(case.case.getCaseInsensitivePath(cacheFolder + "/" + pkgname), srcFolder + "/" + pkgname + '/.avalon')
def rmFromBin(binFolder, packagename, paths, pkg = None, commit = None, branch = None): color.debug("RMBIN:", packagename) if not pkg: pkg = getPackageInfo(paths, packagename, commit, branch) if 'binname' in pkg.keys(): color.debug(f"{binFolder}/{pkg['binname']}") if os.path.exists(f"{binFolder}/{pkg['binname']}"): color.debug("Deleting", f"{binFolder}/{pkg['binname']}") os.remove(f"{binFolder}/{pkg['binname']}")
def mvBinToBin(binFolder, fileFolder, srcFolder, binFile, binName): #if color.isDebug: # error(str(binFolder), str(fileFolder), str(binFile), str(binName)) try: shutil.copyfile(srcFolder + "/" + binFile, fileFolder+'/'+binName.split('/')[-1]) except: pass if os.path.exists(binFolder + binName.split('/')[-1]) or os.path.lexists(binFolder + binName.split('/')[-1]): os.remove(binFolder + binName.split('/')[-1]) #os.symlink(fileFolder+'/'+binName, binFolder + binName.split('/')[-1]) os.symlink(fileFolder+'/'+binFile, binFolder + binName.split('/')[-1]) #with open(binFolder + binName, 'w') as f: # f.write(f'#!/bin/bash\nOWD="$(pwd)"\ncd {fileFolder}\n./{binName}\ncd $OWD') #st = os.stat(binFolder + '/' + binName.split('/')[-1]) #os.chmod(binFolder + '/' + binName.split('/')[-1], st.st_mode ^ 111) #os.chmod(fileFolder + '/' + binName.split('/')[-1], 755) #color.debug(f"chmod +x {fileFolder + '/' + binName.split('/')[-1]}") #os.system(f"chmod +x {fileFolder + '/' + binName.split('/')[-1]}") color.debug(f"chmod +x {fileFolder + '/' + binFile}") os.system(f"chmod +x {fileFolder + '/' + binFile}")