rce



这个其实某种意义上和上面不一样。

也就是说他还是执行了的。


代码执行。
这个是命令执行漏洞。

有些必须有输出才行。

可以直接执行命令执行。

他知道命令执行代码原来是这样的意思,直接用环境变量,py输出到Cmd


相当于临时执行。想当于直接cmd。



占位符。

tac


$空变量。

注意的是,如果是特殊符号,他不会那个,但是*号前面的东西他都会看做空变量。






输出的控制台解码,然后查询Flag
这个我知道,将目录下的文件写入一个shell脚本中。


这个斜杠是没有事的。

我的天异或运算,直接用异或拼接,他一个一个对应拼接还是什么?

字符格式。




伪协议是一个功能。
-在XXE漏洞中能使用PHP伪协议(如 php://filter ),核心是XML解析器的外部实体支持协议资源引用 + PHP环境对伪协议的解析能力,二者结合让伪协议成为XXE读取本地文件的关键手段,具体原因如下:
一、XXE的核心:外部实体可引用任意协议/路径资源
XXE(XML外部实体注入)的本质是XML解析器会解析并加载外部实体声明中指定的资源,而XML标准允许外部实体的 SYSTEM 标识符引用本地文件、网络资源、协议资源等,格式为:
xml
<!ENTITY 实体名 SYSTEM "资源路径/协议">
无论是 file:///etc/passwd (本地文件协议)、 http://xxx.com/test.dtd (HTTP协议),还是 php://filter (PHP伪协议),只要XML解析器未做限制,都会尝试去解析并获取该资源的内容------这是伪协议能被XXE利用的基础前提。
二、PHP伪协议的特性:适配XXE的文件读取需求
截图中用到的 php://filter 是PHP的流包装器(伪协议),专门用于对文件内容进行过滤/转换,它能完美解决XXE读取文件时的两个核心问题:
-
避免XML解析报错:直接读取PHP/文本文件时,文件中的特殊字符(如 < / > / & )会破坏XML语法,导致解析失败;而 convert.base64-encode 过滤器能将文件内容转成Base64编码(纯ASCII字符),彻底规避XML语法冲突。
-
读取任意本地文件: php://filter 可读取PHP环境下的本地文件(包括源码文件、配置文件),弥补了原生 file:// 协议在部分场景下的权限/解析限制(比如部分服务器对 file:// 做了拦截,但未过滤 php:// )。
-
无回显XXE的适配:结合 php://filter 读取文件后,可通过外部实体(如截图中的 %remote 引用远程 test.dtd )将Base64编码的内容通过**OOB(带外)**方式发送到攻击者服务器,实现无回显XXE的文件读取。
三、环境前提:目标服务器是PHP环境
php:// 系列伪协议是PHP专属的协议,只有当目标服务器运行在PHP环境中时,XML解析器在解析 php://filter 时,才会被PHP内核处理并执行对应的文件读取/转换操作;如果目标是Java/Python环境, php:// 伪协议则会失效(需改用对应语言的协议/方法)。
四、截图中伪协议的具体作用
xml
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=1.dtd">
这句代码的逻辑是:通过 php://filter 伪协议读取服务器本地的 1.dtd 文件,并对内容进行 base64 编码,再将编码后的内容赋值给实体 %file ,后续通过 %remote 引用远程 test.dtd ,把编码后的文件内容通过带外方式传递出去------伪协议在这里承担了"安全读取文件并编码"的核心角色。
简单说:XXE允许引用协议资源,PHP伪协议能安全读取并处理文件内容,PHP环境又能解析伪协议,三者叠加让伪协议成为XXE读取本地文件的高效手段。
需要我帮你梳理XXE中常用的PHP伪协议和原生协议对照表,包括各自的使用场景和限制吗?
简单来说,这是一种传输格式,看特征。
加载外部实体资源,使用协议。