php登录 无漏洞,代码审计|PHPSHE1.7两处无需登录漏洞分析

前言

PHPSHE商城系统是一套开源的B2C商城系统,可以快速让用户建立独立个性化的网上商店,为用户提供了一个低成本、高效率的网上商城建设方案。2018年9月,PHPSHE更新到了1.7版本,是官方网站目前提供的最新版。近日,笔者在对PHPSHE1.7版本最新版进行代码审计时,发现了两处无需登录的高危漏洞分别为XXE漏洞(CVE-2019-9761)和SQL注入漏洞(CVE-2019-9762),攻击者可获取网站任意数据、读取系统中的文件等。

利用条件

PHPSHE 1.7版本

无需登录

XXE漏洞(libxml <2.9.0)

漏洞分析

3.1 XXE漏洞分析(CVE-2019-9761)

漏洞位于include/plugin/payment/wechat/notify_url.php 第8行,调用了wechat_getxml()函数。

bc41c896f99b2fedaf6c9ec0d7af7e61.png

而wechat_getxml定义在hook/wechat.hook.php 35行,此处直接返回了pe_getxml()函数的返回值。

48101094a8d7b011d02ee861df593d5e.png

跟踪到include/function/global.func.php 909行pe_getxml()函数定义处,先是获取了php://input输入的内容赋值给$xml,随后直接调用simplexml_load_string()函数解析$xml,没有做过滤也没有禁用外部实体,存在XXE漏洞。

6713f53dd951796f6c808bf5f72b75a4.png

此处没有回显,因此可以采用盲注的方式读取任意文件,POC如下:

92f7a5f4948ab082bee9b22ab89b49af.png

test.dtd的内容如下:

ff8055803d5526b8c4b208b994b7453d.png

可以通过DNS log的方式获取到读取到的任意文件,同样也可以进行内网探测和扫描。

a465c664859c3281dceaaa02edc741ac.png

3.2 无限制SQL注入分析(CVE-2019-9762)

我们先分析一下PHPSHE的输入和安全函数。几乎所有入口页面都会包含common.php,在37-49行对GPC、Session变量进行注册,但是调用extract()函数时会对注册的变量名称加上前缀,例$_GET['id']会注册为$_g_id,前缀和数组键名之见会自动加一个下换线。

7713c0e64cf3e6fcc9582561fd405615.png

PHPSHE中防SQL注入的函数为pe_dbhold(),定义在include/function/global.func.php中;pe_dbhold()会对字符串或者数组调用addslashes()转义,如果想要突破安全函数常见的有如下几种情况:1. 不需要单引号的注入点 2. 数组的键名带入SQL语句中 3. 宽字节等可吃掉反斜线。

e036ea84f2ca47433cda89ffe3113313.png

回归到漏洞本身,入口文件位于include/plugin/payment/alipay/pay.php,$_GET['id']经过pe_dbhold()函数处理后赋值给$order_id,随后$order_id被带入order_table()函数。

8f001347bd00b175fe9a0c23073b8f7f.png

order_table函数定义在hook/order.hook.php,如果$id包含下划线,则将order_和下划线之前的部分拼接返回,如果不包含下划线则直接返回order,这里函数的返回值部分可控。

2f5c270710ed393d42c24f4c63f9565f.png

再跟进到SQL查询函数pe_select(),函数定义位于include/class/db.class.php,可以看到order_table()函数的返回值是作为表名拼接到SQL语句中,而表名拼接的地方是没有单引号的

3bfd848131b216d8e3f2398e26bfcb13.png

此时表名部分可控,为了使SQL语句不产生语法错误,在数据库找了一圈发现只有pe_order_pay表符合表名规则,那么可以构造参数id为:

d31f4cfaf99223e61389e8f2a8e5ad7c.png

对应在数据库中执行的语句为

5fd3b8184ea0debe1815e8ad0da4787c.png

此处是由于SQL语句中表名可控导致的SQL注入,一部分原因是order_table()获取表名不当导致,代码中搜索了一下类似用法,存在多处可利用点。

88280964ca9ec2812bec8111eb5f62c2.png

在多处利用点中,include/plugin/payment/alipay/pay.php入口的注入漏洞有回显位置,POC如下:

90a2d296fc2ad6a8d497d56f7d1fc4d9.png

修复建议

笔者已经将漏洞提交给代码作者,目前官方暂时没有补丁放出。暂时的缓解措施如下:

对于XXE漏洞,可以升级libxml2库至2.9.0或以上版本,或者在 pe_getxml()函数中加上libxml_disable_entity_loader(true);

对于SQL注入漏洞,可以在order_table()函数中限制$id只为数字、字母和下划线。

参考内容https://gitee.com/koyshe/phpshe/issues/ITC0C

本文来自百度安全SiemPent Team,转载需注明出处及本文链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHPSHE商城系统是将商品管理、品牌管理、规格管理、折扣管理、拼团管理、优惠券管理、在线购物、订单管理、资金管理、提现管理、支付管理、文章管理、会员管理、权限管理、通知管理、评价管理、数据统计等功能相结合,并提供了简易的操作、实用的功能,快速让用户建立独立个性化的网上商店,为用户提供了一个低成本、高效率的网上商城建设方案。 PHPSHE功能概述 软件适用于于各行业产品销售的商家,主要包括有以下功能: 01. 管理员发布、修改,删除商品信息,商品多级分类检索、多属性检索等; 02. 管理员可以对商品品牌名称,图片,描述等管理; 03. 管理员可以对商品规格管理,如:尺寸,颜色,套餐等; 04. 管理员对商品评价/晒图管理回复; 05. 管理员对商品折扣活动管理,拼团活动管理,优惠券码管理; 06. 订单流程清晰,可及时便捷查询,修改和处理订单信息,退款/退货信息; 07. 会员积分体系,有效增加客户回购率及粘性; 08. 详细统计功能,实时显示每日订单情况,访客流量,热销排行,消费排行; 09. 管理员对文章分类管理、文章管理、单页信息管理; 10. 管理员对会员信息管理,管理帐号管理,管理权限管理; 11. 管理员对网站整体基本信息的系统设置; 12. 集成支付宝、转帐汇款、货到付款、微信支付等接口方便用户支付; 13. 邮件/短信/微信实时提醒,随时随地掌握网站下单,付款,发货等情况; 14. 便捷模板中心,一键轻松更换不同风格的模板; 15. 高效缓存处理,提高系统的运行效率; 16. 一键对网站进行备份恢复,保障数据安全; 17. 支持首页导航、友情链接、首页广告图管理; 18. 会员注册、登录、订单管理、充值提现、资金明细、积分明细、优惠券、评价及商品收藏等; 19. 三级分销模块,下级分销用户管理,分销佣金查询提现。 PHPSHE B2C商城系统 v1.7 build20181218 UTF8 更新日志 [新增]php7 版本支持 [新增]https支持 [新增]领券中心 [新增]折扣专题 [新增]拼团专题 [新增]签到有礼 [新增]虚拟商品,支持固定卡密和批量导入卡密 [新增]微信h5支付 [新增]支付宝h5支付 [新增]订单退款/退货 退货地址 [新增]短信 邮件注册/短信 邮件找回密码 [新增]总后台一键会员登录 [新增]手动添加推荐人 [新增]分销推荐人层级手动变更 [新增]微信模板消息通知 [新增]余额支付密码 [新增]评价回复 [优化]H5版界面及用户体验 [优化]重新设计购物车和立即购买模块,算法更加严谨 [优化]规格设计 [优化]短信/邮件通知 [优化]pc版界面在移动端显示不全 [优化]微信头像显示黑色 [优化]支付方式变更为插件形式安装 [优化]其他细节200 处优化   PHPSHE升级说明: 老版本升级至1.7版本,请先上传PHPSHE1.7程序中的 ./install目录,然后访问 http://您的网址/install/update 按教程进行升级; PHPSHE B2C商城系统截图 PHPSHE B2C商城系统手机页面截图 相关阅读 同类推荐:站长常用源码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值