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

渗透课程第二阶段--Part8--XXE渗透与防御

目录

一. XML基础知识

XML

XML用途

XML内容

XML格式要求

XML用途

XML格式校验

DTD内容之元素

DTD内容之实体

内部实体ENTITY的使用

外部实体ENTITY的使用

外部实体引用:协议

不同语言支持的协议

PHP扩展

完整的XML内容

三. XXE利用方式

XXE

XXE定义

微信支付XXE漏洞

盲打-DNSLog

盲打-http接口参数,写入文件

四. XXE防御

Java

过滤用户提交的XML数据

WAF

Python

PHP


一. XML基础知识

XML

        eXtensible Markup Language        可扩展标记语言
        这是一种标记语言,很类似 HTML。设计宗旨是传输数据,而非显示数据

XML用途

  • 配置文件

  • 交换数据

XML内容

XML格式要求

  • XML文档必须有根元素
  • XML文档必须有关闭标签
  • XML标签对大小写敏感
  • XML元素必须被正确的嵌套
  • XML属性必须加引号

XML用途

XML格式校验

        DTD(Document Type Definition)        文档类型定义

DTD内容之元素

DTD内容之实体

内部实体ENTITY的使用

外部实体ENTITY的使用

外部实体引用:协议

协议

使用方式

filefile:///etc//passwd
php

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

httphttp://:wuya.com/evil.dtd

不同语言支持的协议

Libxml2PHPJava.NET

file

http

ftp

file

http

ftp

php

compress.zlib

compress.bz

ip2

data

glob

phar

file

http

https

ftp

jar

netdoc

mailto

gopher*

file

http

https

ftp

PHP扩展

SchemaExtension Required

https

ftps

openssl
zipzip

ssh2.shell

ssh2.exec

ssh2.tunnel

ssh2.sftp

ssh2.scp

ssh2
rarrar
oggoggvorbis
expectexpect

完整的XML内容

三. XXE利用方式

XXE

XXE定义

        如果Web应用的脚本代码没有限制XML引入外部实体,从而导致用户可以插入一个外部实体,并且其中的内容会被服务器端执行,插入的代码可能导致任意文件读取系统命令执行内网端口探测攻击内网网站等危害。

微信支付XXE漏洞

盲打-DNSLog

盲打-http接口参数,写入文件

四. XXE防御

Java

DocumentBuilderFactory dbf
=DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);

过滤用户提交的XML数据

'

''

''(two apostrophe)

" "

<

>

]]>

]]>>

<!--/-->

/-->

-->

<!--

<!

<![CDATA[/]]>

WAF

        以mod_security为例

Python

from lxml import etree
xmlData=
etree.parse(xmlSource,etree.XMLParser(resolve_entites=False))

PHP

libxml_disable_entity_loader(ture);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 激活函数的创新之旅:在PyTorch中自定义激活函数
  • 常用PHP JS MySQL 常用方法记录
  • TCP三次握手过程详解
  • Shell编程规范与变量:详解环境变量、位置变量与预定义变量
  • Java 入门指南:Java IO流 —— 序列化与反序列化
  • centos7 xtrabackup mysql(8)压缩 全量备份 还原(4)
  • 加速网络体验,Squid缓存代理:让浏览如飞,畅享无限网络速度!
  • 计算机专业的真正的就业情况
  • C语言 | Leetcode C语言题解之第375题猜数字大小II
  • 02-03:原理图与PCB交互以及快速模块化
  • E - Red Polyomino 关于回溯 和爆搜
  • 入门STM32--按键输入
  • 排队辅助功能二手车,全速自适应巡航
  • 适应CLIP作为图像去雾的聚合指导
  • 现在的ai是否和当年的5g一样被夸大了
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 2017-09-12 前端日报
  • Android框架之Volley
  • eclipse的离线汉化
  • EOS是什么
  • github从入门到放弃(1)
  • JavaScript 基础知识 - 入门篇(一)
  • Javascript编码规范
  • Java程序员幽默爆笑锦集
  • js ES6 求数组的交集,并集,还有差集
  • mysql常用命令汇总
  • MySQL几个简单SQL的优化
  • Next.js之基础概念(二)
  • PHP那些事儿
  • Python_网络编程
  • rabbitmq延迟消息示例
  • Shell编程
  • SpiderData 2019年2月25日 DApp数据排行榜
  • SQLServer之创建数据库快照
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 搞机器学习要哪些技能
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 解析带emoji和链接的聊天系统消息
  • 深度学习入门:10门免费线上课程推荐
  • 7行Python代码的人脸识别
  • 如何正确理解,内页权重高于首页?
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​​​​​​​​​​​​​​Γ函数
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (02)Hive SQL编译成MapReduce任务的过程
  • (1)(1.13) SiK无线电高级配置(六)
  • (42)STM32——LCD显示屏实验笔记
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (PADS学习)第二章:原理图绘制 第一部分