前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞

【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞

作者头像
Bypass
发布2019-07-08 17:20:54
1.3K0
发布2019-07-08 17:20:54
举报
文章被收录于专栏:BypassBypass

00

前言

CLTPHP采用ThinkPHP开发,后台采用Layui框架的内容管理系统。

在代码审计中,发现了微信接口存在XML外部实体注入漏洞,后面和小伙伴sn00py交流,他也发现了这个点。XML外部实体注入漏洞的代码实例比较少,这边也分享一下思路。

01

环境搭建

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

02

代码分析

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,实现任意文件读取,攻击者可利用该漏洞获取网站敏感信息。

03

漏洞利用

通过构造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>

04

修复建议

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

PHP:libxml_disable_entity_loader(true);

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

Bypass

About Me

一个网络安全爱好者,对技术有着偏执狂一样的追求。致力于分享原创高质量干货,包括但不限于:渗透测试、WAF绕过、代码审计、安全运维。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Bypass 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
代码审计
代码审计(Code Audit,CA)提供通过自动化分析工具和人工审查的组合审计方式,对程序源代码逐条进行检查、分析,发现其中的错误信息、安全隐患和规范性缺陷问题,以及由这些问题引发的安全漏洞,提供代码修订措施和建议。支持脚本类语言源码以及有内存控制类源码。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档