渗透测试-xxe之CTF考题实验及防御方法

xxe之CTF考题实验及防御方法

文章目录

  • xxe之CTF考题实验及防御方法
  • 前言
  • 一、什么是xxe
    • 1.定义
    • 2.XML语法结构在这里插入图片
  • 二、xxe之CTF考题及防御方法
    • 1.xxe之CTF考题演示
    • 2.xxe防御方法
  • 总结

前言

一、什么是xxe

1.定义

XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。简单来说,XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。例如,如果你当前使用的程序为PHP,则可以将libxml_disable_entity_loader设置为TRUE来禁用外部实体,从而起到防御的目的。

常见的XML语法结构如下所示
渗透测试-xxe之CTF考题实验及防御方法_第1张图片

2.XML语法结构在这里插入图片

描述

1.内部声明DTD格式:
2.引用外部DTD格式:

在DTD中进行实体声明时,将使用ENTITY关键词来声明,实体是用于定义引用普通文本或特殊字符的快捷方式的变量,实体可在内部或外部进行声明,如下所示

1.内部声明实体格式:
2.引用外部实体格式:

二、xxe之CTF考题及防御方法

1.xxe之CTF考题演示

xxe的知识比较繁琐,也很记得住,只希望大家能记住xxe注入payload代码大概格式就可以了,学会如何修改代码,获取信息。

我们上考题,看看题目的内容
jarvisoj上的一道题目API调用
这道题题目说明是,请设法获得目标机器/home/ctf/flag.txt中的flag值
http://web.jarvisoj.com:9882/
打开网址
渗透测试-xxe之CTF考题实验及防御方法_第2张图片
发现是一个输入框
我们利用burp抓包试试
渗透测试-xxe之CTF考题实验及防御方法_第3张图片
我们进行重发,发现可以发送
渗透测试-xxe之CTF考题实验及防御方法_第4张图片
我们修改json为xml格式,输入payload代码,将下面的代码修改为我们的payload代码
渗透测试-xxe之CTF考题实验及防御方法_第5张图片
渗透测试-xxe之CTF考题实验及防御方法_第6张图片
CTF{XxE_15_n0T_S7range_Enough}
我们成功获得CTF考题的答案,实验结束。

2.xxe防御方法

防御XXE攻击主要有三方面:一是检查所使用的底层XML解析库,默认禁止外部实体的解析;二是若使用第三方应用代码需要及时升级补丁;三是对用户提交的XML数据进行过滤,如关键词:

总结

本次实验简单介绍了xxe的原理及使用方法,以及CTF考题示例和防御方法,通过构造payload代码获取用户信息。

你可能感兴趣的:(渗透测试,安全性测试,web安全,安全)