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


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

    这是百家cms的第二部分-代码审计

    关于百家cms的安装配置及黑盒测试,可以参考上一篇文章:

    PHP代码审计--百家CMS4.1.4项目实战(上)_HEAVM的博客-CSDN博客

    四、百家CMS代码审计

    4.1路由分析

    通过渗透测试观察目录结构,发现该系统的所有功能点都放在system目录下,二每个功能点都对应两个文件夹class、template。class下存放的是每个功能的后端代码,template下是前端代码。由于是商城系统,该系统分为网页端和手机端,所以class、template目录下分别有mobile手机端代码、web网页端代码。

    在此项目中,大佬已经把获取的参数过滤掉了

    4.2、XSS漏洞代码审计

    这里的act参数代表system文件夹下某个功能点,do代表功能点下具体的PHP文件,op则代表文件走哪个分支

    如XSS漏洞存在url为:index.php?mod=site&act=manager&do=store&op=post&beid=1

    代码位置则为下方位置:system文件夹下store.php文件里面post分支

    在post分支里面看到snme、website、isclose等参数通过前端传入

    在分析我们可以看到文中并没有对传入参数做任何的过滤,就直接插入到数据库了

    而在前端展示数据的代码文件中(store_display.php),插入的数据也是没有经过任何的过滤就通过页面渲染在前端通过echo进行输出了,从而造成XSS漏洞

    4.3、SQL注入代码审计

    发现sql注入的漏洞目录位于:

    /index.php?mod=site&act=manager&do=store&op=display&beid=1

    使用burp确认sql查询的传入参数为sname

    在store.php文件display分支中发现传入的sql查询参数sname没有经过任何过滤就直接拼接到了mysqld_selectall这个查询函数中,造成了sql注入漏洞。

    4.4、任意删除漏洞

    进入数据备份页面,点击删除,使用burp抓包,发现删除功能的url为

    /index.php?mod=site&act=manager&do=database&op=delete&id=MTY1NTI3NTUwNl9teU4zRDVKVg%3D%3D&beid=1

    所以删除功能的代码在manager目录下的database.php文件的delete分支中,且删除文件名的参数为:id

    由下图代码可看到,$_GP['id']函数接收前端的文件名参数后,仅仅只是把文件名base64解密了一下,就直接拼接到删除文件路径下了,没有做任何的过滤限制操作,造成了任意文件删除漏洞。

    Ps:这里的is_dir()函数判断了是否是目录,如果是目录就执行删除,这样就解释了为什么只能删除目录。

    文件删除2

    文件删除漏洞代码审计第一种方法就是黑盒找到漏洞的位置,然后再在代码中找到漏洞

    第二种是直接全局搜索unlink()函数,因为php删除文件只有unlink()这一个函数

    在phpstrom按ctrl+shif+f 启动全局搜索unlink( ,

    发现baijiacms\common.inc.php文件中的file_delete函数有unlink()方法,可以利用

    然后在全局搜索“file_delete( ”, 查看那里调用了此函数,并且使用此函数执行了可控制参数。

    最终找到了文件baijiacms-master/system/eshop/core/mobile/util/uploader.php

    进入uploader.php文件,发现确实使用$_GPC['file']调用了可控参数。

    再回去看看file_delete()函数利用unlink删除文件的的条件,发现是必须使$settings['system_isnetattach']不为空

    全局搜索system_isnetattach发现该参数是从

    baijiacms-master/system/manager/class/web/netattach.php文件中接收的

    我们通过该目录路径,可以构造成其url为:

    http://127.0.0.1:8081/baijiacms-master/index.php?mod=site&act=manager&do=netattach

    http://127.0.0.1:8081/baijiacms-master/index.php?mod=site&act=manager&do=netattach

    对应的功能点就是“附件设置”,`system_isnetattach`就是设置图片压缩比例,这里只要随意设置不为空就可以了。

    由于此处文件删除是需要手动创建对应的前端页面,为了方便我们通过访问路由来实现文件删除。

    在根目录下建一个test.txt,构造url访问

    由于利用的函数在baijiacms-master/system/eshop/core/mobile/util/uploader.php文件的upload分支下,参数名为file.

    url:

    http://127.0.0.1:8081/baijiacms-master/index.php?mod=mobile&act=uploader&op=post&do=util&m=eshop&op=remove&file=../test.txt

    ps:说实话,我有点没有搞懂这个url是怎么出来的。

    成功删除文件

    4.5、任意文件写入

    在功能框上传文件使用burp抓包,获取文件路由位置为:

    /baijiacms-master/index.php?mod=site&do=file&act=public&op=fetch&beid=1&url=234

    由路由找到代码的位置,发现使用了fetch_net_file_upload()函数去读取写入文件,查看一下fetch_net_file_upload()函数详细信息。s

    在baijiacms-master\includes\baijiacms\common.inc.php文件下找到了

    fetch_net_file_upload()函数,发现在此函数中使用了file_get_contents()函数获取文件,并且没有对文件的路径进行任何过滤

    4.6、命令执行漏洞

    使用burp抓包,查看命令执行漏洞的目录路由为:

    /baijiacms-master/index.php?mod=site&act=weixin&do=setting&beid=1

    传入的文件参数名称为:weixin_verify_file

    传入的文件参数名称为:weixin_verify_file

    根据路由找到了代码发现使用在此函数中传入了文件:$file=$_FILES['weixin_verify_file'];

    然后判断一下文件后缀名是否为txt格式,就是用file_save()函数处理文件,并且file_save()函数中参数:$file['name']的值就是上传文件名字:&whoami&.txt

    然后我们查看一下file_save()这个函数,

    跟进file_save()函数,该函数中传递过来五个参数

    而在system函数中,$file_full_path参数拼接了我们上传的文件的文件名($file['name']的值)到执行路径中,所以我们通过&分割,就造成了命令执行漏洞。

    我们再回头看看file_save()函数,要执行system命令,还需要判断

    $settings['image_compress_openscale']参数不能为空,

     

    这个参数,就是附件设置模块中的,图片压缩比例不能为空。

    一般快速查找命令执行漏洞的代码审计方法

    白盒就是搜索几个危险函数: exec()、system()、popen()、passthru()、proc_open()、pcntl_exec()、shell_exec()

    黑盒就是不断测试可弄输入参数,一般来说命令执行漏洞还是白盒测试比较方便,就是查找这几个危险函数,然后看函数里面有没有可以控制参数,参数有没有被过滤。

    参考链接:

    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

    声明:

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

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

  • 相关阅读:
    基于python的民宿旅馆消费数据分析系统
    Redis 学习-上
    论<script> 标签可以直接写在 HTML 文件中的哪些位置?(可以将 <script> 标签直接插入到 HTML 文件的任何位置)
    前端页面布局之【响应式布局】
    Leetcode刷题笔记--Hot81--90
    Java排序学习
    【数据结构】链表
    云原生实战课大纲
    Educational Codeforces Round 132 (Rated for Div. 2) A.B.D
    misc刷题记录2[陇剑杯 2021]
  • 原文地址:https://blog.csdn.net/HEAVEN569/article/details/125440450