当前位置: 首页 > 知识库问答 >
问题:

XML外部实体(XXE)攻击失败

太叔豪
2023-03-14

请给我一个提示,为什么我的代码不容易受到XXE的攻击。

代码:

$text = $_POST['textarea'];
$doc= new DOMDocument();
$doc->loadXML($text);
echo $doc->textContent;

测试用例1:

<justsomexmltag>Hello world</justsomexmltag>

结果1:

Hello world

到现在为止,一直都还不错。但是,当我尝试注入XML代码以检索本地文件的内容时:

<?xml version="1.0"?>
    <!DOCTYPE log [
        <!ENTITY ent SYSTEM "test.txt">
    ]>
<log><text>&ent;</text></log>

然后什么都不打印。“test.txt”在文件结构中与我执行攻击的php文件处于同一级别。我已经尝试过了

<!ENTITY ent SYSTEM file:///"test.txt">

以及

<!ENTITY ent SYSTEM file:///full path to the file>

但无济于事。

test.txt:

This is just a test.

已尝试:

<test>This is just a test.</test>

没有结果。

有什么提示吗?

反映保罗·克罗维拉,这里有一个编辑:

CP-ing您的代码导致:

DOMDocument::loadXML(): I/O警告:加载外部实体文件失败://文件名的完整路径

DOMDocument::loadXML():无法处理实体中的实体ent

DOMDocument::loadXML(): Entity'ent'未在Entity中定义

共有1个答案

汪欣德
2023-03-14

默认情况下,libxml不会精确加载外部实体以避免此问题。要说服它这样做,您需要在加载之前将替换实体validateOnParse设置为true。例如:

$xml = <<<'XML'
<?xml version="1.0"?>
<!DOCTYPE log [
    <!ENTITY ent SYSTEM "test.txt">
]>
<log><text>&ent;</text></log>
XML;

$dom = new DOMDocument();
$dom->substituteEntities = true;
$dom->loadXML($xml);

echo $dom->textContent;

输出:

This is just a test.
 类似资料:
  • 我在fortify报告中收到了第4行的XML外部实体注入安全警告。不知道如何修复它。我对SOAP、JAXB和Marshaller很陌生。 第4行(XML外部实体注入)高问题详细信息王国:输入验证和表示扫描引擎:SCA(语义) 接收器详细信息接收器:解组() 提前感谢!

  • 问题内容: 我在veracode报告中得到了下一个发现:XML外部实体引用(’XXE’)(CWE ID 611)的不当限制引用了下面的代码 … … 我一直在研究,但是我还没有找到这个发现的原因或使它消失的方法。你能告诉我怎么做吗? 问题答案: 您是否看到过有关XXE的OWASP指南? 您没有禁用应禁用的3个功能。最重要的是第一个:

  • 为了防止XXE攻击,我禁用了Java DocumentBuilderFactory推荐的以下功能-https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention\u Cheat\u Sheet。 如果我没有将外部常规实体和外部参数实体设置为false,是否存在任何漏洞?因为当我们将disallow doctype decl设

  • 我们对代码进行了安全审计,它提到我们的代码容易受到XML外部实体(XXE)攻击。 XML外部实体攻击利用XML功能在处理时动态构建文档。XML实体允许动态包含来自给定资源的数据。外部实体允许XML文档包含来自外部URI的数据。除非配置为其他方式,否则外部实体会强制XML解析器访问URI指定的资源,例如本地计算机或远程系统上的文件。此行为会使应用程序遭受XML外部实体(XXE)攻击,这些攻击可用于执

  • 问题内容: 最近,我们对代码进行了安全审核,问题之一是我们的应用程序受到 Xml eXternal Entity (XXE)攻击。 基本上,该应用程序是一个计算器,可通过Web服务以XML形式接收输入。 这是对我们的应用程序进行此类XXE攻击的示例: 如您所见,我们可以引用指向外部文件()的实体。 关于XML输入本身(该部分)未与JAXB(v2.1)一起编组。Web服务部分基于jaxws- rt(

  • 想知道如何使用Xstream API修复Xml外部实体(XXE)漏洞。 就像我们能做的一样 使用DocumentBuilderFactory。更多详细信息-https://www.owasp.org/index.php/XML_External_Entity_(XXE)\u预防\u备忘单 我的代码是这样的-