【自研工具】漏洞盒子批量提交脚本

本文档介绍了自研的漏洞批量提交工具,包括效果演示、漏洞模板的填写方法以及批量提交脚本的使用。开发此工具旨在简化漏洞提交流程,提高效率。附带的`web_xpath.py`和`auto_vulbox.py`脚本示例用于自动化处理。
摘要由CSDN通过智能技术生成

1、效果演示

在这里插入图片描述

2、填写漏洞模板

在这里插入图片描述

3、批量提交脚本

开发原因:提交漏洞更方便,节省时间。

web_xpath.py

web_bug = {

    '反射型XSS': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/ul[1]/li[2]/a',
    '存储型XSS': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/ul[1]/li[3]/a',
    '基于DOM型XSS': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/ul[1]/li[4]/a'
    , '其他类型XSS': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/ul[1]/li[5]/a',
    'SQL注入': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/ul[2]/li[2]/a',
    '命令注入': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/ul[2]/li[3]/a'
    , 'CRLF注入': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/ul[2]/li[4]/a',
    '其他注入': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/ul[2]/li[5]/a',
    '逻辑漏洞': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/li[1]/a'
    , '平行越权': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/ul[3]/li[2]/a',
    '垂直越权': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/ul[3]/li[3]/a',
    '其他权限控制缺失': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/ul[3]/li[4]/a'
    , '支付漏洞': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/li[2]/a',
    '密码重置': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/ul[4]/li[2]/a',
    '任意注册': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/ul[4]/li[3]/a'
    , '任意登陆': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/ul[4]/li[4]/a',
    '撞库/扫号/暴力破解': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/ul[4]/li[5]/a',
    '其他认证缺陷': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/ul[4]/li[6]/a',
    '弱口令': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/li[3]/a',
    '条件竞争': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/li[4]/a',
    '代码执行': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/li[5]/a'
    , '信息泄露': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/li[6]/a',
    '文件包含': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/li[7]/a',
    '任意文件操作': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/li[8]/a'
    , '上传漏洞': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/li[9]/a',
    'URL重定向': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/li[10]/a',
    'XXE': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/li[11]/a'
    , 'SSRF': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/li[12]/a',
    'CSRF': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/li[13]/a',
    '疑似入侵/存在后门': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/li[14]/a'
    , '其他': '//*[@id="submitform"]/div[5]/div/div[2]/div/ul/li[15]/a'

}

bug_level = {
    '高危': '//*[@id="submitform"]/div[6]/div/div/div/ul/li[2]/a',
    '中危': '//*[@id="submitform"]/div[6]/div/div/div/ul/li[3]/a',
    '低危': '//*[@id="submitform"]/div[6]/div/div/div/ul/li[4]/a'}  # 漏洞级别

上面这个可以优化,不需要映射也可以找到对应的xpath,以后优化!!!

auto_vulbox.py

import time
import re
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import web_xpath
from selenium.webdriver.common.keys import Keys


class Auto_vulbox:

    # 浏览器初始化
    def __init__(self):
        # 取消"Chrome正受到自动软件的控制"
        self.chrome_options = webdriver.ChromeOptions()
        self.chrome_options.add_experimental_option('useAutomationExtension', False)
        self.chrome_options.add_experimental_option("excludeSwitches", ['enable-automation'])

        # 声明一个浏览器对象   指定使用chromedriver.exe路径
        self.browser = webdriver.Chrome(executable_path='D:\chromedriver.exe', options=self.chrome_options)
        self.browser.implicitly_wait(10)  # 隐式等待 设定等待时间
        self.browser.maximize_window()  # 窗口最大化

        self.login_url = "https://account.tophant.com/login"
        self.username = "xxxx"
        self.password = "xxxx"

    # 登录漏洞盒子
    def login_vulbox(self):
        self.browser.get(self.login_url)
        username = self.browser.find_element_by_id("username")  # 输入用户名
        username.send_keys(self.username)
        password = self.browser.find_element_by_id("password")  # 输入密码
        password.send_keys(self.password)

        self.browser.find_element_by_id("loginBtn").click()  # 点击登录会跳转到登录中心

        self.browser.find_element_by_xpath('//*[@id="loginCenter"]/div/div/a[2]').click()  # 登录到vulbox  会新打开一个选项卡

        self.browser.switch_to.window(self.browser.window_handles[1])  # 切换选项卡到 管理中心

        self.browser.find_element_by_css_selector("#two > ul > li:nth-child(2)").click()  # 点击提交漏洞按钮

    # 复现步骤
    def bug_content(self, content_list):
        if type(content_list) == list:
            for content in content_list:

                res = re.findall(r'[a-zA-Z]:\\(?:.*?\\)*?.*', content)
                if res:
                    self.browser.find_element_by_xpath(
                        '//*[@id="submitform"]/div[15]/div/div[2]/div[1]/div[1]/ul/li[13]/a').click()  # 点击图片上传
                    # self.browser.find_element_by_xpath(
                    #     '//*[@id="submitform"]/div[15]/div/div[2]/div[1]/div[1]/ul/li[13]/div/ul/li[1]/a').click()
                    self.browser.find_element_by_xpath(
                        '//*[@id="submitform"]/div[15]/div/div[2]/div[1]/div[1]/ul/li[13]/div/ul/li[1]/a/input').send_keys(
                        content)  # 上传图片
                    time.sleep(2)
                    # self.upload_img(content)
                    self.browser.find_element_by_xpath('//*[@id="submitform"]/div[17]/div/div/div[1]/div[4]').send_keys(
                        Keys.ENTER)
                else:
                    self.browser.find_element_by_xpath(
                        '//*[@id="submitform"]/div[15]/div/div[2]/div[1]/div[4]').send_keys(
                        content)
                    self.browser.find_element_by_xpath('//*[@id="submitform"]/div[17]/div/div/div[1]/div[4]').send_keys(
                        Keys.ENTER)
        else:
            self.browser.find_element_by_xpath('//*[@id="submitform"]/div[15]/div/div[2]/div[1]/div[4]').send_keys(
                content_list)
            self.browser.find_element_by_xpath('//*[@id="submitform"]/div[17]/div/div/div[1]/div[4]').send_keys(
                Keys.ENTER)

    # 修复方案
    def bug_repair(self, bug_repair_list):
        if type(bug_repair_list) == list:
            for content in bug_repair_list:

                res = re.findall(r'[a-zA-Z]:\\(?:.*?\\)*?.*', content)
                if res:
                    self.browser.find_element_by_xpath(
                        '//*[@id="submitform"]/div[17]/div/div/div[1]/div[1]/ul/li[13]/a').click()  # 点上传图片按钮
                    # self.browser.find_element_by_xpath(
                    #     '//*[@id="submitform"]/div[17]/div/div/div[1]/div[1]/ul/li[13]/div/ul/li[1]/a').click()  # 点上传图片按钮
                    # self.upload_img(content)
                    self.browser.find_element_by_xpath(
                        '//*[@id="submitform"]/div[17]/div/div/div[1]/div[1]/ul/li[13]/div/ul/li[1]/a/input').send_keys(
                        content)  # 上传图片
                    time.sleep(2)
                    self.browser.find_element_by_xpath('//*[@id="submitform"]/div[17]/div/div/div[1]/div[4]').send_keys(
                        Keys.ENTER)
                else:
                    self.browser.find_element_by_xpath('//*[@id="submitform"]/div[17]/div/div/div[1]/div[4]').send_keys(
                        content)
                    self.browser.find_element_by_xpath('//*[@id="submitform"]/div[17]/div/div/div[1]/div[4]').send_keys(
                        Keys.ENTER)
        else:
            self.browser.find_element_by_xpath('//*[@id="submitform"]/div[17]/div/div/div[1]/div[4]').send_keys(
                bug_repair_list)
            self.browser.find_element_by_xpath('//*[@id="submitform"]/div[17]/div/div/div[1]/div[4]').send_keys(
                Keys.ENTER)

    # 自动提交
    def gy_src(self, bug_dic):

        # bug_dic = {
        #     'bug_title': 'xxxx有限公司-存在致远OA任意文件下载',
        #     'bug_type': '通用型',
        #     'bug_firm_name': 'xxxx股份有限公司',
        #     'bug_firm_url': 'www.xxx.cn',
        #     'bug_type_web': '任意文件操作',
        #     'bug_level': '中危',
        #     'bug_description': '致远OA webmail.do文件读取漏洞,由于 /seeyon/webmail.do 页面 filePath 参数过滤不严,导致可以读取系统敏感文件。通过修改filePath参数来下载服务器文件/seeyon/webmail.do?method=doDownloadAtt&filename=conf&filePath=../conf/datasourceCtp.properties',
        #     'bug_url': 'http://x.x.x.x:8081/seeyon/index.jsp',
        #     'bug_poc': 'GET /seeyon/webmail.do?method=doDownloadAtt&filename=conf&filePath=../conf/datasourceCtp.properties HTTP/1.1\nHost: 58.250.250.236:8081\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\nAccept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3\nAccept-Encoding: gzip, deflate\nCookie: JSESSIONID=2dd52332-d13b-4d67-8365-10e340309a2; loginPageURL=""\nDNT: 1\nConnection: close\nUpgrade-Insecure-Requests: 1',
        #     'bug_content': ['C:\\Users\\s\Desktop\\2.png','利用漏洞直接下载', 'C:\\Users\\s\Desktop\\1.png','C:\\Users\\s\Desktop\\2.png','C:\\Users\\s\Desktop\\3.png','C:\\Users\\s\Desktop\\4.png'],
        #     'bug_repair': ['打补丁'],
        #     'bug_city': '广东/深圳/南山区',
        #     'bug_industry': '计算机软件',
        #     'bug_industry_type': '',
        #     'bug_display': '是'
        # }
        ####################### 漏洞复现/修复方案 文字描述和图片的顺序取决于上面列表中的先后顺序 ############################
        # 漏洞标题
        self.browser.find_element_by_xpath('//*[@id="submitform"]/div[2]/div/input').send_keys(bug_dic['bug_title'])
        # 漏洞类型
        self.browser.find_element_by_xpath('//*[@id="submitform"]/div[3]/div/div/div/div[2]/label/input').click()  # 通用型
        # self.browser.find_element_by_xpath('//*[@id="submitform"]/div[3]/div/div/div/div[1]/label/input').click()  # 事件型
        # 厂商信息-名称
        self.browser.find_element_by_id('bug_firm_name').send_keys(bug_dic['bug_firm_name'])
        # 厂商信息-域名
        self.browser.find_element_by_id('bug_firm_url').send_keys(bug_dic['bug_firm_url'])

        # 漏洞类型
        self.browser.find_element_by_xpath('//*[@id="submitform"]/div[5]/div/div[1]/div').click()  # 选择漏洞类型
        self.browser.find_element_by_xpath('//*[@id="submitform"]/div[5]/div/div[2]/div/ul/li[1]/a').click()  # web漏洞
        self.browser.find_element_by_xpath(web_xpath.web_bug[bug_dic['bug_type_web']]).click()  # 任意文件操作

        # 漏洞等级
        self.browser.find_element_by_xpath('//*[@id="submitform"]/div[6]/div/div/button').click()
        self.browser.find_element_by_xpath(web_xpath.bug_level[bug_dic['bug_level']]).click()  # 中危

        # 漏洞描述
        self.browser.find_element_by_xpath('//*[@id="submitform"]/div[8]/div/textarea').send_keys(
            bug_dic['bug_description'])
        # 漏洞url/位置
        self.browser.find_element_by_xpath('//*[@id="submitform"]/div[9]/div/input').send_keys(bug_dic['bug_url'])
        # 漏洞POC请求包

        self.browser.find_element_by_xpath('//*[@id="submitform"]/div[11]/div/textarea').send_keys(bug_dic['bug_poc'])

        # 复现步骤
        self.bug_content(bug_dic['bug_content'])

        # 修复方案
        self.bug_repair(bug_dic['bug_repair'])

        # 所属地区
        city = bug_dic['bug_city']

        city_xpatg_list = city.split("/")

        # FIXME 北京的定位有问题:打开地区列表后北京的dom元素没有加载出来。解决办法一调整分辨率
        if len(city_xpatg_list) == 3:
            self.browser.find_element_by_xpath('//*[@id="submitform"]/div[18]/div/div/div/span').click()  # 打开地区列表
            province_xpath = '//li[contains(text(), "{}")]'.format(city_xpatg_list[0])  # //li[contains(text(), "河北")]

            self.browser.find_element_by_xpath(province_xpath).click()  # 省

            city_xpath = '//li[contains(text(), "{}")]'.format(city_xpatg_list[1])
            self.browser.find_element_by_xpath(city_xpath).click()  # 市

            area_xpath = '//li[contains(text(), "{}")]'.format(city_xpatg_list[2])
            self.browser.find_element_by_xpath(area_xpath).click()  # 区/县
        elif len(city_xpatg_list) == 2:
            self.browser.find_element_by_xpath('//*[@id="submitform"]/div[18]/div/div/div/span').click()  # 打开地区列表
            province_xpath = '//li[contains(text(), "{}")]'.format(city_xpatg_list[0])  # //li[contains(text(), "河北")]

            self.browser.find_element_by_xpath(province_xpath).click()  # 省

            city_xpath = '//li[contains(text(), "{}")]'.format(city_xpatg_list[1])
            self.browser.find_element_by_xpath(city_xpath).click()  # 市
        else:
            self.browser.find_element_by_xpath('//*[@id="submitform"]/div[18]/div/div/div/span').click()  # 打开地区列表
            province_xpath = '//li[contains(text(), "{}")]'.format(city_xpatg_list[0])  # //li[contains(text(), "河北")]

            self.browser.find_element_by_xpath(province_xpath).click()  # 省

        # 所属行业
        self.browser.find_element_by_xpath('//*[@id="submitform"]/div[19]/div/div/div/input').click()  # 打开行业列表
        industry = bug_dic['bug_industry']
        industry_type = bug_dic['bug_industry_type']
        industry_xpath = '//dd[contains(text(), "{}")]'.format(industry)
        if "/" in industry:  # 区分有无行业分类

            self.browser.find_element_by_xpath(industry_xpath).click()  # 计算机硬件/网络设备
            industry_type_xpath = '//input[contains(@value, "{}")]'.format(industry_type)
            self.browser.find_element_by_xpath(industry_type_xpath).click()  # 网络设备
        else:
            self.browser.find_element_by_xpath(industry_xpath).click()

        # 匿名
        if bug_dic['bug_display'] == "是":
            self.browser.find_element_by_xpath('//*[@id="submitform"]/div[21]/div/div/div/div/span[2]').click()

        # 提交
        self.browser.find_element_by_id("submit").click()
        time.sleep(10)  # 等待一会页面自动跳转到提交漏洞页面继续提交漏洞
        ## 预览
        # self.browser.find_element_by_xpath('//*[@id="submitform"]/div[23]/div/input[2]').click()

    # print(read_bug(bug))

    def read_bug(self, bug):
        df_example = pd.read_csv(bug, encoding="utf-8")
        df_dict = df_example.to_dict(orient='records')
        return df_dict


if __name__ == '__main__':
    bug = "./bug.csv"
    a = Auto_vulbox()
    a.login_vulbox()
    df_dict = a.read_bug(bug)

    for info in df_dict:
        if "&" in info['bug_content']:
            bug_content = info['bug_content'].split("&")
            info['bug_content'] = bug_content
        if "&" in info['bug_repair']:
            bug_repair = info['bug_repair'].split("&")
            info['bug_repair'] = bug_repair
        print(info)
        a.gy_src(info)  # 批量提交

批量提交

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多学点技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值