漏洞检测工具:允许TRACE方法漏洞

允许TRACE方法漏洞

漏洞定义

TRACE方法是HTTP协议中定义的一种调试方法,主要用于测试或诊断Web服务器连接。Web服务器在配置时未正确禁用HTTP TRACE方法,从而允许客户端向服务器发送TRACE请求,并导致服务器返回可能包含敏感信息的响应。

                

漏洞危害

这种配置不当可能构成安全风险,因为TRACE请求可以使服务器原样返回请求头信息,包括Session Token、Cookies或其他认证信息,这些信息若被恶意攻击者获取,则可能被用于进一步攻击,如跨站脚本攻击(XSS)、会话劫持等。

               

漏洞检测

若回显如下,则漏洞存在
< HTTP/1.1 200 OKHTTP/1.1 200 OK
< Content-Type: message/httpContent-Type: message/http
若回显如下,则漏洞不存在
< HTTP/1.1 403 Forbidden
< Content-Type: text/html; charset=iso-8859-1
或者
< HTTP/1.1 405 Method Not Allowed
< Content-Type: text/html; charset=iso-8859-1

                 

检测脚本

原理

使用OPTIONS请求查看服务器声明的支持方法
curl -I -X OPTIONS http://www.test.com通过实际的TRACE请求验证服务器是否按照声明执行了TRACE方法
curl -v -X TRACE http://www.test.com

                 

用法

python scanner.py urls.txt的文件路径

注意:检测结果不可避免的存在一些误报,需要人工对检测结果进行最终的验证 

                 

代码

scanner.py

import subprocess
import sys
import requests
import pandas as pddef read_urls_from_file(file_path):try:with open(file_path, 'r', encoding='utf-8') as file:  # 指定编码为utf-8urls = file.readlines()# 去除每行末尾的换行符和空行urls = [url.strip() for url in urls if url.strip()]return urlsexcept FileNotFoundError:print(f"错误: {file_path} 文件不存在!")sys.exit(1)  # 退出程序并返回错误码1except IOError:print(f"错误: {file_path} 文件读取失败!")sys.exit(1)  # 退出程序并返回错误码1def export_to_excel(data, file_name):df = pd.DataFrame(data)try:# 将DataFrame写入Excel文件,不包括索引df.to_excel(file_name, index=False)print(f"结果已写入文件: {file_name}")except IOError:print(f"结果写入出错: {file_name}.")def check_trace_first(url):try:# 使用 curl -I -X OPTIONS 请求来获取支持的 HTTP 方法result = subprocess.run(['curl', '-I', '-X', 'OPTIONS', url],stdout=subprocess.PIPE,stderr=subprocess.PIPE,# 5秒未响应返回falsetimeout=5)# 尝试 UTF-8 解码try:stdout_text = result.stdout.decode('utf-8')except UnicodeDecodeError:# 如果 UTF-8 解码失败,尝试 GBK 解码try:stdout_text = result.stdout.decode('gbk')except UnicodeDecodeError:# 如果两种编码都失败,可以选择忽略错误、使用替换字符等stdout_text = result.stdout.decode('utf-8', errors='replace')# 检查响应是否包含 'TRACE' 字段if 'TRACE' in stdout_text:print("OPTIONS:true")return Trueelse:print("OPTIONS:false")return Falseexcept subprocess.TimeoutExpired:print("OPTIONS: timeout")return Falseexcept Exception as e:print("OPTIONS:",e)return Falsedef check_trace_second(url):try:result = subprocess.run(['curl', '-v', '-X', 'TRACE', url],stdout=subprocess.PIPE,stderr=subprocess.PIPE,# 5秒未响应返回falsetimeout=5)# 尝试 UTF-8 解码try:stderr_text = result.stderr.decode('utf-8')except UnicodeDecodeError:# 如果 UTF-8 解码失败,尝试 GBK 解码try:stderr_text = result.stderr.decode('gbk')except UnicodeDecodeError:# 如果两种编码都失败,可以选择忽略错误、使用替换字符等stderr_text = result.stderr.decode('utf-8', errors='replace')# 判断 TRACE 是否被允许,通常响应会包含 "405 Method Not Allowed" 或类似的内容if "200 OK" in stderr_text:print("TRACE:true")return Trueelse:print("TRACE:False")return Falseexcept subprocess.TimeoutExpired:print("TRACE: timeout")return Falseexcept Exception as e:print("TRACE:",e)return Falseif __name__ == "__main__":# 如果提供了命令行参数,则使用它作为文件路径,否则使用默认路径if len(sys.argv) > 1:file_path = sys.argv[1]else:# 默认文件路径,假设它与脚本在同一目录中file_path = 'urls.txt'# 从urls.txt文件中读取需要扫描的所有urlurls = read_urls_from_file(file_path)# 定义用于存放扫描结果的切片scan_results = []# 依次遍历需要扫描的urlfor url in urls:print("检测:",url)# 第一次检测trace_first = check_trace_first(url)if not trace_first:scan_result = {'url': url, '允许TRACE方法': False}scan_results.append(scan_result)# 第一次检测为false直接跳过第二次检测continue# 第二次检测,两次检测都必须为true才能算是检测到了漏洞trace_second = check_trace_second(url)if trace_second:scan_result = {'url': url, '允许TRACE方法': True}else:scan_result = {'url': url, '允许TRACE方法': False}# 将本次检测结果放入结果集scan_results.append(scan_result)# 将检测结果集导出为xlsx文档export_to_excel(scan_results, 'result.xlsx')

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux socket编程之udp_dict_serve服务端--引入配置文件

注意&#xff1a;本篇博客只是对上一篇博客功能的增加 1.创建配置文件(翻译) Dict.txt apple: 苹果 banana: 香蕉 cat: 猫 dog: 狗 book: 书 pen: 笔 happy: 快乐的 sad: 悲伤的 run: 跑 jump: 跳 teacher: 老师 student: 学生 car: 汽车 bus: 公交车 love: 爱 hate: 恨 hell…

ESP32S3 使用LVGL驱动LCD屏(ST7789主控)

ESP32S3 使用LVGL驱动LCD屏&#xff08;ST7789主控&#xff09; 目录 1 分析原理图 2 驱动、点亮LCD(ST7789) 2.1 在工程中添加目录、文件 2.2 添加esp_lvgl_port组件 2.3 对工程进行必要的配置 2.4 编写必要代码 3 烧录、验证 1 分析原理图 要使用SOC驱动LCD屏&#…

Sigrity Optimize PI CapGen仿真教程文件路径

为了方便读者能够快速上手和学会Sigrity Optimize PI和 Deacap Generate 的功能&#xff0c;将Sigrity Optimize PI CapGen仿真教程专栏所有文章对应的实例文件上传至以下路径 https://download.csdn.net/download/weixin_54787054/90171471?spm1001.2014.3001.5503

2024年“羊城杯”粤港澳大湾区网络安全大赛 初赛 Web数据安全AI 题解WriteUp

文章首发于【先知社区】&#xff1a;https://xz.aliyun.com/t/15442 Lyrics For You 题目描述&#xff1a;I have wrote some lyrics for you… 开题。 看一下前端源码&#xff0c;猜测有路径穿越漏洞 http://139.155.126.78:35502/lyrics?lyrics../../../../../etc/passw…

NLP 中文拼写检测开源-03-hunspell 拼写纠正算法入门介绍 CSC

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法&#xff0c;如果提升 100W 倍的性能&#xff1f; NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正&#xff1f;可我只会写 CRUD 啊&#xff01; 一个提升英文单词拼…

SpringCloud 运用(3)—— Nacos配置中心

上一篇&#xff1a;SpringCloud 入门&#xff08;2&#xff09;—— 跨服务调度-CSDN博客 Nacos是阿里巴巴开源的服务发现与配置管理基础设施&#xff0c;旨在帮助开发者更轻松地构建云原生应用。它提供了一组简单易用的特性集&#xff0c;支持动态服务发现、配置管理和服务管理…

门户系统需要压测吗?以及门户系统如何压力测试?

一、门户系统为什么要进行压力测试&#xff1f; 首先一点要明确一下&#xff0c;统一门户上线以后&#xff0c;将是所有应用系统的入口&#xff0c;对应门户稳定性要求较高&#xff0c;门户实现了统一入口和统一认证&#xff0c;系统宕机将影响其他系统使用。一般部署架构要求…

专题八:背包问题

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是记忆化搜索&#xff0c;并且掌握记忆化搜索算法。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早…

SpringBoot核心:自动配置

有使用过SSM框架的&#xff0c;还记得曾经在spring-mybatis.xml配置了多少内容吗&#xff1f;数据源、连接池、会话工厂、事务管理&#xff0c;而现在Spring Boot告诉你这些都不需要了&#xff0c;简单的几个注解统统搞定&#xff0c;是不是很方便&#xff01; 前言 SpringBoo…

python 定时任务管理封装

主逻辑代码 # -*- coding: utf-8 -*- # import apscheduler import pandas as pd from datetime import datetime # 导入调度器&#xff0c;此处使用BackgroundScheduler阻塞调度器 from apscheduler.schedulers.background import BackgroundScheduler # 导入触发器&#xf…

APP投放的归因框架设计

一、归因相关概念回顾 在广告归因简介中我们介绍常见的归因模型和归因方法&#xff0c;我们先来回顾一下&#xff1a; 1. 背景 2. 设备标识 3. 归因模型 归因模型的多样性意味着每种模型都有其独特的优势和局限。关键在于选择一个与您的业务场景相匹配的模型&#xff0c;并且…

Kunlun 2280服务器(ARM)Raid卡磁盘盘符漂移问题解决

一、问题描述 1、服务器:Kunlun 2280服务器 ARM 2、操作系统:Euler2.0Sp10 Arm 3、Raid卡型号:MeGaRAID 9560-8i 4、Raid配置:2块配置Raid1作为系统盘&#xff0c;剩余磁盘配置Raid5 作为数据盘 二、问题现象 1、使用IBMC页面配置Raid卡&#xff0c;1个Raid1 系统盘和1个Raid5数…

[搜广推]王树森推荐系统——Deep Retrieval 召回

Deep Retrieval 简介 Deep Retrieval 是一种推荐系统框架&#xff0c;它将物品表示为路径&#xff08;path&#xff09;&#xff0c;并在线上查找与用户最匹配的路径。 这种方法与传统的双塔模型不同&#xff0c;后者通常将用户和物品表示为向量&#xff0c;并在线上进行最近邻…

RabbitMQ 的7种工作模式

RabbitMQ 共提供了7种⼯作模式,进⾏消息传递,. 官⽅⽂档:RabbitMQ Tutorials | RabbitMQ 1.Simple(简单模式) P:⽣产者,也就是要发送消息的程序 C:消费者,消息的接收者 Queue:消息队列,图中⻩⾊背景部分.类似⼀个邮箱,可以缓存消息;⽣产者向其中投递消息,消费者从其中取出消息…

PCIe_Host驱动分析_设备枚举

往期内容 本文章相关专栏往期内容&#xff0c;PCI/PCIe子系统专栏&#xff1a; 嵌入式系统的内存访问和总线通信机制解析、PCI/PCIe引入 深入解析非桥PCI设备的访问和配置方法 PCI桥设备的访问方法、软件角度讲解PCIe设备的硬件结构 深入解析PCIe设备事务层与配置过程 PCIe的三…

深入浅出:多功能 Copilot 智能助手如何借助 LLM 实现精准意图识别

阅读原文 1. Copilot中的意图识别 如果要搭建一个 Copilot 智能助手&#xff0c;比如支持 知识问答、数据分析、智能托管、AIGC 等众多场景或能力&#xff0c;那么最核心的就是基于LLM进行意图识别分发能力&#xff0c;意图识别的准确率直接决定了 Copilot 智能助手的能力上限…

Jo-im开发:用于WebRTC的ICE中继服务器Coturn搭建

前言 本人计划开发一套具备文本、语音、视频通话功能的IM demo&#xff0c;同时具备多人在线会议功能&#xff0c;按习惯大概会开源版定义名称为Duihao jo-im&#xff0c;本案主要用于实现语音视频通话的基础组件支撑。因为我们选择基于WebRTC实现IM中语音、视频通话&#xff…

【CVE-2024-53375】TP-Link Archer系列路由器认证操作系统命令注入(内附远离和代码利用)

CVE-2024-53375 TP-Link Archer系列路由器认证操作系统命令注入 受影响的设备 使用 HomeShield 功能的 TP-Link 设备容易受到此漏洞的影响。这包括 TP-Link Archer 系列的多款路由器。 经过测试 Archer AXE75(EU)_V1_1.2.2 Build 20240827(发布日期 2024 年 11 月 4 日)…

程控电阻箱应用中需要注意哪些安全事项?

程控电阻箱是一种用于精确控制电路中电流和电压的电子元件&#xff0c;广泛应用于电子实验、测试设备以及精密测量仪器中。在应用程控电阻箱时&#xff0c;为确保安全和设备的正常运行&#xff0c;需要注意以下几个安全事项&#xff1a; 1. 正确连接&#xff1a;确保电阻箱与电…

Promise链式调用

Promise链式调用 上一篇我们实现了通过promise的方式实现获取国家基本信息&#xff0c;本次我们来使用promise链式调用来实现邻国的展现 首先&#xff0c;我们从第一个国家中获取到邻国的国家代码名称 const neighbour data[0].borders[0];然后我们通过fetch来获取邻国信息&a…