当前位置: 首页 > news >正文

通过Golang实现中间人攻击,查看和修改https流量包

要查看和修改 HTTPS 流量包,需要使用一个能够执行 中间人攻击(Man-in-the-Middle, MITM) 的代理工具。这个工具将拦截并解密 HTTPS 流量,然后允许查看和修改流量包的内容,再将其重新加密并发送到目标服务器。

完整的 MITM 代理工具(Golang 版)

以下是一个完整的 Golang 实现,可以查看和修改 HTTP 和 HTTPS 流量包。工具会使用自签名证书来解密 HTTPS 流量,并打印出请求和响应的详细内容,可以在代码中加入修改流量的逻辑。

代码
package mainimport ("crypto/tls""crypto/x509""fmt""io""io/ioutil""log""net""net/http""time"
)// Load the CA certificate and key
func loadCA(certFile, keyFile string) (tls.Certificate, *x509.CertPool, error) {ca, err := tls.LoadX509KeyPair(certFile, keyFile)if err != nil {return tls.Certificate{}, nil, err}caCert, err := x509.ParseCertificate(ca.Certificate[0])if err != nil {return tls.Certificate{}, nil, err}caPool := x509.NewCertPool()caPool.AddCert(caCert)return ca, caPool, nil
}// Function to modify the HTTP request (you can add your own logic here)
func modifyRequest(req *http.Request) {// Example: Adding a custom headerreq.Header.Set("X-Custom-Header", "Intercepted-By-MITM-Proxy")
}// Function to modify the HTTP response (you can add your own logic here)
func modifyResponse(resp *http.Response) {// Example: Modifying the response body (this example appends a string to HTML responses)if resp.Header.Get("Content-Type") == "text/html" {body, _ := ioutil.ReadAll(resp.Body)body = append(body, []byte("<p>Injected by MITM proxy</p>")...)resp.Body = ioutil.NopCloser(io.MultiReader(bytes.NewReader(body)))resp.ContentLength = int64(len(body))resp.Header.Set("Content-Length", fmt.Sprint(len(body)))}
}// Handles HTTP requests
func handleHTTP(w http.ResponseWriter, r *http.Request) {log.Printf("HTTP Request: %s %s", r.Method, r.URL.String())// Modify the request as neededmodifyRequest(r)// Forward the request to the actual servertransport := &http.Transport{}resp, err := transport.RoundTrip(r)if err != nil {http.Error(w, err.Error(), http.StatusBadGateway)return}defer resp.Body.Close()// Modify the response as neededmodifyResponse(resp)// Print response statuslog.Printf("HTTP Response: %d %s", resp.StatusCode, resp.Status)// Copy headers and body to the clientfor k, v := range resp.Header {w.Header()[k] = v}w.WriteHeader(resp.StatusCode)io.Copy(w, resp.Body)
}// Handles HTTPS requests
func handleHTTPS(w http.ResponseWriter, r *http.Request, ca tls.Certificate, caPool *x509.CertPool) {log.Printf("HTTPS Request: %s %s", r.Method, r.URL.String())// Hijack the connectionhijacker, ok := w.(http.Hijacker)if !ok {http.Error(w, "HTTP Server does not support hijacking", http.StatusInternalServerError)return}clientConn, _, err := hijacker.Hijack()if err != nil {http.Error(w, err.Error(), http.StatusServiceUnavailable)return}defer clientConn.Close()// Create a new TLS connection with the client using a dynamically generated certificatetlsConfig := &tls.Config{Certificates: []tls.Certificate{ca},ClientAuth:   tls.NoClientCert,RootCAs:      caPool,}serverName := r.HosttlsConn := tls.Server(clientConn, tlsConfig)if err := tlsConn.Handshake(); err != nil {log.Printf("TLS handshake error: %v", err)return}defer tlsConn.Close()// Connect to the real serverdestConn, err := net.Dial("tcp", r.Host)if err != nil {log.Printf("Failed to connect to destination: %v", err)return}defer destConn.Close()// Start a TLS session with the real serverserverTLSConn := tls.Client(destConn, &tls.Config{ServerName:         serverName,InsecureSkipVerify: true,})if err := serverTLSConn.Handshake(); err != nil {log.Printf("Failed to perform TLS handshake with the server: %v", err)return}defer serverTLSConn.Close()// Copy data between client and servergo io.Copy(serverTLSConn, tlsConn)io.Copy(tlsConn, serverTLSConn)
}// Main function to start the proxy server
func main() {// Load the CA certificate and keyca, caPool, err := loadCA("ca.crt", "ca.key")if err != nil {log.Fatalf("Failed to load CA: %v", err)}http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {if r.Method == http.MethodConnect {handleHTTPS(w, r, ca, caPool)} else {handleHTTP(w, r)}})log.Println("Listening on :8080...")log.Fatal(http.ListenAndServe(":8080", nil))
}

代码功能说明

  1. HTTPS 处理

    • 当客户端发起 CONNECT 请求(用于 HTTPS),代理服务器会拦截并建立与客户端的 TLS 连接。
    • 使用自签名证书与客户端进行 TLS 握手,接着与目标服务器建立第二个 TLS 连接。
    • 解密客户端和服务器之间的 HTTPS 流量,允许你查看和修改这些数据。
  2. HTTP 处理

    • 对于普通的 HTTP 请求,代理直接进行转发,并允许在 modifyRequestmodifyResponse 函数中修改请求和响应数据。
  3. 证书生成和加载

    • 代理工具使用自签名根证书生成中间证书,模拟目标服务器的证书。这需要事先生成并加载一个 CA 证书(根证书)。

如何使用

  1. 生成自签名根证书
    可以使用 OpenSSL 来生成一个自签名的 CA 证书:

    openssl genrsa -out ca.key 2048
    openssl req -new -x509 -key ca.key -out ca.crt -days 3650
    
    • ca.key 是 CA 的私钥。
    • ca.crt 是自签名的根证书。
  2. 编译并运行代理工具

    • 将代码保存为 proxy.go,然后编译:
      go build -o proxy proxy.go
      
    • 运行工具:
      ./proxy
      
  3. 配置浏览器代理

    • 在浏览器中设置代理为 localhost:8080
    • 将生成的 ca.crt 证书导入到浏览器的受信任根证书列表中。
  4. 查看和修改流量

    • 工具会在终端中打印所有经过代理的 HTTP 和 HTTPS 请求与响应的详细信息。
    • 可以在 modifyRequestmodifyResponse 函数中添加自定义逻辑来修改流量包。

安全性和合法性

  • 合法性:在没有适当授权的情况下,拦截和修改 HTTPS 流量可能是非法的,请确保你在合适的环境中使用,如安全测试或开发环境中,并且得到了相关方的同意。
  • 证书管理:务必保护好 CA 私钥,避免被不当使用。
  • 浏览器信任问题:浏览器必须信任生成的自签名根证书,否则会显示安全警告。

通过上述步骤,可以成功地拦截、查看和修改 HTTP 和 HTTPS 流量。

相关文章:

通过Golang实现中间人攻击,查看和修改https流量包

要查看和修改 HTTPS 流量包&#xff0c;需要使用一个能够执行 中间人攻击&#xff08;Man-in-the-Middle, MITM&#xff09; 的代理工具。这个工具将拦截并解密 HTTPS 流量&#xff0c;然后允许查看和修改流量包的内容&#xff0c;再将其重新加密并发送到目标服务器。 完整的 …...

MySQL 安装与配置指南

MySQL 是一种广泛使用的关系型数据库管理系统&#xff0c;为各种应用程序提供高效的数据存储和管理解决方案。本文将介绍如何在不同的操作系统中安装 MySQL&#xff0c;以及如何进行基本的配置&#xff0c;以确保数据库系统的最佳性能和稳定性。 一、环境准备 1.1 系统要求 …...

android13布局查看工具 无源码查看布局 在线查找ui布局id

总纲 android13 rom 开发总纲说明 目录 1.前言 2.工具介绍 2.1工具1 2.2工具2 2.3工具3 2.4工具4 3.彩蛋 1.前言 Android 13提供了一些工具来帮助开发人员查看和优化应用的布局。方便的让我们找到具体应用的布局文件等信息。 2.工具介绍 2.1工具1 老版本DDMS&#x…...

【自动化测试必学语言】python:UnitTest框架

目录 介绍 框架 什么是UnitTest框架&#xff1f; 为什么使用UnitTest框架? UnitTest核心要素&#xff08;unitest 的组成部分&#xff09; 1.TestCase&#xff08;最核心的模块&#xff09; 2.TestSuite 3.TestRunner 4.TestLoader 5.Fixture TestCase&#xff08…...

大话LLM之向量数据库

向量数据库是一种专门设计的存储系统&#xff0c;旨在高效处理和查询高维向量数据&#xff0c;通常用于人工智能和机器学习应用中&#xff0c;以实现快速准确的数据检索。 好的&#xff0c;今天我们就来聊聊人工智能和向量数据库的事儿。现在人工智能发展得特别快&#xff0c;特…...

EmguCV学习笔记 C# 2.2 Matrix类

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV学习笔记目录 Vb.net EmguCV学习笔记目录 C# 笔者的博客网址&#xff1a;VB.Net-CSDN博客 教程相关说明以及如何获得pdf教…...

[Windows CMD] 查看网络连接状态 netstat -na | findstr “TCP“

在 Windows 系统中&#xff0c;我们可以使用 netstat 命令来查看网络连接状态&#xff0c;并使用 findstr 命令来过滤出 TCP 和 UDP 的连接。 查看所有网络连接的状态 netstat -na netstat -na: 显示所有网络连接的状态&#xff0c;-n 表示显示数字地址而非域名&#xff0c;…...

「OC」视图控制器的懒加载策略

「OC」视图控制器的懒加载策略 文章目录 「OC」视图控制器的懒加载策略懒加载懒加载的优点常见的懒加载实现方法使用懒加载的注意事项 控制器的懒加载参考资料 懒加载 懒加载&#xff08;Lazy Loading&#xff09;是一种设计模式&#xff0c;其核心思想是在需要时才进行对象的…...

android studio 中 .gitignore 文件改动后 忽略的文件夹或文件无效

问题原因&#xff1a;已跟踪文件的缓存问题&#xff1a; 如果之前已经跟踪了这些文件&#xff08;即它们已经被 Git 加入到版本控制中&#xff09;&#xff0c;即使你在 .gitignore 文件中添加了忽略规则&#xff0c;Git 仍然会显示这些文件。你需要先从 Git 中移除这些文件&am…...

鸿蒙 next 实现摄像头视频预览编码(一)

鸿蒙 next 即将发布&#xff0c;让我们先喊3遍 遥遥领先~ 遥遥领先~ 遥遥领先~ 作为一门新的系统&#xff0c;本人也是刚入门学习中&#xff0c;如果对于一些理解有问题的&#xff0c;欢迎即使指出哈 首先这里要讲一下&#xff0c;在鸿蒙 next 中&#xff0c;要实现摄像头预览…...

YOLO-V3

一、概述 最大的改进就是网络结构&#xff0c;使其更适合小目标检测特征做的更细致&#xff0c;融入多持续特征图信息来预测不同规格物体先验框更丰富了&#xff0c;3种scale&#xff0c;每种3个规格&#xff0c;一共9种softmax改进&#xff0c;预测多标签任务 先验框&#xf…...

golang提案,内置 Go 错误检查函数

先来狠狠吐个槽 要吐槽 Go1 的 error &#xff0c;那咱得先整明白大家为啥都猛喷它的错误处理做得不咋地。在 Go 语言里头&#xff0c;error 本质上其实就是个 Error 的接口&#xff1a; type error interface {Error() string }实际的应用场景如下&#xff1a; func main()…...

零售业务产品系统应用架构设计(三)

智慧物业依据《住房和城乡建设部等部门关于推动物业服务企业加快发展线上线下生活服务的意见建房〔2020〕99号》,推动物业管理公司广泛运用5G、互联网、物联网、云计算、大数据、区块链和人工智能等技术,建设智慧物业管理服务平台,对接城市信息模型(CIM)和城市运行管理服务…...

【GD32】从零开始学GD32单片机 | PMU电源管理单元+深度睡眠和待机例程(GD32F470ZGT6)

1. 简介 PMU电源管理单元通俗讲就是用来管理MCU的电源域的&#xff0c;它主要有两个功能——电压监测和低功耗管理。在GD32中一共有3个电源域——VDD/VDDA域、1.2V域和备份域。 VDD/VDDA域主要供PMU控制器、ADC、DAC等外设使用&#xff1b;1.2V域就是大部分外设都会使用的电源域…...

公司员工电脑桌面太乱如何解决?桌面管理软件一招解决!

“工欲善其事&#xff0c;必先利其器。” 在数字化管理的时代背景下&#xff0c;选择合适的桌面管理软件就如同为企业网络管理装上了一双慧眼。 员工的电脑桌面往往因为长时间的使用而变得杂乱无章&#xff0c;这不仅影响了工作效率&#xff0c;还可能给企业信息安全带来隐患。…...

leetcode:2119. 反转两次的数字(python3解法)

难度&#xff1a;简单 反转 一个整数意味着倒置它的所有位。 例如&#xff0c;反转 2021 得到 1202 。反转 12300 得到 321 &#xff0c;不保留前导零 。 给你一个整数 num &#xff0c;反转 num 得到 reversed1 &#xff0c;接着反转 reversed1 得到 reversed2 。如果 reverse…...

5.vue中axios封装工程化

vue工程化中axios封装 视频演示地址&#xff1a;https://www.bilibili.com/video/BV121egeQEHg/?vd_source0f4eae2845bd3b24b877e4586ffda69a 通常我们封装需要封装request.js基础的发送请求工具类&#xff0c;再根据业务封装service类&#xff0c;service类是具体业务的接口…...

实验六:动态数码管实验

实验结果图,从右到左0-7,从左到右7-0,来回滚动。 硬件接线图: 具体看图,不说了,前面讲过,自己查资料就可以,资料得慢慢查,熟练就好了,不浪费时间和版面了 main.c代码 #include<reg52.h>typedef unsigned int u16; typedef unsigned char u8;#define SMG P0 …...

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 05网络虚拟化

本章帮助网络工程师或架构师回答如下问题&#xff1a; 什么是网络虚拟化?网络虚拟化有哪些用途?网络虚拟化领域内有哪些不同的技术方向?网络虚拟化的控制面有哪些选择?当使用 VXLAN 时如何进行桥接和路由&#xff1f; 什么是网络虚拟化&#xff1f; 网络虚拟化可以让网络…...

奥威BI数据可视化展示:如何充分发挥数据价值

奥威BI数据可视化展示&#xff1a;如何充分发挥数据价值 在大数据时代&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;仅仅拥有海量数据并不足以带来竞争优势&#xff0c;关键在于如何有效地挖掘、分析和展示这些数据&#xff0c;从而转化为有价值的洞察和决策…...

jenkins工具配置

上一篇&#xff08;https://blog.csdn.net/abc666_666/article/details/141207741&#xff09;文章我们介绍了基于docker安装jenkins的过程&#xff0c;本文将介绍如何配置jenkins的相关全局工具如maven、 jdk以及git等 配置的页面如下&#xff1a; 打开后的页面如下&#xff…...

VAuditDemo文件漏洞

目录 VAuditDemo文件漏洞 一、首页文件包含漏洞 包含图片马 利用伪协议phar:// 构造shell.inc被压缩为shell.zip&#xff0c;然后更改shell.zip 为 shell.jpg上传 二、任意文件读取漏洞 avatar.php updateAvatar.php logCheck.php 任意文件读取漏洞利用 VAuditDemo文件…...

[Meachines] [Medium] poison LFI+日志投毒+VNC权限提升

信息收集 IP AddressOpening Ports10.10.10.84TCP:22,80 $ nmap -p- 10.10.10.84 --min-rate 1000 -sC -sV 22/tcp open ssh OpenSSH 7.2 (FreeBSD 20161230; protocol 2.0) | ssh-hostkey: | 2048 e3:3b:7d:3c:8f:4b:8c:f9:cd:7f:d2:3a:ce:2d:ff:bb (RSA) | 256 …...

EtherCAT运动控制器上位机开发之Python+Qt(三):PDO配置与SDO读写

ZMC408CE控制器硬件介绍 ZMC408CE是正运动推出的一款多轴高性能EtherCAT总线运动控制器&#xff0c;具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口&#xff0c;ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。 ZMC408CE支持8轴运动控制&#xff0c;最多可扩展…...

MyBatis源码系列1(使用JDBC查询数据)

使用原生jdbc进行查询数据步骤. 1、加载驱动2、获取数据库连接3、创建Statement对象4、占位符赋值5、执行脚本6、解析结果7、关闭资源 代码示例 public class T0 {public static void main(String[] args) throws Exception {String sql "SELECT id,name FROM goods WH…...

【微服务】Nacos配置中心和客户端数据同步模式

一、Nacos概述 Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它提供了一组简单易用的特性集&#xff0c;帮助用户快速实现动态服务发现、服务配置、服务元数据及流量管理。 二、数据同步模式 1. 实时同步 Push模式&#xff1a;在服务端的配置信…...

WebRTC音视频开发读书笔记(六)

数据通道不仅可以发送文本消息, 还可以发送图片、二进制文件,将其类型binaryType属性设置成arraybuffer类型即可. 九\、文件传输 1、文件传输流程 &#xff08;1&#xff09;使用表单file打开本地文件 &#xff08;2&#xff09;使用FileReader读取文件的二进制数据 &#…...

高级列表组件ReList

高级列表组件ReList 组件实现基于 Vue3 Element Plus Typescript&#xff0c;同时引用 vueUse lodash-es tailwindCss (不影响功能&#xff0c;可忽略) 主要基于JSX风格实现高度动态的列表渲染组件&#xff0c;可以通过信息配置Metas配置控制信息项展示&#xff0c;同时支持…...

Vxe UI vue vxe-table 实现表格数据分组功能,根据字段数据分组

Vxe UI vue vxe-table 实现表格数据分组功能&#xff0c;根据字段数据分组 实现数据分组功能 基于树结构功能就可以直接实现数据分组功能&#xff0c;代码如下&#xff1a; <template><div><vxe-button status"primary" click"listToGroup()&…...

oracle创建账户

1、查看表空间 SELECT tablespace_name FROM user_tablespaces;2、创建用户 CREATE USER FLINKCDC2 IDENTIFIED BY "123456";也可以使用指定表空间的方式 CREATE USER FLINKCDC2 IDENTIFIED BY "123456" DEFAULT TABLESPACE LOGMINER_TBS QUOTA UNLIMIT…...

昆明做网站建设的公司排名/30条新闻摘抄

欢迎关注”生信修炼手册”!ENCODE官方提供了chip_seq分析的pipeline以供参考&#xff0c;在peak calling前的预处理环节&#xff0c;流程示意如下可以看到其中包含了一个名为phantompeakqualtools的工具&#xff0c;这个工具可以进行cross-correlation分析&#xff0c;计算得到…...

做阿里巴巴怎么进公司网站/宁宁网seo

《Network Science》 by Albert-Lszl Barabsi...

wordpress三级导航菜单调用/sem和seo是什么职业岗位

1.为什么选择 NASA下载数据&#xff1f; 在遥感研究中&#xff0c;有一个不得不提到的传感器&#xff0c;那就是Modis &#xff0c;Modis的数据在国内可以下载的到&#xff0c;但是数据更新的比较慢&#xff0c;比如地理空间数据云的遥感产品数据&#xff0c;想要获取到最新的…...

广州市研发网站建设价格/免费推广的平台都有哪些

CGI是干嘛的&#xff1f;CGI是为了保证web server传递过来的数据是标准格式的&#xff0c;方便CGI程序的编写者。 web server&#xff08;比如说nginx&#xff09;只是内容的分发者。比如&#xff0c;如果请求/index.html&#xff0c;那么web server会去文件系统中找到这个文件…...

杭州网站设计予尚/网站建设方案设计书

view-->word wrap; setting->preference-->vertical edge settings; Notepad中如何设置自动换行以及行宽 http://jingyan.baidu.com/article/6c67b1d68eddbc2787bb1e8c.html 转载于:https://www.cnblogs.com/mylinux/p/4741321.html...

商务网站建设实验书/怎样交换友情链接

作者&#xff1a;蓝笔头链接&#xff1a;https://www.jianshu.com/p/f3e64e70eb1b1. 排序1.1 数组排序&#xff08;java.util.Arrays&#xff09;1.1.1 基本数据类型排序对整个数组排序public static void sort(int[] a);对部分数组 [fromIndex, toIndex) 排序public static vo…...