相关疑难解决方法(0)

澄清整个PHP版本中的XXE漏洞

我在这里发布一个问题作为最后的手段,我浏览了网页并经历了许多尝试,但没有成功.

复制XXE攻击是我想要做的,为了防止它们,但我似乎无法理解PHP与XML实体的工作方式.为了记录,我在Ubuntu 12.04上使用PHP 5.5.10,但是我已经对5.4和5.3进行了一些测试,而libxml2似乎是2.7.8版(它似乎没有包含默认的不解析实体).

在下面的示例中,使用true或false调用libxml_disable_entity_loader()无效,或者我做错了什么.

$xml = <<<XML
<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY c PUBLIC "bar" "/etc/passwd">
]>
<root>
    <test>Test</test>
    <sub>&c;</sub>
</root>
XML;

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

// Prints Test.
print $dom->textContent;
Run Code Online (Sandbox Code Playgroud)

但是,我可以专门将一些参数传递给loadXML()以允许一些选项,并且当实体是本地文件时工作,而不是当它是外部URL时.

$xml = <<<XML
<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY c PUBLIC "bar" "/etc/passwd">
]>
<root>
    <test>Test</test>
    <sub>&c;</sub>
</root>
XML;

$dom = new DOMDocument();
$dom->loadXML($xml, LIBXML_NOENT | LIBXML_DTDLOAD);

// Prints Test.
print $dom->textContent;
Run Code Online (Sandbox Code Playgroud)

现在,如果我们将实体更改为其他内容,如下例所示,实体已解析但我无法使用参数或函数禁用它...发生了什么?!

$xml = <<<XML
<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY c "Blah …
Run Code Online (Sandbox Code Playgroud)

php xml security xxe

16
推荐指数
1
解决办法
5363
查看次数

标签 统计

php ×1

security ×1

xml ×1

xxe ×1