基本漏洞原理及防御-(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,也就是关闭状态,就自动可以限制远程文件包含漏洞
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架