当前位置:首页 > 信息安全 > 正文内容

(原创)Xray多目标检测控制 Python实现 带继续扫描 目标去重 WebHook上传

chanra1n1年前 (2023-10-23)信息安全4016

Web安全是互联网时代一个非常重要的话题。为了确保网站和应用程序的安全性,经常需要进行漏洞扫描和渗透测试。Xray 是一款强大的开源工具,可以用于自动化漏洞扫描。在本篇博客中,我们将介绍如何使用 Python 编写一个自动化脚本,将 Xray 与 Python 结合起来,以实现对多个目标网站的自动化安全扫描。

为什么需要这样一个脚本?

  1. 支持继续扫描

  2. 支持去重

  3. 支持多线程

  4. 更少的打扰

准备工作

在开始之前,确保你已经完成以下准备工作:

  1. 安装 Xray:你需要在系统中安装 Xray 工具,你可以从 Xray 官方网站 下载并安装。

  2. 创建任务文件:将需要扫描的目标 URL 存储在文本文件中,每个 URL 占据一行。这些任务文件应该放在一个指定的目录中,例如 ./tasks

  3. 安装 Python:确保你已经安装了 Python,本示例使用 Python 3。

Python 脚本概述

以下是一个使用 Python 编写的脚本,它自动化了 Xray 的扫描过程。这个脚本执行以下操作:

  1. 从任务文件中读取 URL。

  2. 合并和去重这些 URL。

  3. 使用 Xray 对这些 URL 进行漏洞扫描。

  4. 将结果写入文件并进行相关清理工作。

接下来,我们将详细讲解每一部分。

Python 代码解析

导入必要的库

import os
import subprocess
import concurrent.futures
import threading
import multiprocessing

脚本使用了多线程和多进程来提高效率。

使用锁来确保对文件的原子性访问

file_lock = threading.Lock()

此锁用于确保多线程写入 targets.txt 文件时的原子性访问。

执行 Xray 命令

# 记录开始时间
start_time = time.time()

# 记录已运行的行数
processed_lines = 0

# 记录平均命令执行时间
average_command_time = 0.0

def execute_xray_command(url, mission_number, total_missions, remaining_urls):
    global processed_lines, average_command_time

    command_start_time = time.time()

    command = f".\\xray_windows_amd64.exe webscan --basic-crawler {url} --plugins sqldet --webhook-output https://你自己的webhook链接"

    try:
        subprocess.run(command, shell=True, check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
    except subprocess.CalledProcessError as e:
        print(f"URL:{url} 的命令执行失败")
        print(e)

    command_end_time = time.time()

    # 计算已运行的行数
    processed_lines += 1

    # 计算已用时间
    elapsed_time = time.time() - start_time

    # 计算估计剩余时间
    remaining_time = (remaining_urls - processed_lines) * average_command_time

    # 打印进度信息
    print(f"[{time.strftime('%H:%M:%S', time.localtime(time.time()))}] [INFO] Mission {processed_lines}/{total_missions} is in progress, estimated remaining {time.strftime('%H:%M:%S', time.gmtime(remaining_time))}")

    # 更新平均命令执行时间
    average_command_time = (command_end_time - command_start_time + average_command_time * (processed_lines - 1)) / processed_lines

这个函数用于执行 Xray 命令。它将每个 URL 作为参数传递给 Xray,并执行漏洞扫描。

处理任务文件

def process_txt_file(txt_file, last_processed_lines):
    lines = []
    with open(txt_file, 'r') as file:
        lines = file.readlines()[last_processed_lines.get(txt_file, 0):]
    return lines

这个函数用于处理任务文件,它读取文件中的 URL 行,并根据上一次处理的位置进行截取。

主函数

def main():
    # 定义存放 txt 文件的目录
    tasks_directory = './tasks'

    # 获取目录中所有的 txt 文件
    txt_files = [os.path.join(tasks_directory, f) for f in os.listdir(tasks_directory) if f.endswith('.txt')]

    # 创建字典以存储每个文件的上次处理的行数
    last_processed_lines = {}

    # 如果跟踪文件存在,从中读取上次处理的行数
    tracking_file = 'last_processed_lines.txt'
    if os.path.exists(tracking_file):
        with open(tracking_file, 'r') as file:
            for line in file:
                file_name, line_number = line.strip().split(':')
                last_processed_lines[file_name] = int(line_number)

    all_urls = set()

    for txt_file in txt_files:
        lines = process_txt_file(txt_file, last_processed_lines)
        all_urls.update(lines)

    if os.path.exists('targets.txt'):
        with open('targets.txt', 'r') as file:
            existing_urls = file.readlines()
            all_urls.update(existing_urls)

    # 更新 targets.txt 文件中的 URL
    with file_lock:
        with open('targets.txt', 'a') as file:
            for url in all_urls:
                # 检查 URL 是否已经存在,如果不存在才写入文件
                if url not in existing_urls:
                    file.write(url)

    # 移除原始的 txt 文件
    for txt_file in txt_files:
        os.remove(txt_file)

    # 计算剩余的URL行数
    remaining_urls = len(all_urls) - last_processed_lines.get('targets.txt', 0)

    # 使用线程池并行执行 xray 命令
    with concurrent.futures.ThreadPoolExecutor(max_workers=multiprocessing.cpu_count()) as executor:
        for mission_number, url in enumerate(all_urls, start=1):
            executor.submit(execute_xray_command, url, mission_number, len(all_urls), remaining_urls)

if __name__ == '__main__':
    processed_lines = 0
    main()

在主函数中,我们首先获取任务文件列表,合并和去重所有 URL,并将它们追加到 targets.txt 文件中。然后,我们使用多线程池并行执行 Xray 命令来扫描这些 URL。最后,我们更新跟踪文件和清理原始的任务文件。

总结

通过使用这个自动化脚本,你可以轻松地扫描多个目标网站以发现潜在的漏洞。这大大简化了Web安全测试的过程,提高了效率,同时也提供了灵活性,你可以根据需要添加更多的任务文件。

当然,记得始终遵循法律法规和道德准则,只在授权范围内对网站进行扫描和测试,以维护合法性和道德性。

希望这篇博客对你了解如何使用 Python 和 Xray 进行自动化漏洞扫描有所帮助。如果你对此有任何疑问或建议,请随时联系我们。安全第一!


扫描二维码推送至手机访问。

版权声明:本文由我的FPGA发布,如需转载请注明出处。

本文链接:http://myfpga.cn/index.php/post/338.html

分享给朋友:

“(原创)Xray多目标检测控制 Python实现 带继续扫描 目标去重 WebHook上传” 的相关文章

(从网站被黑中学习)服务器遭受GIF89a攻击的识别、处理和安全加固

(从网站被黑中学习)服务器遭受GIF89a攻击的识别、处理和安全加固

在2023年8月30日晚上十一点左右,我已向公安机关和网监部门报案,并提交了证据。网络不是法外之地,我奉劝某些人好自为之。前言    本站开放至今已四年有余,访问量逐步增加,随着网站的访问量增加,也混入了不少的身影,下面让我们一起来看看吧!攻击识别 ...

(原创)基于SQLMAP和Google实现自动挖洞 仅用于学习和方法研究

(原创)基于SQLMAP和Google实现自动挖洞 仅用于学习和方法研究

注意,本程序仅用于学习和方法研究,不得进行实际使用。下面的程序是一个Python脚本,用于执行sqlmap命令的多线程批处理工具。以下是对程序的主要特点和功能的介绍:文件检查和初始化:程序开始时会检查是否存在keywords.txt和type.txt文件。如果这两个文件不存在,程序将输出错误消息并退...

(原创)通过Python编写网络爬虫程序并保存结果(SearX) 仅用于学习和方法研究

(原创)通过Python编写网络爬虫程序并保存结果(SearX) 仅用于学习和方法研究

简介在今天的数字时代,网络上的信息量庞大,但有时我们需要从多个网站中收集数据。在这篇博客中,我们将介绍如何使用Python编写一个网络爬虫程序,以自动从多个网站中抓取数据,并将结果保存到文件中。我们将使用一个名为SearxCheckList的示例程序来演示这个过程。第一步:准备工作在开始编写网络爬虫...

(原创)关于钓鱼邮件的识别和溯源分析  本文仅用于学习和分析

(原创)关于钓鱼邮件的识别和溯源分析 本文仅用于学习和分析

首先我想说明,网络不是法外之地,我奉劝某些人好自为之!一天到晚被攻击,从代码审计到SQL注入,从XSS到扫描....没完没了。是真的服了,我一个搞电子的,建个网站分享知识,还得被迫学习信息安全。。。真的是全方位,不同方面来提高我在信息安全方面的认识和理解。近期收到一个邮件,简单分析发现问题,发件方没...