从xxe_lab看xxe全方面攻击

环境搭建

php_xxe直接放在php环境下即可

前置知识

XXE全称XML External Entity Injection,也就是XML外部实体注入攻击,是对非安全的外部实体数据进行处理时引发的安全问题。要想搞懂XXE,肯定要先了解XML语法规则和外部实体的定义及调用形式。
XML语法规则如下:

  1. 所有的XML元素都必须有一个关闭标签

  2. XML标签对大小写敏感

  3. XML必须正确嵌套

  4. XML属性值必须加引号””

  5. 实体引用(在标签属性,以及对应的位置值可能会出现<>符号,但是这些符号在对应的XML中都是有特殊含义的,这时候我们必须使用对应html的实体对应的表示,比如<符号对应的实体就是lt,>符号对应的实体就是gt)

  6. 在XML中,空格会被保留(案例如:<p>a空格B</p>,这时候a和B之间的空格就会被保留)
    在这里插入图片描述

<bookstore> <!--根元素-->
<book category="COOKING"> <!--bookstore的子元素,category为属性-->
<title>Everyday Italian</title>      <!--book的子元素,lang为属性-->
<author>Giada De Laurentiis</author>       <!--book的子元素-->
<year>2005</year> <!--book的子元素-->
<price>30.00</price> <!--book的子元素-->
</book> <!--book的结束-->
</bookstore> <!--bookstore的结束-->

在这里插入图片描述
以上部分转自
https://www.freebuf.com/vuls/175451.html

DTD – 实体(重要)

实体是用于定义引用普通文本或特殊字符的快捷方式的变量。

实体引用是对实体的引用。

实体可在内部或外部进行声明。
在这里插入图片描述

攻击套路

在这里插入图片描述
能发起url请求的话,就可以进行无回显的操作了
当外部实体被禁用的时候,可以使用这个来进行ssrf,
在这里插入图片描述

参数实体

参数实体以%开头 我们使用参数实体只需要遵循两条原则:

1.参数实体只能在DTD声明中使用。 2.参数实体中不能再引用参数实体。

在引用实体的格式中需要编码用&#X25代替 %,由于嵌套引用外部参数实体,如果直接利用%,在引用的时候会导致找不到该参数实体名称
在这里插入图片描述

php_xxe

在这里插入图片描述
直接抓包
在这里插入图片描述
发现头部Accept: application/xml,
解析了xml
那我们就试试
在这里插入图片描述
读取后进行回显,在元素中引用外部实体参数&test
无回显就需要外带了,

注意

由于xml对格式要求严格,为了不打破他的格式,通常使用php base64
PHP://filter/read=convert.base64-encode/resource=文件

java_xxe

python_xxe

Csharp_xxe

防御

直接使用开发语言提供的禁用外部实体的方法

这样其实没法防御 xml 制造的 ssrf
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))

过滤用户提交的 xml 数据

敏感关键词: <!DOCTYPE 、 <!ENTITY、SYSTEM、PUBLIC

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值