Xxe,xml
Xxe与ssrf类似(服务器错误引用外部资源),不过那个是因为没过滤本地。

*Xml是传输存储数据的,你要在里面取出数据的话,后端就会解析这个语言,如果XML中有恶意代码被解析就会造成攻击。

里面存储了一些件名文件名之类的信息,类似于json


弄一个恶意xml外部引用,让text变量读取这个文件路径,然后回显就是这样。

如何看能不能这样测试,黑盒观察XML的特征,看看数据格式。
或者是看数据类型后面写了东西没。
或者是bp关键字搜索


Xml像json那样传输数据(就是JSON格式传递。)
如果对方有解析,解析里面有读取XML的内容,并解析了外部实体,就形成了xxe


↑从别的网站引用dtd资源,而dtd资源中又有恶意函数。
回显

传这两个文件:
总结
带外:访问DNSblog(无回显,判断有无执行。
外部引用实体:不用学习xml本身代码,可以攻击成功,dtd加载库文件,类似于包含文件。(有回显
把核心代码放到dtd,后面做访问加载。
(所以可以两个一起用)
有回显代码。
也可以不写dtd全写xml。

无回显读文件:

为什么这个例子一改就可以改对,因为他有xml处理。


例子:白盒

搜索关键词


XmL功能↑
由于这个变量调用了,所以找一下文件路径并访问。

过程总结

xxe一般只能文件读取,命令执行一般是别的插件的问题。
XXe读取PHP时,PHP内容不能带空格,不然后面拼接会出问题。
可以用伪协议,Base64
不是说必须要文件包含吗?
你这个问题的核心在于对"文件包含"和"伪协议利用场景"的混淆,我们可以拆开来看:
- 伪协议不是只能在文件包含中使用
php://filter 这类伪协议本质上是 PHP 提供的数据流封装器,它的作用是:
-
将文件内容作为数据流处理
-
支持通过过滤器(如 convert.base64-encode )对数据编码/解码
-
可以访问服务器本地文件系统
它的使用场景不局限于 文件包含漏洞(如 include($_GET['file']) ),还包括:
-
XML 外部实体注入(XXE):通过 XML 解析器加载外部实体时触发
-
任意文件读取漏洞:通过其他函数(如 file_get_contents() )触发
-
SSRF 漏洞:通过构造伪协议地址让服务器主动请求
- 文件包含漏洞的本质
文件包含漏洞的核心是:
-
服务器端脚本(如 PHP)主动执行了一个包含文件的操作
-
攻击者可以控制被包含的文件路径
在这种场景下,伪协议的作用是:
-
绕过过滤(如 ../ 被过滤时用 php://filter 读取文件)
-
直接读取文件内容(如 php://filter/read=convert.base64-encode/resource=xxx )
- XXE 漏洞的本质
XXE 漏洞的核心是:
-
XML 解析器 允许加载外部实体
-
攻击者可以通过构造恶意 XML 让解析器加载指定的 URI
在这种场景下,伪协议的作用是:
-
让 XML 解析器通过伪协议 读取服务器本地文件
-
结合编码过滤器(如 convert.base64-encode )避免 XML 解析器因内容格式报错
- 总结
漏洞类型 触发条件 伪协议作用
文件包含 脚本主动包含文件 绕过过滤、读取文件
XXE XML 解析器加载外部实体 读取服务器本地文件
结论:
-
伪协议的使用 不一定要依赖文件包含漏洞
-
只要存在可以触发对伪协议访问的机制(如 XXE、SSRF 等),就可以利用伪协议
总结就是伪协议是个功能,他需要代码中可以执行这个功能的条件。这个条件就是支持读取。
本质


用伪协议读文件,用btb把内容写出来。