X黑手网
X黑手网
X黑手网
Pyhon写sqlmap注入批量检测工具

Pyhon写sqlmap注入批量检测工具

前言:

SQLMap是一款功能强大的开源自动化SQL注入工具,旨在帮助渗透测试工程师快速发现和利用SQL注入漏洞。它具备自动化探测、漏洞利用和数据提取等功能。SQLMap的主要功能是扫描、发现并利用给定URL中的SQL注入漏洞。它还内置了许多绕过插件,同时支持多种数据库,包括MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase和SAPMaxDB。通过使用SQLMap,渗透测试工程师可以更高效地进行SQL注入漏洞的检测和利用。下面基于Python写的批量检测工具,可以一次性导入多个网站的URL列表,并自动进行扫描。这样可以大大提高漏洞扫描的效率,节省时间和精力。

运行效果:

image

运行本程序前请确保已经在本机安装了SQLMap,并将其添加到环境变量中, 这样可以方便您在任何目录下都能够使用此工具进行SQL注入检测。

代码

import tkinter as tk
from tkinter import ttk
import tkinter.filedialog as fd
import subprocess
import threading


class Application(tk.Tk):
    def __init__(self, title, geometry):
        super().__init__()
        self.title(title)
        self.geometry(geometry)

        self.columns = ("URL", "Injection", "Payload")
        self.tree = ttk.Treeview(self, columns=self.columns, show="headings")

        for col in self.columns:
            self.tree.heading(col, text=col)
            self.tree.column(col, width=200, anchor="center")

        self.tree.pack(fill="both", expand=True)

        self.text_widget = tk.Text(self, height=20)
        self.text_widget.pack(fill="x")

        buttons_frame = tk.Frame(self)
        buttons_frame.pack(fill="x", pady=10)

        import_data_btn = tk.Button(buttons_frame, text="导入URL", command=self.import_data)
        import_data_btn.pack(side="left", padx=10)

        tk.Label(buttons_frame, text="sqlmap -u url --batch").pack(side="left")
        self.params_entry = tk.Entry(buttons_frame, width=50)
        self.params_entry.pack(side="left", padx=10)
        self.params_entry.insert(0, "--level 3")

        self.run_btn = tk.Button(buttons_frame, text="运行", command=self.run)
        self.run_btn.pack(side="left", padx=10)
        self.pause_btn = tk.Button(buttons_frame, text="暂停", command=self.pause)
        self.pause_btn.pack(side="left", padx=10)
        clear_btn = tk.Button(buttons_frame, text="清空", command=self.clear_content)
        clear_btn.pack(side="left", padx=10)

        self.is_paused = False
        self.thread = None

    def import_data(self):
        file_path = fd.askopenfilename(defaultextension=".txt", filetypes=[("Text Files", "*.txt")])
        if file_path:
            self.tree.delete(*self.tree.get_children())
            with open(file_path, "r") as file:
                for line in file:
                    line = line.strip().split(",")
                    self.tree.insert("", "end", values=line)

    def run(self):
        params = self.params_entry.get()
        self.run_btn.config(text="正在运行", state="disabled")
        self.pause_btn.config(state="normal")
        self.is_paused = False
        self.thread = threading.Thread(target=self._run_scan, args=(params,))
        self.thread.start()

    def pause(self):
        self.is_paused = True

    def _run_scan(self, params):
        for index, item in enumerate(self.tree.get_children()):
            if self.is_paused:
                self.run_btn.config(text="继续", state="normal")
                return

            url = self.tree.item(item)["values"][0]
            result = subprocess.run(['sqlmap', '-u', url] + params.split() + ['--batch'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding="utf-8")
            result_output = result.stdout + result.stderr
            self.text_widget.insert(tk.END, result_output)
            self.text_widget.update_idletasks()
            if "Parameter: " in result_output:
                self.tree.set(item, "Injection", "Yes")
                payload_start = result_output.index("Payload:") + len("Payload:")
                payload_end = result_output.index("\n", payload_start)
                self.tree.set(item, "Payload", result_output[payload_start:payload_end].strip())
            else:
                self.tree.set(item, "Injection", "No")
        self.run_btn.config(text="运行", state="normal")
        self.pause_btn.config(state="disabled")

    def clear_content(self):
        self.text_widget.delete("1.0", "end")
        for item in self.tree.get_children():
            for column in self.columns:
                self.tree.set(item, column, "")


if __name__ == "__main__":
    app = Application("SQLMAP - 注入批量检测 微信公众号:蓝胖子之家", "900x750")
    app.mainloop()

代码使用了tkinter库创建的GUI应用程序,用于批量检测SQL注入漏洞。它提供了一个用户界面,用户可以导入URL列表并运行检测,程序将自动检测每个URL是否存在SQL注入漏洞,并显示检测结果。

代码中的Application类继承自tkinter库的Tk类,代表了整个应用程序的窗口。在初始化方法中,设置了窗口的标题和大小,并创建了一个Treeview控件用于显示URL、注入状态和Payload信息,以及一个Text控件用于显示检测结果。

应用程序的主要功能包括导入URL列表、运行检测、暂停检测和清空结果。其中,导入URL列表的方法(import_data)使用文件对话框选择一个文本文件,读取其中的URL列表,并将其插入到Treeview控件中。

运行检测的方法(run)获取用户输入的参数,并将运行按钮设置为不可用状态,暂停按钮设置为可用状态。然后创建一个新的线程,在该线程中调用_run_scan方法进行检测。

在_run_scan方法中,遍历Treeview控件中的每个URL,如果暂停标志为True,则停止检测。否则,使用subprocess库调用sqlmap命令进行检测,并将结果输出到Text控件中。根据检测结果,更新Treeview控件中的注入状态和Payload信息。最后,将运行按钮设置为可用状态,暂停按钮设置为不可用状态。

清空结果的方法(clear_content)用于清空Text控件和Treeview控件中的内容。

在主程序中,创建一个Application实例,并调用mainloop方法启动应用程序的事件循环,

最后,在主程序中创建一个Application实例,并调用mainloop方法启动应用程序的事件循环。

打包带走地址

后记

非常重要的一点是,我们要明确使用计算机和编程技术的目的是为了学习和测试,而不是进行非法攻击或者违法行为。编写和使用代码时,我们必须遵守法律法规,并且获得相关授权。如果您有合法的目的和授权,那么可以继续进行测试和使用。但是,如果您违反了法律法规或者未经授权使用,后果将由您自己承担。请务必谨慎行事,遵守法律规定,以确保计算机和网络的安全。

© 版权声明
THE END
喜欢就支持一下吧
点赞10赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容