OWASP-Top5-(Security Misconfiguration 安全配置错误)
概述
从上一版的第 6 位开始,90% 的应用程序都经过了某种形式的错误配置测试。随着更多转向高度可配置的软件,看到这一类别上升也就不足为奇了。值得注意的CWE包括CWE-16 Configuration和CWE-611 Improper Restriction of XML External Entity Reference。
CWE-16 Configuration
此条目是一个类别,但尽管 CWE 指导不应映射类别,但无论如何都有各种来源映射到它。在这种情况下,没有可以利用的明确的 CWE 弱点。“不适当的配置”可能更好地描述为弱点,因此此条目可能会在更高版本中转换为弱点。然而,需要进一步研究,因为“配置弱点”可能是许多其他 CWE 的主要因素,即,它可能更适合用链接关系来描述。
描述
如果应用程序是:
-
在应用程序堆栈的任何部分缺少适当的安全强化或对云服务的权限配置不正确。
-
启用或安装了不必要的功能(例如,不必要的端口、服务、页面、帐户或权限)。
-
默认帐户及其密码仍处于启用状态且未更改。
-
错误处理向用户显示堆栈跟踪或其他信息过多的错误消息。
-
对于升级的系统,最新的安全功能被禁用或未安全配置。
-
应用程序服务器、应用程序框架(例如,Struts、Spring、ASP.NET)、库、数据库等中的安全设置未设置为安全值。
-
服务器不发送安全标头或指令,或者它们未设置为安全值。
-
软件已过时或易受攻击(请参阅 A06:2021-易受攻击和过时的组件)。
如果没有协调一致的、可重复的应用程序安全配置过程,系统将面临更高的风险。
这里以XXE漏洞为例,先来学习一下XML:
XML的学习
XML由3个部分组成,DTD(文档类型定义),是XML的布局语言;XSL(可扩展的样式语言),XML的样式表语言;和可扩展链接语言 XLL。
XML:可扩展标记语言,是一种用来标记电子文件使其具有结构性的标记语言。用来传输和存储数据,这类语言很像超文本标记语言的标记语言。设计出来就是为了传输数据,而不是显示数据 ,他需要自行定义标签。
可扩展标记语言(XML)和超文本标记语言(HTML)为不同的目的而设计
它被设计用来传输和存储数据,其焦点是数据的内容。
HTML 超文本标记语言被设计用来显示数据,其焦点是数据的外观
XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素 <?xml version="1.0" encoding="UTF-8"?> <!-- ⬆XML声明⬆ --> <!DOCTYPE 文件名 [ <!ENTITY实体名 "实体内容"> ]> <!-- ⬆文档类型定义(DTD)⬆ --> <元素名称 category="属性"> 文本或其他元素 </元素名称> <!-- ⬆文档元素⬆ -->
比如:
XML的实体
在XML钟的实体分为五种:字符实体,命名实体,参数实体,外部实体和内部实体。
普通的实体分为外部和内部两种,外部实体定义需要加上SYSTEM关键字,内容就是URL所指向的外部文件实际的内容。如果不加则代表内部实体,所指代的内容为字符串。
1.字符实体
说的是用十进制格式或者十六进制格式来指定任意的unicode字符,而对于XML解析器而言,字符实体与直接输入指定字符的效果完全相同。
2.命名实体
也叫做内部实体,在DTD(在文档中<!DOCTYPE>语句的一部分)中声明,在文档中作引用。
比如:
<!ENTITY ndash "–">
引用–的时候就会解析的是字符实体– 也就是一个 - 短横线
一些命名实体完全可以引用其他命名实体:
<!ENTITY c "Chris">
<!ENTITY ch "&c; Cool">
<abc>&ch;</abc>
3.外部实体
外部实体表示外部文件的内容,用SYSTEM关键字表示。
<!ENTITY test SYSTEM "test.xml">
有些XML文档包含system标识符定义的“实体”,这些文档会在DOCTYPE头部标签中呈现。这些定义的’实体’能够访问本地或者远程的内容。比如,下面的XML文档样例就包含了XML ‘实体’。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE Anything [ <!ENTITY entityex SYSTEM "file:///etc/passwd"> ]> <abc>&entityex;</abc>
注:URI,统一资源标志符(Uniform Resource Identifier, URI),表示的是web上每一种可用的资源,如 HTML文档、图像、视频片段、程序等都由一个URI进行标识的。
URL是URI的一个子集。
外部实体'entityex'被赋予的值为:file://etc/passwd 在解析XML文档的过程中实体'entityex'的值回被替换为URI(file://etc/passwd)
关键字SYSTEM会告诉XML解析器,entityex实体的值将从其后的URI中读取,并把读取的内容替换entityex出现的地方。
假如 SYSTEM 后面的内容可以被用户控制,那么用户就可以随意替换为其他内容,从而读取服务器本地文件(file:///etc/passwd)或者远程文件,甚至是内网攻击,也就是XXE漏洞了。
4.参数实体
参数实体只能在DTD和文档的内部子集中,只有再DTD中才能引用参数实体,声明和引用都是%,
XXE盲注的必备条件~
<!ENTITY % 实体名称 "实体值"> <!ENTITY % 实体名称 SYSTEM "URI">
5.内部实体
就是为实体预留的实体
比如:
< < > > & & " " ' '