eudaimonia-Whiplashmuse

基本漏洞原理及防御-(5)XXE(6)-文件包含

Toretto·2022-03-17 17:50·275 次阅读

基本漏洞原理及防御-(5)XXE(6)-文件包含

XXE:XML External Entity(XML外部实体)#

XML:xml是一种标记语言,用来标记电子文件,从而使得电子文件具有一定的格式和结构性,是一种用户可以自己定义的标记语言。

XML文档包括:XML声明,DTD文档类型定义,文档元素

1.漏洞产生原理:当允许对XML外部实体进行引用时,未对外部实体进行严格的审查过滤,从而导致恶意内容上传。

2.漏洞利用原理:攻击者利用外部实体的引用,向引用位置构造恶意内容或者脚本,从而在此处执行恶意操作。例如插入查询的语句,就可以查询系统文件。

或者将恶意内容以DTD的格式传入引用,可以达成任意文件读取。

3.回显问题:有些返回的情况是由php格式携带信息,而由于php代码会因为浏览器的解析原因而无法显示,这时候用base64编码一次,就可以显示出返回信息。

4.漏洞危害:任意文件读取

5.漏洞防御:

(1)使用开发语言提供的禁用外部实体的方法

PHP:
libxml_disable_entity_loader(true);

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

Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

(2)过滤用户提交的XML数据

关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。

文件包含漏洞:#

1.漏洞产生原理:由于很多网页可能需要重复使用一段代码,那么为了避免重复造轮子,php语言提供了一种文件包含的方式,在需要重复利用的地方包含我们已经准备好的代码,也就是轮子,从而达到提升工作效率,提高代码和系统的简洁度的这么一个效果。然而由于包含函数include()的操作方式,可能会导致恶意操作被包含进来执行。

2.漏洞利用原理:攻击者利用include()或者require()函数缺失文件来读取服务器目录,或者插入恶意的攻击脚本,从而执行任意代码。

3.漏洞危害:目录泄露,任意文件读取,任意代码执行

4.漏洞防御:

(1)针对目录泄露:过滤或者转义掉./这类具有目录查找性质的特殊字符

(2)针对任意文件读取:将allow_require和allow_include配置成off,也就是关闭包含服务

(3)设置白名单,仅允许包含一些服务器上的设置好的文件名,其余文件都过滤掉,不允许被包含

LFI:local file include 本地文件包含

原理同上,只不过包含的文件是服务器上的

RFI:remote file inlude 远程文件包含

被包含的文件可以是指定ip上的文件。但是允许此操作的配置allow_url_includ默认是off,也就是关闭状态,就自动可以限制远程文件包含漏洞

posted @   mu3e  阅读(275)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示
目录